1e7cddcd8d9a3f8ea5058bbed72eebcb39810e17
[external/binutils.git] / gas / config / tc-mips.c
1 /* tc-mips.c -- assemble code for a MIPS chip.
2    Copyright (C) 1993-2016 Free Software Foundation, Inc.
3    Contributed by the OSF and Ralph Campbell.
4    Written by Keith Knowles and Ralph Campbell, working independently.
5    Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus
6    Support.
7
8    This file is part of GAS.
9
10    GAS is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3, or (at your option)
13    any later version.
14
15    GAS is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with GAS; see the file COPYING.  If not, write to the Free
22    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
23    02110-1301, USA.  */
24
25 #include "as.h"
26 #include "config.h"
27 #include "subsegs.h"
28 #include "safe-ctype.h"
29
30 #include "opcode/mips.h"
31 #include "itbl-ops.h"
32 #include "dwarf2dbg.h"
33 #include "dw2gencfi.h"
34
35 /* Check assumptions made in this file.  */
36 typedef char static_assert1[sizeof (offsetT) < 8 ? -1 : 1];
37 typedef char static_assert2[sizeof (valueT) < 8 ? -1 : 1];
38
39 #ifdef DEBUG
40 #define DBG(x) printf x
41 #else
42 #define DBG(x)
43 #endif
44
45 #define streq(a, b)           (strcmp (a, b) == 0)
46
47 #define SKIP_SPACE_TABS(S) \
48   do { while (*(S) == ' ' || *(S) == '\t') ++(S); } while (0)
49
50 /* Clean up namespace so we can include obj-elf.h too.  */
51 static int mips_output_flavor (void);
52 static int mips_output_flavor (void) { return OUTPUT_FLAVOR; }
53 #undef OBJ_PROCESS_STAB
54 #undef OUTPUT_FLAVOR
55 #undef S_GET_ALIGN
56 #undef S_GET_SIZE
57 #undef S_SET_ALIGN
58 #undef S_SET_SIZE
59 #undef obj_frob_file
60 #undef obj_frob_file_after_relocs
61 #undef obj_frob_symbol
62 #undef obj_pop_insert
63 #undef obj_sec_sym_ok_for_reloc
64 #undef OBJ_COPY_SYMBOL_ATTRIBUTES
65
66 #include "obj-elf.h"
67 /* Fix any of them that we actually care about.  */
68 #undef OUTPUT_FLAVOR
69 #define OUTPUT_FLAVOR mips_output_flavor()
70
71 #include "elf/mips.h"
72
73 #ifndef ECOFF_DEBUGGING
74 #define NO_ECOFF_DEBUGGING
75 #define ECOFF_DEBUGGING 0
76 #endif
77
78 int mips_flag_mdebug = -1;
79
80 /* Control generation of .pdr sections.  Off by default on IRIX: the native
81    linker doesn't know about and discards them, but relocations against them
82    remain, leading to rld crashes.  */
83 #ifdef TE_IRIX
84 int mips_flag_pdr = FALSE;
85 #else
86 int mips_flag_pdr = TRUE;
87 #endif
88
89 #include "ecoff.h"
90
91 static char *mips_regmask_frag;
92 static char *mips_flags_frag;
93
94 #define ZERO 0
95 #define ATREG 1
96 #define S0  16
97 #define S7  23
98 #define TREG 24
99 #define PIC_CALL_REG 25
100 #define KT0 26
101 #define KT1 27
102 #define GP  28
103 #define SP  29
104 #define FP  30
105 #define RA  31
106
107 #define ILLEGAL_REG (32)
108
109 #define AT  mips_opts.at
110
111 extern int target_big_endian;
112
113 /* The name of the readonly data section.  */
114 #define RDATA_SECTION_NAME ".rodata"
115
116 /* Ways in which an instruction can be "appended" to the output.  */
117 enum append_method {
118   /* Just add it normally.  */
119   APPEND_ADD,
120
121   /* Add it normally and then add a nop.  */
122   APPEND_ADD_WITH_NOP,
123
124   /* Turn an instruction with a delay slot into a "compact" version.  */
125   APPEND_ADD_COMPACT,
126
127   /* Insert the instruction before the last one.  */
128   APPEND_SWAP
129 };
130
131 /* Information about an instruction, including its format, operands
132    and fixups.  */
133 struct mips_cl_insn
134 {
135   /* The opcode's entry in mips_opcodes or mips16_opcodes.  */
136   const struct mips_opcode *insn_mo;
137
138   /* The 16-bit or 32-bit bitstring of the instruction itself.  This is
139      a copy of INSN_MO->match with the operands filled in.  If we have
140      decided to use an extended MIPS16 instruction, this includes the
141      extension.  */
142   unsigned long insn_opcode;
143
144   /* The frag that contains the instruction.  */
145   struct frag *frag;
146
147   /* The offset into FRAG of the first instruction byte.  */
148   long where;
149
150   /* The relocs associated with the instruction, if any.  */
151   fixS *fixp[3];
152
153   /* True if this entry cannot be moved from its current position.  */
154   unsigned int fixed_p : 1;
155
156   /* True if this instruction occurred in a .set noreorder block.  */
157   unsigned int noreorder_p : 1;
158
159   /* True for mips16 instructions that jump to an absolute address.  */
160   unsigned int mips16_absolute_jump_p : 1;
161
162   /* True if this instruction is complete.  */
163   unsigned int complete_p : 1;
164
165   /* True if this instruction is cleared from history by unconditional
166      branch.  */
167   unsigned int cleared_p : 1;
168 };
169
170 /* The ABI to use.  */
171 enum mips_abi_level
172 {
173   NO_ABI = 0,
174   O32_ABI,
175   O64_ABI,
176   N32_ABI,
177   N64_ABI,
178   EABI_ABI
179 };
180
181 /* MIPS ABI we are using for this output file.  */
182 static enum mips_abi_level mips_abi = NO_ABI;
183
184 /* Whether or not we have code that can call pic code.  */
185 int mips_abicalls = FALSE;
186
187 /* Whether or not we have code which can be put into a shared
188    library.  */
189 static bfd_boolean mips_in_shared = TRUE;
190
191 /* This is the set of options which may be modified by the .set
192    pseudo-op.  We use a struct so that .set push and .set pop are more
193    reliable.  */
194
195 struct mips_set_options
196 {
197   /* MIPS ISA (Instruction Set Architecture) level.  This is set to -1
198      if it has not been initialized.  Changed by `.set mipsN', and the
199      -mipsN command line option, and the default CPU.  */
200   int isa;
201   /* Enabled Application Specific Extensions (ASEs).  Changed by `.set
202      <asename>', by command line options, and based on the default
203      architecture.  */
204   int ase;
205   /* Whether we are assembling for the mips16 processor.  0 if we are
206      not, 1 if we are, and -1 if the value has not been initialized.
207      Changed by `.set mips16' and `.set nomips16', and the -mips16 and
208      -nomips16 command line options, and the default CPU.  */
209   int mips16;
210   /* Whether we are assembling for the mipsMIPS ASE.  0 if we are not,
211      1 if we are, and -1 if the value has not been initialized.  Changed
212      by `.set micromips' and `.set nomicromips', and the -mmicromips
213      and -mno-micromips command line options, and the default CPU.  */
214   int micromips;
215   /* Non-zero if we should not reorder instructions.  Changed by `.set
216      reorder' and `.set noreorder'.  */
217   int noreorder;
218   /* Non-zero if we should not permit the register designated "assembler
219      temporary" to be used in instructions.  The value is the register
220      number, normally $at ($1).  Changed by `.set at=REG', `.set noat'
221      (same as `.set at=$0') and `.set at' (same as `.set at=$1').  */
222   unsigned int at;
223   /* Non-zero if we should warn when a macro instruction expands into
224      more than one machine instruction.  Changed by `.set nomacro' and
225      `.set macro'.  */
226   int warn_about_macros;
227   /* Non-zero if we should not move instructions.  Changed by `.set
228      move', `.set volatile', `.set nomove', and `.set novolatile'.  */
229   int nomove;
230   /* Non-zero if we should not optimize branches by moving the target
231      of the branch into the delay slot.  Actually, we don't perform
232      this optimization anyhow.  Changed by `.set bopt' and `.set
233      nobopt'.  */
234   int nobopt;
235   /* Non-zero if we should not autoextend mips16 instructions.
236      Changed by `.set autoextend' and `.set noautoextend'.  */
237   int noautoextend;
238   /* True if we should only emit 32-bit microMIPS instructions.
239      Changed by `.set insn32' and `.set noinsn32', and the -minsn32
240      and -mno-insn32 command line options.  */
241   bfd_boolean insn32;
242   /* Restrict general purpose registers and floating point registers
243      to 32 bit.  This is initially determined when -mgp32 or -mfp32
244      is passed but can changed if the assembler code uses .set mipsN.  */
245   int gp;
246   int fp;
247   /* MIPS architecture (CPU) type.  Changed by .set arch=FOO, the -march
248      command line option, and the default CPU.  */
249   int arch;
250   /* True if ".set sym32" is in effect.  */
251   bfd_boolean sym32;
252   /* True if floating-point operations are not allowed.  Changed by .set
253      softfloat or .set hardfloat, by command line options -msoft-float or
254      -mhard-float.  The default is false.  */
255   bfd_boolean soft_float;
256
257   /* True if only single-precision floating-point operations are allowed.
258      Changed by .set singlefloat or .set doublefloat, command-line options
259      -msingle-float or -mdouble-float.  The default is false.  */
260   bfd_boolean single_float;
261
262   /* 1 if single-precision operations on odd-numbered registers are
263      allowed.  */
264   int oddspreg;
265 };
266
267 /* Specifies whether module level options have been checked yet.  */
268 static bfd_boolean file_mips_opts_checked = FALSE;
269
270 /* Do we support nan2008?  0 if we don't, 1 if we do, and -1 if the
271    value has not been initialized.  Changed by `.nan legacy' and
272    `.nan 2008', and the -mnan=legacy and -mnan=2008 command line
273    options, and the default CPU.  */
274 static int mips_nan2008 = -1;
275
276 /* This is the struct we use to hold the module level set of options.
277    Note that we must set the isa field to ISA_UNKNOWN and the ASE, gp and
278    fp fields to -1 to indicate that they have not been initialized.  */
279
280 static struct mips_set_options file_mips_opts =
281 {
282   /* isa */ ISA_UNKNOWN, /* ase */ 0, /* mips16 */ -1, /* micromips */ -1,
283   /* noreorder */ 0,  /* at */ ATREG, /* warn_about_macros */ 0,
284   /* nomove */ 0, /* nobopt */ 0, /* noautoextend */ 0, /* insn32 */ FALSE,
285   /* gp */ -1, /* fp */ -1, /* arch */ CPU_UNKNOWN, /* sym32 */ FALSE,
286   /* soft_float */ FALSE, /* single_float */ FALSE, /* oddspreg */ -1
287 };
288
289 /* This is similar to file_mips_opts, but for the current set of options.  */
290
291 static struct mips_set_options mips_opts =
292 {
293   /* isa */ ISA_UNKNOWN, /* ase */ 0, /* mips16 */ -1, /* micromips */ -1,
294   /* noreorder */ 0,  /* at */ ATREG, /* warn_about_macros */ 0,
295   /* nomove */ 0, /* nobopt */ 0, /* noautoextend */ 0, /* insn32 */ FALSE,
296   /* gp */ -1, /* fp */ -1, /* arch */ CPU_UNKNOWN, /* sym32 */ FALSE,
297   /* soft_float */ FALSE, /* single_float */ FALSE, /* oddspreg */ -1
298 };
299
300 /* Which bits of file_ase were explicitly set or cleared by ASE options.  */
301 static unsigned int file_ase_explicit;
302
303 /* These variables are filled in with the masks of registers used.
304    The object format code reads them and puts them in the appropriate
305    place.  */
306 unsigned long mips_gprmask;
307 unsigned long mips_cprmask[4];
308
309 /* True if any MIPS16 code was produced.  */
310 static int file_ase_mips16;
311
312 #define ISA_SUPPORTS_MIPS16E (mips_opts.isa == ISA_MIPS32               \
313                               || mips_opts.isa == ISA_MIPS32R2          \
314                               || mips_opts.isa == ISA_MIPS32R3          \
315                               || mips_opts.isa == ISA_MIPS32R5          \
316                               || mips_opts.isa == ISA_MIPS64            \
317                               || mips_opts.isa == ISA_MIPS64R2          \
318                               || mips_opts.isa == ISA_MIPS64R3          \
319                               || mips_opts.isa == ISA_MIPS64R5)
320
321 /* True if any microMIPS code was produced.  */
322 static int file_ase_micromips;
323
324 /* True if we want to create R_MIPS_JALR for jalr $25.  */
325 #ifdef TE_IRIX
326 #define MIPS_JALR_HINT_P(EXPR) HAVE_NEWABI
327 #else
328 /* As a GNU extension, we use R_MIPS_JALR for o32 too.  However,
329    because there's no place for any addend, the only acceptable
330    expression is a bare symbol.  */
331 #define MIPS_JALR_HINT_P(EXPR) \
332   (!HAVE_IN_PLACE_ADDENDS \
333    || ((EXPR)->X_op == O_symbol && (EXPR)->X_add_number == 0))
334 #endif
335
336 /* The argument of the -march= flag.  The architecture we are assembling.  */
337 static const char *mips_arch_string;
338
339 /* The argument of the -mtune= flag.  The architecture for which we
340    are optimizing.  */
341 static int mips_tune = CPU_UNKNOWN;
342 static const char *mips_tune_string;
343
344 /* True when generating 32-bit code for a 64-bit processor.  */
345 static int mips_32bitmode = 0;
346
347 /* True if the given ABI requires 32-bit registers.  */
348 #define ABI_NEEDS_32BIT_REGS(ABI) ((ABI) == O32_ABI)
349
350 /* Likewise 64-bit registers.  */
351 #define ABI_NEEDS_64BIT_REGS(ABI)       \
352   ((ABI) == N32_ABI                     \
353    || (ABI) == N64_ABI                  \
354    || (ABI) == O64_ABI)
355
356 #define ISA_IS_R6(ISA)                  \
357   ((ISA) == ISA_MIPS32R6                \
358    || (ISA) == ISA_MIPS64R6)
359
360 /*  Return true if ISA supports 64 bit wide gp registers.  */
361 #define ISA_HAS_64BIT_REGS(ISA)         \
362   ((ISA) == ISA_MIPS3                   \
363    || (ISA) == ISA_MIPS4                \
364    || (ISA) == ISA_MIPS5                \
365    || (ISA) == ISA_MIPS64               \
366    || (ISA) == ISA_MIPS64R2             \
367    || (ISA) == ISA_MIPS64R3             \
368    || (ISA) == ISA_MIPS64R5             \
369    || (ISA) == ISA_MIPS64R6)
370
371 /*  Return true if ISA supports 64 bit wide float registers.  */
372 #define ISA_HAS_64BIT_FPRS(ISA)         \
373   ((ISA) == ISA_MIPS3                   \
374    || (ISA) == ISA_MIPS4                \
375    || (ISA) == ISA_MIPS5                \
376    || (ISA) == ISA_MIPS32R2             \
377    || (ISA) == ISA_MIPS32R3             \
378    || (ISA) == ISA_MIPS32R5             \
379    || (ISA) == ISA_MIPS32R6             \
380    || (ISA) == ISA_MIPS64               \
381    || (ISA) == ISA_MIPS64R2             \
382    || (ISA) == ISA_MIPS64R3             \
383    || (ISA) == ISA_MIPS64R5             \
384    || (ISA) == ISA_MIPS64R6)
385
386 /* Return true if ISA supports 64-bit right rotate (dror et al.)
387    instructions.  */
388 #define ISA_HAS_DROR(ISA)               \
389   ((ISA) == ISA_MIPS64R2                \
390    || (ISA) == ISA_MIPS64R3             \
391    || (ISA) == ISA_MIPS64R5             \
392    || (ISA) == ISA_MIPS64R6             \
393    || (mips_opts.micromips              \
394        && ISA_HAS_64BIT_REGS (ISA))     \
395    )
396
397 /* Return true if ISA supports 32-bit right rotate (ror et al.)
398    instructions.  */
399 #define ISA_HAS_ROR(ISA)                \
400   ((ISA) == ISA_MIPS32R2                \
401    || (ISA) == ISA_MIPS32R3             \
402    || (ISA) == ISA_MIPS32R5             \
403    || (ISA) == ISA_MIPS32R6             \
404    || (ISA) == ISA_MIPS64R2             \
405    || (ISA) == ISA_MIPS64R3             \
406    || (ISA) == ISA_MIPS64R5             \
407    || (ISA) == ISA_MIPS64R6             \
408    || (mips_opts.ase & ASE_SMARTMIPS)   \
409    || mips_opts.micromips               \
410    )
411
412 /* Return true if ISA supports single-precision floats in odd registers.  */
413 #define ISA_HAS_ODD_SINGLE_FPR(ISA, CPU)\
414   (((ISA) == ISA_MIPS32                 \
415     || (ISA) == ISA_MIPS32R2            \
416     || (ISA) == ISA_MIPS32R3            \
417     || (ISA) == ISA_MIPS32R5            \
418     || (ISA) == ISA_MIPS32R6            \
419     || (ISA) == ISA_MIPS64              \
420     || (ISA) == ISA_MIPS64R2            \
421     || (ISA) == ISA_MIPS64R3            \
422     || (ISA) == ISA_MIPS64R5            \
423     || (ISA) == ISA_MIPS64R6            \
424     || (CPU) == CPU_R5900)              \
425    && (CPU) != CPU_LOONGSON_3A)
426
427 /* Return true if ISA supports move to/from high part of a 64-bit
428    floating-point register. */
429 #define ISA_HAS_MXHC1(ISA)              \
430   ((ISA) == ISA_MIPS32R2                \
431    || (ISA) == ISA_MIPS32R3             \
432    || (ISA) == ISA_MIPS32R5             \
433    || (ISA) == ISA_MIPS32R6             \
434    || (ISA) == ISA_MIPS64R2             \
435    || (ISA) == ISA_MIPS64R3             \
436    || (ISA) == ISA_MIPS64R5             \
437    || (ISA) == ISA_MIPS64R6)
438
439 /*  Return true if ISA supports legacy NAN.  */
440 #define ISA_HAS_LEGACY_NAN(ISA)         \
441   ((ISA) == ISA_MIPS1                   \
442    || (ISA) == ISA_MIPS2                \
443    || (ISA) == ISA_MIPS3                \
444    || (ISA) == ISA_MIPS4                \
445    || (ISA) == ISA_MIPS5                \
446    || (ISA) == ISA_MIPS32               \
447    || (ISA) == ISA_MIPS32R2             \
448    || (ISA) == ISA_MIPS32R3             \
449    || (ISA) == ISA_MIPS32R5             \
450    || (ISA) == ISA_MIPS64               \
451    || (ISA) == ISA_MIPS64R2             \
452    || (ISA) == ISA_MIPS64R3             \
453    || (ISA) == ISA_MIPS64R5)
454
455 #define GPR_SIZE \
456     (mips_opts.gp == 64 && !ISA_HAS_64BIT_REGS (mips_opts.isa) \
457      ? 32 \
458      : mips_opts.gp)
459
460 #define FPR_SIZE \
461     (mips_opts.fp == 64 && !ISA_HAS_64BIT_FPRS (mips_opts.isa) \
462      ? 32 \
463      : mips_opts.fp)
464
465 #define HAVE_NEWABI (mips_abi == N32_ABI || mips_abi == N64_ABI)
466
467 #define HAVE_64BIT_OBJECTS (mips_abi == N64_ABI)
468
469 /* True if relocations are stored in-place.  */
470 #define HAVE_IN_PLACE_ADDENDS (!HAVE_NEWABI)
471
472 /* The ABI-derived address size.  */
473 #define HAVE_64BIT_ADDRESSES \
474   (GPR_SIZE == 64 && (mips_abi == EABI_ABI || mips_abi == N64_ABI))
475 #define HAVE_32BIT_ADDRESSES (!HAVE_64BIT_ADDRESSES)
476
477 /* The size of symbolic constants (i.e., expressions of the form
478    "SYMBOL" or "SYMBOL + OFFSET").  */
479 #define HAVE_32BIT_SYMBOLS \
480   (HAVE_32BIT_ADDRESSES || !HAVE_64BIT_OBJECTS || mips_opts.sym32)
481 #define HAVE_64BIT_SYMBOLS (!HAVE_32BIT_SYMBOLS)
482
483 /* Addresses are loaded in different ways, depending on the address size
484    in use.  The n32 ABI Documentation also mandates the use of additions
485    with overflow checking, but existing implementations don't follow it.  */
486 #define ADDRESS_ADD_INSN                                                \
487    (HAVE_32BIT_ADDRESSES ? "addu" : "daddu")
488
489 #define ADDRESS_ADDI_INSN                                               \
490    (HAVE_32BIT_ADDRESSES ? "addiu" : "daddiu")
491
492 #define ADDRESS_LOAD_INSN                                               \
493    (HAVE_32BIT_ADDRESSES ? "lw" : "ld")
494
495 #define ADDRESS_STORE_INSN                                              \
496    (HAVE_32BIT_ADDRESSES ? "sw" : "sd")
497
498 /* Return true if the given CPU supports the MIPS16 ASE.  */
499 #define CPU_HAS_MIPS16(cpu)                                             \
500    (strncmp (TARGET_CPU, "mips16", sizeof ("mips16") - 1) == 0          \
501     || strncmp (TARGET_CANONICAL, "mips-lsi-elf", sizeof ("mips-lsi-elf") - 1) == 0)
502
503 /* Return true if the given CPU supports the microMIPS ASE.  */
504 #define CPU_HAS_MICROMIPS(cpu)  0
505
506 /* True if CPU has a dror instruction.  */
507 #define CPU_HAS_DROR(CPU)       ((CPU) == CPU_VR5400 || (CPU) == CPU_VR5500)
508
509 /* True if CPU has a ror instruction.  */
510 #define CPU_HAS_ROR(CPU)        CPU_HAS_DROR (CPU)
511
512 /* True if CPU is in the Octeon family */
513 #define CPU_IS_OCTEON(CPU) ((CPU) == CPU_OCTEON || (CPU) == CPU_OCTEONP \
514                             || (CPU) == CPU_OCTEON2 || (CPU) == CPU_OCTEON3)
515
516 /* True if CPU has seq/sne and seqi/snei instructions.  */
517 #define CPU_HAS_SEQ(CPU)        (CPU_IS_OCTEON (CPU))
518
519 /* True, if CPU has support for ldc1 and sdc1. */
520 #define CPU_HAS_LDC1_SDC1(CPU)  \
521    ((mips_opts.isa != ISA_MIPS1) && ((CPU) != CPU_R5900))
522
523 /* True if mflo and mfhi can be immediately followed by instructions
524    which write to the HI and LO registers.
525
526    According to MIPS specifications, MIPS ISAs I, II, and III need
527    (at least) two instructions between the reads of HI/LO and
528    instructions which write them, and later ISAs do not.  Contradicting
529    the MIPS specifications, some MIPS IV processor user manuals (e.g.
530    the UM for the NEC Vr5000) document needing the instructions between
531    HI/LO reads and writes, as well.  Therefore, we declare only MIPS32,
532    MIPS64 and later ISAs to have the interlocks, plus any specific
533    earlier-ISA CPUs for which CPU documentation declares that the
534    instructions are really interlocked.  */
535 #define hilo_interlocks \
536   (mips_opts.isa == ISA_MIPS32                        \
537    || mips_opts.isa == ISA_MIPS32R2                   \
538    || mips_opts.isa == ISA_MIPS32R3                   \
539    || mips_opts.isa == ISA_MIPS32R5                   \
540    || mips_opts.isa == ISA_MIPS32R6                   \
541    || mips_opts.isa == ISA_MIPS64                     \
542    || mips_opts.isa == ISA_MIPS64R2                   \
543    || mips_opts.isa == ISA_MIPS64R3                   \
544    || mips_opts.isa == ISA_MIPS64R5                   \
545    || mips_opts.isa == ISA_MIPS64R6                   \
546    || mips_opts.arch == CPU_R4010                     \
547    || mips_opts.arch == CPU_R5900                     \
548    || mips_opts.arch == CPU_R10000                    \
549    || mips_opts.arch == CPU_R12000                    \
550    || mips_opts.arch == CPU_R14000                    \
551    || mips_opts.arch == CPU_R16000                    \
552    || mips_opts.arch == CPU_RM7000                    \
553    || mips_opts.arch == CPU_VR5500                    \
554    || mips_opts.micromips                             \
555    )
556
557 /* Whether the processor uses hardware interlocks to protect reads
558    from the GPRs after they are loaded from memory, and thus does not
559    require nops to be inserted.  This applies to instructions marked
560    INSN_LOAD_MEMORY.  These nops are only required at MIPS ISA
561    level I and microMIPS mode instructions are always interlocked.  */
562 #define gpr_interlocks                                \
563   (mips_opts.isa != ISA_MIPS1                         \
564    || mips_opts.arch == CPU_R3900                     \
565    || mips_opts.arch == CPU_R5900                     \
566    || mips_opts.micromips                             \
567    )
568
569 /* Whether the processor uses hardware interlocks to avoid delays
570    required by coprocessor instructions, and thus does not require
571    nops to be inserted.  This applies to instructions marked
572    INSN_LOAD_COPROC, INSN_COPROC_MOVE, and to delays between
573    instructions marked INSN_WRITE_COND_CODE and ones marked
574    INSN_READ_COND_CODE.  These nops are only required at MIPS ISA
575    levels I, II, and III and microMIPS mode instructions are always
576    interlocked.  */
577 /* Itbl support may require additional care here.  */
578 #define cop_interlocks                                \
579   ((mips_opts.isa != ISA_MIPS1                        \
580     && mips_opts.isa != ISA_MIPS2                     \
581     && mips_opts.isa != ISA_MIPS3)                    \
582    || mips_opts.arch == CPU_R4300                     \
583    || mips_opts.micromips                             \
584    )
585
586 /* Whether the processor uses hardware interlocks to protect reads
587    from coprocessor registers after they are loaded from memory, and
588    thus does not require nops to be inserted.  This applies to
589    instructions marked INSN_COPROC_MEMORY_DELAY.  These nops are only
590    requires at MIPS ISA level I and microMIPS mode instructions are
591    always interlocked.  */
592 #define cop_mem_interlocks                            \
593   (mips_opts.isa != ISA_MIPS1                         \
594    || mips_opts.micromips                             \
595    )
596
597 /* Is this a mfhi or mflo instruction?  */
598 #define MF_HILO_INSN(PINFO) \
599   ((PINFO & INSN_READ_HI) || (PINFO & INSN_READ_LO))
600
601 /* Whether code compression (either of the MIPS16 or the microMIPS ASEs)
602    has been selected.  This implies, in particular, that addresses of text
603    labels have their LSB set.  */
604 #define HAVE_CODE_COMPRESSION                                           \
605   ((mips_opts.mips16 | mips_opts.micromips) != 0)
606
607 /* The minimum and maximum signed values that can be stored in a GPR.  */
608 #define GPR_SMAX ((offsetT) (((valueT) 1 << (GPR_SIZE - 1)) - 1))
609 #define GPR_SMIN (-GPR_SMAX - 1)
610
611 /* MIPS PIC level.  */
612
613 enum mips_pic_level mips_pic;
614
615 /* 1 if we should generate 32 bit offsets from the $gp register in
616    SVR4_PIC mode.  Currently has no meaning in other modes.  */
617 static int mips_big_got = 0;
618
619 /* 1 if trap instructions should used for overflow rather than break
620    instructions.  */
621 static int mips_trap = 0;
622
623 /* 1 if double width floating point constants should not be constructed
624    by assembling two single width halves into two single width floating
625    point registers which just happen to alias the double width destination
626    register.  On some architectures this aliasing can be disabled by a bit
627    in the status register, and the setting of this bit cannot be determined
628    automatically at assemble time.  */
629 static int mips_disable_float_construction;
630
631 /* Non-zero if any .set noreorder directives were used.  */
632
633 static int mips_any_noreorder;
634
635 /* Non-zero if nops should be inserted when the register referenced in
636    an mfhi/mflo instruction is read in the next two instructions.  */
637 static int mips_7000_hilo_fix;
638
639 /* The size of objects in the small data section.  */
640 static unsigned int g_switch_value = 8;
641 /* Whether the -G option was used.  */
642 static int g_switch_seen = 0;
643
644 #define N_RMASK 0xc4
645 #define N_VFP   0xd4
646
647 /* If we can determine in advance that GP optimization won't be
648    possible, we can skip the relaxation stuff that tries to produce
649    GP-relative references.  This makes delay slot optimization work
650    better.
651
652    This function can only provide a guess, but it seems to work for
653    gcc output.  It needs to guess right for gcc, otherwise gcc
654    will put what it thinks is a GP-relative instruction in a branch
655    delay slot.
656
657    I don't know if a fix is needed for the SVR4_PIC mode.  I've only
658    fixed it for the non-PIC mode.  KR 95/04/07  */
659 static int nopic_need_relax (symbolS *, int);
660
661 /* handle of the OPCODE hash table */
662 static struct hash_control *op_hash = NULL;
663
664 /* The opcode hash table we use for the mips16.  */
665 static struct hash_control *mips16_op_hash = NULL;
666
667 /* The opcode hash table we use for the microMIPS ASE.  */
668 static struct hash_control *micromips_op_hash = NULL;
669
670 /* This array holds the chars that always start a comment.  If the
671     pre-processor is disabled, these aren't very useful */
672 const char comment_chars[] = "#";
673
674 /* This array holds the chars that only start a comment at the beginning of
675    a line.  If the line seems to have the form '# 123 filename'
676    .line and .file directives will appear in the pre-processed output */
677 /* Note that input_file.c hand checks for '#' at the beginning of the
678    first line of the input file.  This is because the compiler outputs
679    #NO_APP at the beginning of its output.  */
680 /* Also note that C style comments are always supported.  */
681 const char line_comment_chars[] = "#";
682
683 /* This array holds machine specific line separator characters.  */
684 const char line_separator_chars[] = ";";
685
686 /* Chars that can be used to separate mant from exp in floating point nums */
687 const char EXP_CHARS[] = "eE";
688
689 /* Chars that mean this number is a floating point constant */
690 /* As in 0f12.456 */
691 /* or    0d1.2345e12 */
692 const char FLT_CHARS[] = "rRsSfFdDxXpP";
693
694 /* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
695    changed in read.c .  Ideally it shouldn't have to know about it at all,
696    but nothing is ideal around here.
697  */
698
699 /* Types of printf format used for instruction-related error messages.
700    "I" means int ("%d") and "S" means string ("%s"). */
701 enum mips_insn_error_format {
702   ERR_FMT_PLAIN,
703   ERR_FMT_I,
704   ERR_FMT_SS,
705 };
706
707 /* Information about an error that was found while assembling the current
708    instruction.  */
709 struct mips_insn_error {
710   /* We sometimes need to match an instruction against more than one
711      opcode table entry.  Errors found during this matching are reported
712      against a particular syntactic argument rather than against the
713      instruction as a whole.  We grade these messages so that errors
714      against argument N have a greater priority than an error against
715      any argument < N, since the former implies that arguments up to N
716      were acceptable and that the opcode entry was therefore a closer match.
717      If several matches report an error against the same argument,
718      we only use that error if it is the same in all cases.
719
720      min_argnum is the minimum argument number for which an error message
721      should be accepted.  It is 0 if MSG is against the instruction as
722      a whole.  */
723   int min_argnum;
724
725   /* The printf()-style message, including its format and arguments.  */
726   enum mips_insn_error_format format;
727   const char *msg;
728   union {
729     int i;
730     const char *ss[2];
731   } u;
732 };
733
734 /* The error that should be reported for the current instruction.  */
735 static struct mips_insn_error insn_error;
736
737 static int auto_align = 1;
738
739 /* When outputting SVR4 PIC code, the assembler needs to know the
740    offset in the stack frame from which to restore the $gp register.
741    This is set by the .cprestore pseudo-op, and saved in this
742    variable.  */
743 static offsetT mips_cprestore_offset = -1;
744
745 /* Similar for NewABI PIC code, where $gp is callee-saved.  NewABI has some
746    more optimizations, it can use a register value instead of a memory-saved
747    offset and even an other register than $gp as global pointer.  */
748 static offsetT mips_cpreturn_offset = -1;
749 static int mips_cpreturn_register = -1;
750 static int mips_gp_register = GP;
751 static int mips_gprel_offset = 0;
752
753 /* Whether mips_cprestore_offset has been set in the current function
754    (or whether it has already been warned about, if not).  */
755 static int mips_cprestore_valid = 0;
756
757 /* This is the register which holds the stack frame, as set by the
758    .frame pseudo-op.  This is needed to implement .cprestore.  */
759 static int mips_frame_reg = SP;
760
761 /* Whether mips_frame_reg has been set in the current function
762    (or whether it has already been warned about, if not).  */
763 static int mips_frame_reg_valid = 0;
764
765 /* To output NOP instructions correctly, we need to keep information
766    about the previous two instructions.  */
767
768 /* Whether we are optimizing.  The default value of 2 means to remove
769    unneeded NOPs and swap branch instructions when possible.  A value
770    of 1 means to not swap branches.  A value of 0 means to always
771    insert NOPs.  */
772 static int mips_optimize = 2;
773
774 /* Debugging level.  -g sets this to 2.  -gN sets this to N.  -g0 is
775    equivalent to seeing no -g option at all.  */
776 static int mips_debug = 0;
777
778 /* The maximum number of NOPs needed to avoid the VR4130 mflo/mfhi errata.  */
779 #define MAX_VR4130_NOPS 4
780
781 /* The maximum number of NOPs needed to fill delay slots.  */
782 #define MAX_DELAY_NOPS 2
783
784 /* The maximum number of NOPs needed for any purpose.  */
785 #define MAX_NOPS 4
786
787 /* A list of previous instructions, with index 0 being the most recent.
788    We need to look back MAX_NOPS instructions when filling delay slots
789    or working around processor errata.  We need to look back one
790    instruction further if we're thinking about using history[0] to
791    fill a branch delay slot.  */
792 static struct mips_cl_insn history[1 + MAX_NOPS];
793
794 /* Arrays of operands for each instruction.  */
795 #define MAX_OPERANDS 6
796 struct mips_operand_array {
797   const struct mips_operand *operand[MAX_OPERANDS];
798 };
799 static struct mips_operand_array *mips_operands;
800 static struct mips_operand_array *mips16_operands;
801 static struct mips_operand_array *micromips_operands;
802
803 /* Nop instructions used by emit_nop.  */
804 static struct mips_cl_insn nop_insn;
805 static struct mips_cl_insn mips16_nop_insn;
806 static struct mips_cl_insn micromips_nop16_insn;
807 static struct mips_cl_insn micromips_nop32_insn;
808
809 /* The appropriate nop for the current mode.  */
810 #define NOP_INSN (mips_opts.mips16                                      \
811                   ? &mips16_nop_insn                                    \
812                   : (mips_opts.micromips                                \
813                      ? (mips_opts.insn32                                \
814                         ? &micromips_nop32_insn                         \
815                         : &micromips_nop16_insn)                        \
816                      : &nop_insn))
817
818 /* The size of NOP_INSN in bytes.  */
819 #define NOP_INSN_SIZE ((mips_opts.mips16                                \
820                         || (mips_opts.micromips && !mips_opts.insn32))  \
821                        ? 2 : 4)
822
823 /* If this is set, it points to a frag holding nop instructions which
824    were inserted before the start of a noreorder section.  If those
825    nops turn out to be unnecessary, the size of the frag can be
826    decreased.  */
827 static fragS *prev_nop_frag;
828
829 /* The number of nop instructions we created in prev_nop_frag.  */
830 static int prev_nop_frag_holds;
831
832 /* The number of nop instructions that we know we need in
833    prev_nop_frag.  */
834 static int prev_nop_frag_required;
835
836 /* The number of instructions we've seen since prev_nop_frag.  */
837 static int prev_nop_frag_since;
838
839 /* Relocations against symbols are sometimes done in two parts, with a HI
840    relocation and a LO relocation.  Each relocation has only 16 bits of
841    space to store an addend.  This means that in order for the linker to
842    handle carries correctly, it must be able to locate both the HI and
843    the LO relocation.  This means that the relocations must appear in
844    order in the relocation table.
845
846    In order to implement this, we keep track of each unmatched HI
847    relocation.  We then sort them so that they immediately precede the
848    corresponding LO relocation.  */
849
850 struct mips_hi_fixup
851 {
852   /* Next HI fixup.  */
853   struct mips_hi_fixup *next;
854   /* This fixup.  */
855   fixS *fixp;
856   /* The section this fixup is in.  */
857   segT seg;
858 };
859
860 /* The list of unmatched HI relocs.  */
861
862 static struct mips_hi_fixup *mips_hi_fixup_list;
863
864 /* The frag containing the last explicit relocation operator.
865    Null if explicit relocations have not been used.  */
866
867 static fragS *prev_reloc_op_frag;
868
869 /* Map mips16 register numbers to normal MIPS register numbers.  */
870
871 static const unsigned int mips16_to_32_reg_map[] =
872 {
873   16, 17, 2, 3, 4, 5, 6, 7
874 };
875
876 /* Map microMIPS register numbers to normal MIPS register numbers.  */
877
878 #define micromips_to_32_reg_d_map       mips16_to_32_reg_map
879
880 /* The microMIPS registers with type h.  */
881 static const unsigned int micromips_to_32_reg_h_map1[] =
882 {
883   5, 5, 6, 4, 4, 4, 4, 4
884 };
885 static const unsigned int micromips_to_32_reg_h_map2[] =
886 {
887   6, 7, 7, 21, 22, 5, 6, 7
888 };
889
890 /* The microMIPS registers with type m.  */
891 static const unsigned int micromips_to_32_reg_m_map[] =
892 {
893   0, 17, 2, 3, 16, 18, 19, 20
894 };
895
896 #define micromips_to_32_reg_n_map      micromips_to_32_reg_m_map
897
898 /* Classifies the kind of instructions we're interested in when
899    implementing -mfix-vr4120.  */
900 enum fix_vr4120_class
901 {
902   FIX_VR4120_MACC,
903   FIX_VR4120_DMACC,
904   FIX_VR4120_MULT,
905   FIX_VR4120_DMULT,
906   FIX_VR4120_DIV,
907   FIX_VR4120_MTHILO,
908   NUM_FIX_VR4120_CLASSES
909 };
910
911 /* ...likewise -mfix-loongson2f-jump.  */
912 static bfd_boolean mips_fix_loongson2f_jump;
913
914 /* ...likewise -mfix-loongson2f-nop.  */
915 static bfd_boolean mips_fix_loongson2f_nop;
916
917 /* True if -mfix-loongson2f-nop or -mfix-loongson2f-jump passed.  */
918 static bfd_boolean mips_fix_loongson2f;
919
920 /* Given two FIX_VR4120_* values X and Y, bit Y of element X is set if
921    there must be at least one other instruction between an instruction
922    of type X and an instruction of type Y.  */
923 static unsigned int vr4120_conflicts[NUM_FIX_VR4120_CLASSES];
924
925 /* True if -mfix-vr4120 is in force.  */
926 static int mips_fix_vr4120;
927
928 /* ...likewise -mfix-vr4130.  */
929 static int mips_fix_vr4130;
930
931 /* ...likewise -mfix-24k.  */
932 static int mips_fix_24k;
933
934 /* ...likewise -mfix-rm7000  */
935 static int mips_fix_rm7000;
936
937 /* ...likewise -mfix-cn63xxp1 */
938 static bfd_boolean mips_fix_cn63xxp1;
939
940 /* We don't relax branches by default, since this causes us to expand
941    `la .l2 - .l1' if there's a branch between .l1 and .l2, because we
942    fail to compute the offset before expanding the macro to the most
943    efficient expansion.  */
944
945 static int mips_relax_branch;
946 \f
947 /* The expansion of many macros depends on the type of symbol that
948    they refer to.  For example, when generating position-dependent code,
949    a macro that refers to a symbol may have two different expansions,
950    one which uses GP-relative addresses and one which uses absolute
951    addresses.  When generating SVR4-style PIC, a macro may have
952    different expansions for local and global symbols.
953
954    We handle these situations by generating both sequences and putting
955    them in variant frags.  In position-dependent code, the first sequence
956    will be the GP-relative one and the second sequence will be the
957    absolute one.  In SVR4 PIC, the first sequence will be for global
958    symbols and the second will be for local symbols.
959
960    The frag's "subtype" is RELAX_ENCODE (FIRST, SECOND), where FIRST and
961    SECOND are the lengths of the two sequences in bytes.  These fields
962    can be extracted using RELAX_FIRST() and RELAX_SECOND().  In addition,
963    the subtype has the following flags:
964
965    RELAX_USE_SECOND
966         Set if it has been decided that we should use the second
967         sequence instead of the first.
968
969    RELAX_SECOND_LONGER
970         Set in the first variant frag if the macro's second implementation
971         is longer than its first.  This refers to the macro as a whole,
972         not an individual relaxation.
973
974    RELAX_NOMACRO
975         Set in the first variant frag if the macro appeared in a .set nomacro
976         block and if one alternative requires a warning but the other does not.
977
978    RELAX_DELAY_SLOT
979         Like RELAX_NOMACRO, but indicates that the macro appears in a branch
980         delay slot.
981
982    RELAX_DELAY_SLOT_16BIT
983         Like RELAX_DELAY_SLOT, but indicates that the delay slot requires a
984         16-bit instruction.
985
986    RELAX_DELAY_SLOT_SIZE_FIRST
987         Like RELAX_DELAY_SLOT, but indicates that the first implementation of
988         the macro is of the wrong size for the branch delay slot.
989
990    RELAX_DELAY_SLOT_SIZE_SECOND
991         Like RELAX_DELAY_SLOT, but indicates that the second implementation of
992         the macro is of the wrong size for the branch delay slot.
993
994    The frag's "opcode" points to the first fixup for relaxable code.
995
996    Relaxable macros are generated using a sequence such as:
997
998       relax_start (SYMBOL);
999       ... generate first expansion ...
1000       relax_switch ();
1001       ... generate second expansion ...
1002       relax_end ();
1003
1004    The code and fixups for the unwanted alternative are discarded
1005    by md_convert_frag.  */
1006 #define RELAX_ENCODE(FIRST, SECOND) (((FIRST) << 8) | (SECOND))
1007
1008 #define RELAX_FIRST(X) (((X) >> 8) & 0xff)
1009 #define RELAX_SECOND(X) ((X) & 0xff)
1010 #define RELAX_USE_SECOND 0x10000
1011 #define RELAX_SECOND_LONGER 0x20000
1012 #define RELAX_NOMACRO 0x40000
1013 #define RELAX_DELAY_SLOT 0x80000
1014 #define RELAX_DELAY_SLOT_16BIT 0x100000
1015 #define RELAX_DELAY_SLOT_SIZE_FIRST 0x200000
1016 #define RELAX_DELAY_SLOT_SIZE_SECOND 0x400000
1017
1018 /* Branch without likely bit.  If label is out of range, we turn:
1019
1020         beq reg1, reg2, label
1021         delay slot
1022
1023    into
1024
1025         bne reg1, reg2, 0f
1026         nop
1027         j label
1028      0: delay slot
1029
1030    with the following opcode replacements:
1031
1032         beq <-> bne
1033         blez <-> bgtz
1034         bltz <-> bgez
1035         bc1f <-> bc1t
1036
1037         bltzal <-> bgezal  (with jal label instead of j label)
1038
1039    Even though keeping the delay slot instruction in the delay slot of
1040    the branch would be more efficient, it would be very tricky to do
1041    correctly, because we'd have to introduce a variable frag *after*
1042    the delay slot instruction, and expand that instead.  Let's do it
1043    the easy way for now, even if the branch-not-taken case now costs
1044    one additional instruction.  Out-of-range branches are not supposed
1045    to be common, anyway.
1046
1047    Branch likely.  If label is out of range, we turn:
1048
1049         beql reg1, reg2, label
1050         delay slot (annulled if branch not taken)
1051
1052    into
1053
1054         beql reg1, reg2, 1f
1055         nop
1056         beql $0, $0, 2f
1057         nop
1058      1: j[al] label
1059         delay slot (executed only if branch taken)
1060      2:
1061
1062    It would be possible to generate a shorter sequence by losing the
1063    likely bit, generating something like:
1064
1065         bne reg1, reg2, 0f
1066         nop
1067         j[al] label
1068         delay slot (executed only if branch taken)
1069      0:
1070
1071         beql -> bne
1072         bnel -> beq
1073         blezl -> bgtz
1074         bgtzl -> blez
1075         bltzl -> bgez
1076         bgezl -> bltz
1077         bc1fl -> bc1t
1078         bc1tl -> bc1f
1079
1080         bltzall -> bgezal  (with jal label instead of j label)
1081         bgezall -> bltzal  (ditto)
1082
1083
1084    but it's not clear that it would actually improve performance.  */
1085 #define RELAX_BRANCH_ENCODE(at, uncond, likely, link, toofar)   \
1086   ((relax_substateT)                                            \
1087    (0xc0000000                                                  \
1088     | ((at) & 0x1f)                                             \
1089     | ((toofar) ? 0x20 : 0)                                     \
1090     | ((link) ? 0x40 : 0)                                       \
1091     | ((likely) ? 0x80 : 0)                                     \
1092     | ((uncond) ? 0x100 : 0)))
1093 #define RELAX_BRANCH_P(i) (((i) & 0xf0000000) == 0xc0000000)
1094 #define RELAX_BRANCH_UNCOND(i) (((i) & 0x100) != 0)
1095 #define RELAX_BRANCH_LIKELY(i) (((i) & 0x80) != 0)
1096 #define RELAX_BRANCH_LINK(i) (((i) & 0x40) != 0)
1097 #define RELAX_BRANCH_TOOFAR(i) (((i) & 0x20) != 0)
1098 #define RELAX_BRANCH_AT(i) ((i) & 0x1f)
1099
1100 /* For mips16 code, we use an entirely different form of relaxation.
1101    mips16 supports two versions of most instructions which take
1102    immediate values: a small one which takes some small value, and a
1103    larger one which takes a 16 bit value.  Since branches also follow
1104    this pattern, relaxing these values is required.
1105
1106    We can assemble both mips16 and normal MIPS code in a single
1107    object.  Therefore, we need to support this type of relaxation at
1108    the same time that we support the relaxation described above.  We
1109    use the high bit of the subtype field to distinguish these cases.
1110
1111    The information we store for this type of relaxation is the
1112    argument code found in the opcode file for this relocation, whether
1113    the user explicitly requested a small or extended form, and whether
1114    the relocation is in a jump or jal delay slot.  That tells us the
1115    size of the value, and how it should be stored.  We also store
1116    whether the fragment is considered to be extended or not.  We also
1117    store whether this is known to be a branch to a different section,
1118    whether we have tried to relax this frag yet, and whether we have
1119    ever extended a PC relative fragment because of a shift count.  */
1120 #define RELAX_MIPS16_ENCODE(type, small, ext, dslot, jal_dslot) \
1121   (0x80000000                                                   \
1122    | ((type) & 0xff)                                            \
1123    | ((small) ? 0x100 : 0)                                      \
1124    | ((ext) ? 0x200 : 0)                                        \
1125    | ((dslot) ? 0x400 : 0)                                      \
1126    | ((jal_dslot) ? 0x800 : 0))
1127 #define RELAX_MIPS16_P(i) (((i) & 0xc0000000) == 0x80000000)
1128 #define RELAX_MIPS16_TYPE(i) ((i) & 0xff)
1129 #define RELAX_MIPS16_USER_SMALL(i) (((i) & 0x100) != 0)
1130 #define RELAX_MIPS16_USER_EXT(i) (((i) & 0x200) != 0)
1131 #define RELAX_MIPS16_DSLOT(i) (((i) & 0x400) != 0)
1132 #define RELAX_MIPS16_JAL_DSLOT(i) (((i) & 0x800) != 0)
1133 #define RELAX_MIPS16_EXTENDED(i) (((i) & 0x1000) != 0)
1134 #define RELAX_MIPS16_MARK_EXTENDED(i) ((i) | 0x1000)
1135 #define RELAX_MIPS16_CLEAR_EXTENDED(i) ((i) &~ 0x1000)
1136 #define RELAX_MIPS16_LONG_BRANCH(i) (((i) & 0x2000) != 0)
1137 #define RELAX_MIPS16_MARK_LONG_BRANCH(i) ((i) | 0x2000)
1138 #define RELAX_MIPS16_CLEAR_LONG_BRANCH(i) ((i) &~ 0x2000)
1139
1140 /* For microMIPS code, we use relaxation similar to one we use for
1141    MIPS16 code.  Some instructions that take immediate values support
1142    two encodings: a small one which takes some small value, and a
1143    larger one which takes a 16 bit value.  As some branches also follow
1144    this pattern, relaxing these values is required.
1145
1146    We can assemble both microMIPS and normal MIPS code in a single
1147    object.  Therefore, we need to support this type of relaxation at
1148    the same time that we support the relaxation described above.  We
1149    use one of the high bits of the subtype field to distinguish these
1150    cases.
1151
1152    The information we store for this type of relaxation is the argument
1153    code found in the opcode file for this relocation, the register
1154    selected as the assembler temporary, whether in the 32-bit
1155    instruction mode, whether the branch is unconditional, whether it is
1156    compact, whether there is no delay-slot instruction available to fill
1157    in, whether it stores the link address implicitly in $ra, whether
1158    relaxation of out-of-range 32-bit branches to a sequence of
1159    instructions is enabled, and whether the displacement of a branch is
1160    too large to fit as an immediate argument of a 16-bit and a 32-bit
1161    branch, respectively.  */
1162 #define RELAX_MICROMIPS_ENCODE(type, at, insn32,                \
1163                                uncond, compact, link, nods,     \
1164                                relax32, toofar16, toofar32)     \
1165   (0x40000000                                                   \
1166    | ((type) & 0xff)                                            \
1167    | (((at) & 0x1f) << 8)                                       \
1168    | ((insn32) ? 0x2000 : 0)                                    \
1169    | ((uncond) ? 0x4000 : 0)                                    \
1170    | ((compact) ? 0x8000 : 0)                                   \
1171    | ((link) ? 0x10000 : 0)                                     \
1172    | ((nods) ? 0x20000 : 0)                                     \
1173    | ((relax32) ? 0x40000 : 0)                                  \
1174    | ((toofar16) ? 0x80000 : 0)                                 \
1175    | ((toofar32) ? 0x100000 : 0))
1176 #define RELAX_MICROMIPS_P(i) (((i) & 0xc0000000) == 0x40000000)
1177 #define RELAX_MICROMIPS_TYPE(i) ((i) & 0xff)
1178 #define RELAX_MICROMIPS_AT(i) (((i) >> 8) & 0x1f)
1179 #define RELAX_MICROMIPS_INSN32(i) (((i) & 0x2000) != 0)
1180 #define RELAX_MICROMIPS_UNCOND(i) (((i) & 0x4000) != 0)
1181 #define RELAX_MICROMIPS_COMPACT(i) (((i) & 0x8000) != 0)
1182 #define RELAX_MICROMIPS_LINK(i) (((i) & 0x10000) != 0)
1183 #define RELAX_MICROMIPS_NODS(i) (((i) & 0x20000) != 0)
1184 #define RELAX_MICROMIPS_RELAX32(i) (((i) & 0x40000) != 0)
1185
1186 #define RELAX_MICROMIPS_TOOFAR16(i) (((i) & 0x80000) != 0)
1187 #define RELAX_MICROMIPS_MARK_TOOFAR16(i) ((i) | 0x80000)
1188 #define RELAX_MICROMIPS_CLEAR_TOOFAR16(i) ((i) & ~0x80000)
1189 #define RELAX_MICROMIPS_TOOFAR32(i) (((i) & 0x100000) != 0)
1190 #define RELAX_MICROMIPS_MARK_TOOFAR32(i) ((i) | 0x100000)
1191 #define RELAX_MICROMIPS_CLEAR_TOOFAR32(i) ((i) & ~0x100000)
1192
1193 /* Sign-extend 16-bit value X.  */
1194 #define SEXT_16BIT(X) ((((X) + 0x8000) & 0xffff) - 0x8000)
1195
1196 /* Is the given value a sign-extended 32-bit value?  */
1197 #define IS_SEXT_32BIT_NUM(x)                                            \
1198   (((x) &~ (offsetT) 0x7fffffff) == 0                                   \
1199    || (((x) &~ (offsetT) 0x7fffffff) == ~ (offsetT) 0x7fffffff))
1200
1201 /* Is the given value a sign-extended 16-bit value?  */
1202 #define IS_SEXT_16BIT_NUM(x)                                            \
1203   (((x) &~ (offsetT) 0x7fff) == 0                                       \
1204    || (((x) &~ (offsetT) 0x7fff) == ~ (offsetT) 0x7fff))
1205
1206 /* Is the given value a sign-extended 12-bit value?  */
1207 #define IS_SEXT_12BIT_NUM(x)                                            \
1208   (((((x) & 0xfff) ^ 0x800LL) - 0x800LL) == (x))
1209
1210 /* Is the given value a sign-extended 9-bit value?  */
1211 #define IS_SEXT_9BIT_NUM(x)                                             \
1212   (((((x) & 0x1ff) ^ 0x100LL) - 0x100LL) == (x))
1213
1214 /* Is the given value a zero-extended 32-bit value?  Or a negated one?  */
1215 #define IS_ZEXT_32BIT_NUM(x)                                            \
1216   (((x) &~ (offsetT) 0xffffffff) == 0                                   \
1217    || (((x) &~ (offsetT) 0xffffffff) == ~ (offsetT) 0xffffffff))
1218
1219 /* Extract bits MASK << SHIFT from STRUCT and shift them right
1220    SHIFT places.  */
1221 #define EXTRACT_BITS(STRUCT, MASK, SHIFT) \
1222   (((STRUCT) >> (SHIFT)) & (MASK))
1223
1224 /* Extract the operand given by FIELD from mips_cl_insn INSN.  */
1225 #define EXTRACT_OPERAND(MICROMIPS, FIELD, INSN) \
1226   (!(MICROMIPS) \
1227    ? EXTRACT_BITS ((INSN).insn_opcode, OP_MASK_##FIELD, OP_SH_##FIELD) \
1228    : EXTRACT_BITS ((INSN).insn_opcode, \
1229                    MICROMIPSOP_MASK_##FIELD, MICROMIPSOP_SH_##FIELD))
1230 #define MIPS16_EXTRACT_OPERAND(FIELD, INSN) \
1231   EXTRACT_BITS ((INSN).insn_opcode, \
1232                 MIPS16OP_MASK_##FIELD, \
1233                 MIPS16OP_SH_##FIELD)
1234
1235 /* The MIPS16 EXTEND opcode, shifted left 16 places.  */
1236 #define MIPS16_EXTEND (0xf000U << 16)
1237 \f
1238 /* Whether or not we are emitting a branch-likely macro.  */
1239 static bfd_boolean emit_branch_likely_macro = FALSE;
1240
1241 /* Global variables used when generating relaxable macros.  See the
1242    comment above RELAX_ENCODE for more details about how relaxation
1243    is used.  */
1244 static struct {
1245   /* 0 if we're not emitting a relaxable macro.
1246      1 if we're emitting the first of the two relaxation alternatives.
1247      2 if we're emitting the second alternative.  */
1248   int sequence;
1249
1250   /* The first relaxable fixup in the current frag.  (In other words,
1251      the first fixup that refers to relaxable code.)  */
1252   fixS *first_fixup;
1253
1254   /* sizes[0] says how many bytes of the first alternative are stored in
1255      the current frag.  Likewise sizes[1] for the second alternative.  */
1256   unsigned int sizes[2];
1257
1258   /* The symbol on which the choice of sequence depends.  */
1259   symbolS *symbol;
1260 } mips_relax;
1261 \f
1262 /* Global variables used to decide whether a macro needs a warning.  */
1263 static struct {
1264   /* True if the macro is in a branch delay slot.  */
1265   bfd_boolean delay_slot_p;
1266
1267   /* Set to the length in bytes required if the macro is in a delay slot
1268      that requires a specific length of instruction, otherwise zero.  */
1269   unsigned int delay_slot_length;
1270
1271   /* For relaxable macros, sizes[0] is the length of the first alternative
1272      in bytes and sizes[1] is the length of the second alternative.
1273      For non-relaxable macros, both elements give the length of the
1274      macro in bytes.  */
1275   unsigned int sizes[2];
1276
1277   /* For relaxable macros, first_insn_sizes[0] is the length of the first
1278      instruction of the first alternative in bytes and first_insn_sizes[1]
1279      is the length of the first instruction of the second alternative.
1280      For non-relaxable macros, both elements give the length of the first
1281      instruction in bytes.
1282
1283      Set to zero if we haven't yet seen the first instruction.  */
1284   unsigned int first_insn_sizes[2];
1285
1286   /* For relaxable macros, insns[0] is the number of instructions for the
1287      first alternative and insns[1] is the number of instructions for the
1288      second alternative.
1289
1290      For non-relaxable macros, both elements give the number of
1291      instructions for the macro.  */
1292   unsigned int insns[2];
1293
1294   /* The first variant frag for this macro.  */
1295   fragS *first_frag;
1296 } mips_macro_warning;
1297 \f
1298 /* Prototypes for static functions.  */
1299
1300 enum mips_regclass { MIPS_GR_REG, MIPS_FP_REG, MIPS16_REG };
1301
1302 static void append_insn
1303   (struct mips_cl_insn *, expressionS *, bfd_reloc_code_real_type *,
1304    bfd_boolean expansionp);
1305 static void mips_no_prev_insn (void);
1306 static void macro_build (expressionS *, const char *, const char *, ...);
1307 static void mips16_macro_build
1308   (expressionS *, const char *, const char *, va_list *);
1309 static void load_register (int, expressionS *, int);
1310 static void macro_start (void);
1311 static void macro_end (void);
1312 static void macro (struct mips_cl_insn *ip, char *str);
1313 static void mips16_macro (struct mips_cl_insn * ip);
1314 static void mips_ip (char *str, struct mips_cl_insn * ip);
1315 static void mips16_ip (char *str, struct mips_cl_insn * ip);
1316 static void mips16_immed
1317   (const char *, unsigned int, int, bfd_reloc_code_real_type, offsetT,
1318    unsigned int, unsigned long *);
1319 static size_t my_getSmallExpression
1320   (expressionS *, bfd_reloc_code_real_type *, char *);
1321 static void my_getExpression (expressionS *, char *);
1322 static void s_align (int);
1323 static void s_change_sec (int);
1324 static void s_change_section (int);
1325 static void s_cons (int);
1326 static void s_float_cons (int);
1327 static void s_mips_globl (int);
1328 static void s_option (int);
1329 static void s_mipsset (int);
1330 static void s_abicalls (int);
1331 static void s_cpload (int);
1332 static void s_cpsetup (int);
1333 static void s_cplocal (int);
1334 static void s_cprestore (int);
1335 static void s_cpreturn (int);
1336 static void s_dtprelword (int);
1337 static void s_dtpreldword (int);
1338 static void s_tprelword (int);
1339 static void s_tpreldword (int);
1340 static void s_gpvalue (int);
1341 static void s_gpword (int);
1342 static void s_gpdword (int);
1343 static void s_ehword (int);
1344 static void s_cpadd (int);
1345 static void s_insn (int);
1346 static void s_nan (int);
1347 static void s_module (int);
1348 static void s_mips_ent (int);
1349 static void s_mips_end (int);
1350 static void s_mips_frame (int);
1351 static void s_mips_mask (int reg_type);
1352 static void s_mips_stab (int);
1353 static void s_mips_weakext (int);
1354 static void s_mips_file (int);
1355 static void s_mips_loc (int);
1356 static bfd_boolean pic_need_relax (symbolS *, asection *);
1357 static int relaxed_branch_length (fragS *, asection *, int);
1358 static int relaxed_micromips_16bit_branch_length (fragS *, asection *, int);
1359 static int relaxed_micromips_32bit_branch_length (fragS *, asection *, int);
1360 static void file_mips_check_options (void);
1361
1362 /* Table and functions used to map between CPU/ISA names, and
1363    ISA levels, and CPU numbers.  */
1364
1365 struct mips_cpu_info
1366 {
1367   const char *name;           /* CPU or ISA name.  */
1368   int flags;                  /* MIPS_CPU_* flags.  */
1369   int ase;                    /* Set of ASEs implemented by the CPU.  */
1370   int isa;                    /* ISA level.  */
1371   int cpu;                    /* CPU number (default CPU if ISA).  */
1372 };
1373
1374 #define MIPS_CPU_IS_ISA         0x0001  /* Is this an ISA?  (If 0, a CPU.) */
1375
1376 static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *);
1377 static const struct mips_cpu_info *mips_cpu_info_from_isa (int);
1378 static const struct mips_cpu_info *mips_cpu_info_from_arch (int);
1379 \f
1380 /* Command-line options.  */
1381 const char *md_shortopts = "O::g::G:";
1382
1383 enum options
1384   {
1385     OPTION_MARCH = OPTION_MD_BASE,
1386     OPTION_MTUNE,
1387     OPTION_MIPS1,
1388     OPTION_MIPS2,
1389     OPTION_MIPS3,
1390     OPTION_MIPS4,
1391     OPTION_MIPS5,
1392     OPTION_MIPS32,
1393     OPTION_MIPS64,
1394     OPTION_MIPS32R2,
1395     OPTION_MIPS32R3,
1396     OPTION_MIPS32R5,
1397     OPTION_MIPS32R6,
1398     OPTION_MIPS64R2,
1399     OPTION_MIPS64R3,
1400     OPTION_MIPS64R5,
1401     OPTION_MIPS64R6,
1402     OPTION_MIPS16,
1403     OPTION_NO_MIPS16,
1404     OPTION_MIPS3D,
1405     OPTION_NO_MIPS3D,
1406     OPTION_MDMX,
1407     OPTION_NO_MDMX,
1408     OPTION_DSP,
1409     OPTION_NO_DSP,
1410     OPTION_MT,
1411     OPTION_NO_MT,
1412     OPTION_VIRT,
1413     OPTION_NO_VIRT,
1414     OPTION_MSA,
1415     OPTION_NO_MSA,
1416     OPTION_SMARTMIPS,
1417     OPTION_NO_SMARTMIPS,
1418     OPTION_DSPR2,
1419     OPTION_NO_DSPR2,
1420     OPTION_DSPR3,
1421     OPTION_NO_DSPR3,
1422     OPTION_EVA,
1423     OPTION_NO_EVA,
1424     OPTION_XPA,
1425     OPTION_NO_XPA,
1426     OPTION_MICROMIPS,
1427     OPTION_NO_MICROMIPS,
1428     OPTION_MCU,
1429     OPTION_NO_MCU,
1430     OPTION_COMPAT_ARCH_BASE,
1431     OPTION_M4650,
1432     OPTION_NO_M4650,
1433     OPTION_M4010,
1434     OPTION_NO_M4010,
1435     OPTION_M4100,
1436     OPTION_NO_M4100,
1437     OPTION_M3900,
1438     OPTION_NO_M3900,
1439     OPTION_M7000_HILO_FIX,
1440     OPTION_MNO_7000_HILO_FIX,
1441     OPTION_FIX_24K,
1442     OPTION_NO_FIX_24K,
1443     OPTION_FIX_RM7000,
1444     OPTION_NO_FIX_RM7000,
1445     OPTION_FIX_LOONGSON2F_JUMP,
1446     OPTION_NO_FIX_LOONGSON2F_JUMP,
1447     OPTION_FIX_LOONGSON2F_NOP,
1448     OPTION_NO_FIX_LOONGSON2F_NOP,
1449     OPTION_FIX_VR4120,
1450     OPTION_NO_FIX_VR4120,
1451     OPTION_FIX_VR4130,
1452     OPTION_NO_FIX_VR4130,
1453     OPTION_FIX_CN63XXP1,
1454     OPTION_NO_FIX_CN63XXP1,
1455     OPTION_TRAP,
1456     OPTION_BREAK,
1457     OPTION_EB,
1458     OPTION_EL,
1459     OPTION_FP32,
1460     OPTION_GP32,
1461     OPTION_CONSTRUCT_FLOATS,
1462     OPTION_NO_CONSTRUCT_FLOATS,
1463     OPTION_FP64,
1464     OPTION_FPXX,
1465     OPTION_GP64,
1466     OPTION_RELAX_BRANCH,
1467     OPTION_NO_RELAX_BRANCH,
1468     OPTION_INSN32,
1469     OPTION_NO_INSN32,
1470     OPTION_MSHARED,
1471     OPTION_MNO_SHARED,
1472     OPTION_MSYM32,
1473     OPTION_MNO_SYM32,
1474     OPTION_SOFT_FLOAT,
1475     OPTION_HARD_FLOAT,
1476     OPTION_SINGLE_FLOAT,
1477     OPTION_DOUBLE_FLOAT,
1478     OPTION_32,
1479     OPTION_CALL_SHARED,
1480     OPTION_CALL_NONPIC,
1481     OPTION_NON_SHARED,
1482     OPTION_XGOT,
1483     OPTION_MABI,
1484     OPTION_N32,
1485     OPTION_64,
1486     OPTION_MDEBUG,
1487     OPTION_NO_MDEBUG,
1488     OPTION_PDR,
1489     OPTION_NO_PDR,
1490     OPTION_MVXWORKS_PIC,
1491     OPTION_NAN,
1492     OPTION_ODD_SPREG,
1493     OPTION_NO_ODD_SPREG,
1494     OPTION_END_OF_ENUM
1495   };
1496
1497 struct option md_longopts[] =
1498 {
1499   /* Options which specify architecture.  */
1500   {"march", required_argument, NULL, OPTION_MARCH},
1501   {"mtune", required_argument, NULL, OPTION_MTUNE},
1502   {"mips0", no_argument, NULL, OPTION_MIPS1},
1503   {"mips1", no_argument, NULL, OPTION_MIPS1},
1504   {"mips2", no_argument, NULL, OPTION_MIPS2},
1505   {"mips3", no_argument, NULL, OPTION_MIPS3},
1506   {"mips4", no_argument, NULL, OPTION_MIPS4},
1507   {"mips5", no_argument, NULL, OPTION_MIPS5},
1508   {"mips32", no_argument, NULL, OPTION_MIPS32},
1509   {"mips64", no_argument, NULL, OPTION_MIPS64},
1510   {"mips32r2", no_argument, NULL, OPTION_MIPS32R2},
1511   {"mips32r3", no_argument, NULL, OPTION_MIPS32R3},
1512   {"mips32r5", no_argument, NULL, OPTION_MIPS32R5},
1513   {"mips32r6", no_argument, NULL, OPTION_MIPS32R6},
1514   {"mips64r2", no_argument, NULL, OPTION_MIPS64R2},
1515   {"mips64r3", no_argument, NULL, OPTION_MIPS64R3},
1516   {"mips64r5", no_argument, NULL, OPTION_MIPS64R5},
1517   {"mips64r6", no_argument, NULL, OPTION_MIPS64R6},
1518
1519   /* Options which specify Application Specific Extensions (ASEs).  */
1520   {"mips16", no_argument, NULL, OPTION_MIPS16},
1521   {"no-mips16", no_argument, NULL, OPTION_NO_MIPS16},
1522   {"mips3d", no_argument, NULL, OPTION_MIPS3D},
1523   {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D},
1524   {"mdmx", no_argument, NULL, OPTION_MDMX},
1525   {"no-mdmx", no_argument, NULL, OPTION_NO_MDMX},
1526   {"mdsp", no_argument, NULL, OPTION_DSP},
1527   {"mno-dsp", no_argument, NULL, OPTION_NO_DSP},
1528   {"mmt", no_argument, NULL, OPTION_MT},
1529   {"mno-mt", no_argument, NULL, OPTION_NO_MT},
1530   {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS},
1531   {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS},
1532   {"mdspr2", no_argument, NULL, OPTION_DSPR2},
1533   {"mno-dspr2", no_argument, NULL, OPTION_NO_DSPR2},
1534   {"mdspr3", no_argument, NULL, OPTION_DSPR3},
1535   {"mno-dspr3", no_argument, NULL, OPTION_NO_DSPR3},
1536   {"meva", no_argument, NULL, OPTION_EVA},
1537   {"mno-eva", no_argument, NULL, OPTION_NO_EVA},
1538   {"mmicromips", no_argument, NULL, OPTION_MICROMIPS},
1539   {"mno-micromips", no_argument, NULL, OPTION_NO_MICROMIPS},
1540   {"mmcu", no_argument, NULL, OPTION_MCU},
1541   {"mno-mcu", no_argument, NULL, OPTION_NO_MCU},
1542   {"mvirt", no_argument, NULL, OPTION_VIRT},
1543   {"mno-virt", no_argument, NULL, OPTION_NO_VIRT},
1544   {"mmsa", no_argument, NULL, OPTION_MSA},
1545   {"mno-msa", no_argument, NULL, OPTION_NO_MSA},
1546   {"mxpa", no_argument, NULL, OPTION_XPA},
1547   {"mno-xpa", no_argument, NULL, OPTION_NO_XPA},
1548
1549   /* Old-style architecture options.  Don't add more of these.  */
1550   {"m4650", no_argument, NULL, OPTION_M4650},
1551   {"no-m4650", no_argument, NULL, OPTION_NO_M4650},
1552   {"m4010", no_argument, NULL, OPTION_M4010},
1553   {"no-m4010", no_argument, NULL, OPTION_NO_M4010},
1554   {"m4100", no_argument, NULL, OPTION_M4100},
1555   {"no-m4100", no_argument, NULL, OPTION_NO_M4100},
1556   {"m3900", no_argument, NULL, OPTION_M3900},
1557   {"no-m3900", no_argument, NULL, OPTION_NO_M3900},
1558
1559   /* Options which enable bug fixes.  */
1560   {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX},
1561   {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1562   {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1563   {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP},
1564   {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP},
1565   {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP},
1566   {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP},
1567   {"mfix-vr4120",    no_argument, NULL, OPTION_FIX_VR4120},
1568   {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120},
1569   {"mfix-vr4130",    no_argument, NULL, OPTION_FIX_VR4130},
1570   {"mno-fix-vr4130", no_argument, NULL, OPTION_NO_FIX_VR4130},
1571   {"mfix-24k",    no_argument, NULL, OPTION_FIX_24K},
1572   {"mno-fix-24k", no_argument, NULL, OPTION_NO_FIX_24K},
1573   {"mfix-rm7000",    no_argument, NULL, OPTION_FIX_RM7000},
1574   {"mno-fix-rm7000", no_argument, NULL, OPTION_NO_FIX_RM7000},
1575   {"mfix-cn63xxp1", no_argument, NULL, OPTION_FIX_CN63XXP1},
1576   {"mno-fix-cn63xxp1", no_argument, NULL, OPTION_NO_FIX_CN63XXP1},
1577
1578   /* Miscellaneous options.  */
1579   {"trap", no_argument, NULL, OPTION_TRAP},
1580   {"no-break", no_argument, NULL, OPTION_TRAP},
1581   {"break", no_argument, NULL, OPTION_BREAK},
1582   {"no-trap", no_argument, NULL, OPTION_BREAK},
1583   {"EB", no_argument, NULL, OPTION_EB},
1584   {"EL", no_argument, NULL, OPTION_EL},
1585   {"mfp32", no_argument, NULL, OPTION_FP32},
1586   {"mgp32", no_argument, NULL, OPTION_GP32},
1587   {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS},
1588   {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
1589   {"mfp64", no_argument, NULL, OPTION_FP64},
1590   {"mfpxx", no_argument, NULL, OPTION_FPXX},
1591   {"mgp64", no_argument, NULL, OPTION_GP64},
1592   {"relax-branch", no_argument, NULL, OPTION_RELAX_BRANCH},
1593   {"no-relax-branch", no_argument, NULL, OPTION_NO_RELAX_BRANCH},
1594   {"minsn32", no_argument, NULL, OPTION_INSN32},
1595   {"mno-insn32", no_argument, NULL, OPTION_NO_INSN32},
1596   {"mshared", no_argument, NULL, OPTION_MSHARED},
1597   {"mno-shared", no_argument, NULL, OPTION_MNO_SHARED},
1598   {"msym32", no_argument, NULL, OPTION_MSYM32},
1599   {"mno-sym32", no_argument, NULL, OPTION_MNO_SYM32},
1600   {"msoft-float", no_argument, NULL, OPTION_SOFT_FLOAT},
1601   {"mhard-float", no_argument, NULL, OPTION_HARD_FLOAT},
1602   {"msingle-float", no_argument, NULL, OPTION_SINGLE_FLOAT},
1603   {"mdouble-float", no_argument, NULL, OPTION_DOUBLE_FLOAT},
1604   {"modd-spreg", no_argument, NULL, OPTION_ODD_SPREG},
1605   {"mno-odd-spreg", no_argument, NULL, OPTION_NO_ODD_SPREG},
1606
1607   /* Strictly speaking this next option is ELF specific,
1608      but we allow it for other ports as well in order to
1609      make testing easier.  */
1610   {"32", no_argument, NULL, OPTION_32},
1611
1612   /* ELF-specific options.  */
1613   {"KPIC", no_argument, NULL, OPTION_CALL_SHARED},
1614   {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
1615   {"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC},
1616   {"non_shared",  no_argument, NULL, OPTION_NON_SHARED},
1617   {"xgot", no_argument, NULL, OPTION_XGOT},
1618   {"mabi", required_argument, NULL, OPTION_MABI},
1619   {"n32", no_argument, NULL, OPTION_N32},
1620   {"64", no_argument, NULL, OPTION_64},
1621   {"mdebug", no_argument, NULL, OPTION_MDEBUG},
1622   {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG},
1623   {"mpdr", no_argument, NULL, OPTION_PDR},
1624   {"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
1625   {"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC},
1626   {"mnan", required_argument, NULL, OPTION_NAN},
1627
1628   {NULL, no_argument, NULL, 0}
1629 };
1630 size_t md_longopts_size = sizeof (md_longopts);
1631 \f
1632 /* Information about either an Application Specific Extension or an
1633    optional architecture feature that, for simplicity, we treat in the
1634    same way as an ASE.  */
1635 struct mips_ase
1636 {
1637   /* The name of the ASE, used in both the command-line and .set options.  */
1638   const char *name;
1639
1640   /* The associated ASE_* flags.  If the ASE is available on both 32-bit
1641      and 64-bit architectures, the flags here refer to the subset that
1642      is available on both.  */
1643   unsigned int flags;
1644
1645   /* The ASE_* flag used for instructions that are available on 64-bit
1646      architectures but that are not included in FLAGS.  */
1647   unsigned int flags64;
1648
1649   /* The command-line options that turn the ASE on and off.  */
1650   int option_on;
1651   int option_off;
1652
1653   /* The minimum required architecture revisions for MIPS32, MIPS64,
1654      microMIPS32 and microMIPS64, or -1 if the extension isn't supported.  */
1655   int mips32_rev;
1656   int mips64_rev;
1657   int micromips32_rev;
1658   int micromips64_rev;
1659
1660   /* The architecture where the ASE was removed or -1 if the extension has not
1661      been removed.  */
1662   int rem_rev;
1663 };
1664
1665 /* A table of all supported ASEs.  */
1666 static const struct mips_ase mips_ases[] = {
1667   { "dsp", ASE_DSP, ASE_DSP64,
1668     OPTION_DSP, OPTION_NO_DSP,
1669     2, 2, 2, 2,
1670     -1 },
1671
1672   { "dspr2", ASE_DSP | ASE_DSPR2, 0,
1673     OPTION_DSPR2, OPTION_NO_DSPR2,
1674     2, 2, 2, 2,
1675     -1 },
1676
1677   { "dspr3", ASE_DSP | ASE_DSPR2 | ASE_DSPR3, 0,
1678     OPTION_DSPR3, OPTION_NO_DSPR3,
1679     6, 6, -1, -1,
1680     -1 },
1681
1682   { "eva", ASE_EVA, 0,
1683     OPTION_EVA, OPTION_NO_EVA,
1684      2,  2,  2,  2,
1685     -1 },
1686
1687   { "mcu", ASE_MCU, 0,
1688     OPTION_MCU, OPTION_NO_MCU,
1689      2,  2,  2,  2,
1690     -1 },
1691
1692   /* Deprecated in MIPS64r5, but we don't implement that yet.  */
1693   { "mdmx", ASE_MDMX, 0,
1694     OPTION_MDMX, OPTION_NO_MDMX,
1695     -1, 1, -1, -1,
1696      6 },
1697
1698   /* Requires 64-bit FPRs, so the minimum MIPS32 revision is 2.  */
1699   { "mips3d", ASE_MIPS3D, 0,
1700     OPTION_MIPS3D, OPTION_NO_MIPS3D,
1701     2, 1, -1, -1,
1702     6 },
1703
1704   { "mt", ASE_MT, 0,
1705     OPTION_MT, OPTION_NO_MT,
1706      2,  2, -1, -1,
1707     -1 },
1708
1709   { "smartmips", ASE_SMARTMIPS, 0,
1710     OPTION_SMARTMIPS, OPTION_NO_SMARTMIPS,
1711     1, -1, -1, -1,
1712     6 },
1713
1714   { "virt", ASE_VIRT, ASE_VIRT64,
1715     OPTION_VIRT, OPTION_NO_VIRT,
1716      2,  2,  2,  2,
1717     -1 },
1718
1719   { "msa", ASE_MSA, ASE_MSA64,
1720     OPTION_MSA, OPTION_NO_MSA,
1721      2,  2,  2,  2,
1722     -1 },
1723
1724   { "xpa", ASE_XPA, 0,
1725     OPTION_XPA, OPTION_NO_XPA,
1726      2,  2, -1, -1,
1727     -1 },
1728 };
1729
1730 /* The set of ASEs that require -mfp64.  */
1731 #define FP64_ASES (ASE_MIPS3D | ASE_MDMX | ASE_MSA)
1732
1733 /* Groups of ASE_* flags that represent different revisions of an ASE.  */
1734 static const unsigned int mips_ase_groups[] = {
1735   ASE_DSP | ASE_DSPR2 | ASE_DSPR3
1736 };
1737 \f
1738 /* Pseudo-op table.
1739
1740    The following pseudo-ops from the Kane and Heinrich MIPS book
1741    should be defined here, but are currently unsupported: .alias,
1742    .galive, .gjaldef, .gjrlive, .livereg, .noalias.
1743
1744    The following pseudo-ops from the Kane and Heinrich MIPS book are
1745    specific to the type of debugging information being generated, and
1746    should be defined by the object format: .aent, .begin, .bend,
1747    .bgnb, .end, .endb, .ent, .fmask, .frame, .loc, .mask, .verstamp,
1748    .vreg.
1749
1750    The following pseudo-ops from the Kane and Heinrich MIPS book are
1751    not MIPS CPU specific, but are also not specific to the object file
1752    format.  This file is probably the best place to define them, but
1753    they are not currently supported: .asm0, .endr, .lab, .struct.  */
1754
1755 static const pseudo_typeS mips_pseudo_table[] =
1756 {
1757   /* MIPS specific pseudo-ops.  */
1758   {"option", s_option, 0},
1759   {"set", s_mipsset, 0},
1760   {"rdata", s_change_sec, 'r'},
1761   {"sdata", s_change_sec, 's'},
1762   {"livereg", s_ignore, 0},
1763   {"abicalls", s_abicalls, 0},
1764   {"cpload", s_cpload, 0},
1765   {"cpsetup", s_cpsetup, 0},
1766   {"cplocal", s_cplocal, 0},
1767   {"cprestore", s_cprestore, 0},
1768   {"cpreturn", s_cpreturn, 0},
1769   {"dtprelword", s_dtprelword, 0},
1770   {"dtpreldword", s_dtpreldword, 0},
1771   {"tprelword", s_tprelword, 0},
1772   {"tpreldword", s_tpreldword, 0},
1773   {"gpvalue", s_gpvalue, 0},
1774   {"gpword", s_gpword, 0},
1775   {"gpdword", s_gpdword, 0},
1776   {"ehword", s_ehword, 0},
1777   {"cpadd", s_cpadd, 0},
1778   {"insn", s_insn, 0},
1779   {"nan", s_nan, 0},
1780   {"module", s_module, 0},
1781
1782   /* Relatively generic pseudo-ops that happen to be used on MIPS
1783      chips.  */
1784   {"asciiz", stringer, 8 + 1},
1785   {"bss", s_change_sec, 'b'},
1786   {"err", s_err, 0},
1787   {"half", s_cons, 1},
1788   {"dword", s_cons, 3},
1789   {"weakext", s_mips_weakext, 0},
1790   {"origin", s_org, 0},
1791   {"repeat", s_rept, 0},
1792
1793   /* For MIPS this is non-standard, but we define it for consistency.  */
1794   {"sbss", s_change_sec, 'B'},
1795
1796   /* These pseudo-ops are defined in read.c, but must be overridden
1797      here for one reason or another.  */
1798   {"align", s_align, 0},
1799   {"byte", s_cons, 0},
1800   {"data", s_change_sec, 'd'},
1801   {"double", s_float_cons, 'd'},
1802   {"float", s_float_cons, 'f'},
1803   {"globl", s_mips_globl, 0},
1804   {"global", s_mips_globl, 0},
1805   {"hword", s_cons, 1},
1806   {"int", s_cons, 2},
1807   {"long", s_cons, 2},
1808   {"octa", s_cons, 4},
1809   {"quad", s_cons, 3},
1810   {"section", s_change_section, 0},
1811   {"short", s_cons, 1},
1812   {"single", s_float_cons, 'f'},
1813   {"stabd", s_mips_stab, 'd'},
1814   {"stabn", s_mips_stab, 'n'},
1815   {"stabs", s_mips_stab, 's'},
1816   {"text", s_change_sec, 't'},
1817   {"word", s_cons, 2},
1818
1819   { "extern", ecoff_directive_extern, 0},
1820
1821   { NULL, NULL, 0 },
1822 };
1823
1824 static const pseudo_typeS mips_nonecoff_pseudo_table[] =
1825 {
1826   /* These pseudo-ops should be defined by the object file format.
1827      However, a.out doesn't support them, so we have versions here.  */
1828   {"aent", s_mips_ent, 1},
1829   {"bgnb", s_ignore, 0},
1830   {"end", s_mips_end, 0},
1831   {"endb", s_ignore, 0},
1832   {"ent", s_mips_ent, 0},
1833   {"file", s_mips_file, 0},
1834   {"fmask", s_mips_mask, 'F'},
1835   {"frame", s_mips_frame, 0},
1836   {"loc", s_mips_loc, 0},
1837   {"mask", s_mips_mask, 'R'},
1838   {"verstamp", s_ignore, 0},
1839   { NULL, NULL, 0 },
1840 };
1841
1842 /* Export the ABI address size for use by TC_ADDRESS_BYTES for the
1843    purpose of the `.dc.a' internal pseudo-op.  */
1844
1845 int
1846 mips_address_bytes (void)
1847 {
1848   file_mips_check_options ();
1849   return HAVE_64BIT_ADDRESSES ? 8 : 4;
1850 }
1851
1852 extern void pop_insert (const pseudo_typeS *);
1853
1854 void
1855 mips_pop_insert (void)
1856 {
1857   pop_insert (mips_pseudo_table);
1858   if (! ECOFF_DEBUGGING)
1859     pop_insert (mips_nonecoff_pseudo_table);
1860 }
1861 \f
1862 /* Symbols labelling the current insn.  */
1863
1864 struct insn_label_list
1865 {
1866   struct insn_label_list *next;
1867   symbolS *label;
1868 };
1869
1870 static struct insn_label_list *free_insn_labels;
1871 #define label_list tc_segment_info_data.labels
1872
1873 static void mips_clear_insn_labels (void);
1874 static void mips_mark_labels (void);
1875 static void mips_compressed_mark_labels (void);
1876
1877 static inline void
1878 mips_clear_insn_labels (void)
1879 {
1880   struct insn_label_list **pl;
1881   segment_info_type *si;
1882
1883   if (now_seg)
1884     {
1885       for (pl = &free_insn_labels; *pl != NULL; pl = &(*pl)->next)
1886         ;
1887
1888       si = seg_info (now_seg);
1889       *pl = si->label_list;
1890       si->label_list = NULL;
1891     }
1892 }
1893
1894 /* Mark instruction labels in MIPS16/microMIPS mode.  */
1895
1896 static inline void
1897 mips_mark_labels (void)
1898 {
1899   if (HAVE_CODE_COMPRESSION)
1900     mips_compressed_mark_labels ();
1901 }
1902 \f
1903 static char *expr_end;
1904
1905 /* An expression in a macro instruction.  This is set by mips_ip and
1906    mips16_ip and when populated is always an O_constant.  */
1907
1908 static expressionS imm_expr;
1909
1910 /* The relocatable field in an instruction and the relocs associated
1911    with it.  These variables are used for instructions like LUI and
1912    JAL as well as true offsets.  They are also used for address
1913    operands in macros.  */
1914
1915 static expressionS offset_expr;
1916 static bfd_reloc_code_real_type offset_reloc[3]
1917   = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
1918
1919 /* This is set to the resulting size of the instruction to be produced
1920    by mips16_ip if an explicit extension is used or by mips_ip if an
1921    explicit size is supplied.  */
1922
1923 static unsigned int forced_insn_length;
1924
1925 /* True if we are assembling an instruction.  All dot symbols defined during
1926    this time should be treated as code labels.  */
1927
1928 static bfd_boolean mips_assembling_insn;
1929
1930 /* The pdr segment for per procedure frame/regmask info.  Not used for
1931    ECOFF debugging.  */
1932
1933 static segT pdr_seg;
1934
1935 /* The default target format to use.  */
1936
1937 #if defined (TE_FreeBSD)
1938 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips-freebsd"
1939 #elif defined (TE_TMIPS)
1940 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips"
1941 #else
1942 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX ENDIAN "mips"
1943 #endif
1944
1945 const char *
1946 mips_target_format (void)
1947 {
1948   switch (OUTPUT_FLAVOR)
1949     {
1950     case bfd_target_elf_flavour:
1951 #ifdef TE_VXWORKS
1952       if (!HAVE_64BIT_OBJECTS && !HAVE_NEWABI)
1953         return (target_big_endian
1954                 ? "elf32-bigmips-vxworks"
1955                 : "elf32-littlemips-vxworks");
1956 #endif
1957       return (target_big_endian
1958               ? (HAVE_64BIT_OBJECTS
1959                  ? ELF_TARGET ("elf64-", "big")
1960                  : (HAVE_NEWABI
1961                     ? ELF_TARGET ("elf32-n", "big")
1962                     : ELF_TARGET ("elf32-", "big")))
1963               : (HAVE_64BIT_OBJECTS
1964                  ? ELF_TARGET ("elf64-", "little")
1965                  : (HAVE_NEWABI
1966                     ? ELF_TARGET ("elf32-n", "little")
1967                     : ELF_TARGET ("elf32-", "little"))));
1968     default:
1969       abort ();
1970       return NULL;
1971     }
1972 }
1973
1974 /* Return the ISA revision that is currently in use, or 0 if we are
1975    generating code for MIPS V or below.  */
1976
1977 static int
1978 mips_isa_rev (void)
1979 {
1980   if (mips_opts.isa == ISA_MIPS32R2 || mips_opts.isa == ISA_MIPS64R2)
1981     return 2;
1982
1983   if (mips_opts.isa == ISA_MIPS32R3 || mips_opts.isa == ISA_MIPS64R3)
1984     return 3;
1985
1986   if (mips_opts.isa == ISA_MIPS32R5 || mips_opts.isa == ISA_MIPS64R5)
1987     return 5;
1988
1989   if (mips_opts.isa == ISA_MIPS32R6 || mips_opts.isa == ISA_MIPS64R6)
1990     return 6;
1991
1992   /* microMIPS implies revision 2 or above.  */
1993   if (mips_opts.micromips)
1994     return 2;
1995
1996   if (mips_opts.isa == ISA_MIPS32 || mips_opts.isa == ISA_MIPS64)
1997     return 1;
1998
1999   return 0;
2000 }
2001
2002 /* Return the mask of all ASEs that are revisions of those in FLAGS.  */
2003
2004 static unsigned int
2005 mips_ase_mask (unsigned int flags)
2006 {
2007   unsigned int i;
2008
2009   for (i = 0; i < ARRAY_SIZE (mips_ase_groups); i++)
2010     if (flags & mips_ase_groups[i])
2011       flags |= mips_ase_groups[i];
2012   return flags;
2013 }
2014
2015 /* Check whether the current ISA supports ASE.  Issue a warning if
2016    appropriate.  */
2017
2018 static void
2019 mips_check_isa_supports_ase (const struct mips_ase *ase)
2020 {
2021   const char *base;
2022   int min_rev, size;
2023   static unsigned int warned_isa;
2024   static unsigned int warned_fp32;
2025
2026   if (ISA_HAS_64BIT_REGS (mips_opts.isa))
2027     min_rev = mips_opts.micromips ? ase->micromips64_rev : ase->mips64_rev;
2028   else
2029     min_rev = mips_opts.micromips ? ase->micromips32_rev : ase->mips32_rev;
2030   if ((min_rev < 0 || mips_isa_rev () < min_rev)
2031       && (warned_isa & ase->flags) != ase->flags)
2032     {
2033       warned_isa |= ase->flags;
2034       base = mips_opts.micromips ? "microMIPS" : "MIPS";
2035       size = ISA_HAS_64BIT_REGS (mips_opts.isa) ? 64 : 32;
2036       if (min_rev < 0)
2037         as_warn (_("the %d-bit %s architecture does not support the"
2038                    " `%s' extension"), size, base, ase->name);
2039       else
2040         as_warn (_("the `%s' extension requires %s%d revision %d or greater"),
2041                  ase->name, base, size, min_rev);
2042     }
2043   else if ((ase->rem_rev > 0 && mips_isa_rev () >= ase->rem_rev)
2044            && (warned_isa & ase->flags) != ase->flags)
2045     {
2046       warned_isa |= ase->flags;
2047       base = mips_opts.micromips ? "microMIPS" : "MIPS";
2048       size = ISA_HAS_64BIT_REGS (mips_opts.isa) ? 64 : 32;
2049       as_warn (_("the `%s' extension was removed in %s%d revision %d"),
2050                ase->name, base, size, ase->rem_rev);
2051     }
2052
2053   if ((ase->flags & FP64_ASES)
2054       && mips_opts.fp != 64
2055       && (warned_fp32 & ase->flags) != ase->flags)
2056     {
2057       warned_fp32 |= ase->flags;
2058       as_warn (_("the `%s' extension requires 64-bit FPRs"), ase->name);
2059     }
2060 }
2061
2062 /* Check all enabled ASEs to see whether they are supported by the
2063    chosen architecture.  */
2064
2065 static void
2066 mips_check_isa_supports_ases (void)
2067 {
2068   unsigned int i, mask;
2069
2070   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
2071     {
2072       mask = mips_ase_mask (mips_ases[i].flags);
2073       if ((mips_opts.ase & mask) == mips_ases[i].flags)
2074         mips_check_isa_supports_ase (&mips_ases[i]);
2075     }
2076 }
2077
2078 /* Set the state of ASE to ENABLED_P.  Return the mask of ASE_* flags
2079    that were affected.  */
2080
2081 static unsigned int
2082 mips_set_ase (const struct mips_ase *ase, struct mips_set_options *opts,
2083               bfd_boolean enabled_p)
2084 {
2085   unsigned int mask;
2086
2087   mask = mips_ase_mask (ase->flags);
2088   opts->ase &= ~mask;
2089   if (enabled_p)
2090     opts->ase |= ase->flags;
2091   return mask;
2092 }
2093
2094 /* Return the ASE called NAME, or null if none.  */
2095
2096 static const struct mips_ase *
2097 mips_lookup_ase (const char *name)
2098 {
2099   unsigned int i;
2100
2101   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
2102     if (strcmp (name, mips_ases[i].name) == 0)
2103       return &mips_ases[i];
2104   return NULL;
2105 }
2106
2107 /* Return the length of a microMIPS instruction in bytes.  If bits of
2108    the mask beyond the low 16 are 0, then it is a 16-bit instruction,
2109    otherwise it is a 32-bit instruction.  */
2110
2111 static inline unsigned int
2112 micromips_insn_length (const struct mips_opcode *mo)
2113 {
2114   return mips_opcode_32bit_p (mo) ? 4 : 2;
2115 }
2116
2117 /* Return the length of MIPS16 instruction OPCODE.  */
2118
2119 static inline unsigned int
2120 mips16_opcode_length (unsigned long opcode)
2121 {
2122   return (opcode >> 16) == 0 ? 2 : 4;
2123 }
2124
2125 /* Return the length of instruction INSN.  */
2126
2127 static inline unsigned int
2128 insn_length (const struct mips_cl_insn *insn)
2129 {
2130   if (mips_opts.micromips)
2131     return micromips_insn_length (insn->insn_mo);
2132   else if (mips_opts.mips16)
2133     return mips16_opcode_length (insn->insn_opcode);
2134   else
2135     return 4;
2136 }
2137
2138 /* Initialise INSN from opcode entry MO.  Leave its position unspecified.  */
2139
2140 static void
2141 create_insn (struct mips_cl_insn *insn, const struct mips_opcode *mo)
2142 {
2143   size_t i;
2144
2145   insn->insn_mo = mo;
2146   insn->insn_opcode = mo->match;
2147   insn->frag = NULL;
2148   insn->where = 0;
2149   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
2150     insn->fixp[i] = NULL;
2151   insn->fixed_p = (mips_opts.noreorder > 0);
2152   insn->noreorder_p = (mips_opts.noreorder > 0);
2153   insn->mips16_absolute_jump_p = 0;
2154   insn->complete_p = 0;
2155   insn->cleared_p = 0;
2156 }
2157
2158 /* Get a list of all the operands in INSN.  */
2159
2160 static const struct mips_operand_array *
2161 insn_operands (const struct mips_cl_insn *insn)
2162 {
2163   if (insn->insn_mo >= &mips_opcodes[0]
2164       && insn->insn_mo < &mips_opcodes[NUMOPCODES])
2165     return &mips_operands[insn->insn_mo - &mips_opcodes[0]];
2166
2167   if (insn->insn_mo >= &mips16_opcodes[0]
2168       && insn->insn_mo < &mips16_opcodes[bfd_mips16_num_opcodes])
2169     return &mips16_operands[insn->insn_mo - &mips16_opcodes[0]];
2170
2171   if (insn->insn_mo >= &micromips_opcodes[0]
2172       && insn->insn_mo < &micromips_opcodes[bfd_micromips_num_opcodes])
2173     return &micromips_operands[insn->insn_mo - &micromips_opcodes[0]];
2174
2175   abort ();
2176 }
2177
2178 /* Get a description of operand OPNO of INSN.  */
2179
2180 static const struct mips_operand *
2181 insn_opno (const struct mips_cl_insn *insn, unsigned opno)
2182 {
2183   const struct mips_operand_array *operands;
2184
2185   operands = insn_operands (insn);
2186   if (opno >= MAX_OPERANDS || !operands->operand[opno])
2187     abort ();
2188   return operands->operand[opno];
2189 }
2190
2191 /* Install UVAL as the value of OPERAND in INSN.  */
2192
2193 static inline void
2194 insn_insert_operand (struct mips_cl_insn *insn,
2195                      const struct mips_operand *operand, unsigned int uval)
2196 {
2197   insn->insn_opcode = mips_insert_operand (operand, insn->insn_opcode, uval);
2198 }
2199
2200 /* Extract the value of OPERAND from INSN.  */
2201
2202 static inline unsigned
2203 insn_extract_operand (const struct mips_cl_insn *insn,
2204                       const struct mips_operand *operand)
2205 {
2206   return mips_extract_operand (operand, insn->insn_opcode);
2207 }
2208
2209 /* Record the current MIPS16/microMIPS mode in now_seg.  */
2210
2211 static void
2212 mips_record_compressed_mode (void)
2213 {
2214   segment_info_type *si;
2215
2216   si = seg_info (now_seg);
2217   if (si->tc_segment_info_data.mips16 != mips_opts.mips16)
2218     si->tc_segment_info_data.mips16 = mips_opts.mips16;
2219   if (si->tc_segment_info_data.micromips != mips_opts.micromips)
2220     si->tc_segment_info_data.micromips = mips_opts.micromips;
2221 }
2222
2223 /* Read a standard MIPS instruction from BUF.  */
2224
2225 static unsigned long
2226 read_insn (char *buf)
2227 {
2228   if (target_big_endian)
2229     return bfd_getb32 ((bfd_byte *) buf);
2230   else
2231     return bfd_getl32 ((bfd_byte *) buf);
2232 }
2233
2234 /* Write standard MIPS instruction INSN to BUF.  Return a pointer to
2235    the next byte.  */
2236
2237 static char *
2238 write_insn (char *buf, unsigned int insn)
2239 {
2240   md_number_to_chars (buf, insn, 4);
2241   return buf + 4;
2242 }
2243
2244 /* Read a microMIPS or MIPS16 opcode from BUF, given that it
2245    has length LENGTH.  */
2246
2247 static unsigned long
2248 read_compressed_insn (char *buf, unsigned int length)
2249 {
2250   unsigned long insn;
2251   unsigned int i;
2252
2253   insn = 0;
2254   for (i = 0; i < length; i += 2)
2255     {
2256       insn <<= 16;
2257       if (target_big_endian)
2258         insn |= bfd_getb16 ((char *) buf);
2259       else
2260         insn |= bfd_getl16 ((char *) buf);
2261       buf += 2;
2262     }
2263   return insn;
2264 }
2265
2266 /* Write microMIPS or MIPS16 instruction INSN to BUF, given that the
2267    instruction is LENGTH bytes long.  Return a pointer to the next byte.  */
2268
2269 static char *
2270 write_compressed_insn (char *buf, unsigned int insn, unsigned int length)
2271 {
2272   unsigned int i;
2273
2274   for (i = 0; i < length; i += 2)
2275     md_number_to_chars (buf + i, insn >> ((length - i - 2) * 8), 2);
2276   return buf + length;
2277 }
2278
2279 /* Install INSN at the location specified by its "frag" and "where" fields.  */
2280
2281 static void
2282 install_insn (const struct mips_cl_insn *insn)
2283 {
2284   char *f = insn->frag->fr_literal + insn->where;
2285   if (HAVE_CODE_COMPRESSION)
2286     write_compressed_insn (f, insn->insn_opcode, insn_length (insn));
2287   else
2288     write_insn (f, insn->insn_opcode);
2289   mips_record_compressed_mode ();
2290 }
2291
2292 /* Move INSN to offset WHERE in FRAG.  Adjust the fixups accordingly
2293    and install the opcode in the new location.  */
2294
2295 static void
2296 move_insn (struct mips_cl_insn *insn, fragS *frag, long where)
2297 {
2298   size_t i;
2299
2300   insn->frag = frag;
2301   insn->where = where;
2302   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
2303     if (insn->fixp[i] != NULL)
2304       {
2305         insn->fixp[i]->fx_frag = frag;
2306         insn->fixp[i]->fx_where = where;
2307       }
2308   install_insn (insn);
2309 }
2310
2311 /* Add INSN to the end of the output.  */
2312
2313 static void
2314 add_fixed_insn (struct mips_cl_insn *insn)
2315 {
2316   char *f = frag_more (insn_length (insn));
2317   move_insn (insn, frag_now, f - frag_now->fr_literal);
2318 }
2319
2320 /* Start a variant frag and move INSN to the start of the variant part,
2321    marking it as fixed.  The other arguments are as for frag_var.  */
2322
2323 static void
2324 add_relaxed_insn (struct mips_cl_insn *insn, int max_chars, int var,
2325                   relax_substateT subtype, symbolS *symbol, offsetT offset)
2326 {
2327   frag_grow (max_chars);
2328   move_insn (insn, frag_now, frag_more (0) - frag_now->fr_literal);
2329   insn->fixed_p = 1;
2330   frag_var (rs_machine_dependent, max_chars, var,
2331             subtype, symbol, offset, NULL);
2332 }
2333
2334 /* Insert N copies of INSN into the history buffer, starting at
2335    position FIRST.  Neither FIRST nor N need to be clipped.  */
2336
2337 static void
2338 insert_into_history (unsigned int first, unsigned int n,
2339                      const struct mips_cl_insn *insn)
2340 {
2341   if (mips_relax.sequence != 2)
2342     {
2343       unsigned int i;
2344
2345       for (i = ARRAY_SIZE (history); i-- > first;)
2346         if (i >= first + n)
2347           history[i] = history[i - n];
2348         else
2349           history[i] = *insn;
2350     }
2351 }
2352
2353 /* Clear the error in insn_error.  */
2354
2355 static void
2356 clear_insn_error (void)
2357 {
2358   memset (&insn_error, 0, sizeof (insn_error));
2359 }
2360
2361 /* Possibly record error message MSG for the current instruction.
2362    If the error is about a particular argument, ARGNUM is the 1-based
2363    number of that argument, otherwise it is 0.  FORMAT is the format
2364    of MSG.  Return true if MSG was used, false if the current message
2365    was kept.  */
2366
2367 static bfd_boolean
2368 set_insn_error_format (int argnum, enum mips_insn_error_format format,
2369                        const char *msg)
2370 {
2371   if (argnum == 0)
2372     {
2373       /* Give priority to errors against specific arguments, and to
2374          the first whole-instruction message.  */
2375       if (insn_error.msg)
2376         return FALSE;
2377     }
2378   else
2379     {
2380       /* Keep insn_error if it is against a later argument.  */
2381       if (argnum < insn_error.min_argnum)
2382         return FALSE;
2383
2384       /* If both errors are against the same argument but are different,
2385          give up on reporting a specific error for this argument.
2386          See the comment about mips_insn_error for details.  */
2387       if (argnum == insn_error.min_argnum
2388           && insn_error.msg
2389           && strcmp (insn_error.msg, msg) != 0)
2390         {
2391           insn_error.msg = 0;
2392           insn_error.min_argnum += 1;
2393           return FALSE;
2394         }
2395     }
2396   insn_error.min_argnum = argnum;
2397   insn_error.format = format;
2398   insn_error.msg = msg;
2399   return TRUE;
2400 }
2401
2402 /* Record an instruction error with no % format fields.  ARGNUM and MSG are
2403    as for set_insn_error_format.  */
2404
2405 static void
2406 set_insn_error (int argnum, const char *msg)
2407 {
2408   set_insn_error_format (argnum, ERR_FMT_PLAIN, msg);
2409 }
2410
2411 /* Record an instruction error with one %d field I.  ARGNUM and MSG are
2412    as for set_insn_error_format.  */
2413
2414 static void
2415 set_insn_error_i (int argnum, const char *msg, int i)
2416 {
2417   if (set_insn_error_format (argnum, ERR_FMT_I, msg))
2418     insn_error.u.i = i;
2419 }
2420
2421 /* Record an instruction error with two %s fields S1 and S2.  ARGNUM and MSG
2422    are as for set_insn_error_format.  */
2423
2424 static void
2425 set_insn_error_ss (int argnum, const char *msg, const char *s1, const char *s2)
2426 {
2427   if (set_insn_error_format (argnum, ERR_FMT_SS, msg))
2428     {
2429       insn_error.u.ss[0] = s1;
2430       insn_error.u.ss[1] = s2;
2431     }
2432 }
2433
2434 /* Report the error in insn_error, which is against assembly code STR.  */
2435
2436 static void
2437 report_insn_error (const char *str)
2438 {
2439   const char *msg = concat (insn_error.msg, " `%s'", NULL);
2440
2441   switch (insn_error.format)
2442     {
2443     case ERR_FMT_PLAIN:
2444       as_bad (msg, str);
2445       break;
2446
2447     case ERR_FMT_I:
2448       as_bad (msg, insn_error.u.i, str);
2449       break;
2450
2451     case ERR_FMT_SS:
2452       as_bad (msg, insn_error.u.ss[0], insn_error.u.ss[1], str);
2453       break;
2454     }
2455
2456   free ((char *) msg);
2457 }
2458
2459 /* Initialize vr4120_conflicts.  There is a bit of duplication here:
2460    the idea is to make it obvious at a glance that each errata is
2461    included.  */
2462
2463 static void
2464 init_vr4120_conflicts (void)
2465 {
2466 #define CONFLICT(FIRST, SECOND) \
2467     vr4120_conflicts[FIX_VR4120_##FIRST] |= 1 << FIX_VR4120_##SECOND
2468
2469   /* Errata 21 - [D]DIV[U] after [D]MACC */
2470   CONFLICT (MACC, DIV);
2471   CONFLICT (DMACC, DIV);
2472
2473   /* Errata 23 - Continuous DMULT[U]/DMACC instructions.  */
2474   CONFLICT (DMULT, DMULT);
2475   CONFLICT (DMULT, DMACC);
2476   CONFLICT (DMACC, DMULT);
2477   CONFLICT (DMACC, DMACC);
2478
2479   /* Errata 24 - MT{LO,HI} after [D]MACC */
2480   CONFLICT (MACC, MTHILO);
2481   CONFLICT (DMACC, MTHILO);
2482
2483   /* VR4181A errata MD(1): "If a MULT, MULTU, DMULT or DMULTU
2484      instruction is executed immediately after a MACC or DMACC
2485      instruction, the result of [either instruction] is incorrect."  */
2486   CONFLICT (MACC, MULT);
2487   CONFLICT (MACC, DMULT);
2488   CONFLICT (DMACC, MULT);
2489   CONFLICT (DMACC, DMULT);
2490
2491   /* VR4181A errata MD(4): "If a MACC or DMACC instruction is
2492      executed immediately after a DMULT, DMULTU, DIV, DIVU,
2493      DDIV or DDIVU instruction, the result of the MACC or
2494      DMACC instruction is incorrect.".  */
2495   CONFLICT (DMULT, MACC);
2496   CONFLICT (DMULT, DMACC);
2497   CONFLICT (DIV, MACC);
2498   CONFLICT (DIV, DMACC);
2499
2500 #undef CONFLICT
2501 }
2502
2503 struct regname {
2504   const char *name;
2505   unsigned int num;
2506 };
2507
2508 #define RNUM_MASK       0x00000ff
2509 #define RTYPE_MASK      0x0ffff00
2510 #define RTYPE_NUM       0x0000100
2511 #define RTYPE_FPU       0x0000200
2512 #define RTYPE_FCC       0x0000400
2513 #define RTYPE_VEC       0x0000800
2514 #define RTYPE_GP        0x0001000
2515 #define RTYPE_CP0       0x0002000
2516 #define RTYPE_PC        0x0004000
2517 #define RTYPE_ACC       0x0008000
2518 #define RTYPE_CCC       0x0010000
2519 #define RTYPE_VI        0x0020000
2520 #define RTYPE_VF        0x0040000
2521 #define RTYPE_R5900_I   0x0080000
2522 #define RTYPE_R5900_Q   0x0100000
2523 #define RTYPE_R5900_R   0x0200000
2524 #define RTYPE_R5900_ACC 0x0400000
2525 #define RTYPE_MSA       0x0800000
2526 #define RWARN           0x8000000
2527
2528 #define GENERIC_REGISTER_NUMBERS \
2529     {"$0",      RTYPE_NUM | 0},  \
2530     {"$1",      RTYPE_NUM | 1},  \
2531     {"$2",      RTYPE_NUM | 2},  \
2532     {"$3",      RTYPE_NUM | 3},  \
2533     {"$4",      RTYPE_NUM | 4},  \
2534     {"$5",      RTYPE_NUM | 5},  \
2535     {"$6",      RTYPE_NUM | 6},  \
2536     {"$7",      RTYPE_NUM | 7},  \
2537     {"$8",      RTYPE_NUM | 8},  \
2538     {"$9",      RTYPE_NUM | 9},  \
2539     {"$10",     RTYPE_NUM | 10}, \
2540     {"$11",     RTYPE_NUM | 11}, \
2541     {"$12",     RTYPE_NUM | 12}, \
2542     {"$13",     RTYPE_NUM | 13}, \
2543     {"$14",     RTYPE_NUM | 14}, \
2544     {"$15",     RTYPE_NUM | 15}, \
2545     {"$16",     RTYPE_NUM | 16}, \
2546     {"$17",     RTYPE_NUM | 17}, \
2547     {"$18",     RTYPE_NUM | 18}, \
2548     {"$19",     RTYPE_NUM | 19}, \
2549     {"$20",     RTYPE_NUM | 20}, \
2550     {"$21",     RTYPE_NUM | 21}, \
2551     {"$22",     RTYPE_NUM | 22}, \
2552     {"$23",     RTYPE_NUM | 23}, \
2553     {"$24",     RTYPE_NUM | 24}, \
2554     {"$25",     RTYPE_NUM | 25}, \
2555     {"$26",     RTYPE_NUM | 26}, \
2556     {"$27",     RTYPE_NUM | 27}, \
2557     {"$28",     RTYPE_NUM | 28}, \
2558     {"$29",     RTYPE_NUM | 29}, \
2559     {"$30",     RTYPE_NUM | 30}, \
2560     {"$31",     RTYPE_NUM | 31}
2561
2562 #define FPU_REGISTER_NAMES       \
2563     {"$f0",     RTYPE_FPU | 0},  \
2564     {"$f1",     RTYPE_FPU | 1},  \
2565     {"$f2",     RTYPE_FPU | 2},  \
2566     {"$f3",     RTYPE_FPU | 3},  \
2567     {"$f4",     RTYPE_FPU | 4},  \
2568     {"$f5",     RTYPE_FPU | 5},  \
2569     {"$f6",     RTYPE_FPU | 6},  \
2570     {"$f7",     RTYPE_FPU | 7},  \
2571     {"$f8",     RTYPE_FPU | 8},  \
2572     {"$f9",     RTYPE_FPU | 9},  \
2573     {"$f10",    RTYPE_FPU | 10}, \
2574     {"$f11",    RTYPE_FPU | 11}, \
2575     {"$f12",    RTYPE_FPU | 12}, \
2576     {"$f13",    RTYPE_FPU | 13}, \
2577     {"$f14",    RTYPE_FPU | 14}, \
2578     {"$f15",    RTYPE_FPU | 15}, \
2579     {"$f16",    RTYPE_FPU | 16}, \
2580     {"$f17",    RTYPE_FPU | 17}, \
2581     {"$f18",    RTYPE_FPU | 18}, \
2582     {"$f19",    RTYPE_FPU | 19}, \
2583     {"$f20",    RTYPE_FPU | 20}, \
2584     {"$f21",    RTYPE_FPU | 21}, \
2585     {"$f22",    RTYPE_FPU | 22}, \
2586     {"$f23",    RTYPE_FPU | 23}, \
2587     {"$f24",    RTYPE_FPU | 24}, \
2588     {"$f25",    RTYPE_FPU | 25}, \
2589     {"$f26",    RTYPE_FPU | 26}, \
2590     {"$f27",    RTYPE_FPU | 27}, \
2591     {"$f28",    RTYPE_FPU | 28}, \
2592     {"$f29",    RTYPE_FPU | 29}, \
2593     {"$f30",    RTYPE_FPU | 30}, \
2594     {"$f31",    RTYPE_FPU | 31}
2595
2596 #define FPU_CONDITION_CODE_NAMES \
2597     {"$fcc0",   RTYPE_FCC | 0},  \
2598     {"$fcc1",   RTYPE_FCC | 1},  \
2599     {"$fcc2",   RTYPE_FCC | 2},  \
2600     {"$fcc3",   RTYPE_FCC | 3},  \
2601     {"$fcc4",   RTYPE_FCC | 4},  \
2602     {"$fcc5",   RTYPE_FCC | 5},  \
2603     {"$fcc6",   RTYPE_FCC | 6},  \
2604     {"$fcc7",   RTYPE_FCC | 7}
2605
2606 #define COPROC_CONDITION_CODE_NAMES         \
2607     {"$cc0",    RTYPE_FCC | RTYPE_CCC | 0}, \
2608     {"$cc1",    RTYPE_FCC | RTYPE_CCC | 1}, \
2609     {"$cc2",    RTYPE_FCC | RTYPE_CCC | 2}, \
2610     {"$cc3",    RTYPE_FCC | RTYPE_CCC | 3}, \
2611     {"$cc4",    RTYPE_FCC | RTYPE_CCC | 4}, \
2612     {"$cc5",    RTYPE_FCC | RTYPE_CCC | 5}, \
2613     {"$cc6",    RTYPE_FCC | RTYPE_CCC | 6}, \
2614     {"$cc7",    RTYPE_FCC | RTYPE_CCC | 7}
2615
2616 #define N32N64_SYMBOLIC_REGISTER_NAMES \
2617     {"$a4",     RTYPE_GP | 8},  \
2618     {"$a5",     RTYPE_GP | 9},  \
2619     {"$a6",     RTYPE_GP | 10}, \
2620     {"$a7",     RTYPE_GP | 11}, \
2621     {"$ta0",    RTYPE_GP | 8},  /* alias for $a4 */ \
2622     {"$ta1",    RTYPE_GP | 9},  /* alias for $a5 */ \
2623     {"$ta2",    RTYPE_GP | 10}, /* alias for $a6 */ \
2624     {"$ta3",    RTYPE_GP | 11}, /* alias for $a7 */ \
2625     {"$t0",     RTYPE_GP | 12}, \
2626     {"$t1",     RTYPE_GP | 13}, \
2627     {"$t2",     RTYPE_GP | 14}, \
2628     {"$t3",     RTYPE_GP | 15}
2629
2630 #define O32_SYMBOLIC_REGISTER_NAMES \
2631     {"$t0",     RTYPE_GP | 8},  \
2632     {"$t1",     RTYPE_GP | 9},  \
2633     {"$t2",     RTYPE_GP | 10}, \
2634     {"$t3",     RTYPE_GP | 11}, \
2635     {"$t4",     RTYPE_GP | 12}, \
2636     {"$t5",     RTYPE_GP | 13}, \
2637     {"$t6",     RTYPE_GP | 14}, \
2638     {"$t7",     RTYPE_GP | 15}, \
2639     {"$ta0",    RTYPE_GP | 12}, /* alias for $t4 */ \
2640     {"$ta1",    RTYPE_GP | 13}, /* alias for $t5 */ \
2641     {"$ta2",    RTYPE_GP | 14}, /* alias for $t6 */ \
2642     {"$ta3",    RTYPE_GP | 15}  /* alias for $t7 */
2643
2644 /* Remaining symbolic register names */
2645 #define SYMBOLIC_REGISTER_NAMES \
2646     {"$zero",   RTYPE_GP | 0},  \
2647     {"$at",     RTYPE_GP | 1},  \
2648     {"$AT",     RTYPE_GP | 1},  \
2649     {"$v0",     RTYPE_GP | 2},  \
2650     {"$v1",     RTYPE_GP | 3},  \
2651     {"$a0",     RTYPE_GP | 4},  \
2652     {"$a1",     RTYPE_GP | 5},  \
2653     {"$a2",     RTYPE_GP | 6},  \
2654     {"$a3",     RTYPE_GP | 7},  \
2655     {"$s0",     RTYPE_GP | 16}, \
2656     {"$s1",     RTYPE_GP | 17}, \
2657     {"$s2",     RTYPE_GP | 18}, \
2658     {"$s3",     RTYPE_GP | 19}, \
2659     {"$s4",     RTYPE_GP | 20}, \
2660     {"$s5",     RTYPE_GP | 21}, \
2661     {"$s6",     RTYPE_GP | 22}, \
2662     {"$s7",     RTYPE_GP | 23}, \
2663     {"$t8",     RTYPE_GP | 24}, \
2664     {"$t9",     RTYPE_GP | 25}, \
2665     {"$k0",     RTYPE_GP | 26}, \
2666     {"$kt0",    RTYPE_GP | 26}, \
2667     {"$k1",     RTYPE_GP | 27}, \
2668     {"$kt1",    RTYPE_GP | 27}, \
2669     {"$gp",     RTYPE_GP | 28}, \
2670     {"$sp",     RTYPE_GP | 29}, \
2671     {"$s8",     RTYPE_GP | 30}, \
2672     {"$fp",     RTYPE_GP | 30}, \
2673     {"$ra",     RTYPE_GP | 31}
2674
2675 #define MIPS16_SPECIAL_REGISTER_NAMES \
2676     {"$pc",     RTYPE_PC | 0}
2677
2678 #define MDMX_VECTOR_REGISTER_NAMES \
2679     /* {"$v0",  RTYPE_VEC | 0},  clash with REG 2 above */ \
2680     /* {"$v1",  RTYPE_VEC | 1},  clash with REG 3 above */ \
2681     {"$v2",     RTYPE_VEC | 2},  \
2682     {"$v3",     RTYPE_VEC | 3},  \
2683     {"$v4",     RTYPE_VEC | 4},  \
2684     {"$v5",     RTYPE_VEC | 5},  \
2685     {"$v6",     RTYPE_VEC | 6},  \
2686     {"$v7",     RTYPE_VEC | 7},  \
2687     {"$v8",     RTYPE_VEC | 8},  \
2688     {"$v9",     RTYPE_VEC | 9},  \
2689     {"$v10",    RTYPE_VEC | 10}, \
2690     {"$v11",    RTYPE_VEC | 11}, \
2691     {"$v12",    RTYPE_VEC | 12}, \
2692     {"$v13",    RTYPE_VEC | 13}, \
2693     {"$v14",    RTYPE_VEC | 14}, \
2694     {"$v15",    RTYPE_VEC | 15}, \
2695     {"$v16",    RTYPE_VEC | 16}, \
2696     {"$v17",    RTYPE_VEC | 17}, \
2697     {"$v18",    RTYPE_VEC | 18}, \
2698     {"$v19",    RTYPE_VEC | 19}, \
2699     {"$v20",    RTYPE_VEC | 20}, \
2700     {"$v21",    RTYPE_VEC | 21}, \
2701     {"$v22",    RTYPE_VEC | 22}, \
2702     {"$v23",    RTYPE_VEC | 23}, \
2703     {"$v24",    RTYPE_VEC | 24}, \
2704     {"$v25",    RTYPE_VEC | 25}, \
2705     {"$v26",    RTYPE_VEC | 26}, \
2706     {"$v27",    RTYPE_VEC | 27}, \
2707     {"$v28",    RTYPE_VEC | 28}, \
2708     {"$v29",    RTYPE_VEC | 29}, \
2709     {"$v30",    RTYPE_VEC | 30}, \
2710     {"$v31",    RTYPE_VEC | 31}
2711
2712 #define R5900_I_NAMES \
2713     {"$I",      RTYPE_R5900_I | 0}
2714
2715 #define R5900_Q_NAMES \
2716     {"$Q",      RTYPE_R5900_Q | 0}
2717
2718 #define R5900_R_NAMES \
2719     {"$R",      RTYPE_R5900_R | 0}
2720
2721 #define R5900_ACC_NAMES \
2722     {"$ACC",    RTYPE_R5900_ACC | 0 }
2723
2724 #define MIPS_DSP_ACCUMULATOR_NAMES \
2725     {"$ac0",    RTYPE_ACC | 0}, \
2726     {"$ac1",    RTYPE_ACC | 1}, \
2727     {"$ac2",    RTYPE_ACC | 2}, \
2728     {"$ac3",    RTYPE_ACC | 3}
2729
2730 static const struct regname reg_names[] = {
2731   GENERIC_REGISTER_NUMBERS,
2732   FPU_REGISTER_NAMES,
2733   FPU_CONDITION_CODE_NAMES,
2734   COPROC_CONDITION_CODE_NAMES,
2735
2736   /* The $txx registers depends on the abi,
2737      these will be added later into the symbol table from
2738      one of the tables below once mips_abi is set after
2739      parsing of arguments from the command line. */
2740   SYMBOLIC_REGISTER_NAMES,
2741
2742   MIPS16_SPECIAL_REGISTER_NAMES,
2743   MDMX_VECTOR_REGISTER_NAMES,
2744   R5900_I_NAMES,
2745   R5900_Q_NAMES,
2746   R5900_R_NAMES,
2747   R5900_ACC_NAMES,
2748   MIPS_DSP_ACCUMULATOR_NAMES,
2749   {0, 0}
2750 };
2751
2752 static const struct regname reg_names_o32[] = {
2753   O32_SYMBOLIC_REGISTER_NAMES,
2754   {0, 0}
2755 };
2756
2757 static const struct regname reg_names_n32n64[] = {
2758   N32N64_SYMBOLIC_REGISTER_NAMES,
2759   {0, 0}
2760 };
2761
2762 /* Register symbols $v0 and $v1 map to GPRs 2 and 3, but they can also be
2763    interpreted as vector registers 0 and 1.  If SYMVAL is the value of one
2764    of these register symbols, return the associated vector register,
2765    otherwise return SYMVAL itself.  */
2766
2767 static unsigned int
2768 mips_prefer_vec_regno (unsigned int symval)
2769 {
2770   if ((symval & -2) == (RTYPE_GP | 2))
2771     return RTYPE_VEC | (symval & 1);
2772   return symval;
2773 }
2774
2775 /* Return true if string [S, E) is a valid register name, storing its
2776    symbol value in *SYMVAL_PTR if so.  */
2777
2778 static bfd_boolean
2779 mips_parse_register_1 (char *s, char *e, unsigned int *symval_ptr)
2780 {
2781   char save_c;
2782   symbolS *symbol;
2783
2784   /* Terminate name.  */
2785   save_c = *e;
2786   *e = '\0';
2787
2788   /* Look up the name.  */
2789   symbol = symbol_find (s);
2790   *e = save_c;
2791
2792   if (!symbol || S_GET_SEGMENT (symbol) != reg_section)
2793     return FALSE;
2794
2795   *symval_ptr = S_GET_VALUE (symbol);
2796   return TRUE;
2797 }
2798
2799 /* Return true if the string at *SPTR is a valid register name.  Allow it
2800    to have a VU0-style channel suffix of the form x?y?z?w? if CHANNELS_PTR
2801    is nonnull.
2802
2803    When returning true, move *SPTR past the register, store the
2804    register's symbol value in *SYMVAL_PTR and the channel mask in
2805    *CHANNELS_PTR (if nonnull).  The symbol value includes the register
2806    number (RNUM_MASK) and register type (RTYPE_MASK).  The channel mask
2807    is a 4-bit value of the form XYZW and is 0 if no suffix was given.  */
2808
2809 static bfd_boolean
2810 mips_parse_register (char **sptr, unsigned int *symval_ptr,
2811                      unsigned int *channels_ptr)
2812 {
2813   char *s, *e, *m;
2814   const char *q;
2815   unsigned int channels, symval, bit;
2816
2817   /* Find end of name.  */
2818   s = e = *sptr;
2819   if (is_name_beginner (*e))
2820     ++e;
2821   while (is_part_of_name (*e))
2822     ++e;
2823
2824   channels = 0;
2825   if (!mips_parse_register_1 (s, e, &symval))
2826     {
2827       if (!channels_ptr)
2828         return FALSE;
2829
2830       /* Eat characters from the end of the string that are valid
2831          channel suffixes.  The preceding register must be $ACC or
2832          end with a digit, so there is no ambiguity.  */
2833       bit = 1;
2834       m = e;
2835       for (q = "wzyx"; *q; q++, bit <<= 1)
2836         if (m > s && m[-1] == *q)
2837           {
2838             --m;
2839             channels |= bit;
2840           }
2841
2842       if (channels == 0
2843           || !mips_parse_register_1 (s, m, &symval)
2844           || (symval & (RTYPE_VI | RTYPE_VF | RTYPE_R5900_ACC)) == 0)
2845         return FALSE;
2846     }
2847
2848   *sptr = e;
2849   *symval_ptr = symval;
2850   if (channels_ptr)
2851     *channels_ptr = channels;
2852   return TRUE;
2853 }
2854
2855 /* Check if SPTR points at a valid register specifier according to TYPES.
2856    If so, then return 1, advance S to consume the specifier and store
2857    the register's number in REGNOP, otherwise return 0.  */
2858
2859 static int
2860 reg_lookup (char **s, unsigned int types, unsigned int *regnop)
2861 {
2862   unsigned int regno;
2863
2864   if (mips_parse_register (s, &regno, NULL))
2865     {
2866       if (types & RTYPE_VEC)
2867         regno = mips_prefer_vec_regno (regno);
2868       if (regno & types)
2869         regno &= RNUM_MASK;
2870       else
2871         regno = ~0;
2872     }
2873   else
2874     {
2875       if (types & RWARN)
2876         as_warn (_("unrecognized register name `%s'"), *s);
2877       regno = ~0;
2878     }
2879   if (regnop)
2880     *regnop = regno;
2881   return regno <= RNUM_MASK;
2882 }
2883
2884 /* Parse a VU0 "x?y?z?w?" channel mask at S and store the associated
2885    mask in *CHANNELS.  Return a pointer to the first unconsumed character.  */
2886
2887 static char *
2888 mips_parse_vu0_channels (char *s, unsigned int *channels)
2889 {
2890   unsigned int i;
2891
2892   *channels = 0;
2893   for (i = 0; i < 4; i++)
2894     if (*s == "xyzw"[i])
2895       {
2896         *channels |= 1 << (3 - i);
2897         ++s;
2898       }
2899   return s;
2900 }
2901
2902 /* Token types for parsed operand lists.  */
2903 enum mips_operand_token_type {
2904   /* A plain register, e.g. $f2.  */
2905   OT_REG,
2906
2907   /* A 4-bit XYZW channel mask.  */
2908   OT_CHANNELS,
2909
2910   /* A constant vector index, e.g. [1].  */
2911   OT_INTEGER_INDEX,
2912
2913   /* A register vector index, e.g. [$2].  */
2914   OT_REG_INDEX,
2915
2916   /* A continuous range of registers, e.g. $s0-$s4.  */
2917   OT_REG_RANGE,
2918
2919   /* A (possibly relocated) expression.  */
2920   OT_INTEGER,
2921
2922   /* A floating-point value.  */
2923   OT_FLOAT,
2924
2925   /* A single character.  This can be '(', ')' or ',', but '(' only appears
2926      before OT_REGs.  */
2927   OT_CHAR,
2928
2929   /* A doubled character, either "--" or "++".  */
2930   OT_DOUBLE_CHAR,
2931
2932   /* The end of the operand list.  */
2933   OT_END
2934 };
2935
2936 /* A parsed operand token.  */
2937 struct mips_operand_token
2938 {
2939   /* The type of token.  */
2940   enum mips_operand_token_type type;
2941   union
2942   {
2943     /* The register symbol value for an OT_REG or OT_REG_INDEX.  */
2944     unsigned int regno;
2945
2946     /* The 4-bit channel mask for an OT_CHANNEL_SUFFIX.  */
2947     unsigned int channels;
2948
2949     /* The integer value of an OT_INTEGER_INDEX.  */
2950     addressT index;
2951
2952     /* The two register symbol values involved in an OT_REG_RANGE.  */
2953     struct {
2954       unsigned int regno1;
2955       unsigned int regno2;
2956     } reg_range;
2957
2958     /* The value of an OT_INTEGER.  The value is represented as an
2959        expression and the relocation operators that were applied to
2960        that expression.  The reloc entries are BFD_RELOC_UNUSED if no
2961        relocation operators were used.  */
2962     struct {
2963       expressionS value;
2964       bfd_reloc_code_real_type relocs[3];
2965     } integer;
2966
2967     /* The binary data for an OT_FLOAT constant, and the number of bytes
2968        in the constant.  */
2969     struct {
2970       unsigned char data[8];
2971       int length;
2972     } flt;
2973
2974     /* The character represented by an OT_CHAR or OT_DOUBLE_CHAR.  */
2975     char ch;
2976   } u;
2977 };
2978
2979 /* An obstack used to construct lists of mips_operand_tokens.  */
2980 static struct obstack mips_operand_tokens;
2981
2982 /* Give TOKEN type TYPE and add it to mips_operand_tokens.  */
2983
2984 static void
2985 mips_add_token (struct mips_operand_token *token,
2986                 enum mips_operand_token_type type)
2987 {
2988   token->type = type;
2989   obstack_grow (&mips_operand_tokens, token, sizeof (*token));
2990 }
2991
2992 /* Check whether S is '(' followed by a register name.  Add OT_CHAR
2993    and OT_REG tokens for them if so, and return a pointer to the first
2994    unconsumed character.  Return null otherwise.  */
2995
2996 static char *
2997 mips_parse_base_start (char *s)
2998 {
2999   struct mips_operand_token token;
3000   unsigned int regno, channels;
3001   bfd_boolean decrement_p;
3002
3003   if (*s != '(')
3004     return 0;
3005
3006   ++s;
3007   SKIP_SPACE_TABS (s);
3008
3009   /* Only match "--" as part of a base expression.  In other contexts "--X"
3010      is a double negative.  */
3011   decrement_p = (s[0] == '-' && s[1] == '-');
3012   if (decrement_p)
3013     {
3014       s += 2;
3015       SKIP_SPACE_TABS (s);
3016     }
3017
3018   /* Allow a channel specifier because that leads to better error messages
3019      than treating something like "$vf0x++" as an expression.  */
3020   if (!mips_parse_register (&s, &regno, &channels))
3021     return 0;
3022
3023   token.u.ch = '(';
3024   mips_add_token (&token, OT_CHAR);
3025
3026   if (decrement_p)
3027     {
3028       token.u.ch = '-';
3029       mips_add_token (&token, OT_DOUBLE_CHAR);
3030     }
3031
3032   token.u.regno = regno;
3033   mips_add_token (&token, OT_REG);
3034
3035   if (channels)
3036     {
3037       token.u.channels = channels;
3038       mips_add_token (&token, OT_CHANNELS);
3039     }
3040
3041   /* For consistency, only match "++" as part of base expressions too.  */
3042   SKIP_SPACE_TABS (s);
3043   if (s[0] == '+' && s[1] == '+')
3044     {
3045       s += 2;
3046       token.u.ch = '+';
3047       mips_add_token (&token, OT_DOUBLE_CHAR);
3048     }
3049
3050   return s;
3051 }
3052
3053 /* Parse one or more tokens from S.  Return a pointer to the first
3054    unconsumed character on success.  Return null if an error was found
3055    and store the error text in insn_error.  FLOAT_FORMAT is as for
3056    mips_parse_arguments.  */
3057
3058 static char *
3059 mips_parse_argument_token (char *s, char float_format)
3060 {
3061   char *end, *save_in;
3062   const char *err;
3063   unsigned int regno1, regno2, channels;
3064   struct mips_operand_token token;
3065
3066   /* First look for "($reg", since we want to treat that as an
3067      OT_CHAR and OT_REG rather than an expression.  */
3068   end = mips_parse_base_start (s);
3069   if (end)
3070     return end;
3071
3072   /* Handle other characters that end up as OT_CHARs.  */
3073   if (*s == ')' || *s == ',')
3074     {
3075       token.u.ch = *s;
3076       mips_add_token (&token, OT_CHAR);
3077       ++s;
3078       return s;
3079     }
3080
3081   /* Handle tokens that start with a register.  */
3082   if (mips_parse_register (&s, &regno1, &channels))
3083     {
3084       if (channels)
3085         {
3086           /* A register and a VU0 channel suffix.  */
3087           token.u.regno = regno1;
3088           mips_add_token (&token, OT_REG);
3089
3090           token.u.channels = channels;
3091           mips_add_token (&token, OT_CHANNELS);
3092           return s;
3093         }
3094
3095       SKIP_SPACE_TABS (s);
3096       if (*s == '-')
3097         {
3098           /* A register range.  */
3099           ++s;
3100           SKIP_SPACE_TABS (s);
3101           if (!mips_parse_register (&s, &regno2, NULL))
3102             {
3103               set_insn_error (0, _("invalid register range"));
3104               return 0;
3105             }
3106
3107           token.u.reg_range.regno1 = regno1;
3108           token.u.reg_range.regno2 = regno2;
3109           mips_add_token (&token, OT_REG_RANGE);
3110           return s;
3111         }
3112
3113       /* Add the register itself.  */
3114       token.u.regno = regno1;
3115       mips_add_token (&token, OT_REG);
3116
3117       /* Check for a vector index.  */
3118       if (*s == '[')
3119         {
3120           ++s;
3121           SKIP_SPACE_TABS (s);
3122           if (mips_parse_register (&s, &token.u.regno, NULL))
3123             mips_add_token (&token, OT_REG_INDEX);
3124           else
3125             {
3126               expressionS element;
3127
3128               my_getExpression (&element, s);
3129               if (element.X_op != O_constant)
3130                 {
3131                   set_insn_error (0, _("vector element must be constant"));
3132                   return 0;
3133                 }
3134               s = expr_end;
3135               token.u.index = element.X_add_number;
3136               mips_add_token (&token, OT_INTEGER_INDEX);
3137             }
3138           SKIP_SPACE_TABS (s);
3139           if (*s != ']')
3140             {
3141               set_insn_error (0, _("missing `]'"));
3142               return 0;
3143             }
3144           ++s;
3145         }
3146       return s;
3147     }
3148
3149   if (float_format)
3150     {
3151       /* First try to treat expressions as floats.  */
3152       save_in = input_line_pointer;
3153       input_line_pointer = s;
3154       err = md_atof (float_format, (char *) token.u.flt.data,
3155                      &token.u.flt.length);
3156       end = input_line_pointer;
3157       input_line_pointer = save_in;
3158       if (err && *err)
3159         {
3160           set_insn_error (0, err);
3161           return 0;
3162         }
3163       if (s != end)
3164         {
3165           mips_add_token (&token, OT_FLOAT);
3166           return end;
3167         }
3168     }
3169
3170   /* Treat everything else as an integer expression.  */
3171   token.u.integer.relocs[0] = BFD_RELOC_UNUSED;
3172   token.u.integer.relocs[1] = BFD_RELOC_UNUSED;
3173   token.u.integer.relocs[2] = BFD_RELOC_UNUSED;
3174   my_getSmallExpression (&token.u.integer.value, token.u.integer.relocs, s);
3175   s = expr_end;
3176   mips_add_token (&token, OT_INTEGER);
3177   return s;
3178 }
3179
3180 /* S points to the operand list for an instruction.  FLOAT_FORMAT is 'f'
3181    if expressions should be treated as 32-bit floating-point constants,
3182    'd' if they should be treated as 64-bit floating-point constants,
3183    or 0 if they should be treated as integer expressions (the usual case).
3184
3185    Return a list of tokens on success, otherwise return 0.  The caller
3186    must obstack_free the list after use.  */
3187
3188 static struct mips_operand_token *
3189 mips_parse_arguments (char *s, char float_format)
3190 {
3191   struct mips_operand_token token;
3192
3193   SKIP_SPACE_TABS (s);
3194   while (*s)
3195     {
3196       s = mips_parse_argument_token (s, float_format);
3197       if (!s)
3198         {
3199           obstack_free (&mips_operand_tokens,
3200                         obstack_finish (&mips_operand_tokens));
3201           return 0;
3202         }
3203       SKIP_SPACE_TABS (s);
3204     }
3205   mips_add_token (&token, OT_END);
3206   return (struct mips_operand_token *) obstack_finish (&mips_operand_tokens);
3207 }
3208
3209 /* Return TRUE if opcode MO is valid on the currently selected ISA, ASE
3210    and architecture.  Use is_opcode_valid_16 for MIPS16 opcodes.  */
3211
3212 static bfd_boolean
3213 is_opcode_valid (const struct mips_opcode *mo)
3214 {
3215   int isa = mips_opts.isa;
3216   int ase = mips_opts.ase;
3217   int fp_s, fp_d;
3218   unsigned int i;
3219
3220   if (ISA_HAS_64BIT_REGS (isa))
3221     for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
3222       if ((ase & mips_ases[i].flags) == mips_ases[i].flags)
3223         ase |= mips_ases[i].flags64;
3224
3225   if (!opcode_is_member (mo, isa, ase, mips_opts.arch))
3226     return FALSE;
3227
3228   /* Check whether the instruction or macro requires single-precision or
3229      double-precision floating-point support.  Note that this information is
3230      stored differently in the opcode table for insns and macros.  */
3231   if (mo->pinfo == INSN_MACRO)
3232     {
3233       fp_s = mo->pinfo2 & INSN2_M_FP_S;
3234       fp_d = mo->pinfo2 & INSN2_M_FP_D;
3235     }
3236   else
3237     {
3238       fp_s = mo->pinfo & FP_S;
3239       fp_d = mo->pinfo & FP_D;
3240     }
3241
3242   if (fp_d && (mips_opts.soft_float || mips_opts.single_float))
3243     return FALSE;
3244
3245   if (fp_s && mips_opts.soft_float)
3246     return FALSE;
3247
3248   return TRUE;
3249 }
3250
3251 /* Return TRUE if the MIPS16 opcode MO is valid on the currently
3252    selected ISA and architecture.  */
3253
3254 static bfd_boolean
3255 is_opcode_valid_16 (const struct mips_opcode *mo)
3256 {
3257   return opcode_is_member (mo, mips_opts.isa, 0, mips_opts.arch);
3258 }
3259
3260 /* Return TRUE if the size of the microMIPS opcode MO matches one
3261    explicitly requested.  Always TRUE in the standard MIPS mode.
3262    Use is_size_valid_16 for MIPS16 opcodes.  */
3263
3264 static bfd_boolean
3265 is_size_valid (const struct mips_opcode *mo)
3266 {
3267   if (!mips_opts.micromips)
3268     return TRUE;
3269
3270   if (mips_opts.insn32)
3271     {
3272       if (mo->pinfo != INSN_MACRO && micromips_insn_length (mo) != 4)
3273         return FALSE;
3274       if ((mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0)
3275         return FALSE;
3276     }
3277   if (!forced_insn_length)
3278     return TRUE;
3279   if (mo->pinfo == INSN_MACRO)
3280     return FALSE;
3281   return forced_insn_length == micromips_insn_length (mo);
3282 }
3283
3284 /* Return TRUE if the size of the MIPS16 opcode MO matches one
3285    explicitly requested.  */
3286
3287 static bfd_boolean
3288 is_size_valid_16 (const struct mips_opcode *mo)
3289 {
3290   if (!forced_insn_length)
3291     return TRUE;
3292   if (mo->pinfo == INSN_MACRO)
3293     return FALSE;
3294   if (forced_insn_length == 2 && mips_opcode_32bit_p (mo))
3295     return FALSE;
3296   if (forced_insn_length == 4 && (mo->pinfo2 & INSN2_SHORT_ONLY))
3297     return FALSE;
3298   return TRUE;
3299 }
3300
3301 /* Return TRUE if the microMIPS opcode MO is valid for the delay slot
3302    of the preceding instruction.  Always TRUE in the standard MIPS mode.
3303
3304    We don't accept macros in 16-bit delay slots to avoid a case where
3305    a macro expansion fails because it relies on a preceding 32-bit real
3306    instruction to have matched and does not handle the operands correctly.
3307    The only macros that may expand to 16-bit instructions are JAL that
3308    cannot be placed in a delay slot anyway, and corner cases of BALIGN
3309    and BGT (that likewise cannot be placed in a delay slot) that decay to
3310    a NOP.  In all these cases the macros precede any corresponding real
3311    instruction definitions in the opcode table, so they will match in the
3312    second pass where the size of the delay slot is ignored and therefore
3313    produce correct code.  */
3314
3315 static bfd_boolean
3316 is_delay_slot_valid (const struct mips_opcode *mo)
3317 {
3318   if (!mips_opts.micromips)
3319     return TRUE;
3320
3321   if (mo->pinfo == INSN_MACRO)
3322     return (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) == 0;
3323   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
3324       && micromips_insn_length (mo) != 4)
3325     return FALSE;
3326   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
3327       && micromips_insn_length (mo) != 2)
3328     return FALSE;
3329
3330   return TRUE;
3331 }
3332
3333 /* For consistency checking, verify that all bits of OPCODE are specified
3334    either by the match/mask part of the instruction definition, or by the
3335    operand list.  Also build up a list of operands in OPERANDS.
3336
3337    INSN_BITS says which bits of the instruction are significant.
3338    If OPCODE is a standard or microMIPS instruction, DECODE_OPERAND
3339    provides the mips_operand description of each operand.  DECODE_OPERAND
3340    is null for MIPS16 instructions.  */
3341
3342 static int
3343 validate_mips_insn (const struct mips_opcode *opcode,
3344                     unsigned long insn_bits,
3345                     const struct mips_operand *(*decode_operand) (const char *),
3346                     struct mips_operand_array *operands)
3347 {
3348   const char *s;
3349   unsigned long used_bits, doubled, undefined, opno, mask;
3350   const struct mips_operand *operand;
3351
3352   mask = (opcode->pinfo == INSN_MACRO ? 0 : opcode->mask);
3353   if ((mask & opcode->match) != opcode->match)
3354     {
3355       as_bad (_("internal: bad mips opcode (mask error): %s %s"),
3356               opcode->name, opcode->args);
3357       return 0;
3358     }
3359   used_bits = 0;
3360   opno = 0;
3361   if (opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX)
3362     used_bits = mips_insert_operand (&mips_vu0_channel_mask, used_bits, -1);
3363   for (s = opcode->args; *s; ++s)
3364     switch (*s)
3365       {
3366       case ',':
3367       case '(':
3368       case ')':
3369         break;
3370
3371       case '#':
3372         s++;
3373         break;
3374
3375       default:
3376         if (!decode_operand)
3377           operand = decode_mips16_operand (*s, mips_opcode_32bit_p (opcode));
3378         else
3379           operand = decode_operand (s);
3380         if (!operand && opcode->pinfo != INSN_MACRO)
3381           {
3382             as_bad (_("internal: unknown operand type: %s %s"),
3383                     opcode->name, opcode->args);
3384             return 0;
3385           }
3386         gas_assert (opno < MAX_OPERANDS);
3387         operands->operand[opno] = operand;
3388         if (operand && operand->type != OP_VU0_MATCH_SUFFIX)
3389           {
3390             used_bits = mips_insert_operand (operand, used_bits, -1);
3391             if (operand->type == OP_MDMX_IMM_REG)
3392               /* Bit 5 is the format selector (OB vs QH).  The opcode table
3393                  has separate entries for each format.  */
3394               used_bits &= ~(1 << (operand->lsb + 5));
3395             if (operand->type == OP_ENTRY_EXIT_LIST)
3396               used_bits &= ~(mask & 0x700);
3397           }
3398         /* Skip prefix characters.  */
3399         if (decode_operand && (*s == '+' || *s == 'm' || *s == '-'))
3400           ++s;
3401         opno += 1;
3402         break;
3403       }
3404   doubled = used_bits & mask & insn_bits;
3405   if (doubled)
3406     {
3407       as_bad (_("internal: bad mips opcode (bits 0x%08lx doubly defined):"
3408                 " %s %s"), doubled, opcode->name, opcode->args);
3409       return 0;
3410     }
3411   used_bits |= mask;
3412   undefined = ~used_bits & insn_bits;
3413   if (opcode->pinfo != INSN_MACRO && undefined)
3414     {
3415       as_bad (_("internal: bad mips opcode (bits 0x%08lx undefined): %s %s"),
3416               undefined, opcode->name, opcode->args);
3417       return 0;
3418     }
3419   used_bits &= ~insn_bits;
3420   if (used_bits)
3421     {
3422       as_bad (_("internal: bad mips opcode (bits 0x%08lx defined): %s %s"),
3423               used_bits, opcode->name, opcode->args);
3424       return 0;
3425     }
3426   return 1;
3427 }
3428
3429 /* The MIPS16 version of validate_mips_insn.  */
3430
3431 static int
3432 validate_mips16_insn (const struct mips_opcode *opcode,
3433                       struct mips_operand_array *operands)
3434 {
3435   unsigned long insn_bits = mips_opcode_32bit_p (opcode) ? 0xffffffff : 0xffff;
3436
3437   return validate_mips_insn (opcode, insn_bits, 0, operands);
3438 }
3439
3440 /* The microMIPS version of validate_mips_insn.  */
3441
3442 static int
3443 validate_micromips_insn (const struct mips_opcode *opc,
3444                          struct mips_operand_array *operands)
3445 {
3446   unsigned long insn_bits;
3447   unsigned long major;
3448   unsigned int length;
3449
3450   if (opc->pinfo == INSN_MACRO)
3451     return validate_mips_insn (opc, 0xffffffff, decode_micromips_operand,
3452                                operands);
3453
3454   length = micromips_insn_length (opc);
3455   if (length != 2 && length != 4)
3456     {
3457       as_bad (_("internal error: bad microMIPS opcode (incorrect length: %u): "
3458                 "%s %s"), length, opc->name, opc->args);
3459       return 0;
3460     }
3461   major = opc->match >> (10 + 8 * (length - 2));
3462   if ((length == 2 && (major & 7) != 1 && (major & 6) != 2)
3463       || (length == 4 && (major & 7) != 0 && (major & 4) != 4))
3464     {
3465       as_bad (_("internal error: bad microMIPS opcode "
3466                 "(opcode/length mismatch): %s %s"), opc->name, opc->args);
3467       return 0;
3468     }
3469
3470   /* Shift piecewise to avoid an overflow where unsigned long is 32-bit.  */
3471   insn_bits = 1 << 4 * length;
3472   insn_bits <<= 4 * length;
3473   insn_bits -= 1;
3474   return validate_mips_insn (opc, insn_bits, decode_micromips_operand,
3475                              operands);
3476 }
3477
3478 /* This function is called once, at assembler startup time.  It should set up
3479    all the tables, etc. that the MD part of the assembler will need.  */
3480
3481 void
3482 md_begin (void)
3483 {
3484   const char *retval = NULL;
3485   int i = 0;
3486   int broken = 0;
3487
3488   if (mips_pic != NO_PIC)
3489     {
3490       if (g_switch_seen && g_switch_value != 0)
3491         as_bad (_("-G may not be used in position-independent code"));
3492       g_switch_value = 0;
3493     }
3494   else if (mips_abicalls)
3495     {
3496       if (g_switch_seen && g_switch_value != 0)
3497         as_bad (_("-G may not be used with abicalls"));
3498       g_switch_value = 0;
3499     }
3500
3501   if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_opts.arch))
3502     as_warn (_("could not set architecture and machine"));
3503
3504   op_hash = hash_new ();
3505
3506   mips_operands = XCNEWVEC (struct mips_operand_array, NUMOPCODES);
3507   for (i = 0; i < NUMOPCODES;)
3508     {
3509       const char *name = mips_opcodes[i].name;
3510
3511       retval = hash_insert (op_hash, name, (void *) &mips_opcodes[i]);
3512       if (retval != NULL)
3513         {
3514           fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
3515                    mips_opcodes[i].name, retval);
3516           /* Probably a memory allocation problem?  Give up now.  */
3517           as_fatal (_("broken assembler, no assembly attempted"));
3518         }
3519       do
3520         {
3521           if (!validate_mips_insn (&mips_opcodes[i], 0xffffffff,
3522                                    decode_mips_operand, &mips_operands[i]))
3523             broken = 1;
3524           if (nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3525             {
3526               create_insn (&nop_insn, mips_opcodes + i);
3527               if (mips_fix_loongson2f_nop)
3528                 nop_insn.insn_opcode = LOONGSON2F_NOP_INSN;
3529               nop_insn.fixed_p = 1;
3530             }
3531           ++i;
3532         }
3533       while ((i < NUMOPCODES) && !strcmp (mips_opcodes[i].name, name));
3534     }
3535
3536   mips16_op_hash = hash_new ();
3537   mips16_operands = XCNEWVEC (struct mips_operand_array,
3538                               bfd_mips16_num_opcodes);
3539
3540   i = 0;
3541   while (i < bfd_mips16_num_opcodes)
3542     {
3543       const char *name = mips16_opcodes[i].name;
3544
3545       retval = hash_insert (mips16_op_hash, name, (void *) &mips16_opcodes[i]);
3546       if (retval != NULL)
3547         as_fatal (_("internal: can't hash `%s': %s"),
3548                   mips16_opcodes[i].name, retval);
3549       do
3550         {
3551           if (!validate_mips16_insn (&mips16_opcodes[i], &mips16_operands[i]))
3552             broken = 1;
3553           if (mips16_nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3554             {
3555               create_insn (&mips16_nop_insn, mips16_opcodes + i);
3556               mips16_nop_insn.fixed_p = 1;
3557             }
3558           ++i;
3559         }
3560       while (i < bfd_mips16_num_opcodes
3561              && strcmp (mips16_opcodes[i].name, name) == 0);
3562     }
3563
3564   micromips_op_hash = hash_new ();
3565   micromips_operands = XCNEWVEC (struct mips_operand_array,
3566                                  bfd_micromips_num_opcodes);
3567
3568   i = 0;
3569   while (i < bfd_micromips_num_opcodes)
3570     {
3571       const char *name = micromips_opcodes[i].name;
3572
3573       retval = hash_insert (micromips_op_hash, name,
3574                             (void *) &micromips_opcodes[i]);
3575       if (retval != NULL)
3576         as_fatal (_("internal: can't hash `%s': %s"),
3577                   micromips_opcodes[i].name, retval);
3578       do
3579         {
3580           struct mips_cl_insn *micromips_nop_insn;
3581
3582           if (!validate_micromips_insn (&micromips_opcodes[i],
3583                                         &micromips_operands[i]))
3584             broken = 1;
3585
3586           if (micromips_opcodes[i].pinfo != INSN_MACRO)
3587             {
3588               if (micromips_insn_length (micromips_opcodes + i) == 2)
3589                 micromips_nop_insn = &micromips_nop16_insn;
3590               else if (micromips_insn_length (micromips_opcodes + i) == 4)
3591                 micromips_nop_insn = &micromips_nop32_insn;
3592               else
3593                 continue;
3594
3595               if (micromips_nop_insn->insn_mo == NULL
3596                   && strcmp (name, "nop") == 0)
3597                 {
3598                   create_insn (micromips_nop_insn, micromips_opcodes + i);
3599                   micromips_nop_insn->fixed_p = 1;
3600                 }
3601             }
3602         }
3603       while (++i < bfd_micromips_num_opcodes
3604              && strcmp (micromips_opcodes[i].name, name) == 0);
3605     }
3606
3607   if (broken)
3608     as_fatal (_("broken assembler, no assembly attempted"));
3609
3610   /* We add all the general register names to the symbol table.  This
3611      helps us detect invalid uses of them.  */
3612   for (i = 0; reg_names[i].name; i++)
3613     symbol_table_insert (symbol_new (reg_names[i].name, reg_section,
3614                                      reg_names[i].num, /* & RNUM_MASK, */
3615                                      &zero_address_frag));
3616   if (HAVE_NEWABI)
3617     for (i = 0; reg_names_n32n64[i].name; i++)
3618       symbol_table_insert (symbol_new (reg_names_n32n64[i].name, reg_section,
3619                                        reg_names_n32n64[i].num, /* & RNUM_MASK, */
3620                                        &zero_address_frag));
3621   else
3622     for (i = 0; reg_names_o32[i].name; i++)
3623       symbol_table_insert (symbol_new (reg_names_o32[i].name, reg_section,
3624                                        reg_names_o32[i].num, /* & RNUM_MASK, */
3625                                        &zero_address_frag));
3626
3627   for (i = 0; i < 32; i++)
3628     {
3629       char regname[6];
3630
3631       /* R5900 VU0 floating-point register.  */
3632       sprintf (regname, "$vf%d", i);
3633       symbol_table_insert (symbol_new (regname, reg_section,
3634                                        RTYPE_VF | i, &zero_address_frag));
3635
3636       /* R5900 VU0 integer register.  */
3637       sprintf (regname, "$vi%d", i);
3638       symbol_table_insert (symbol_new (regname, reg_section,
3639                                        RTYPE_VI | i, &zero_address_frag));
3640
3641       /* MSA register.  */
3642       sprintf (regname, "$w%d", i);
3643       symbol_table_insert (symbol_new (regname, reg_section,
3644                                        RTYPE_MSA | i, &zero_address_frag));
3645     }
3646
3647   obstack_init (&mips_operand_tokens);
3648
3649   mips_no_prev_insn ();
3650
3651   mips_gprmask = 0;
3652   mips_cprmask[0] = 0;
3653   mips_cprmask[1] = 0;
3654   mips_cprmask[2] = 0;
3655   mips_cprmask[3] = 0;
3656
3657   /* set the default alignment for the text section (2**2) */
3658   record_alignment (text_section, 2);
3659
3660   bfd_set_gp_size (stdoutput, g_switch_value);
3661
3662   /* On a native system other than VxWorks, sections must be aligned
3663      to 16 byte boundaries.  When configured for an embedded ELF
3664      target, we don't bother.  */
3665   if (strncmp (TARGET_OS, "elf", 3) != 0
3666       && strncmp (TARGET_OS, "vxworks", 7) != 0)
3667     {
3668       (void) bfd_set_section_alignment (stdoutput, text_section, 4);
3669       (void) bfd_set_section_alignment (stdoutput, data_section, 4);
3670       (void) bfd_set_section_alignment (stdoutput, bss_section, 4);
3671     }
3672
3673   /* Create a .reginfo section for register masks and a .mdebug
3674      section for debugging information.  */
3675   {
3676     segT seg;
3677     subsegT subseg;
3678     flagword flags;
3679     segT sec;
3680
3681     seg = now_seg;
3682     subseg = now_subseg;
3683
3684     /* The ABI says this section should be loaded so that the
3685        running program can access it.  However, we don't load it
3686        if we are configured for an embedded target */
3687     flags = SEC_READONLY | SEC_DATA;
3688     if (strncmp (TARGET_OS, "elf", 3) != 0)
3689       flags |= SEC_ALLOC | SEC_LOAD;
3690
3691     if (mips_abi != N64_ABI)
3692       {
3693         sec = subseg_new (".reginfo", (subsegT) 0);
3694
3695         bfd_set_section_flags (stdoutput, sec, flags);
3696         bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
3697
3698         mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
3699       }
3700     else
3701       {
3702         /* The 64-bit ABI uses a .MIPS.options section rather than
3703            .reginfo section.  */
3704         sec = subseg_new (".MIPS.options", (subsegT) 0);
3705         bfd_set_section_flags (stdoutput, sec, flags);
3706         bfd_set_section_alignment (stdoutput, sec, 3);
3707
3708         /* Set up the option header.  */
3709         {
3710           Elf_Internal_Options opthdr;
3711           char *f;
3712
3713           opthdr.kind = ODK_REGINFO;
3714           opthdr.size = (sizeof (Elf_External_Options)
3715                          + sizeof (Elf64_External_RegInfo));
3716           opthdr.section = 0;
3717           opthdr.info = 0;
3718           f = frag_more (sizeof (Elf_External_Options));
3719           bfd_mips_elf_swap_options_out (stdoutput, &opthdr,
3720                                          (Elf_External_Options *) f);
3721
3722           mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
3723         }
3724       }
3725
3726     sec = subseg_new (".MIPS.abiflags", (subsegT) 0);
3727     bfd_set_section_flags (stdoutput, sec,
3728                            SEC_READONLY | SEC_DATA | SEC_ALLOC | SEC_LOAD);
3729     bfd_set_section_alignment (stdoutput, sec, 3);
3730     mips_flags_frag = frag_more (sizeof (Elf_External_ABIFlags_v0));
3731
3732     if (ECOFF_DEBUGGING)
3733       {
3734         sec = subseg_new (".mdebug", (subsegT) 0);
3735         (void) bfd_set_section_flags (stdoutput, sec,
3736                                       SEC_HAS_CONTENTS | SEC_READONLY);
3737         (void) bfd_set_section_alignment (stdoutput, sec, 2);
3738       }
3739     else if (mips_flag_pdr)
3740       {
3741         pdr_seg = subseg_new (".pdr", (subsegT) 0);
3742         (void) bfd_set_section_flags (stdoutput, pdr_seg,
3743                                       SEC_READONLY | SEC_RELOC
3744                                       | SEC_DEBUGGING);
3745         (void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
3746       }
3747
3748     subseg_set (seg, subseg);
3749   }
3750
3751   if (mips_fix_vr4120)
3752     init_vr4120_conflicts ();
3753 }
3754
3755 static inline void
3756 fpabi_incompatible_with (int fpabi, const char *what)
3757 {
3758   as_warn (_(".gnu_attribute %d,%d is incompatible with `%s'"),
3759            Tag_GNU_MIPS_ABI_FP, fpabi, what);
3760 }
3761
3762 static inline void
3763 fpabi_requires (int fpabi, const char *what)
3764 {
3765   as_warn (_(".gnu_attribute %d,%d requires `%s'"),
3766            Tag_GNU_MIPS_ABI_FP, fpabi, what);
3767 }
3768
3769 /* Check -mabi and register sizes against the specified FP ABI.  */
3770 static void
3771 check_fpabi (int fpabi)
3772 {
3773   switch (fpabi)
3774     {
3775     case Val_GNU_MIPS_ABI_FP_DOUBLE:
3776       if (file_mips_opts.soft_float)
3777         fpabi_incompatible_with (fpabi, "softfloat");
3778       else if (file_mips_opts.single_float)
3779         fpabi_incompatible_with (fpabi, "singlefloat");
3780       if (file_mips_opts.gp == 64 && file_mips_opts.fp == 32)
3781         fpabi_incompatible_with (fpabi, "gp=64 fp=32");
3782       else if (file_mips_opts.gp == 32 && file_mips_opts.fp == 64)
3783         fpabi_incompatible_with (fpabi, "gp=32 fp=64");
3784       break;
3785
3786     case Val_GNU_MIPS_ABI_FP_XX:
3787       if (mips_abi != O32_ABI)
3788         fpabi_requires (fpabi, "-mabi=32");
3789       else if (file_mips_opts.soft_float)
3790         fpabi_incompatible_with (fpabi, "softfloat");
3791       else if (file_mips_opts.single_float)
3792         fpabi_incompatible_with (fpabi, "singlefloat");
3793       else if (file_mips_opts.fp != 0)
3794         fpabi_requires (fpabi, "fp=xx");
3795       break;
3796
3797     case Val_GNU_MIPS_ABI_FP_64A:
3798     case Val_GNU_MIPS_ABI_FP_64:
3799       if (mips_abi != O32_ABI)
3800         fpabi_requires (fpabi, "-mabi=32");
3801       else if (file_mips_opts.soft_float)
3802         fpabi_incompatible_with (fpabi, "softfloat");
3803       else if (file_mips_opts.single_float)
3804         fpabi_incompatible_with (fpabi, "singlefloat");
3805       else if (file_mips_opts.fp != 64)
3806         fpabi_requires (fpabi, "fp=64");
3807       else if (fpabi == Val_GNU_MIPS_ABI_FP_64 && !file_mips_opts.oddspreg)
3808         fpabi_incompatible_with (fpabi, "nooddspreg");
3809       else if (fpabi == Val_GNU_MIPS_ABI_FP_64A && file_mips_opts.oddspreg)
3810         fpabi_requires (fpabi, "nooddspreg");
3811       break;
3812
3813     case Val_GNU_MIPS_ABI_FP_SINGLE:
3814       if (file_mips_opts.soft_float)
3815         fpabi_incompatible_with (fpabi, "softfloat");
3816       else if (!file_mips_opts.single_float)
3817         fpabi_requires (fpabi, "singlefloat");
3818       break;
3819
3820     case Val_GNU_MIPS_ABI_FP_SOFT:
3821       if (!file_mips_opts.soft_float)
3822         fpabi_requires (fpabi, "softfloat");
3823       break;
3824
3825     case Val_GNU_MIPS_ABI_FP_OLD_64:
3826       as_warn (_(".gnu_attribute %d,%d is no longer supported"),
3827                Tag_GNU_MIPS_ABI_FP, fpabi);
3828       break;
3829
3830     case Val_GNU_MIPS_ABI_FP_NAN2008:
3831       /* Silently ignore compatibility value.  */
3832       break;
3833
3834     default:
3835       as_warn (_(".gnu_attribute %d,%d is not a recognized"
3836                  " floating-point ABI"), Tag_GNU_MIPS_ABI_FP, fpabi);
3837       break;
3838     }
3839 }
3840
3841 /* Perform consistency checks on the current options.  */
3842
3843 static void
3844 mips_check_options (struct mips_set_options *opts, bfd_boolean abi_checks)
3845 {
3846   /* Check the size of integer registers agrees with the ABI and ISA.  */
3847   if (opts->gp == 64 && !ISA_HAS_64BIT_REGS (opts->isa))
3848     as_bad (_("`gp=64' used with a 32-bit processor"));
3849   else if (abi_checks
3850            && opts->gp == 32 && ABI_NEEDS_64BIT_REGS (mips_abi))
3851     as_bad (_("`gp=32' used with a 64-bit ABI"));
3852   else if (abi_checks
3853            && opts->gp == 64 && ABI_NEEDS_32BIT_REGS (mips_abi))
3854     as_bad (_("`gp=64' used with a 32-bit ABI"));
3855
3856   /* Check the size of the float registers agrees with the ABI and ISA.  */
3857   switch (opts->fp)
3858     {
3859     case 0:
3860       if (!CPU_HAS_LDC1_SDC1 (opts->arch))
3861         as_bad (_("`fp=xx' used with a cpu lacking ldc1/sdc1 instructions"));
3862       else if (opts->single_float == 1)
3863         as_bad (_("`fp=xx' cannot be used with `singlefloat'"));
3864       break;
3865     case 64:
3866       if (!ISA_HAS_64BIT_FPRS (opts->isa))
3867         as_bad (_("`fp=64' used with a 32-bit fpu"));
3868       else if (abi_checks
3869                && ABI_NEEDS_32BIT_REGS (mips_abi)
3870                && !ISA_HAS_MXHC1 (opts->isa))
3871         as_warn (_("`fp=64' used with a 32-bit ABI"));
3872       break;
3873     case 32:
3874       if (abi_checks
3875           && ABI_NEEDS_64BIT_REGS (mips_abi))
3876         as_warn (_("`fp=32' used with a 64-bit ABI"));
3877       if (ISA_IS_R6 (opts->isa) && opts->single_float == 0)
3878         as_bad (_("`fp=32' used with a MIPS R6 cpu"));
3879       break;
3880     default:
3881       as_bad (_("Unknown size of floating point registers"));
3882       break;
3883     }
3884
3885   if (ABI_NEEDS_64BIT_REGS (mips_abi) && !opts->oddspreg)
3886     as_bad (_("`nooddspreg` cannot be used with a 64-bit ABI"));
3887
3888   if (opts->micromips == 1 && opts->mips16 == 1)
3889     as_bad (_("`%s' cannot be used with `%s'"), "mips16", "micromips");
3890   else if (ISA_IS_R6 (opts->isa)
3891            && (opts->micromips == 1
3892                || opts->mips16 == 1))
3893     as_fatal (_("`%s' cannot be used with `%s'"),
3894               opts->micromips ? "micromips" : "mips16",
3895               mips_cpu_info_from_isa (opts->isa)->name);
3896
3897   if (ISA_IS_R6 (opts->isa) && mips_relax_branch)
3898     as_fatal (_("branch relaxation is not supported in `%s'"),
3899               mips_cpu_info_from_isa (opts->isa)->name);
3900 }
3901
3902 /* Perform consistency checks on the module level options exactly once.
3903    This is a deferred check that happens:
3904      at the first .set directive
3905      or, at the first pseudo op that generates code (inc .dc.a)
3906      or, at the first instruction
3907      or, at the end.  */
3908
3909 static void
3910 file_mips_check_options (void)
3911 {
3912   const struct mips_cpu_info *arch_info = 0;
3913
3914   if (file_mips_opts_checked)
3915     return;
3916
3917   /* The following code determines the register size.
3918      Similar code was added to GCC 3.3 (see override_options() in
3919      config/mips/mips.c).  The GAS and GCC code should be kept in sync
3920      as much as possible.  */
3921
3922   if (file_mips_opts.gp < 0)
3923     {
3924       /* Infer the integer register size from the ABI and processor.
3925          Restrict ourselves to 32-bit registers if that's all the
3926          processor has, or if the ABI cannot handle 64-bit registers.  */
3927       file_mips_opts.gp = (ABI_NEEDS_32BIT_REGS (mips_abi)
3928                            || !ISA_HAS_64BIT_REGS (file_mips_opts.isa))
3929                           ? 32 : 64;
3930     }
3931
3932   if (file_mips_opts.fp < 0)
3933     {
3934       /* No user specified float register size.
3935          ??? GAS treats single-float processors as though they had 64-bit
3936          float registers (although it complains when double-precision
3937          instructions are used).  As things stand, saying they have 32-bit
3938          registers would lead to spurious "register must be even" messages.
3939          So here we assume float registers are never smaller than the
3940          integer ones.  */
3941       if (file_mips_opts.gp == 64)
3942         /* 64-bit integer registers implies 64-bit float registers.  */
3943         file_mips_opts.fp = 64;
3944       else if ((file_mips_opts.ase & FP64_ASES)
3945                && ISA_HAS_64BIT_FPRS (file_mips_opts.isa))
3946         /* Handle ASEs that require 64-bit float registers, if possible.  */
3947         file_mips_opts.fp = 64;
3948       else if (ISA_IS_R6 (mips_opts.isa))
3949         /* R6 implies 64-bit float registers.  */
3950         file_mips_opts.fp = 64;
3951       else
3952         /* 32-bit float registers.  */
3953         file_mips_opts.fp = 32;
3954     }
3955
3956   arch_info = mips_cpu_info_from_arch (file_mips_opts.arch);
3957
3958   /* Disable operations on odd-numbered floating-point registers by default
3959      when using the FPXX ABI.  */
3960   if (file_mips_opts.oddspreg < 0)
3961     {
3962       if (file_mips_opts.fp == 0)
3963         file_mips_opts.oddspreg = 0;
3964       else
3965         file_mips_opts.oddspreg = 1;
3966     }
3967
3968   /* End of GCC-shared inference code.  */
3969
3970   /* This flag is set when we have a 64-bit capable CPU but use only
3971      32-bit wide registers.  Note that EABI does not use it.  */
3972   if (ISA_HAS_64BIT_REGS (file_mips_opts.isa)
3973       && ((mips_abi == NO_ABI && file_mips_opts.gp == 32)
3974           || mips_abi == O32_ABI))
3975     mips_32bitmode = 1;
3976
3977   if (file_mips_opts.isa == ISA_MIPS1 && mips_trap)
3978     as_bad (_("trap exception not supported at ISA 1"));
3979
3980   /* If the selected architecture includes support for ASEs, enable
3981      generation of code for them.  */
3982   if (file_mips_opts.mips16 == -1)
3983     file_mips_opts.mips16 = (CPU_HAS_MIPS16 (file_mips_opts.arch)) ? 1 : 0;
3984   if (file_mips_opts.micromips == -1)
3985     file_mips_opts.micromips = (CPU_HAS_MICROMIPS (file_mips_opts.arch))
3986                                 ? 1 : 0;
3987
3988   if (mips_nan2008 == -1)
3989     mips_nan2008 = (ISA_HAS_LEGACY_NAN (file_mips_opts.isa)) ? 0 : 1;
3990   else if (!ISA_HAS_LEGACY_NAN (file_mips_opts.isa) && mips_nan2008 == 0)
3991     as_fatal (_("`%s' does not support legacy NaN"),
3992               mips_cpu_info_from_arch (file_mips_opts.arch)->name);
3993
3994   /* Some ASEs require 64-bit FPRs, so -mfp32 should stop those ASEs from
3995      being selected implicitly.  */
3996   if (file_mips_opts.fp != 64)
3997     file_ase_explicit |= ASE_MIPS3D | ASE_MDMX | ASE_MSA;
3998
3999   /* If the user didn't explicitly select or deselect a particular ASE,
4000      use the default setting for the CPU.  */
4001   file_mips_opts.ase |= (arch_info->ase & ~file_ase_explicit);
4002
4003   /* Set up the current options.  These may change throughout assembly.  */
4004   mips_opts = file_mips_opts;
4005
4006   mips_check_isa_supports_ases ();
4007   mips_check_options (&file_mips_opts, TRUE);
4008   file_mips_opts_checked = TRUE;
4009
4010   if (!bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_opts.arch))
4011     as_warn (_("could not set architecture and machine"));
4012 }
4013
4014 void
4015 md_assemble (char *str)
4016 {
4017   struct mips_cl_insn insn;
4018   bfd_reloc_code_real_type unused_reloc[3]
4019     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
4020
4021   file_mips_check_options ();
4022
4023   imm_expr.X_op = O_absent;
4024   offset_expr.X_op = O_absent;
4025   offset_reloc[0] = BFD_RELOC_UNUSED;
4026   offset_reloc[1] = BFD_RELOC_UNUSED;
4027   offset_reloc[2] = BFD_RELOC_UNUSED;
4028
4029   mips_mark_labels ();
4030   mips_assembling_insn = TRUE;
4031   clear_insn_error ();
4032
4033   if (mips_opts.mips16)
4034     mips16_ip (str, &insn);
4035   else
4036     {
4037       mips_ip (str, &insn);
4038       DBG ((_("returned from mips_ip(%s) insn_opcode = 0x%x\n"),
4039             str, insn.insn_opcode));
4040     }
4041
4042   if (insn_error.msg)
4043     report_insn_error (str);
4044   else if (insn.insn_mo->pinfo == INSN_MACRO)
4045     {
4046       macro_start ();
4047       if (mips_opts.mips16)
4048         mips16_macro (&insn);
4049       else
4050         macro (&insn, str);
4051       macro_end ();
4052     }
4053   else
4054     {
4055       if (offset_expr.X_op != O_absent)
4056         append_insn (&insn, &offset_expr, offset_reloc, FALSE);
4057       else
4058         append_insn (&insn, NULL, unused_reloc, FALSE);
4059     }
4060
4061   mips_assembling_insn = FALSE;
4062 }
4063
4064 /* Convenience functions for abstracting away the differences between
4065    MIPS16 and non-MIPS16 relocations.  */
4066
4067 static inline bfd_boolean
4068 mips16_reloc_p (bfd_reloc_code_real_type reloc)
4069 {
4070   switch (reloc)
4071     {
4072     case BFD_RELOC_MIPS16_JMP:
4073     case BFD_RELOC_MIPS16_GPREL:
4074     case BFD_RELOC_MIPS16_GOT16:
4075     case BFD_RELOC_MIPS16_CALL16:
4076     case BFD_RELOC_MIPS16_HI16_S:
4077     case BFD_RELOC_MIPS16_HI16:
4078     case BFD_RELOC_MIPS16_LO16:
4079     case BFD_RELOC_MIPS16_16_PCREL_S1:
4080       return TRUE;
4081
4082     default:
4083       return FALSE;
4084     }
4085 }
4086
4087 static inline bfd_boolean
4088 micromips_reloc_p (bfd_reloc_code_real_type reloc)
4089 {
4090   switch (reloc)
4091     {
4092     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
4093     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
4094     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
4095     case BFD_RELOC_MICROMIPS_GPREL16:
4096     case BFD_RELOC_MICROMIPS_JMP:
4097     case BFD_RELOC_MICROMIPS_HI16:
4098     case BFD_RELOC_MICROMIPS_HI16_S:
4099     case BFD_RELOC_MICROMIPS_LO16:
4100     case BFD_RELOC_MICROMIPS_LITERAL:
4101     case BFD_RELOC_MICROMIPS_GOT16:
4102     case BFD_RELOC_MICROMIPS_CALL16:
4103     case BFD_RELOC_MICROMIPS_GOT_HI16:
4104     case BFD_RELOC_MICROMIPS_GOT_LO16:
4105     case BFD_RELOC_MICROMIPS_CALL_HI16:
4106     case BFD_RELOC_MICROMIPS_CALL_LO16:
4107     case BFD_RELOC_MICROMIPS_SUB:
4108     case BFD_RELOC_MICROMIPS_GOT_PAGE:
4109     case BFD_RELOC_MICROMIPS_GOT_OFST:
4110     case BFD_RELOC_MICROMIPS_GOT_DISP:
4111     case BFD_RELOC_MICROMIPS_HIGHEST:
4112     case BFD_RELOC_MICROMIPS_HIGHER:
4113     case BFD_RELOC_MICROMIPS_SCN_DISP:
4114     case BFD_RELOC_MICROMIPS_JALR:
4115       return TRUE;
4116
4117     default:
4118       return FALSE;
4119     }
4120 }
4121
4122 static inline bfd_boolean
4123 jmp_reloc_p (bfd_reloc_code_real_type reloc)
4124 {
4125   return reloc == BFD_RELOC_MIPS_JMP || reloc == BFD_RELOC_MICROMIPS_JMP;
4126 }
4127
4128 static inline bfd_boolean
4129 b_reloc_p (bfd_reloc_code_real_type reloc)
4130 {
4131   return (reloc == BFD_RELOC_MIPS_26_PCREL_S2
4132           || reloc == BFD_RELOC_MIPS_21_PCREL_S2
4133           || reloc == BFD_RELOC_16_PCREL_S2
4134           || reloc == BFD_RELOC_MIPS16_16_PCREL_S1
4135           || reloc == BFD_RELOC_MICROMIPS_16_PCREL_S1
4136           || reloc == BFD_RELOC_MICROMIPS_10_PCREL_S1
4137           || reloc == BFD_RELOC_MICROMIPS_7_PCREL_S1);
4138 }
4139
4140 static inline bfd_boolean
4141 got16_reloc_p (bfd_reloc_code_real_type reloc)
4142 {
4143   return (reloc == BFD_RELOC_MIPS_GOT16 || reloc == BFD_RELOC_MIPS16_GOT16
4144           || reloc == BFD_RELOC_MICROMIPS_GOT16);
4145 }
4146
4147 static inline bfd_boolean
4148 hi16_reloc_p (bfd_reloc_code_real_type reloc)
4149 {
4150   return (reloc == BFD_RELOC_HI16_S || reloc == BFD_RELOC_MIPS16_HI16_S
4151           || reloc == BFD_RELOC_MICROMIPS_HI16_S);
4152 }
4153
4154 static inline bfd_boolean
4155 lo16_reloc_p (bfd_reloc_code_real_type reloc)
4156 {
4157   return (reloc == BFD_RELOC_LO16 || reloc == BFD_RELOC_MIPS16_LO16
4158           || reloc == BFD_RELOC_MICROMIPS_LO16);
4159 }
4160
4161 static inline bfd_boolean
4162 jalr_reloc_p (bfd_reloc_code_real_type reloc)
4163 {
4164   return reloc == BFD_RELOC_MIPS_JALR || reloc == BFD_RELOC_MICROMIPS_JALR;
4165 }
4166
4167 static inline bfd_boolean
4168 gprel16_reloc_p (bfd_reloc_code_real_type reloc)
4169 {
4170   return (reloc == BFD_RELOC_GPREL16 || reloc == BFD_RELOC_MIPS16_GPREL
4171           || reloc == BFD_RELOC_MICROMIPS_GPREL16);
4172 }
4173
4174 /* Return true if RELOC is a PC-relative relocation that does not have
4175    full address range.  */
4176
4177 static inline bfd_boolean
4178 limited_pcrel_reloc_p (bfd_reloc_code_real_type reloc)
4179 {
4180   switch (reloc)
4181     {
4182     case BFD_RELOC_16_PCREL_S2:
4183     case BFD_RELOC_MIPS16_16_PCREL_S1:
4184     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
4185     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
4186     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
4187     case BFD_RELOC_MIPS_21_PCREL_S2:
4188     case BFD_RELOC_MIPS_26_PCREL_S2:
4189     case BFD_RELOC_MIPS_18_PCREL_S3:
4190     case BFD_RELOC_MIPS_19_PCREL_S2:
4191       return TRUE;
4192
4193     case BFD_RELOC_32_PCREL:
4194     case BFD_RELOC_HI16_S_PCREL:
4195     case BFD_RELOC_LO16_PCREL:
4196       return HAVE_64BIT_ADDRESSES;
4197
4198     default:
4199       return FALSE;
4200     }
4201 }
4202
4203 /* Return true if the given relocation might need a matching %lo().
4204    This is only "might" because SVR4 R_MIPS_GOT16 relocations only
4205    need a matching %lo() when applied to local symbols.  */
4206
4207 static inline bfd_boolean
4208 reloc_needs_lo_p (bfd_reloc_code_real_type reloc)
4209 {
4210   return (HAVE_IN_PLACE_ADDENDS
4211           && (hi16_reloc_p (reloc)
4212               /* VxWorks R_MIPS_GOT16 relocs never need a matching %lo();
4213                  all GOT16 relocations evaluate to "G".  */
4214               || (got16_reloc_p (reloc) && mips_pic != VXWORKS_PIC)));
4215 }
4216
4217 /* Return the type of %lo() reloc needed by RELOC, given that
4218    reloc_needs_lo_p.  */
4219
4220 static inline bfd_reloc_code_real_type
4221 matching_lo_reloc (bfd_reloc_code_real_type reloc)
4222 {
4223   return (mips16_reloc_p (reloc) ? BFD_RELOC_MIPS16_LO16
4224           : (micromips_reloc_p (reloc) ? BFD_RELOC_MICROMIPS_LO16
4225              : BFD_RELOC_LO16));
4226 }
4227
4228 /* Return true if the given fixup is followed by a matching R_MIPS_LO16
4229    relocation.  */
4230
4231 static inline bfd_boolean
4232 fixup_has_matching_lo_p (fixS *fixp)
4233 {
4234   return (fixp->fx_next != NULL
4235           && fixp->fx_next->fx_r_type == matching_lo_reloc (fixp->fx_r_type)
4236           && fixp->fx_addsy == fixp->fx_next->fx_addsy
4237           && fixp->fx_offset == fixp->fx_next->fx_offset);
4238 }
4239
4240 /* Move all labels in LABELS to the current insertion point.  TEXT_P
4241    says whether the labels refer to text or data.  */
4242
4243 static void
4244 mips_move_labels (struct insn_label_list *labels, bfd_boolean text_p)
4245 {
4246   struct insn_label_list *l;
4247   valueT val;
4248
4249   for (l = labels; l != NULL; l = l->next)
4250     {
4251       gas_assert (S_GET_SEGMENT (l->label) == now_seg);
4252       symbol_set_frag (l->label, frag_now);
4253       val = (valueT) frag_now_fix ();
4254       /* MIPS16/microMIPS text labels are stored as odd.  */
4255       if (text_p && HAVE_CODE_COMPRESSION)
4256         ++val;
4257       S_SET_VALUE (l->label, val);
4258     }
4259 }
4260
4261 /* Move all labels in insn_labels to the current insertion point
4262    and treat them as text labels.  */
4263
4264 static void
4265 mips_move_text_labels (void)
4266 {
4267   mips_move_labels (seg_info (now_seg)->label_list, TRUE);
4268 }
4269
4270 static bfd_boolean
4271 s_is_linkonce (symbolS *sym, segT from_seg)
4272 {
4273   bfd_boolean linkonce = FALSE;
4274   segT symseg = S_GET_SEGMENT (sym);
4275
4276   if (symseg != from_seg && !S_IS_LOCAL (sym))
4277     {
4278       if ((bfd_get_section_flags (stdoutput, symseg) & SEC_LINK_ONCE))
4279         linkonce = TRUE;
4280       /* The GNU toolchain uses an extension for ELF: a section
4281          beginning with the magic string .gnu.linkonce is a
4282          linkonce section.  */
4283       if (strncmp (segment_name (symseg), ".gnu.linkonce",
4284                    sizeof ".gnu.linkonce" - 1) == 0)
4285         linkonce = TRUE;
4286     }
4287   return linkonce;
4288 }
4289
4290 /* Mark MIPS16 or microMIPS instruction label LABEL.  This permits the
4291    linker to handle them specially, such as generating jalx instructions
4292    when needed.  We also make them odd for the duration of the assembly,
4293    in order to generate the right sort of code.  We will make them even
4294    in the adjust_symtab routine, while leaving them marked.  This is
4295    convenient for the debugger and the disassembler.  The linker knows
4296    to make them odd again.  */
4297
4298 static void
4299 mips_compressed_mark_label (symbolS *label)
4300 {
4301   gas_assert (HAVE_CODE_COMPRESSION);
4302
4303   if (mips_opts.mips16)
4304     S_SET_OTHER (label, ELF_ST_SET_MIPS16 (S_GET_OTHER (label)));
4305   else
4306     S_SET_OTHER (label, ELF_ST_SET_MICROMIPS (S_GET_OTHER (label)));
4307   if ((S_GET_VALUE (label) & 1) == 0
4308       /* Don't adjust the address if the label is global or weak, or
4309          in a link-once section, since we'll be emitting symbol reloc
4310          references to it which will be patched up by the linker, and
4311          the final value of the symbol may or may not be MIPS16/microMIPS.  */
4312       && !S_IS_WEAK (label)
4313       && !S_IS_EXTERNAL (label)
4314       && !s_is_linkonce (label, now_seg))
4315     S_SET_VALUE (label, S_GET_VALUE (label) | 1);
4316 }
4317
4318 /* Mark preceding MIPS16 or microMIPS instruction labels.  */
4319
4320 static void
4321 mips_compressed_mark_labels (void)
4322 {
4323   struct insn_label_list *l;
4324
4325   for (l = seg_info (now_seg)->label_list; l != NULL; l = l->next)
4326     mips_compressed_mark_label (l->label);
4327 }
4328
4329 /* End the current frag.  Make it a variant frag and record the
4330    relaxation info.  */
4331
4332 static void
4333 relax_close_frag (void)
4334 {
4335   mips_macro_warning.first_frag = frag_now;
4336   frag_var (rs_machine_dependent, 0, 0,
4337             RELAX_ENCODE (mips_relax.sizes[0], mips_relax.sizes[1]),
4338             mips_relax.symbol, 0, (char *) mips_relax.first_fixup);
4339
4340   memset (&mips_relax.sizes, 0, sizeof (mips_relax.sizes));
4341   mips_relax.first_fixup = 0;
4342 }
4343
4344 /* Start a new relaxation sequence whose expansion depends on SYMBOL.
4345    See the comment above RELAX_ENCODE for more details.  */
4346
4347 static void
4348 relax_start (symbolS *symbol)
4349 {
4350   gas_assert (mips_relax.sequence == 0);
4351   mips_relax.sequence = 1;
4352   mips_relax.symbol = symbol;
4353 }
4354
4355 /* Start generating the second version of a relaxable sequence.
4356    See the comment above RELAX_ENCODE for more details.  */
4357
4358 static void
4359 relax_switch (void)
4360 {
4361   gas_assert (mips_relax.sequence == 1);
4362   mips_relax.sequence = 2;
4363 }
4364
4365 /* End the current relaxable sequence.  */
4366
4367 static void
4368 relax_end (void)
4369 {
4370   gas_assert (mips_relax.sequence == 2);
4371   relax_close_frag ();
4372   mips_relax.sequence = 0;
4373 }
4374
4375 /* Return true if IP is a delayed branch or jump.  */
4376
4377 static inline bfd_boolean
4378 delayed_branch_p (const struct mips_cl_insn *ip)
4379 {
4380   return (ip->insn_mo->pinfo & (INSN_UNCOND_BRANCH_DELAY
4381                                 | INSN_COND_BRANCH_DELAY
4382                                 | INSN_COND_BRANCH_LIKELY)) != 0;
4383 }
4384
4385 /* Return true if IP is a compact branch or jump.  */
4386
4387 static inline bfd_boolean
4388 compact_branch_p (const struct mips_cl_insn *ip)
4389 {
4390   return (ip->insn_mo->pinfo2 & (INSN2_UNCOND_BRANCH
4391                                  | INSN2_COND_BRANCH)) != 0;
4392 }
4393
4394 /* Return true if IP is an unconditional branch or jump.  */
4395
4396 static inline bfd_boolean
4397 uncond_branch_p (const struct mips_cl_insn *ip)
4398 {
4399   return ((ip->insn_mo->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0
4400           || (ip->insn_mo->pinfo2 & INSN2_UNCOND_BRANCH) != 0);
4401 }
4402
4403 /* Return true if IP is a branch-likely instruction.  */
4404
4405 static inline bfd_boolean
4406 branch_likely_p (const struct mips_cl_insn *ip)
4407 {
4408   return (ip->insn_mo->pinfo & INSN_COND_BRANCH_LIKELY) != 0;
4409 }
4410
4411 /* Return the type of nop that should be used to fill the delay slot
4412    of delayed branch IP.  */
4413
4414 static struct mips_cl_insn *
4415 get_delay_slot_nop (const struct mips_cl_insn *ip)
4416 {
4417   if (mips_opts.micromips
4418       && (ip->insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
4419     return &micromips_nop32_insn;
4420   return NOP_INSN;
4421 }
4422
4423 /* Return a mask that has bit N set if OPCODE reads the register(s)
4424    in operand N.  */
4425
4426 static unsigned int
4427 insn_read_mask (const struct mips_opcode *opcode)
4428 {
4429   return (opcode->pinfo & INSN_READ_ALL) >> INSN_READ_SHIFT;
4430 }
4431
4432 /* Return a mask that has bit N set if OPCODE writes to the register(s)
4433    in operand N.  */
4434
4435 static unsigned int
4436 insn_write_mask (const struct mips_opcode *opcode)
4437 {
4438   return (opcode->pinfo & INSN_WRITE_ALL) >> INSN_WRITE_SHIFT;
4439 }
4440
4441 /* Return a mask of the registers specified by operand OPERAND of INSN.
4442    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
4443    is set.  */
4444
4445 static unsigned int
4446 operand_reg_mask (const struct mips_cl_insn *insn,
4447                   const struct mips_operand *operand,
4448                   unsigned int type_mask)
4449 {
4450   unsigned int uval, vsel;
4451
4452   switch (operand->type)
4453     {
4454     case OP_INT:
4455     case OP_MAPPED_INT:
4456     case OP_MSB:
4457     case OP_PCREL:
4458     case OP_PERF_REG:
4459     case OP_ADDIUSP_INT:
4460     case OP_ENTRY_EXIT_LIST:
4461     case OP_REPEAT_DEST_REG:
4462     case OP_REPEAT_PREV_REG:
4463     case OP_PC:
4464     case OP_VU0_SUFFIX:
4465     case OP_VU0_MATCH_SUFFIX:
4466     case OP_IMM_INDEX:
4467       abort ();
4468
4469     case OP_REG:
4470     case OP_OPTIONAL_REG:
4471       {
4472         const struct mips_reg_operand *reg_op;
4473
4474         reg_op = (const struct mips_reg_operand *) operand;
4475         if (!(type_mask & (1 << reg_op->reg_type)))
4476           return 0;
4477         uval = insn_extract_operand (insn, operand);
4478         return 1 << mips_decode_reg_operand (reg_op, uval);
4479       }
4480
4481     case OP_REG_PAIR:
4482       {
4483         const struct mips_reg_pair_operand *pair_op;
4484
4485         pair_op = (const struct mips_reg_pair_operand *) operand;
4486         if (!(type_mask & (1 << pair_op->reg_type)))
4487           return 0;
4488         uval = insn_extract_operand (insn, operand);
4489         return (1 << pair_op->reg1_map[uval]) | (1 << pair_op->reg2_map[uval]);
4490       }
4491
4492     case OP_CLO_CLZ_DEST:
4493       if (!(type_mask & (1 << OP_REG_GP)))
4494         return 0;
4495       uval = insn_extract_operand (insn, operand);
4496       return (1 << (uval & 31)) | (1 << (uval >> 5));
4497
4498     case OP_SAME_RS_RT:
4499       if (!(type_mask & (1 << OP_REG_GP)))
4500         return 0;
4501       uval = insn_extract_operand (insn, operand);
4502       gas_assert ((uval & 31) == (uval >> 5));
4503       return 1 << (uval & 31);
4504
4505     case OP_CHECK_PREV:
4506     case OP_NON_ZERO_REG:
4507       if (!(type_mask & (1 << OP_REG_GP)))
4508         return 0;
4509       uval = insn_extract_operand (insn, operand);
4510       return 1 << (uval & 31);
4511
4512     case OP_LWM_SWM_LIST:
4513       abort ();
4514
4515     case OP_SAVE_RESTORE_LIST:
4516       abort ();
4517
4518     case OP_MDMX_IMM_REG:
4519       if (!(type_mask & (1 << OP_REG_VEC)))
4520         return 0;
4521       uval = insn_extract_operand (insn, operand);
4522       vsel = uval >> 5;
4523       if ((vsel & 0x18) == 0x18)
4524         return 0;
4525       return 1 << (uval & 31);
4526
4527     case OP_REG_INDEX:
4528       if (!(type_mask & (1 << OP_REG_GP)))
4529         return 0;
4530       return 1 << insn_extract_operand (insn, operand);
4531     }
4532   abort ();
4533 }
4534
4535 /* Return a mask of the registers specified by operands OPNO_MASK of INSN,
4536    where bit N of OPNO_MASK is set if operand N should be included.
4537    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
4538    is set.  */
4539
4540 static unsigned int
4541 insn_reg_mask (const struct mips_cl_insn *insn,
4542                unsigned int type_mask, unsigned int opno_mask)
4543 {
4544   unsigned int opno, reg_mask;
4545
4546   opno = 0;
4547   reg_mask = 0;
4548   while (opno_mask != 0)
4549     {
4550       if (opno_mask & 1)
4551         reg_mask |= operand_reg_mask (insn, insn_opno (insn, opno), type_mask);
4552       opno_mask >>= 1;
4553       opno += 1;
4554     }
4555   return reg_mask;
4556 }
4557
4558 /* Return the mask of core registers that IP reads.  */
4559
4560 static unsigned int
4561 gpr_read_mask (const struct mips_cl_insn *ip)
4562 {
4563   unsigned long pinfo, pinfo2;
4564   unsigned int mask;
4565
4566   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_read_mask (ip->insn_mo));
4567   pinfo = ip->insn_mo->pinfo;
4568   pinfo2 = ip->insn_mo->pinfo2;
4569   if (pinfo & INSN_UDI)
4570     {
4571       /* UDI instructions have traditionally been assumed to read RS
4572          and RT.  */
4573       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RT, *ip);
4574       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RS, *ip);
4575     }
4576   if (pinfo & INSN_READ_GPR_24)
4577     mask |= 1 << 24;
4578   if (pinfo2 & INSN2_READ_GPR_16)
4579     mask |= 1 << 16;
4580   if (pinfo2 & INSN2_READ_SP)
4581     mask |= 1 << SP;
4582   if (pinfo2 & INSN2_READ_GPR_31)
4583     mask |= 1 << 31;
4584   /* Don't include register 0.  */
4585   return mask & ~1;
4586 }
4587
4588 /* Return the mask of core registers that IP writes.  */
4589
4590 static unsigned int
4591 gpr_write_mask (const struct mips_cl_insn *ip)
4592 {
4593   unsigned long pinfo, pinfo2;
4594   unsigned int mask;
4595
4596   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_write_mask (ip->insn_mo));
4597   pinfo = ip->insn_mo->pinfo;
4598   pinfo2 = ip->insn_mo->pinfo2;
4599   if (pinfo & INSN_WRITE_GPR_24)
4600     mask |= 1 << 24;
4601   if (pinfo & INSN_WRITE_GPR_31)
4602     mask |= 1 << 31;
4603   if (pinfo & INSN_UDI)
4604     /* UDI instructions have traditionally been assumed to write to RD.  */
4605     mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RD, *ip);
4606   if (pinfo2 & INSN2_WRITE_SP)
4607     mask |= 1 << SP;
4608   /* Don't include register 0.  */
4609   return mask & ~1;
4610 }
4611
4612 /* Return the mask of floating-point registers that IP reads.  */
4613
4614 static unsigned int
4615 fpr_read_mask (const struct mips_cl_insn *ip)
4616 {
4617   unsigned long pinfo;
4618   unsigned int mask;
4619
4620   mask = insn_reg_mask (ip, ((1 << OP_REG_FP) | (1 << OP_REG_VEC)
4621                              | (1 << OP_REG_MSA)),
4622                         insn_read_mask (ip->insn_mo));
4623   pinfo = ip->insn_mo->pinfo;
4624   /* Conservatively treat all operands to an FP_D instruction are doubles.
4625      (This is overly pessimistic for things like cvt.d.s.)  */
4626   if (FPR_SIZE != 64 && (pinfo & FP_D))
4627     mask |= mask << 1;
4628   return mask;
4629 }
4630
4631 /* Return the mask of floating-point registers that IP writes.  */
4632
4633 static unsigned int
4634 fpr_write_mask (const struct mips_cl_insn *ip)
4635 {
4636   unsigned long pinfo;
4637   unsigned int mask;
4638
4639   mask = insn_reg_mask (ip, ((1 << OP_REG_FP) | (1 << OP_REG_VEC)
4640                              | (1 << OP_REG_MSA)),
4641                         insn_write_mask (ip->insn_mo));
4642   pinfo = ip->insn_mo->pinfo;
4643   /* Conservatively treat all operands to an FP_D instruction are doubles.
4644      (This is overly pessimistic for things like cvt.s.d.)  */
4645   if (FPR_SIZE != 64 && (pinfo & FP_D))
4646     mask |= mask << 1;
4647   return mask;
4648 }
4649
4650 /* Operand OPNUM of INSN is an odd-numbered floating-point register.
4651    Check whether that is allowed.  */
4652
4653 static bfd_boolean
4654 mips_oddfpreg_ok (const struct mips_opcode *insn, int opnum)
4655 {
4656   const char *s = insn->name;
4657   bfd_boolean oddspreg = (ISA_HAS_ODD_SINGLE_FPR (mips_opts.isa, mips_opts.arch)
4658                           || FPR_SIZE == 64)
4659                          && mips_opts.oddspreg;
4660
4661   if (insn->pinfo == INSN_MACRO)
4662     /* Let a macro pass, we'll catch it later when it is expanded.  */
4663     return TRUE;
4664
4665   /* Single-precision coprocessor loads and moves are OK for 32-bit registers,
4666      otherwise it depends on oddspreg.  */
4667   if ((insn->pinfo & FP_S)
4668       && (insn->pinfo & (INSN_LOAD_MEMORY | INSN_STORE_MEMORY
4669                          | INSN_LOAD_COPROC | INSN_COPROC_MOVE)))
4670     return FPR_SIZE == 32 || oddspreg;
4671
4672   /* Allow odd registers for single-precision ops and double-precision if the
4673      floating-point registers are 64-bit wide.  */
4674   switch (insn->pinfo & (FP_S | FP_D))
4675     {
4676     case FP_S:
4677     case 0:
4678       return oddspreg;
4679     case FP_D:
4680       return FPR_SIZE == 64;
4681     default:
4682       break;
4683     }
4684
4685   /* Cvt.w.x and cvt.x.w allow an odd register for a 'w' or 's' operand.  */
4686   s = strchr (insn->name, '.');
4687   if (s != NULL && opnum == 2)
4688     s = strchr (s + 1, '.');
4689   if (s != NULL && (s[1] == 'w' || s[1] == 's'))
4690     return oddspreg;
4691
4692   return FPR_SIZE == 64;
4693 }
4694
4695 /* Information about an instruction argument that we're trying to match.  */
4696 struct mips_arg_info
4697 {
4698   /* The instruction so far.  */
4699   struct mips_cl_insn *insn;
4700
4701   /* The first unconsumed operand token.  */
4702   struct mips_operand_token *token;
4703
4704   /* The 1-based operand number, in terms of insn->insn_mo->args.  */
4705   int opnum;
4706
4707   /* The 1-based argument number, for error reporting.  This does not
4708      count elided optional registers, etc..  */
4709   int argnum;
4710
4711   /* The last OP_REG operand seen, or ILLEGAL_REG if none.  */
4712   unsigned int last_regno;
4713
4714   /* If the first operand was an OP_REG, this is the register that it
4715      specified, otherwise it is ILLEGAL_REG.  */
4716   unsigned int dest_regno;
4717
4718   /* The value of the last OP_INT operand.  Only used for OP_MSB,
4719      where it gives the lsb position.  */
4720   unsigned int last_op_int;
4721
4722   /* If true, match routines should assume that no later instruction
4723      alternative matches and should therefore be as accommodating as
4724      possible.  Match routines should not report errors if something
4725      is only invalid for !LAX_MATCH.  */
4726   bfd_boolean lax_match;
4727
4728   /* True if a reference to the current AT register was seen.  */
4729   bfd_boolean seen_at;
4730 };
4731
4732 /* Record that the argument is out of range.  */
4733
4734 static void
4735 match_out_of_range (struct mips_arg_info *arg)
4736 {
4737   set_insn_error_i (arg->argnum, _("operand %d out of range"), arg->argnum);
4738 }
4739
4740 /* Record that the argument isn't constant but needs to be.  */
4741
4742 static void
4743 match_not_constant (struct mips_arg_info *arg)
4744 {
4745   set_insn_error_i (arg->argnum, _("operand %d must be constant"),
4746                     arg->argnum);
4747 }
4748
4749 /* Try to match an OT_CHAR token for character CH.  Consume the token
4750    and return true on success, otherwise return false.  */
4751
4752 static bfd_boolean
4753 match_char (struct mips_arg_info *arg, char ch)
4754 {
4755   if (arg->token->type == OT_CHAR && arg->token->u.ch == ch)
4756     {
4757       ++arg->token;
4758       if (ch == ',')
4759         arg->argnum += 1;
4760       return TRUE;
4761     }
4762   return FALSE;
4763 }
4764
4765 /* Try to get an expression from the next tokens in ARG.  Consume the
4766    tokens and return true on success, storing the expression value in
4767    VALUE and relocation types in R.  */
4768
4769 static bfd_boolean
4770 match_expression (struct mips_arg_info *arg, expressionS *value,
4771                   bfd_reloc_code_real_type *r)
4772 {
4773   /* If the next token is a '(' that was parsed as being part of a base
4774      expression, assume we have an elided offset.  The later match will fail
4775      if this turns out to be wrong.  */
4776   if (arg->token->type == OT_CHAR && arg->token->u.ch == '(')
4777     {
4778       value->X_op = O_constant;
4779       value->X_add_number = 0;
4780       r[0] = r[1] = r[2] = BFD_RELOC_UNUSED;
4781       return TRUE;
4782     }
4783
4784   /* Reject register-based expressions such as "0+$2" and "(($2))".
4785      For plain registers the default error seems more appropriate.  */
4786   if (arg->token->type == OT_INTEGER
4787       && arg->token->u.integer.value.X_op == O_register)
4788     {
4789       set_insn_error (arg->argnum, _("register value used as expression"));
4790       return FALSE;
4791     }
4792
4793   if (arg->token->type == OT_INTEGER)
4794     {
4795       *value = arg->token->u.integer.value;
4796       memcpy (r, arg->token->u.integer.relocs, 3 * sizeof (*r));
4797       ++arg->token;
4798       return TRUE;
4799     }
4800
4801   set_insn_error_i
4802     (arg->argnum, _("operand %d must be an immediate expression"),
4803      arg->argnum);
4804   return FALSE;
4805 }
4806
4807 /* Try to get a constant expression from the next tokens in ARG.  Consume
4808    the tokens and return return true on success, storing the constant value
4809    in *VALUE.  Use FALLBACK as the value if the match succeeded with an
4810    error.  */
4811
4812 static bfd_boolean
4813 match_const_int (struct mips_arg_info *arg, offsetT *value)
4814 {
4815   expressionS ex;
4816   bfd_reloc_code_real_type r[3];
4817
4818   if (!match_expression (arg, &ex, r))
4819     return FALSE;
4820
4821   if (r[0] == BFD_RELOC_UNUSED && ex.X_op == O_constant)
4822     *value = ex.X_add_number;
4823   else
4824     {
4825       match_not_constant (arg);
4826       return FALSE;
4827     }
4828   return TRUE;
4829 }
4830
4831 /* Return the RTYPE_* flags for a register operand of type TYPE that
4832    appears in instruction OPCODE.  */
4833
4834 static unsigned int
4835 convert_reg_type (const struct mips_opcode *opcode,
4836                   enum mips_reg_operand_type type)
4837 {
4838   switch (type)
4839     {
4840     case OP_REG_GP:
4841       return RTYPE_NUM | RTYPE_GP;
4842
4843     case OP_REG_FP:
4844       /* Allow vector register names for MDMX if the instruction is a 64-bit
4845          FPR load, store or move (including moves to and from GPRs).  */
4846       if ((mips_opts.ase & ASE_MDMX)
4847           && (opcode->pinfo & FP_D)
4848           && (opcode->pinfo & (INSN_COPROC_MOVE
4849                                | INSN_COPROC_MEMORY_DELAY
4850                                | INSN_LOAD_COPROC
4851                                | INSN_LOAD_MEMORY
4852                                | INSN_STORE_MEMORY)))
4853         return RTYPE_FPU | RTYPE_VEC;
4854       return RTYPE_FPU;
4855
4856     case OP_REG_CCC:
4857       if (opcode->pinfo & (FP_D | FP_S))
4858         return RTYPE_CCC | RTYPE_FCC;
4859       return RTYPE_CCC;
4860
4861     case OP_REG_VEC:
4862       if (opcode->membership & INSN_5400)
4863         return RTYPE_FPU;
4864       return RTYPE_FPU | RTYPE_VEC;
4865
4866     case OP_REG_ACC:
4867       return RTYPE_ACC;
4868
4869     case OP_REG_COPRO:
4870       if (opcode->name[strlen (opcode->name) - 1] == '0')
4871         return RTYPE_NUM | RTYPE_CP0;
4872       return RTYPE_NUM;
4873
4874     case OP_REG_HW:
4875       return RTYPE_NUM;
4876
4877     case OP_REG_VI:
4878       return RTYPE_NUM | RTYPE_VI;
4879
4880     case OP_REG_VF:
4881       return RTYPE_NUM | RTYPE_VF;
4882
4883     case OP_REG_R5900_I:
4884       return RTYPE_R5900_I;
4885
4886     case OP_REG_R5900_Q:
4887       return RTYPE_R5900_Q;
4888
4889     case OP_REG_R5900_R:
4890       return RTYPE_R5900_R;
4891
4892     case OP_REG_R5900_ACC:
4893       return RTYPE_R5900_ACC;
4894
4895     case OP_REG_MSA:
4896       return RTYPE_MSA;
4897
4898     case OP_REG_MSA_CTRL:
4899       return RTYPE_NUM;
4900     }
4901   abort ();
4902 }
4903
4904 /* ARG is register REGNO, of type TYPE.  Warn about any dubious registers.  */
4905
4906 static void
4907 check_regno (struct mips_arg_info *arg,
4908              enum mips_reg_operand_type type, unsigned int regno)
4909 {
4910   if (AT && type == OP_REG_GP && regno == AT)
4911     arg->seen_at = TRUE;
4912
4913   if (type == OP_REG_FP
4914       && (regno & 1) != 0
4915       && !mips_oddfpreg_ok (arg->insn->insn_mo, arg->opnum))
4916     {
4917       /* This was a warning prior to introducing O32 FPXX and FP64 support
4918          so maintain a warning for FP32 but raise an error for the new
4919          cases.  */
4920       if (FPR_SIZE == 32)
4921         as_warn (_("float register should be even, was %d"), regno);
4922       else
4923         as_bad (_("float register should be even, was %d"), regno);
4924     }
4925
4926   if (type == OP_REG_CCC)
4927     {
4928       const char *name;
4929       size_t length;
4930
4931       name = arg->insn->insn_mo->name;
4932       length = strlen (name);
4933       if ((regno & 1) != 0
4934           && ((length >= 3 && strcmp (name + length - 3, ".ps") == 0)
4935               || (length >= 5 && strncmp (name + length - 5, "any2", 4) == 0)))
4936         as_warn (_("condition code register should be even for %s, was %d"),
4937                  name, regno);
4938
4939       if ((regno & 3) != 0
4940           && (length >= 5 && strncmp (name + length - 5, "any4", 4) == 0))
4941         as_warn (_("condition code register should be 0 or 4 for %s, was %d"),
4942                  name, regno);
4943     }
4944 }
4945
4946 /* ARG is a register with symbol value SYMVAL.  Try to interpret it as
4947    a register of type TYPE.  Return true on success, storing the register
4948    number in *REGNO and warning about any dubious uses.  */
4949
4950 static bfd_boolean
4951 match_regno (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4952              unsigned int symval, unsigned int *regno)
4953 {
4954   if (type == OP_REG_VEC)
4955     symval = mips_prefer_vec_regno (symval);
4956   if (!(symval & convert_reg_type (arg->insn->insn_mo, type)))
4957     return FALSE;
4958
4959   *regno = symval & RNUM_MASK;
4960   check_regno (arg, type, *regno);
4961   return TRUE;
4962 }
4963
4964 /* Try to interpret the next token in ARG as a register of type TYPE.
4965    Consume the token and return true on success, storing the register
4966    number in *REGNO.  Return false on failure.  */
4967
4968 static bfd_boolean
4969 match_reg (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4970            unsigned int *regno)
4971 {
4972   if (arg->token->type == OT_REG
4973       && match_regno (arg, type, arg->token->u.regno, regno))
4974     {
4975       ++arg->token;
4976       return TRUE;
4977     }
4978   return FALSE;
4979 }
4980
4981 /* Try to interpret the next token in ARG as a range of registers of type TYPE.
4982    Consume the token and return true on success, storing the register numbers
4983    in *REGNO1 and *REGNO2.  Return false on failure.  */
4984
4985 static bfd_boolean
4986 match_reg_range (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4987                  unsigned int *regno1, unsigned int *regno2)
4988 {
4989   if (match_reg (arg, type, regno1))
4990     {
4991       *regno2 = *regno1;
4992       return TRUE;
4993     }
4994   if (arg->token->type == OT_REG_RANGE
4995       && match_regno (arg, type, arg->token->u.reg_range.regno1, regno1)
4996       && match_regno (arg, type, arg->token->u.reg_range.regno2, regno2)
4997       && *regno1 <= *regno2)
4998     {
4999       ++arg->token;
5000       return TRUE;
5001     }
5002   return FALSE;
5003 }
5004
5005 /* OP_INT matcher.  */
5006
5007 static bfd_boolean
5008 match_int_operand (struct mips_arg_info *arg,
5009                    const struct mips_operand *operand_base)
5010 {
5011   const struct mips_int_operand *operand;
5012   unsigned int uval;
5013   int min_val, max_val, factor;
5014   offsetT sval;
5015
5016   operand = (const struct mips_int_operand *) operand_base;
5017   factor = 1 << operand->shift;
5018   min_val = mips_int_operand_min (operand);
5019   max_val = mips_int_operand_max (operand);
5020
5021   if (operand_base->lsb == 0
5022       && operand_base->size == 16
5023       && operand->shift == 0
5024       && operand->bias == 0
5025       && (operand->max_val == 32767 || operand->max_val == 65535))
5026     {
5027       /* The operand can be relocated.  */
5028       if (!match_expression (arg, &offset_expr, offset_reloc))
5029         return FALSE;
5030
5031       if (offset_reloc[0] != BFD_RELOC_UNUSED)
5032         /* Relocation operators were used.  Accept the arguent and
5033            leave the relocation value in offset_expr and offset_relocs
5034            for the caller to process.  */
5035         return TRUE;
5036
5037       if (offset_expr.X_op != O_constant)
5038         {
5039           /* Accept non-constant operands if no later alternative matches,
5040              leaving it for the caller to process.  */
5041           if (!arg->lax_match)
5042             return FALSE;
5043           offset_reloc[0] = BFD_RELOC_LO16;
5044           return TRUE;
5045         }
5046
5047       /* Clear the global state; we're going to install the operand
5048          ourselves.  */
5049       sval = offset_expr.X_add_number;
5050       offset_expr.X_op = O_absent;
5051
5052       /* For compatibility with older assemblers, we accept
5053          0x8000-0xffff as signed 16-bit numbers when only
5054          signed numbers are allowed.  */
5055       if (sval > max_val)
5056         {
5057           max_val = ((1 << operand_base->size) - 1) << operand->shift;
5058           if (!arg->lax_match && sval <= max_val)
5059             return FALSE;
5060         }
5061     }
5062   else
5063     {
5064       if (!match_const_int (arg, &sval))
5065         return FALSE;
5066     }
5067
5068   arg->last_op_int = sval;
5069
5070   if (sval < min_val || sval > max_val || sval % factor)
5071     {
5072       match_out_of_range (arg);
5073       return FALSE;
5074     }
5075
5076   uval = (unsigned int) sval >> operand->shift;
5077   uval -= operand->bias;
5078
5079   /* Handle -mfix-cn63xxp1.  */
5080   if (arg->opnum == 1
5081       && mips_fix_cn63xxp1
5082       && !mips_opts.micromips
5083       && strcmp ("pref", arg->insn->insn_mo->name) == 0)
5084     switch (uval)
5085       {
5086       case 5:
5087       case 25:
5088       case 26:
5089       case 27:
5090       case 28:
5091       case 29:
5092       case 30:
5093       case 31:
5094         /* These are ok.  */
5095         break;
5096
5097       default:
5098         /* The rest must be changed to 28.  */
5099         uval = 28;
5100         break;
5101       }
5102
5103   insn_insert_operand (arg->insn, operand_base, uval);
5104   return TRUE;
5105 }
5106
5107 /* OP_MAPPED_INT matcher.  */
5108
5109 static bfd_boolean
5110 match_mapped_int_operand (struct mips_arg_info *arg,
5111                           const struct mips_operand *operand_base)
5112 {
5113   const struct mips_mapped_int_operand *operand;
5114   unsigned int uval, num_vals;
5115   offsetT sval;
5116
5117   operand = (const struct mips_mapped_int_operand *) operand_base;
5118   if (!match_const_int (arg, &sval))
5119     return FALSE;
5120
5121   num_vals = 1 << operand_base->size;
5122   for (uval = 0; uval < num_vals; uval++)
5123     if (operand->int_map[uval] == sval)
5124       break;
5125   if (uval == num_vals)
5126     {
5127       match_out_of_range (arg);
5128       return FALSE;
5129     }
5130
5131   insn_insert_operand (arg->insn, operand_base, uval);
5132   return TRUE;
5133 }
5134
5135 /* OP_MSB matcher.  */
5136
5137 static bfd_boolean
5138 match_msb_operand (struct mips_arg_info *arg,
5139                    const struct mips_operand *operand_base)
5140 {
5141   const struct mips_msb_operand *operand;
5142   int min_val, max_val, max_high;
5143   offsetT size, sval, high;
5144
5145   operand = (const struct mips_msb_operand *) operand_base;
5146   min_val = operand->bias;
5147   max_val = min_val + (1 << operand_base->size) - 1;
5148   max_high = operand->opsize;
5149
5150   if (!match_const_int (arg, &size))
5151     return FALSE;
5152
5153   high = size + arg->last_op_int;
5154   sval = operand->add_lsb ? high : size;
5155
5156   if (size < 0 || high > max_high || sval < min_val || sval > max_val)
5157     {
5158       match_out_of_range (arg);
5159       return FALSE;
5160     }
5161   insn_insert_operand (arg->insn, operand_base, sval - min_val);
5162   return TRUE;
5163 }
5164
5165 /* OP_REG matcher.  */
5166
5167 static bfd_boolean
5168 match_reg_operand (struct mips_arg_info *arg,
5169                    const struct mips_operand *operand_base)
5170 {
5171   const struct mips_reg_operand *operand;
5172   unsigned int regno, uval, num_vals;
5173
5174   operand = (const struct mips_reg_operand *) operand_base;
5175   if (!match_reg (arg, operand->reg_type, &regno))
5176     return FALSE;
5177
5178   if (operand->reg_map)
5179     {
5180       num_vals = 1 << operand->root.size;
5181       for (uval = 0; uval < num_vals; uval++)
5182         if (operand->reg_map[uval] == regno)
5183           break;
5184       if (num_vals == uval)
5185         return FALSE;
5186     }
5187   else
5188     uval = regno;
5189
5190   arg->last_regno = regno;
5191   if (arg->opnum == 1)
5192     arg->dest_regno = regno;
5193   insn_insert_operand (arg->insn, operand_base, uval);
5194   return TRUE;
5195 }
5196
5197 /* OP_REG_PAIR matcher.  */
5198
5199 static bfd_boolean
5200 match_reg_pair_operand (struct mips_arg_info *arg,
5201                         const struct mips_operand *operand_base)
5202 {
5203   const struct mips_reg_pair_operand *operand;
5204   unsigned int regno1, regno2, uval, num_vals;
5205
5206   operand = (const struct mips_reg_pair_operand *) operand_base;
5207   if (!match_reg (arg, operand->reg_type, &regno1)
5208       || !match_char (arg, ',')
5209       || !match_reg (arg, operand->reg_type, &regno2))
5210     return FALSE;
5211
5212   num_vals = 1 << operand_base->size;
5213   for (uval = 0; uval < num_vals; uval++)
5214     if (operand->reg1_map[uval] == regno1 && operand->reg2_map[uval] == regno2)
5215       break;
5216   if (uval == num_vals)
5217     return FALSE;
5218
5219   insn_insert_operand (arg->insn, operand_base, uval);
5220   return TRUE;
5221 }
5222
5223 /* OP_PCREL matcher.  The caller chooses the relocation type.  */
5224
5225 static bfd_boolean
5226 match_pcrel_operand (struct mips_arg_info *arg)
5227 {
5228   bfd_reloc_code_real_type r[3];
5229
5230   return match_expression (arg, &offset_expr, r) && r[0] == BFD_RELOC_UNUSED;
5231 }
5232
5233 /* OP_PERF_REG matcher.  */
5234
5235 static bfd_boolean
5236 match_perf_reg_operand (struct mips_arg_info *arg,
5237                         const struct mips_operand *operand)
5238 {
5239   offsetT sval;
5240
5241   if (!match_const_int (arg, &sval))
5242     return FALSE;
5243
5244   if (sval != 0
5245       && (sval != 1
5246           || (mips_opts.arch == CPU_R5900
5247               && (strcmp (arg->insn->insn_mo->name, "mfps") == 0
5248                   || strcmp (arg->insn->insn_mo->name, "mtps") == 0))))
5249     {
5250       set_insn_error (arg->argnum, _("invalid performance register"));
5251       return FALSE;
5252     }
5253
5254   insn_insert_operand (arg->insn, operand, sval);
5255   return TRUE;
5256 }
5257
5258 /* OP_ADDIUSP matcher.  */
5259
5260 static bfd_boolean
5261 match_addiusp_operand (struct mips_arg_info *arg,
5262                        const struct mips_operand *operand)
5263 {
5264   offsetT sval;
5265   unsigned int uval;
5266
5267   if (!match_const_int (arg, &sval))
5268     return FALSE;
5269
5270   if (sval % 4)
5271     {
5272       match_out_of_range (arg);
5273       return FALSE;
5274     }
5275
5276   sval /= 4;
5277   if (!(sval >= -258 && sval <= 257) || (sval >= -2 && sval <= 1))
5278     {
5279       match_out_of_range (arg);
5280       return FALSE;
5281     }
5282
5283   uval = (unsigned int) sval;
5284   uval = ((uval >> 1) & ~0xff) | (uval & 0xff);
5285   insn_insert_operand (arg->insn, operand, uval);
5286   return TRUE;
5287 }
5288
5289 /* OP_CLO_CLZ_DEST matcher.  */
5290
5291 static bfd_boolean
5292 match_clo_clz_dest_operand (struct mips_arg_info *arg,
5293                             const struct mips_operand *operand)
5294 {
5295   unsigned int regno;
5296
5297   if (!match_reg (arg, OP_REG_GP, &regno))
5298     return FALSE;
5299
5300   insn_insert_operand (arg->insn, operand, regno | (regno << 5));
5301   return TRUE;
5302 }
5303
5304 /* OP_CHECK_PREV matcher.  */
5305
5306 static bfd_boolean
5307 match_check_prev_operand (struct mips_arg_info *arg,
5308                           const struct mips_operand *operand_base)
5309 {
5310   const struct mips_check_prev_operand *operand;
5311   unsigned int regno;
5312
5313   operand = (const struct mips_check_prev_operand *) operand_base;
5314
5315   if (!match_reg (arg, OP_REG_GP, &regno))
5316     return FALSE;
5317
5318   if (!operand->zero_ok && regno == 0)
5319     return FALSE;
5320
5321   if ((operand->less_than_ok && regno < arg->last_regno)
5322       || (operand->greater_than_ok && regno > arg->last_regno)
5323       || (operand->equal_ok && regno == arg->last_regno))
5324     {
5325       arg->last_regno = regno;
5326       insn_insert_operand (arg->insn, operand_base, regno);
5327       return TRUE;
5328     }
5329
5330   return FALSE;
5331 }
5332
5333 /* OP_SAME_RS_RT matcher.  */
5334
5335 static bfd_boolean
5336 match_same_rs_rt_operand (struct mips_arg_info *arg,
5337                           const struct mips_operand *operand)
5338 {
5339   unsigned int regno;
5340
5341   if (!match_reg (arg, OP_REG_GP, &regno))
5342     return FALSE;
5343
5344   if (regno == 0)
5345     {
5346       set_insn_error (arg->argnum, _("the source register must not be $0"));
5347       return FALSE;
5348     }
5349
5350   arg->last_regno = regno;
5351
5352   insn_insert_operand (arg->insn, operand, regno | (regno << 5));
5353   return TRUE;
5354 }
5355
5356 /* OP_LWM_SWM_LIST matcher.  */
5357
5358 static bfd_boolean
5359 match_lwm_swm_list_operand (struct mips_arg_info *arg,
5360                             const struct mips_operand *operand)
5361 {
5362   unsigned int reglist, sregs, ra, regno1, regno2;
5363   struct mips_arg_info reset;
5364
5365   reglist = 0;
5366   if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5367     return FALSE;
5368   do
5369     {
5370       if (regno2 == FP && regno1 >= S0 && regno1 <= S7)
5371         {
5372           reglist |= 1 << FP;
5373           regno2 = S7;
5374         }
5375       reglist |= ((1U << regno2 << 1) - 1) & -(1U << regno1);
5376       reset = *arg;
5377     }
5378   while (match_char (arg, ',')
5379          && match_reg_range (arg, OP_REG_GP, &regno1, &regno2));
5380   *arg = reset;
5381
5382   if (operand->size == 2)
5383     {
5384       /* The list must include both ra and s0-sN, for 0 <= N <= 3.  E.g.:
5385
5386          s0, ra
5387          s0, s1, ra, s2, s3
5388          s0-s2, ra
5389
5390          and any permutations of these.  */
5391       if ((reglist & 0xfff1ffff) != 0x80010000)
5392         return FALSE;
5393
5394       sregs = (reglist >> 17) & 7;
5395       ra = 0;
5396     }
5397   else
5398     {
5399       /* The list must include at least one of ra and s0-sN,
5400          for 0 <= N <= 8.  (Note that there is a gap between s7 and s8,
5401          which are $23 and $30 respectively.)  E.g.:
5402
5403          ra
5404          s0
5405          ra, s0, s1, s2
5406          s0-s8
5407          s0-s5, ra
5408
5409          and any permutations of these.  */
5410       if ((reglist & 0x3f00ffff) != 0)
5411         return FALSE;
5412
5413       ra = (reglist >> 27) & 0x10;
5414       sregs = ((reglist >> 22) & 0x100) | ((reglist >> 16) & 0xff);
5415     }
5416   sregs += 1;
5417   if ((sregs & -sregs) != sregs)
5418     return FALSE;
5419
5420   insn_insert_operand (arg->insn, operand, (ffs (sregs) - 1) | ra);
5421   return TRUE;
5422 }
5423
5424 /* OP_ENTRY_EXIT_LIST matcher.  */
5425
5426 static unsigned int
5427 match_entry_exit_operand (struct mips_arg_info *arg,
5428                           const struct mips_operand *operand)
5429 {
5430   unsigned int mask;
5431   bfd_boolean is_exit;
5432
5433   /* The format is the same for both ENTRY and EXIT, but the constraints
5434      are different.  */
5435   is_exit = strcmp (arg->insn->insn_mo->name, "exit") == 0;
5436   mask = (is_exit ? 7 << 3 : 0);
5437   do
5438     {
5439       unsigned int regno1, regno2;
5440       bfd_boolean is_freg;
5441
5442       if (match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5443         is_freg = FALSE;
5444       else if (match_reg_range (arg, OP_REG_FP, &regno1, &regno2))
5445         is_freg = TRUE;
5446       else
5447         return FALSE;
5448
5449       if (is_exit && is_freg && regno1 == 0 && regno2 < 2)
5450         {
5451           mask &= ~(7 << 3);
5452           mask |= (5 + regno2) << 3;
5453         }
5454       else if (!is_exit && regno1 == 4 && regno2 >= 4 && regno2 <= 7)
5455         mask |= (regno2 - 3) << 3;
5456       else if (regno1 == 16 && regno2 >= 16 && regno2 <= 17)
5457         mask |= (regno2 - 15) << 1;
5458       else if (regno1 == RA && regno2 == RA)
5459         mask |= 1;
5460       else
5461         return FALSE;
5462     }
5463   while (match_char (arg, ','));
5464
5465   insn_insert_operand (arg->insn, operand, mask);
5466   return TRUE;
5467 }
5468
5469 /* OP_SAVE_RESTORE_LIST matcher.  */
5470
5471 static bfd_boolean
5472 match_save_restore_list_operand (struct mips_arg_info *arg)
5473 {
5474   unsigned int opcode, args, statics, sregs;
5475   unsigned int num_frame_sizes, num_args, num_statics, num_sregs;
5476   offsetT frame_size;
5477
5478   opcode = arg->insn->insn_opcode;
5479   frame_size = 0;
5480   num_frame_sizes = 0;
5481   args = 0;
5482   statics = 0;
5483   sregs = 0;
5484   do
5485     {
5486       unsigned int regno1, regno2;
5487
5488       if (arg->token->type == OT_INTEGER)
5489         {
5490           /* Handle the frame size.  */
5491           if (!match_const_int (arg, &frame_size))
5492             return FALSE;
5493           num_frame_sizes += 1;
5494         }
5495       else
5496         {
5497           if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5498             return FALSE;
5499
5500           while (regno1 <= regno2)
5501             {
5502               if (regno1 >= 4 && regno1 <= 7)
5503                 {
5504                   if (num_frame_sizes == 0)
5505                     /* args $a0-$a3 */
5506                     args |= 1 << (regno1 - 4);
5507                   else
5508                     /* statics $a0-$a3 */
5509                     statics |= 1 << (regno1 - 4);
5510                 }
5511               else if (regno1 >= 16 && regno1 <= 23)
5512                 /* $s0-$s7 */
5513                 sregs |= 1 << (regno1 - 16);
5514               else if (regno1 == 30)
5515                 /* $s8 */
5516                 sregs |= 1 << 8;
5517               else if (regno1 == 31)
5518                 /* Add $ra to insn.  */
5519                 opcode |= 0x40;
5520               else
5521                 return FALSE;
5522               regno1 += 1;
5523               if (regno1 == 24)
5524                 regno1 = 30;
5525             }
5526         }
5527     }
5528   while (match_char (arg, ','));
5529
5530   /* Encode args/statics combination.  */
5531   if (args & statics)
5532     return FALSE;
5533   else if (args == 0xf)
5534     /* All $a0-$a3 are args.  */
5535     opcode |= MIPS16_ALL_ARGS << 16;
5536   else if (statics == 0xf)
5537     /* All $a0-$a3 are statics.  */
5538     opcode |= MIPS16_ALL_STATICS << 16;
5539   else
5540     {
5541       /* Count arg registers.  */
5542       num_args = 0;
5543       while (args & 0x1)
5544         {
5545           args >>= 1;
5546           num_args += 1;
5547         }
5548       if (args != 0)
5549         return FALSE;
5550
5551       /* Count static registers.  */
5552       num_statics = 0;
5553       while (statics & 0x8)
5554         {
5555           statics = (statics << 1) & 0xf;
5556           num_statics += 1;
5557         }
5558       if (statics != 0)
5559         return FALSE;
5560
5561       /* Encode args/statics.  */
5562       opcode |= ((num_args << 2) | num_statics) << 16;
5563     }
5564
5565   /* Encode $s0/$s1.  */
5566   if (sregs & (1 << 0))         /* $s0 */
5567     opcode |= 0x20;
5568   if (sregs & (1 << 1))         /* $s1 */
5569     opcode |= 0x10;
5570   sregs >>= 2;
5571
5572   /* Encode $s2-$s8. */
5573   num_sregs = 0;
5574   while (sregs & 1)
5575     {
5576       sregs >>= 1;
5577       num_sregs += 1;
5578     }
5579   if (sregs != 0)
5580     return FALSE;
5581   opcode |= num_sregs << 24;
5582
5583   /* Encode frame size.  */
5584   if (num_frame_sizes == 0)
5585     {
5586       set_insn_error (arg->argnum, _("missing frame size"));
5587       return FALSE;
5588     }
5589   if (num_frame_sizes > 1)
5590     {
5591       set_insn_error (arg->argnum, _("frame size specified twice"));
5592       return FALSE;
5593     }
5594   if ((frame_size & 7) != 0 || frame_size < 0 || frame_size > 0xff * 8)
5595     {
5596       set_insn_error (arg->argnum, _("invalid frame size"));
5597       return FALSE;
5598     }
5599   if (frame_size != 128 || (opcode >> 16) != 0)
5600     {
5601       frame_size /= 8;
5602       opcode |= (((frame_size & 0xf0) << 16)
5603                  | (frame_size & 0x0f));
5604     }
5605
5606   /* Finally build the instruction.  */
5607   if ((opcode >> 16) != 0 || frame_size == 0)
5608     opcode |= MIPS16_EXTEND;
5609   arg->insn->insn_opcode = opcode;
5610   return TRUE;
5611 }
5612
5613 /* OP_MDMX_IMM_REG matcher.  */
5614
5615 static bfd_boolean
5616 match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
5617                             const struct mips_operand *operand)
5618 {
5619   unsigned int regno, uval;
5620   bfd_boolean is_qh;
5621   const struct mips_opcode *opcode;
5622
5623   /* The mips_opcode records whether this is an octobyte or quadhalf
5624      instruction.  Start out with that bit in place.  */
5625   opcode = arg->insn->insn_mo;
5626   uval = mips_extract_operand (operand, opcode->match);
5627   is_qh = (uval != 0);
5628
5629   if (arg->token->type == OT_REG)
5630     {
5631       if ((opcode->membership & INSN_5400)
5632           && strcmp (opcode->name, "rzu.ob") == 0)
5633         {
5634           set_insn_error_i (arg->argnum, _("operand %d must be an immediate"),
5635                             arg->argnum);
5636           return FALSE;
5637         }
5638
5639       if (!match_regno (arg, OP_REG_VEC, arg->token->u.regno, &regno))
5640         return FALSE;
5641       ++arg->token;
5642
5643       /* Check whether this is a vector register or a broadcast of
5644          a single element.  */
5645       if (arg->token->type == OT_INTEGER_INDEX)
5646         {
5647           if (arg->token->u.index > (is_qh ? 3 : 7))
5648             {
5649               set_insn_error (arg->argnum, _("invalid element selector"));
5650               return FALSE;
5651             }
5652           uval |= arg->token->u.index << (is_qh ? 2 : 1) << 5;
5653           ++arg->token;
5654         }
5655       else
5656         {
5657           /* A full vector.  */
5658           if ((opcode->membership & INSN_5400)
5659               && (strcmp (opcode->name, "sll.ob") == 0
5660                   || strcmp (opcode->name, "srl.ob") == 0))
5661             {
5662               set_insn_error_i (arg->argnum, _("operand %d must be scalar"),
5663                                 arg->argnum);
5664               return FALSE;
5665             }
5666
5667           if (is_qh)
5668             uval |= MDMX_FMTSEL_VEC_QH << 5;
5669           else
5670             uval |= MDMX_FMTSEL_VEC_OB << 5;
5671         }
5672       uval |= regno;
5673     }
5674   else
5675     {
5676       offsetT sval;
5677
5678       if (!match_const_int (arg, &sval))
5679         return FALSE;
5680       if (sval < 0 || sval > 31)
5681         {
5682           match_out_of_range (arg);
5683           return FALSE;
5684         }
5685       uval |= (sval & 31);
5686       if (is_qh)
5687         uval |= MDMX_FMTSEL_IMM_QH << 5;
5688       else
5689         uval |= MDMX_FMTSEL_IMM_OB << 5;
5690     }
5691   insn_insert_operand (arg->insn, operand, uval);
5692   return TRUE;
5693 }
5694
5695 /* OP_IMM_INDEX matcher.  */
5696
5697 static bfd_boolean
5698 match_imm_index_operand (struct mips_arg_info *arg,
5699                          const struct mips_operand *operand)
5700 {
5701   unsigned int max_val;
5702
5703   if (arg->token->type != OT_INTEGER_INDEX)
5704     return FALSE;
5705
5706   max_val = (1 << operand->size) - 1;
5707   if (arg->token->u.index > max_val)
5708     {
5709       match_out_of_range (arg);
5710       return FALSE;
5711     }
5712   insn_insert_operand (arg->insn, operand, arg->token->u.index);
5713   ++arg->token;
5714   return TRUE;
5715 }
5716
5717 /* OP_REG_INDEX matcher.  */
5718
5719 static bfd_boolean
5720 match_reg_index_operand (struct mips_arg_info *arg,
5721                          const struct mips_operand *operand)
5722 {
5723   unsigned int regno;
5724
5725   if (arg->token->type != OT_REG_INDEX)
5726     return FALSE;
5727
5728   if (!match_regno (arg, OP_REG_GP, arg->token->u.regno, &regno))
5729     return FALSE;
5730
5731   insn_insert_operand (arg->insn, operand, regno);
5732   ++arg->token;
5733   return TRUE;
5734 }
5735
5736 /* OP_PC matcher.  */
5737
5738 static bfd_boolean
5739 match_pc_operand (struct mips_arg_info *arg)
5740 {
5741   if (arg->token->type == OT_REG && (arg->token->u.regno & RTYPE_PC))
5742     {
5743       ++arg->token;
5744       return TRUE;
5745     }
5746   return FALSE;
5747 }
5748
5749 /* OP_NON_ZERO_REG matcher.  */
5750
5751 static bfd_boolean
5752 match_non_zero_reg_operand (struct mips_arg_info *arg,
5753                             const struct mips_operand *operand)
5754 {
5755   unsigned int regno;
5756
5757   if (!match_reg (arg, OP_REG_GP, &regno))
5758     return FALSE;
5759
5760   if (regno == 0)
5761     return FALSE;
5762
5763   arg->last_regno = regno;
5764   insn_insert_operand (arg->insn, operand, regno);
5765   return TRUE;
5766 }
5767
5768 /* OP_REPEAT_DEST_REG and OP_REPEAT_PREV_REG matcher.  OTHER_REGNO is the
5769    register that we need to match.  */
5770
5771 static bfd_boolean
5772 match_tied_reg_operand (struct mips_arg_info *arg, unsigned int other_regno)
5773 {
5774   unsigned int regno;
5775
5776   return match_reg (arg, OP_REG_GP, &regno) && regno == other_regno;
5777 }
5778
5779 /* Read a floating-point constant from S for LI.S or LI.D.  LENGTH is
5780    the length of the value in bytes (4 for float, 8 for double) and
5781    USING_GPRS says whether the destination is a GPR rather than an FPR.
5782
5783    Return the constant in IMM and OFFSET as follows:
5784
5785    - If the constant should be loaded via memory, set IMM to O_absent and
5786      OFFSET to the memory address.
5787
5788    - Otherwise, if the constant should be loaded into two 32-bit registers,
5789      set IMM to the O_constant to load into the high register and OFFSET
5790      to the corresponding value for the low register.
5791
5792    - Otherwise, set IMM to the full O_constant and set OFFSET to O_absent.
5793
5794    These constants only appear as the last operand in an instruction,
5795    and every instruction that accepts them in any variant accepts them
5796    in all variants.  This means we don't have to worry about backing out
5797    any changes if the instruction does not match.  We just match
5798    unconditionally and report an error if the constant is invalid.  */
5799
5800 static bfd_boolean
5801 match_float_constant (struct mips_arg_info *arg, expressionS *imm,
5802                       expressionS *offset, int length, bfd_boolean using_gprs)
5803 {
5804   char *p;
5805   segT seg, new_seg;
5806   subsegT subseg;
5807   const char *newname;
5808   unsigned char *data;
5809
5810   /* Where the constant is placed is based on how the MIPS assembler
5811      does things:
5812
5813      length == 4 && using_gprs  -- immediate value only
5814      length == 8 && using_gprs  -- .rdata or immediate value
5815      length == 4 && !using_gprs -- .lit4 or immediate value
5816      length == 8 && !using_gprs -- .lit8 or immediate value
5817
5818      The .lit4 and .lit8 sections are only used if permitted by the
5819      -G argument.  */
5820   if (arg->token->type != OT_FLOAT)
5821     {
5822       set_insn_error (arg->argnum, _("floating-point expression required"));
5823       return FALSE;
5824     }
5825
5826   gas_assert (arg->token->u.flt.length == length);
5827   data = arg->token->u.flt.data;
5828   ++arg->token;
5829
5830   /* Handle 32-bit constants for which an immediate value is best.  */
5831   if (length == 4
5832       && (using_gprs
5833           || g_switch_value < 4
5834           || (data[0] == 0 && data[1] == 0)
5835           || (data[2] == 0 && data[3] == 0)))
5836     {
5837       imm->X_op = O_constant;
5838       if (!target_big_endian)
5839         imm->X_add_number = bfd_getl32 (data);
5840       else
5841         imm->X_add_number = bfd_getb32 (data);
5842       offset->X_op = O_absent;
5843       return TRUE;
5844     }
5845
5846   /* Handle 64-bit constants for which an immediate value is best.  */
5847   if (length == 8
5848       && !mips_disable_float_construction
5849       /* Constants can only be constructed in GPRs and copied to FPRs if the
5850          GPRs are at least as wide as the FPRs or MTHC1 is available.
5851          Unlike most tests for 32-bit floating-point registers this check
5852          specifically looks for GPR_SIZE == 32 as the FPXX ABI does not
5853          permit 64-bit moves without MXHC1.
5854          Force the constant into memory otherwise.  */
5855       && (using_gprs
5856           || GPR_SIZE == 64
5857           || ISA_HAS_MXHC1 (mips_opts.isa)
5858           || FPR_SIZE == 32)
5859       && ((data[0] == 0 && data[1] == 0)
5860           || (data[2] == 0 && data[3] == 0))
5861       && ((data[4] == 0 && data[5] == 0)
5862           || (data[6] == 0 && data[7] == 0)))
5863     {
5864       /* The value is simple enough to load with a couple of instructions.
5865          If using 32-bit registers, set IMM to the high order 32 bits and
5866          OFFSET to the low order 32 bits.  Otherwise, set IMM to the entire
5867          64 bit constant.  */
5868       if (GPR_SIZE == 32 || (!using_gprs && FPR_SIZE != 64))
5869         {
5870           imm->X_op = O_constant;
5871           offset->X_op = O_constant;
5872           if (!target_big_endian)
5873             {
5874               imm->X_add_number = bfd_getl32 (data + 4);
5875               offset->X_add_number = bfd_getl32 (data);
5876             }
5877           else
5878             {
5879               imm->X_add_number = bfd_getb32 (data);
5880               offset->X_add_number = bfd_getb32 (data + 4);
5881             }
5882           if (offset->X_add_number == 0)
5883             offset->X_op = O_absent;
5884         }
5885       else
5886         {
5887           imm->X_op = O_constant;
5888           if (!target_big_endian)
5889             imm->X_add_number = bfd_getl64 (data);
5890           else
5891             imm->X_add_number = bfd_getb64 (data);
5892           offset->X_op = O_absent;
5893         }
5894       return TRUE;
5895     }
5896
5897   /* Switch to the right section.  */
5898   seg = now_seg;
5899   subseg = now_subseg;
5900   if (length == 4)
5901     {
5902       gas_assert (!using_gprs && g_switch_value >= 4);
5903       newname = ".lit4";
5904     }
5905   else
5906     {
5907       if (using_gprs || g_switch_value < 8)
5908         newname = RDATA_SECTION_NAME;
5909       else
5910         newname = ".lit8";
5911     }
5912
5913   new_seg = subseg_new (newname, (subsegT) 0);
5914   bfd_set_section_flags (stdoutput, new_seg,
5915                          SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA);
5916   frag_align (length == 4 ? 2 : 3, 0, 0);
5917   if (strncmp (TARGET_OS, "elf", 3) != 0)
5918     record_alignment (new_seg, 4);
5919   else
5920     record_alignment (new_seg, length == 4 ? 2 : 3);
5921   if (seg == now_seg)
5922     as_bad (_("cannot use `%s' in this section"), arg->insn->insn_mo->name);
5923
5924   /* Set the argument to the current address in the section.  */
5925   imm->X_op = O_absent;
5926   offset->X_op = O_symbol;
5927   offset->X_add_symbol = symbol_temp_new_now ();
5928   offset->X_add_number = 0;
5929
5930   /* Put the floating point number into the section.  */
5931   p = frag_more (length);
5932   memcpy (p, data, length);
5933
5934   /* Switch back to the original section.  */
5935   subseg_set (seg, subseg);
5936   return TRUE;
5937 }
5938
5939 /* OP_VU0_SUFFIX and OP_VU0_MATCH_SUFFIX matcher; MATCH_P selects between
5940    them.  */
5941
5942 static bfd_boolean
5943 match_vu0_suffix_operand (struct mips_arg_info *arg,
5944                           const struct mips_operand *operand,
5945                           bfd_boolean match_p)
5946 {
5947   unsigned int uval;
5948
5949   /* The operand can be an XYZW mask or a single 2-bit channel index
5950      (with X being 0).  */
5951   gas_assert (operand->size == 2 || operand->size == 4);
5952
5953   /* The suffix can be omitted when it is already part of the opcode.  */
5954   if (arg->token->type != OT_CHANNELS)
5955     return match_p;
5956
5957   uval = arg->token->u.channels;
5958   if (operand->size == 2)
5959     {
5960       /* Check that a single bit is set and convert it into a 2-bit index.  */
5961       if ((uval & -uval) != uval)
5962         return FALSE;
5963       uval = 4 - ffs (uval);
5964     }
5965
5966   if (match_p && insn_extract_operand (arg->insn, operand) != uval)
5967     return FALSE;
5968
5969   ++arg->token;
5970   if (!match_p)
5971     insn_insert_operand (arg->insn, operand, uval);
5972   return TRUE;
5973 }
5974
5975 /* S is the text seen for ARG.  Match it against OPERAND.  Return the end
5976    of the argument text if the match is successful, otherwise return null.  */
5977
5978 static bfd_boolean
5979 match_operand (struct mips_arg_info *arg,
5980                const struct mips_operand *operand)
5981 {
5982   switch (operand->type)
5983     {
5984     case OP_INT:
5985       return match_int_operand (arg, operand);
5986
5987     case OP_MAPPED_INT:
5988       return match_mapped_int_operand (arg, operand);
5989
5990     case OP_MSB:
5991       return match_msb_operand (arg, operand);
5992
5993     case OP_REG:
5994     case OP_OPTIONAL_REG:
5995       return match_reg_operand (arg, operand);
5996
5997     case OP_REG_PAIR:
5998       return match_reg_pair_operand (arg, operand);
5999
6000     case OP_PCREL:
6001       return match_pcrel_operand (arg);
6002
6003     case OP_PERF_REG:
6004       return match_perf_reg_operand (arg, operand);
6005
6006     case OP_ADDIUSP_INT:
6007       return match_addiusp_operand (arg, operand);
6008
6009     case OP_CLO_CLZ_DEST:
6010       return match_clo_clz_dest_operand (arg, operand);
6011
6012     case OP_LWM_SWM_LIST:
6013       return match_lwm_swm_list_operand (arg, operand);
6014
6015     case OP_ENTRY_EXIT_LIST:
6016       return match_entry_exit_operand (arg, operand);
6017
6018     case OP_SAVE_RESTORE_LIST:
6019       return match_save_restore_list_operand (arg);
6020
6021     case OP_MDMX_IMM_REG:
6022       return match_mdmx_imm_reg_operand (arg, operand);
6023
6024     case OP_REPEAT_DEST_REG:
6025       return match_tied_reg_operand (arg, arg->dest_regno);
6026
6027     case OP_REPEAT_PREV_REG:
6028       return match_tied_reg_operand (arg, arg->last_regno);
6029
6030     case OP_PC:
6031       return match_pc_operand (arg);
6032
6033     case OP_VU0_SUFFIX:
6034       return match_vu0_suffix_operand (arg, operand, FALSE);
6035
6036     case OP_VU0_MATCH_SUFFIX:
6037       return match_vu0_suffix_operand (arg, operand, TRUE);
6038
6039     case OP_IMM_INDEX:
6040       return match_imm_index_operand (arg, operand);
6041
6042     case OP_REG_INDEX:
6043       return match_reg_index_operand (arg, operand);
6044
6045     case OP_SAME_RS_RT:
6046       return match_same_rs_rt_operand (arg, operand);
6047
6048     case OP_CHECK_PREV:
6049       return match_check_prev_operand (arg, operand);
6050
6051     case OP_NON_ZERO_REG:
6052       return match_non_zero_reg_operand (arg, operand);
6053     }
6054   abort ();
6055 }
6056
6057 /* ARG is the state after successfully matching an instruction.
6058    Issue any queued-up warnings.  */
6059
6060 static void
6061 check_completed_insn (struct mips_arg_info *arg)
6062 {
6063   if (arg->seen_at)
6064     {
6065       if (AT == ATREG)
6066         as_warn (_("used $at without \".set noat\""));
6067       else
6068         as_warn (_("used $%u with \".set at=$%u\""), AT, AT);
6069     }
6070 }
6071
6072 /* Return true if modifying general-purpose register REG needs a delay.  */
6073
6074 static bfd_boolean
6075 reg_needs_delay (unsigned int reg)
6076 {
6077   unsigned long prev_pinfo;
6078
6079   prev_pinfo = history[0].insn_mo->pinfo;
6080   if (!mips_opts.noreorder
6081       && (((prev_pinfo & INSN_LOAD_MEMORY) && !gpr_interlocks)
6082           || ((prev_pinfo & INSN_LOAD_COPROC) && !cop_interlocks))
6083       && (gpr_write_mask (&history[0]) & (1 << reg)))
6084     return TRUE;
6085
6086   return FALSE;
6087 }
6088
6089 /* Classify an instruction according to the FIX_VR4120_* enumeration.
6090    Return NUM_FIX_VR4120_CLASSES if the instruction isn't affected
6091    by VR4120 errata.  */
6092
6093 static unsigned int
6094 classify_vr4120_insn (const char *name)
6095 {
6096   if (strncmp (name, "macc", 4) == 0)
6097     return FIX_VR4120_MACC;
6098   if (strncmp (name, "dmacc", 5) == 0)
6099     return FIX_VR4120_DMACC;
6100   if (strncmp (name, "mult", 4) == 0)
6101     return FIX_VR4120_MULT;
6102   if (strncmp (name, "dmult", 5) == 0)
6103     return FIX_VR4120_DMULT;
6104   if (strstr (name, "div"))
6105     return FIX_VR4120_DIV;
6106   if (strcmp (name, "mtlo") == 0 || strcmp (name, "mthi") == 0)
6107     return FIX_VR4120_MTHILO;
6108   return NUM_FIX_VR4120_CLASSES;
6109 }
6110
6111 #define INSN_ERET       0x42000018
6112 #define INSN_DERET      0x4200001f
6113 #define INSN_DMULT      0x1c
6114 #define INSN_DMULTU     0x1d
6115
6116 /* Return the number of instructions that must separate INSN1 and INSN2,
6117    where INSN1 is the earlier instruction.  Return the worst-case value
6118    for any INSN2 if INSN2 is null.  */
6119
6120 static unsigned int
6121 insns_between (const struct mips_cl_insn *insn1,
6122                const struct mips_cl_insn *insn2)
6123 {
6124   unsigned long pinfo1, pinfo2;
6125   unsigned int mask;
6126
6127   /* If INFO2 is null, pessimistically assume that all flags are set for
6128      the second instruction.  */
6129   pinfo1 = insn1->insn_mo->pinfo;
6130   pinfo2 = insn2 ? insn2->insn_mo->pinfo : ~0U;
6131
6132   /* For most targets, write-after-read dependencies on the HI and LO
6133      registers must be separated by at least two instructions.  */
6134   if (!hilo_interlocks)
6135     {
6136       if ((pinfo1 & INSN_READ_LO) && (pinfo2 & INSN_WRITE_LO))
6137         return 2;
6138       if ((pinfo1 & INSN_READ_HI) && (pinfo2 & INSN_WRITE_HI))
6139         return 2;
6140     }
6141
6142   /* If we're working around r7000 errata, there must be two instructions
6143      between an mfhi or mflo and any instruction that uses the result.  */
6144   if (mips_7000_hilo_fix
6145       && !mips_opts.micromips
6146       && MF_HILO_INSN (pinfo1)
6147       && (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1))))
6148     return 2;
6149
6150   /* If we're working around 24K errata, one instruction is required
6151      if an ERET or DERET is followed by a branch instruction.  */
6152   if (mips_fix_24k && !mips_opts.micromips)
6153     {
6154       if (insn1->insn_opcode == INSN_ERET
6155           || insn1->insn_opcode == INSN_DERET)
6156         {
6157           if (insn2 == NULL
6158               || insn2->insn_opcode == INSN_ERET
6159               || insn2->insn_opcode == INSN_DERET
6160               || delayed_branch_p (insn2))
6161             return 1;
6162         }
6163     }
6164
6165   /* If we're working around PMC RM7000 errata, there must be three
6166      nops between a dmult and a load instruction.  */
6167   if (mips_fix_rm7000 && !mips_opts.micromips)
6168     {
6169       if ((insn1->insn_opcode & insn1->insn_mo->mask) == INSN_DMULT
6170           || (insn1->insn_opcode & insn1->insn_mo->mask) == INSN_DMULTU)
6171         {
6172           if (pinfo2 & INSN_LOAD_MEMORY)
6173            return 3;
6174         }
6175     }
6176
6177   /* If working around VR4120 errata, check for combinations that need
6178      a single intervening instruction.  */
6179   if (mips_fix_vr4120 && !mips_opts.micromips)
6180     {
6181       unsigned int class1, class2;
6182
6183       class1 = classify_vr4120_insn (insn1->insn_mo->name);
6184       if (class1 != NUM_FIX_VR4120_CLASSES && vr4120_conflicts[class1] != 0)
6185         {
6186           if (insn2 == NULL)
6187             return 1;
6188           class2 = classify_vr4120_insn (insn2->insn_mo->name);
6189           if (vr4120_conflicts[class1] & (1 << class2))
6190             return 1;
6191         }
6192     }
6193
6194   if (!HAVE_CODE_COMPRESSION)
6195     {
6196       /* Check for GPR or coprocessor load delays.  All such delays
6197          are on the RT register.  */
6198       /* Itbl support may require additional care here.  */
6199       if ((!gpr_interlocks && (pinfo1 & INSN_LOAD_MEMORY))
6200           || (!cop_interlocks && (pinfo1 & INSN_LOAD_COPROC)))
6201         {
6202           if (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1)))
6203             return 1;
6204         }
6205
6206       /* Check for generic coprocessor hazards.
6207
6208          This case is not handled very well.  There is no special
6209          knowledge of CP0 handling, and the coprocessors other than
6210          the floating point unit are not distinguished at all.  */
6211       /* Itbl support may require additional care here. FIXME!
6212          Need to modify this to include knowledge about
6213          user specified delays!  */
6214       else if ((!cop_interlocks && (pinfo1 & INSN_COPROC_MOVE))
6215                || (!cop_mem_interlocks && (pinfo1 & INSN_COPROC_MEMORY_DELAY)))
6216         {
6217           /* Handle cases where INSN1 writes to a known general coprocessor
6218              register.  There must be a one instruction delay before INSN2
6219              if INSN2 reads that register, otherwise no delay is needed.  */
6220           mask = fpr_write_mask (insn1);
6221           if (mask != 0)
6222             {
6223               if (!insn2 || (mask & fpr_read_mask (insn2)) != 0)
6224                 return 1;
6225             }
6226           else
6227             {
6228               /* Read-after-write dependencies on the control registers
6229                  require a two-instruction gap.  */
6230               if ((pinfo1 & INSN_WRITE_COND_CODE)
6231                   && (pinfo2 & INSN_READ_COND_CODE))
6232                 return 2;
6233
6234               /* We don't know exactly what INSN1 does.  If INSN2 is
6235                  also a coprocessor instruction, assume there must be
6236                  a one instruction gap.  */
6237               if (pinfo2 & INSN_COP)
6238                 return 1;
6239             }
6240         }
6241
6242       /* Check for read-after-write dependencies on the coprocessor
6243          control registers in cases where INSN1 does not need a general
6244          coprocessor delay.  This means that INSN1 is a floating point
6245          comparison instruction.  */
6246       /* Itbl support may require additional care here.  */
6247       else if (!cop_interlocks
6248                && (pinfo1 & INSN_WRITE_COND_CODE)
6249                && (pinfo2 & INSN_READ_COND_CODE))
6250         return 1;
6251     }
6252
6253   /* Forbidden slots can not contain Control Transfer Instructions (CTIs)
6254      CTIs include all branches and jumps, nal, eret, eretnc, deret, wait
6255      and pause.  */
6256   if ((insn1->insn_mo->pinfo2 & INSN2_FORBIDDEN_SLOT)
6257       && ((pinfo2 & INSN_NO_DELAY_SLOT)
6258           || (insn2 && delayed_branch_p (insn2))))
6259     return 1;
6260
6261   return 0;
6262 }
6263
6264 /* Return the number of nops that would be needed to work around the
6265    VR4130 mflo/mfhi errata if instruction INSN immediately followed
6266    the MAX_VR4130_NOPS instructions described by HIST.  Ignore hazards
6267    that are contained within the first IGNORE instructions of HIST.  */
6268
6269 static int
6270 nops_for_vr4130 (int ignore, const struct mips_cl_insn *hist,
6271                  const struct mips_cl_insn *insn)
6272 {
6273   int i, j;
6274   unsigned int mask;
6275
6276   /* Check if the instruction writes to HI or LO.  MTHI and MTLO
6277      are not affected by the errata.  */
6278   if (insn != 0
6279       && ((insn->insn_mo->pinfo & (INSN_WRITE_HI | INSN_WRITE_LO)) == 0
6280           || strcmp (insn->insn_mo->name, "mtlo") == 0
6281           || strcmp (insn->insn_mo->name, "mthi") == 0))
6282     return 0;
6283
6284   /* Search for the first MFLO or MFHI.  */
6285   for (i = 0; i < MAX_VR4130_NOPS; i++)
6286     if (MF_HILO_INSN (hist[i].insn_mo->pinfo))
6287       {
6288         /* Extract the destination register.  */
6289         mask = gpr_write_mask (&hist[i]);
6290
6291         /* No nops are needed if INSN reads that register.  */
6292         if (insn != NULL && (gpr_read_mask (insn) & mask) != 0)
6293           return 0;
6294
6295         /* ...or if any of the intervening instructions do.  */
6296         for (j = 0; j < i; j++)
6297           if (gpr_read_mask (&hist[j]) & mask)
6298             return 0;
6299
6300         if (i >= ignore)
6301           return MAX_VR4130_NOPS - i;
6302       }
6303   return 0;
6304 }
6305
6306 #define BASE_REG_EQ(INSN1, INSN2)       \
6307   ((((INSN1) >> OP_SH_RS) & OP_MASK_RS) \
6308       == (((INSN2) >> OP_SH_RS) & OP_MASK_RS))
6309
6310 /* Return the minimum alignment for this store instruction.  */
6311
6312 static int
6313 fix_24k_align_to (const struct mips_opcode *mo)
6314 {
6315   if (strcmp (mo->name, "sh") == 0)
6316     return 2;
6317
6318   if (strcmp (mo->name, "swc1") == 0
6319       || strcmp (mo->name, "swc2") == 0
6320       || strcmp (mo->name, "sw") == 0
6321       || strcmp (mo->name, "sc") == 0
6322       || strcmp (mo->name, "s.s") == 0)
6323     return 4;
6324
6325   if (strcmp (mo->name, "sdc1") == 0
6326       || strcmp (mo->name, "sdc2") == 0
6327       || strcmp (mo->name, "s.d") == 0)
6328     return 8;
6329
6330   /* sb, swl, swr */
6331   return 1;
6332 }
6333
6334 struct fix_24k_store_info
6335   {
6336     /* Immediate offset, if any, for this store instruction.  */
6337     short off;
6338     /* Alignment required by this store instruction.  */
6339     int align_to;
6340     /* True for register offsets.  */
6341     int register_offset;
6342   };
6343
6344 /* Comparison function used by qsort.  */
6345
6346 static int
6347 fix_24k_sort (const void *a, const void *b)
6348 {
6349   const struct fix_24k_store_info *pos1 = a;
6350   const struct fix_24k_store_info *pos2 = b;
6351
6352   return (pos1->off - pos2->off);
6353 }
6354
6355 /* INSN is a store instruction.  Try to record the store information
6356    in STINFO.  Return false if the information isn't known.  */
6357
6358 static bfd_boolean
6359 fix_24k_record_store_info (struct fix_24k_store_info *stinfo,
6360                            const struct mips_cl_insn *insn)
6361 {
6362   /* The instruction must have a known offset.  */
6363   if (!insn->complete_p || !strstr (insn->insn_mo->args, "o("))
6364     return FALSE;
6365
6366   stinfo->off = (insn->insn_opcode >> OP_SH_IMMEDIATE) & OP_MASK_IMMEDIATE;
6367   stinfo->align_to = fix_24k_align_to (insn->insn_mo);
6368   return TRUE;
6369 }
6370
6371 /* Return the number of nops that would be needed to work around the 24k
6372    "lost data on stores during refill" errata if instruction INSN
6373    immediately followed the 2 instructions described by HIST.
6374    Ignore hazards that are contained within the first IGNORE
6375    instructions of HIST.
6376
6377    Problem: The FSB (fetch store buffer) acts as an intermediate buffer
6378    for the data cache refills and store data. The following describes
6379    the scenario where the store data could be lost.
6380
6381    * A data cache miss, due to either a load or a store, causing fill
6382      data to be supplied by the memory subsystem
6383    * The first three doublewords of fill data are returned and written
6384      into the cache
6385    * A sequence of four stores occurs in consecutive cycles around the
6386      final doubleword of the fill:
6387    * Store A
6388    * Store B
6389    * Store C
6390    * Zero, One or more instructions
6391    * Store D
6392
6393    The four stores A-D must be to different doublewords of the line that
6394    is being filled. The fourth instruction in the sequence above permits
6395    the fill of the final doubleword to be transferred from the FSB into
6396    the cache. In the sequence above, the stores may be either integer
6397    (sb, sh, sw, swr, swl, sc) or coprocessor (swc1/swc2, sdc1/sdc2,
6398    swxc1, sdxc1, suxc1) stores, as long as the four stores are to
6399    different doublewords on the line. If the floating point unit is
6400    running in 1:2 mode, it is not possible to create the sequence above
6401    using only floating point store instructions.
6402
6403    In this case, the cache line being filled is incorrectly marked
6404    invalid, thereby losing the data from any store to the line that
6405    occurs between the original miss and the completion of the five
6406    cycle sequence shown above.
6407
6408    The workarounds are:
6409
6410    * Run the data cache in write-through mode.
6411    * Insert a non-store instruction between
6412      Store A and Store B or Store B and Store C.  */
6413
6414 static int
6415 nops_for_24k (int ignore, const struct mips_cl_insn *hist,
6416               const struct mips_cl_insn *insn)
6417 {
6418   struct fix_24k_store_info pos[3];
6419   int align, i, base_offset;
6420
6421   if (ignore >= 2)
6422     return 0;
6423
6424   /* If the previous instruction wasn't a store, there's nothing to
6425      worry about.  */
6426   if ((hist[0].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
6427     return 0;
6428
6429   /* If the instructions after the previous one are unknown, we have
6430      to assume the worst.  */
6431   if (!insn)
6432     return 1;
6433
6434   /* Check whether we are dealing with three consecutive stores.  */
6435   if ((insn->insn_mo->pinfo & INSN_STORE_MEMORY) == 0
6436       || (hist[1].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
6437     return 0;
6438
6439   /* If we don't know the relationship between the store addresses,
6440      assume the worst.  */
6441   if (!BASE_REG_EQ (insn->insn_opcode, hist[0].insn_opcode)
6442       || !BASE_REG_EQ (insn->insn_opcode, hist[1].insn_opcode))
6443     return 1;
6444
6445   if (!fix_24k_record_store_info (&pos[0], insn)
6446       || !fix_24k_record_store_info (&pos[1], &hist[0])
6447       || !fix_24k_record_store_info (&pos[2], &hist[1]))
6448     return 1;
6449
6450   qsort (&pos, 3, sizeof (struct fix_24k_store_info), fix_24k_sort);
6451
6452   /* Pick a value of ALIGN and X such that all offsets are adjusted by
6453      X bytes and such that the base register + X is known to be aligned
6454      to align bytes.  */
6455
6456   if (((insn->insn_opcode >> OP_SH_RS) & OP_MASK_RS) == SP)
6457     align = 8;
6458   else
6459     {
6460       align = pos[0].align_to;
6461       base_offset = pos[0].off;
6462       for (i = 1; i < 3; i++)
6463         if (align < pos[i].align_to)
6464           {
6465             align = pos[i].align_to;
6466             base_offset = pos[i].off;
6467           }
6468       for (i = 0; i < 3; i++)
6469         pos[i].off -= base_offset;
6470     }
6471
6472   pos[0].off &= ~align + 1;
6473   pos[1].off &= ~align + 1;
6474   pos[2].off &= ~align + 1;
6475
6476   /* If any two stores write to the same chunk, they also write to the
6477      same doubleword.  The offsets are still sorted at this point.  */
6478   if (pos[0].off == pos[1].off || pos[1].off == pos[2].off)
6479     return 0;
6480
6481   /* A range of at least 9 bytes is needed for the stores to be in
6482      non-overlapping doublewords.  */
6483   if (pos[2].off - pos[0].off <= 8)
6484     return 0;
6485
6486   if (pos[2].off - pos[1].off >= 24
6487       || pos[1].off - pos[0].off >= 24
6488       || pos[2].off - pos[0].off >= 32)
6489     return 0;
6490
6491   return 1;
6492 }
6493
6494 /* Return the number of nops that would be needed if instruction INSN
6495    immediately followed the MAX_NOPS instructions given by HIST,
6496    where HIST[0] is the most recent instruction.  Ignore hazards
6497    between INSN and the first IGNORE instructions in HIST.
6498
6499    If INSN is null, return the worse-case number of nops for any
6500    instruction.  */
6501
6502 static int
6503 nops_for_insn (int ignore, const struct mips_cl_insn *hist,
6504                const struct mips_cl_insn *insn)
6505 {
6506   int i, nops, tmp_nops;
6507
6508   nops = 0;
6509   for (i = ignore; i < MAX_DELAY_NOPS; i++)
6510     {
6511       tmp_nops = insns_between (hist + i, insn) - i;
6512       if (tmp_nops > nops)
6513         nops = tmp_nops;
6514     }
6515
6516   if (mips_fix_vr4130 && !mips_opts.micromips)
6517     {
6518       tmp_nops = nops_for_vr4130 (ignore, hist, insn);
6519       if (tmp_nops > nops)
6520         nops = tmp_nops;
6521     }
6522
6523   if (mips_fix_24k && !mips_opts.micromips)
6524     {
6525       tmp_nops = nops_for_24k (ignore, hist, insn);
6526       if (tmp_nops > nops)
6527         nops = tmp_nops;
6528     }
6529
6530   return nops;
6531 }
6532
6533 /* The variable arguments provide NUM_INSNS extra instructions that
6534    might be added to HIST.  Return the largest number of nops that
6535    would be needed after the extended sequence, ignoring hazards
6536    in the first IGNORE instructions.  */
6537
6538 static int
6539 nops_for_sequence (int num_insns, int ignore,
6540                    const struct mips_cl_insn *hist, ...)
6541 {
6542   va_list args;
6543   struct mips_cl_insn buffer[MAX_NOPS];
6544   struct mips_cl_insn *cursor;
6545   int nops;
6546
6547   va_start (args, hist);
6548   cursor = buffer + num_insns;
6549   memcpy (cursor, hist, (MAX_NOPS - num_insns) * sizeof (*cursor));
6550   while (cursor > buffer)
6551     *--cursor = *va_arg (args, const struct mips_cl_insn *);
6552
6553   nops = nops_for_insn (ignore, buffer, NULL);
6554   va_end (args);
6555   return nops;
6556 }
6557
6558 /* Like nops_for_insn, but if INSN is a branch, take into account the
6559    worst-case delay for the branch target.  */
6560
6561 static int
6562 nops_for_insn_or_target (int ignore, const struct mips_cl_insn *hist,
6563                          const struct mips_cl_insn *insn)
6564 {
6565   int nops, tmp_nops;
6566
6567   nops = nops_for_insn (ignore, hist, insn);
6568   if (delayed_branch_p (insn))
6569     {
6570       tmp_nops = nops_for_sequence (2, ignore ? ignore + 2 : 0,
6571                                     hist, insn, get_delay_slot_nop (insn));
6572       if (tmp_nops > nops)
6573         nops = tmp_nops;
6574     }
6575   else if (compact_branch_p (insn))
6576     {
6577       tmp_nops = nops_for_sequence (1, ignore ? ignore + 1 : 0, hist, insn);
6578       if (tmp_nops > nops)
6579         nops = tmp_nops;
6580     }
6581   return nops;
6582 }
6583
6584 /* Fix NOP issue: Replace nops by "or at,at,zero".  */
6585
6586 static void
6587 fix_loongson2f_nop (struct mips_cl_insn * ip)
6588 {
6589   gas_assert (!HAVE_CODE_COMPRESSION);
6590   if (strcmp (ip->insn_mo->name, "nop") == 0)
6591     ip->insn_opcode = LOONGSON2F_NOP_INSN;
6592 }
6593
6594 /* Fix Jump Issue: Eliminate instruction fetch from outside 256M region
6595                    jr target pc &= 'hffff_ffff_cfff_ffff.  */
6596
6597 static void
6598 fix_loongson2f_jump (struct mips_cl_insn * ip)
6599 {
6600   gas_assert (!HAVE_CODE_COMPRESSION);
6601   if (strcmp (ip->insn_mo->name, "j") == 0
6602       || strcmp (ip->insn_mo->name, "jr") == 0
6603       || strcmp (ip->insn_mo->name, "jalr") == 0)
6604     {
6605       int sreg;
6606       expressionS ep;
6607
6608       if (! mips_opts.at)
6609         return;
6610
6611       sreg = EXTRACT_OPERAND (0, RS, *ip);
6612       if (sreg == ZERO || sreg == KT0 || sreg == KT1 || sreg == ATREG)
6613         return;
6614
6615       ep.X_op = O_constant;
6616       ep.X_add_number = 0xcfff0000;
6617       macro_build (&ep, "lui", "t,u", ATREG, BFD_RELOC_HI16);
6618       ep.X_add_number = 0xffff;
6619       macro_build (&ep, "ori", "t,r,i", ATREG, ATREG, BFD_RELOC_LO16);
6620       macro_build (NULL, "and", "d,v,t", sreg, sreg, ATREG);
6621     }
6622 }
6623
6624 static void
6625 fix_loongson2f (struct mips_cl_insn * ip)
6626 {
6627   if (mips_fix_loongson2f_nop)
6628     fix_loongson2f_nop (ip);
6629
6630   if (mips_fix_loongson2f_jump)
6631     fix_loongson2f_jump (ip);
6632 }
6633
6634 /* IP is a branch that has a delay slot, and we need to fill it
6635    automatically.   Return true if we can do that by swapping IP
6636    with the previous instruction.
6637    ADDRESS_EXPR is an operand of the instruction to be used with
6638    RELOC_TYPE.  */
6639
6640 static bfd_boolean
6641 can_swap_branch_p (struct mips_cl_insn *ip, expressionS *address_expr,
6642                    bfd_reloc_code_real_type *reloc_type)
6643 {
6644   unsigned long pinfo, pinfo2, prev_pinfo, prev_pinfo2;
6645   unsigned int gpr_read, gpr_write, prev_gpr_read, prev_gpr_write;
6646   unsigned int fpr_read, prev_fpr_write;
6647
6648   /* -O2 and above is required for this optimization.  */
6649   if (mips_optimize < 2)
6650     return FALSE;
6651
6652   /* If we have seen .set volatile or .set nomove, don't optimize.  */
6653   if (mips_opts.nomove)
6654     return FALSE;
6655
6656   /* We can't swap if the previous instruction's position is fixed.  */
6657   if (history[0].fixed_p)
6658     return FALSE;
6659
6660   /* If the previous previous insn was in a .set noreorder, we can't
6661      swap.  Actually, the MIPS assembler will swap in this situation.
6662      However, gcc configured -with-gnu-as will generate code like
6663
6664         .set    noreorder
6665         lw      $4,XXX
6666         .set    reorder
6667         INSN
6668         bne     $4,$0,foo
6669
6670      in which we can not swap the bne and INSN.  If gcc is not configured
6671      -with-gnu-as, it does not output the .set pseudo-ops.  */
6672   if (history[1].noreorder_p)
6673     return FALSE;
6674
6675   /* If the previous instruction had a fixup in mips16 mode, we can not swap.
6676      This means that the previous instruction was a 4-byte one anyhow.  */
6677   if (mips_opts.mips16 && history[0].fixp[0])
6678     return FALSE;
6679
6680   /* If the branch is itself the target of a branch, we can not swap.
6681      We cheat on this; all we check for is whether there is a label on
6682      this instruction.  If there are any branches to anything other than
6683      a label, users must use .set noreorder.  */
6684   if (seg_info (now_seg)->label_list)
6685     return FALSE;
6686
6687   /* If the previous instruction is in a variant frag other than this
6688      branch's one, we cannot do the swap.  This does not apply to
6689      MIPS16 code, which uses variant frags for different purposes.  */
6690   if (!mips_opts.mips16
6691       && history[0].frag
6692       && history[0].frag->fr_type == rs_machine_dependent)
6693     return FALSE;
6694
6695   /* We do not swap with instructions that cannot architecturally
6696      be placed in a branch delay slot, such as SYNC or ERET.  We
6697      also refrain from swapping with a trap instruction, since it
6698      complicates trap handlers to have the trap instruction be in
6699      a delay slot.  */
6700   prev_pinfo = history[0].insn_mo->pinfo;
6701   if (prev_pinfo & INSN_NO_DELAY_SLOT)
6702     return FALSE;
6703
6704   /* Check for conflicts between the branch and the instructions
6705      before the candidate delay slot.  */
6706   if (nops_for_insn (0, history + 1, ip) > 0)
6707     return FALSE;
6708
6709   /* Check for conflicts between the swapped sequence and the
6710      target of the branch.  */
6711   if (nops_for_sequence (2, 0, history + 1, ip, history) > 0)
6712     return FALSE;
6713
6714   /* If the branch reads a register that the previous
6715      instruction sets, we can not swap.  */
6716   gpr_read = gpr_read_mask (ip);
6717   prev_gpr_write = gpr_write_mask (&history[0]);
6718   if (gpr_read & prev_gpr_write)
6719     return FALSE;
6720
6721   fpr_read = fpr_read_mask (ip);
6722   prev_fpr_write = fpr_write_mask (&history[0]);
6723   if (fpr_read & prev_fpr_write)
6724     return FALSE;
6725
6726   /* If the branch writes a register that the previous
6727      instruction sets, we can not swap.  */
6728   gpr_write = gpr_write_mask (ip);
6729   if (gpr_write & prev_gpr_write)
6730     return FALSE;
6731
6732   /* If the branch writes a register that the previous
6733      instruction reads, we can not swap.  */
6734   prev_gpr_read = gpr_read_mask (&history[0]);
6735   if (gpr_write & prev_gpr_read)
6736     return FALSE;
6737
6738   /* If one instruction sets a condition code and the
6739      other one uses a condition code, we can not swap.  */
6740   pinfo = ip->insn_mo->pinfo;
6741   if ((pinfo & INSN_READ_COND_CODE)
6742       && (prev_pinfo & INSN_WRITE_COND_CODE))
6743     return FALSE;
6744   if ((pinfo & INSN_WRITE_COND_CODE)
6745       && (prev_pinfo & INSN_READ_COND_CODE))
6746     return FALSE;
6747
6748   /* If the previous instruction uses the PC, we can not swap.  */
6749   prev_pinfo2 = history[0].insn_mo->pinfo2;
6750   if (prev_pinfo2 & INSN2_READ_PC)
6751     return FALSE;
6752
6753   /* If the previous instruction has an incorrect size for a fixed
6754      branch delay slot in microMIPS mode, we cannot swap.  */
6755   pinfo2 = ip->insn_mo->pinfo2;
6756   if (mips_opts.micromips
6757       && (pinfo2 & INSN2_BRANCH_DELAY_16BIT)
6758       && insn_length (history) != 2)
6759     return FALSE;
6760   if (mips_opts.micromips
6761       && (pinfo2 & INSN2_BRANCH_DELAY_32BIT)
6762       && insn_length (history) != 4)
6763     return FALSE;
6764
6765   /* On R5900 short loops need to be fixed by inserting a nop in
6766      the branch delay slots.
6767      A short loop can be terminated too early.  */
6768   if (mips_opts.arch == CPU_R5900
6769       /* Check if instruction has a parameter, ignore "j $31". */
6770       && (address_expr != NULL)
6771       /* Parameter must be 16 bit. */
6772       && (*reloc_type == BFD_RELOC_16_PCREL_S2)
6773       /* Branch to same segment. */
6774       && (S_GET_SEGMENT (address_expr->X_add_symbol) == now_seg)
6775       /* Branch to same code fragment. */
6776       && (symbol_get_frag (address_expr->X_add_symbol) == frag_now)
6777       /* Can only calculate branch offset if value is known. */
6778       && symbol_constant_p (address_expr->X_add_symbol)
6779       /* Check if branch is really conditional. */
6780       && !((ip->insn_opcode & 0xffff0000) == 0x10000000   /* beq $0,$0 */
6781         || (ip->insn_opcode & 0xffff0000) == 0x04010000   /* bgez $0 */
6782         || (ip->insn_opcode & 0xffff0000) == 0x04110000)) /* bgezal $0 */
6783     {
6784       int distance;
6785       /* Check if loop is shorter than 6 instructions including
6786          branch and delay slot.  */
6787       distance = frag_now_fix () - S_GET_VALUE (address_expr->X_add_symbol);
6788       if (distance <= 20)
6789         {
6790           int i;
6791           int rv;
6792
6793           rv = FALSE;
6794           /* When the loop includes branches or jumps,
6795              it is not a short loop. */
6796           for (i = 0; i < (distance / 4); i++)
6797             {
6798               if ((history[i].cleared_p)
6799                   || delayed_branch_p (&history[i]))
6800                 {
6801                   rv = TRUE;
6802                   break;
6803                 }
6804             }
6805           if (rv == FALSE)
6806             {
6807               /* Insert nop after branch to fix short loop. */
6808               return FALSE;
6809             }
6810         }
6811     }
6812
6813   return TRUE;
6814 }
6815
6816 /* Decide how we should add IP to the instruction stream.
6817    ADDRESS_EXPR is an operand of the instruction to be used with
6818    RELOC_TYPE.  */
6819
6820 static enum append_method
6821 get_append_method (struct mips_cl_insn *ip, expressionS *address_expr,
6822                    bfd_reloc_code_real_type *reloc_type)
6823 {
6824   /* The relaxed version of a macro sequence must be inherently
6825      hazard-free.  */
6826   if (mips_relax.sequence == 2)
6827     return APPEND_ADD;
6828
6829   /* We must not dabble with instructions in a ".set noreorder" block.  */
6830   if (mips_opts.noreorder)
6831     return APPEND_ADD;
6832
6833   /* Otherwise, it's our responsibility to fill branch delay slots.  */
6834   if (delayed_branch_p (ip))
6835     {
6836       if (!branch_likely_p (ip)
6837           && can_swap_branch_p (ip, address_expr, reloc_type))
6838         return APPEND_SWAP;
6839
6840       if (mips_opts.mips16
6841           && ISA_SUPPORTS_MIPS16E
6842           && gpr_read_mask (ip) != 0)
6843         return APPEND_ADD_COMPACT;
6844
6845       if (mips_opts.micromips
6846           && ((ip->insn_opcode & 0xffe0) == 0x4580
6847               || (!forced_insn_length
6848                   && ((ip->insn_opcode & 0xfc00) == 0xcc00
6849                       || (ip->insn_opcode & 0xdc00) == 0x8c00))
6850               || (ip->insn_opcode & 0xdfe00000) == 0x94000000
6851               || (ip->insn_opcode & 0xdc1f0000) == 0x94000000))
6852         return APPEND_ADD_COMPACT;
6853
6854       return APPEND_ADD_WITH_NOP;
6855     }
6856
6857   return APPEND_ADD;
6858 }
6859
6860 /* IP is an instruction whose opcode we have just changed, END points
6861    to the end of the opcode table processed.  Point IP->insn_mo to the
6862    new opcode's definition.  */
6863
6864 static void
6865 find_altered_opcode (struct mips_cl_insn *ip, const struct mips_opcode *end)
6866 {
6867   const struct mips_opcode *mo;
6868
6869   for (mo = ip->insn_mo; mo < end; mo++)
6870     if (mo->pinfo != INSN_MACRO
6871         && (ip->insn_opcode & mo->mask) == mo->match)
6872       {
6873         ip->insn_mo = mo;
6874         return;
6875       }
6876   abort ();
6877 }
6878
6879 /* IP is a MIPS16 instruction whose opcode we have just changed.
6880    Point IP->insn_mo to the new opcode's definition.  */
6881
6882 static void
6883 find_altered_mips16_opcode (struct mips_cl_insn *ip)
6884 {
6885   find_altered_opcode (ip, &mips16_opcodes[bfd_mips16_num_opcodes]);
6886 }
6887
6888 /* IP is a microMIPS instruction whose opcode we have just changed.
6889    Point IP->insn_mo to the new opcode's definition.  */
6890
6891 static void
6892 find_altered_micromips_opcode (struct mips_cl_insn *ip)
6893 {
6894   find_altered_opcode (ip, &micromips_opcodes[bfd_micromips_num_opcodes]);
6895 }
6896
6897 /* For microMIPS macros, we need to generate a local number label
6898    as the target of branches.  */
6899 #define MICROMIPS_LABEL_CHAR            '\037'
6900 static unsigned long micromips_target_label;
6901 static char micromips_target_name[32];
6902
6903 static char *
6904 micromips_label_name (void)
6905 {
6906   char *p = micromips_target_name;
6907   char symbol_name_temporary[24];
6908   unsigned long l;
6909   int i;
6910
6911   if (*p)
6912     return p;
6913
6914   i = 0;
6915   l = micromips_target_label;
6916 #ifdef LOCAL_LABEL_PREFIX
6917   *p++ = LOCAL_LABEL_PREFIX;
6918 #endif
6919   *p++ = 'L';
6920   *p++ = MICROMIPS_LABEL_CHAR;
6921   do
6922     {
6923       symbol_name_temporary[i++] = l % 10 + '0';
6924       l /= 10;
6925     }
6926   while (l != 0);
6927   while (i > 0)
6928     *p++ = symbol_name_temporary[--i];
6929   *p = '\0';
6930
6931   return micromips_target_name;
6932 }
6933
6934 static void
6935 micromips_label_expr (expressionS *label_expr)
6936 {
6937   label_expr->X_op = O_symbol;
6938   label_expr->X_add_symbol = symbol_find_or_make (micromips_label_name ());
6939   label_expr->X_add_number = 0;
6940 }
6941
6942 static void
6943 micromips_label_inc (void)
6944 {
6945   micromips_target_label++;
6946   *micromips_target_name = '\0';
6947 }
6948
6949 static void
6950 micromips_add_label (void)
6951 {
6952   symbolS *s;
6953
6954   s = colon (micromips_label_name ());
6955   micromips_label_inc ();
6956   S_SET_OTHER (s, ELF_ST_SET_MICROMIPS (S_GET_OTHER (s)));
6957 }
6958
6959 /* If assembling microMIPS code, then return the microMIPS reloc
6960    corresponding to the requested one if any.  Otherwise return
6961    the reloc unchanged.  */
6962
6963 static bfd_reloc_code_real_type
6964 micromips_map_reloc (bfd_reloc_code_real_type reloc)
6965 {
6966   static const bfd_reloc_code_real_type relocs[][2] =
6967     {
6968       /* Keep sorted incrementally by the left-hand key.  */
6969       { BFD_RELOC_16_PCREL_S2, BFD_RELOC_MICROMIPS_16_PCREL_S1 },
6970       { BFD_RELOC_GPREL16, BFD_RELOC_MICROMIPS_GPREL16 },
6971       { BFD_RELOC_MIPS_JMP, BFD_RELOC_MICROMIPS_JMP },
6972       { BFD_RELOC_HI16, BFD_RELOC_MICROMIPS_HI16 },
6973       { BFD_RELOC_HI16_S, BFD_RELOC_MICROMIPS_HI16_S },
6974       { BFD_RELOC_LO16, BFD_RELOC_MICROMIPS_LO16 },
6975       { BFD_RELOC_MIPS_LITERAL, BFD_RELOC_MICROMIPS_LITERAL },
6976       { BFD_RELOC_MIPS_GOT16, BFD_RELOC_MICROMIPS_GOT16 },
6977       { BFD_RELOC_MIPS_CALL16, BFD_RELOC_MICROMIPS_CALL16 },
6978       { BFD_RELOC_MIPS_GOT_HI16, BFD_RELOC_MICROMIPS_GOT_HI16 },
6979       { BFD_RELOC_MIPS_GOT_LO16, BFD_RELOC_MICROMIPS_GOT_LO16 },
6980       { BFD_RELOC_MIPS_CALL_HI16, BFD_RELOC_MICROMIPS_CALL_HI16 },
6981       { BFD_RELOC_MIPS_CALL_LO16, BFD_RELOC_MICROMIPS_CALL_LO16 },
6982       { BFD_RELOC_MIPS_SUB, BFD_RELOC_MICROMIPS_SUB },
6983       { BFD_RELOC_MIPS_GOT_PAGE, BFD_RELOC_MICROMIPS_GOT_PAGE },
6984       { BFD_RELOC_MIPS_GOT_OFST, BFD_RELOC_MICROMIPS_GOT_OFST },
6985       { BFD_RELOC_MIPS_GOT_DISP, BFD_RELOC_MICROMIPS_GOT_DISP },
6986       { BFD_RELOC_MIPS_HIGHEST, BFD_RELOC_MICROMIPS_HIGHEST },
6987       { BFD_RELOC_MIPS_HIGHER, BFD_RELOC_MICROMIPS_HIGHER },
6988       { BFD_RELOC_MIPS_SCN_DISP, BFD_RELOC_MICROMIPS_SCN_DISP },
6989       { BFD_RELOC_MIPS_TLS_GD, BFD_RELOC_MICROMIPS_TLS_GD },
6990       { BFD_RELOC_MIPS_TLS_LDM, BFD_RELOC_MICROMIPS_TLS_LDM },
6991       { BFD_RELOC_MIPS_TLS_DTPREL_HI16, BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16 },
6992       { BFD_RELOC_MIPS_TLS_DTPREL_LO16, BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16 },
6993       { BFD_RELOC_MIPS_TLS_GOTTPREL, BFD_RELOC_MICROMIPS_TLS_GOTTPREL },
6994       { BFD_RELOC_MIPS_TLS_TPREL_HI16, BFD_RELOC_MICROMIPS_TLS_TPREL_HI16 },
6995       { BFD_RELOC_MIPS_TLS_TPREL_LO16, BFD_RELOC_MICROMIPS_TLS_TPREL_LO16 }
6996     };
6997   bfd_reloc_code_real_type r;
6998   size_t i;
6999
7000   if (!mips_opts.micromips)
7001     return reloc;
7002   for (i = 0; i < ARRAY_SIZE (relocs); i++)
7003     {
7004       r = relocs[i][0];
7005       if (r > reloc)
7006         return reloc;
7007       if (r == reloc)
7008         return relocs[i][1];
7009     }
7010   return reloc;
7011 }
7012
7013 /* Try to resolve relocation RELOC against constant OPERAND at assembly time.
7014    Return true on success, storing the resolved value in RESULT.  */
7015
7016 static bfd_boolean
7017 calculate_reloc (bfd_reloc_code_real_type reloc, offsetT operand,
7018                  offsetT *result)
7019 {
7020   switch (reloc)
7021     {
7022     case BFD_RELOC_MIPS_HIGHEST:
7023     case BFD_RELOC_MICROMIPS_HIGHEST:
7024       *result = ((operand + 0x800080008000ull) >> 48) & 0xffff;
7025       return TRUE;
7026
7027     case BFD_RELOC_MIPS_HIGHER:
7028     case BFD_RELOC_MICROMIPS_HIGHER:
7029       *result = ((operand + 0x80008000ull) >> 32) & 0xffff;
7030       return TRUE;
7031
7032     case BFD_RELOC_HI16_S:
7033     case BFD_RELOC_HI16_S_PCREL:
7034     case BFD_RELOC_MICROMIPS_HI16_S:
7035     case BFD_RELOC_MIPS16_HI16_S:
7036       *result = ((operand + 0x8000) >> 16) & 0xffff;
7037       return TRUE;
7038
7039     case BFD_RELOC_HI16:
7040     case BFD_RELOC_MICROMIPS_HI16:
7041     case BFD_RELOC_MIPS16_HI16:
7042       *result = (operand >> 16) & 0xffff;
7043       return TRUE;
7044
7045     case BFD_RELOC_LO16:
7046     case BFD_RELOC_LO16_PCREL:
7047     case BFD_RELOC_MICROMIPS_LO16:
7048     case BFD_RELOC_MIPS16_LO16:
7049       *result = operand & 0xffff;
7050       return TRUE;
7051
7052     case BFD_RELOC_UNUSED:
7053       *result = operand;
7054       return TRUE;
7055
7056     default:
7057       return FALSE;
7058     }
7059 }
7060
7061 /* Output an instruction.  IP is the instruction information.
7062    ADDRESS_EXPR is an operand of the instruction to be used with
7063    RELOC_TYPE.  EXPANSIONP is true if the instruction is part of
7064    a macro expansion.  */
7065
7066 static void
7067 append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
7068              bfd_reloc_code_real_type *reloc_type, bfd_boolean expansionp)
7069 {
7070   unsigned long prev_pinfo2, pinfo;
7071   bfd_boolean relaxed_branch = FALSE;
7072   enum append_method method;
7073   bfd_boolean relax32;
7074   int branch_disp;
7075
7076   if (mips_fix_loongson2f && !HAVE_CODE_COMPRESSION)
7077     fix_loongson2f (ip);
7078
7079   file_ase_mips16 |= mips_opts.mips16;
7080   file_ase_micromips |= mips_opts.micromips;
7081
7082   prev_pinfo2 = history[0].insn_mo->pinfo2;
7083   pinfo = ip->insn_mo->pinfo;
7084
7085   /* Don't raise alarm about `nods' frags as they'll fill in the right
7086      kind of nop in relaxation if required.  */
7087   if (mips_opts.micromips
7088       && !expansionp
7089       && !(history[0].frag
7090            && history[0].frag->fr_type == rs_machine_dependent
7091            && RELAX_MICROMIPS_P (history[0].frag->fr_subtype)
7092            && RELAX_MICROMIPS_NODS (history[0].frag->fr_subtype))
7093       && (((prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
7094            && micromips_insn_length (ip->insn_mo) != 2)
7095           || ((prev_pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
7096               && micromips_insn_length (ip->insn_mo) != 4)))
7097     as_warn (_("wrong size instruction in a %u-bit branch delay slot"),
7098              (prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0 ? 16 : 32);
7099
7100   if (address_expr == NULL)
7101     ip->complete_p = 1;
7102   else if (reloc_type[0] <= BFD_RELOC_UNUSED
7103            && reloc_type[1] == BFD_RELOC_UNUSED
7104            && reloc_type[2] == BFD_RELOC_UNUSED
7105            && address_expr->X_op == O_constant)
7106     {
7107       switch (*reloc_type)
7108         {
7109         case BFD_RELOC_MIPS_JMP:
7110           {
7111             int shift;
7112
7113             /* Shift is 2, unusually, for microMIPS JALX.  */
7114             shift = (mips_opts.micromips
7115                      && strcmp (ip->insn_mo->name, "jalx") != 0) ? 1 : 2;
7116             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7117               as_bad (_("jump to misaligned address (0x%lx)"),
7118                       (unsigned long) address_expr->X_add_number);
7119             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7120                                 & 0x3ffffff);
7121             ip->complete_p = 1;
7122           }
7123           break;
7124
7125         case BFD_RELOC_MIPS16_JMP:
7126           if ((address_expr->X_add_number & 3) != 0)
7127             as_bad (_("jump to misaligned address (0x%lx)"),
7128                     (unsigned long) address_expr->X_add_number);
7129           ip->insn_opcode |=
7130             (((address_expr->X_add_number & 0x7c0000) << 3)
7131                | ((address_expr->X_add_number & 0xf800000) >> 7)
7132                | ((address_expr->X_add_number & 0x3fffc) >> 2));
7133           ip->complete_p = 1;
7134           break;
7135
7136         case BFD_RELOC_16_PCREL_S2:
7137           {
7138             int shift;
7139
7140             shift = mips_opts.micromips ? 1 : 2;
7141             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7142               as_bad (_("branch to misaligned address (0x%lx)"),
7143                       (unsigned long) address_expr->X_add_number);
7144             if (!mips_relax_branch)
7145               {
7146                 if ((address_expr->X_add_number + (1 << (shift + 15)))
7147                     & ~((1 << (shift + 16)) - 1))
7148                   as_bad (_("branch address range overflow (0x%lx)"),
7149                           (unsigned long) address_expr->X_add_number);
7150                 ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7151                                     & 0xffff);
7152               }
7153           }
7154           break;
7155
7156         case BFD_RELOC_MIPS_21_PCREL_S2:
7157           {
7158             int shift;
7159
7160             shift = 2;
7161             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7162               as_bad (_("branch to misaligned address (0x%lx)"),
7163                       (unsigned long) address_expr->X_add_number);
7164             if ((address_expr->X_add_number + (1 << (shift + 20)))
7165                 & ~((1 << (shift + 21)) - 1))
7166               as_bad (_("branch address range overflow (0x%lx)"),
7167                       (unsigned long) address_expr->X_add_number);
7168             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7169                                 & 0x1fffff);
7170           }
7171           break;
7172
7173         case BFD_RELOC_MIPS_26_PCREL_S2:
7174           {
7175             int shift;
7176
7177             shift = 2;
7178             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7179               as_bad (_("branch to misaligned address (0x%lx)"),
7180                       (unsigned long) address_expr->X_add_number);
7181             if ((address_expr->X_add_number + (1 << (shift + 25)))
7182                 & ~((1 << (shift + 26)) - 1))
7183               as_bad (_("branch address range overflow (0x%lx)"),
7184                       (unsigned long) address_expr->X_add_number);
7185             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7186                                 & 0x3ffffff);
7187           }
7188           break;
7189
7190         default:
7191           {
7192             offsetT value;
7193
7194             if (calculate_reloc (*reloc_type, address_expr->X_add_number,
7195                                  &value))
7196               {
7197                 ip->insn_opcode |= value & 0xffff;
7198                 ip->complete_p = 1;
7199               }
7200           }
7201           break;
7202         }
7203     }
7204
7205   if (mips_relax.sequence != 2 && !mips_opts.noreorder)
7206     {
7207       /* There are a lot of optimizations we could do that we don't.
7208          In particular, we do not, in general, reorder instructions.
7209          If you use gcc with optimization, it will reorder
7210          instructions and generally do much more optimization then we
7211          do here; repeating all that work in the assembler would only
7212          benefit hand written assembly code, and does not seem worth
7213          it.  */
7214       int nops = (mips_optimize == 0
7215                   ? nops_for_insn (0, history, NULL)
7216                   : nops_for_insn_or_target (0, history, ip));
7217       if (nops > 0)
7218         {
7219           fragS *old_frag;
7220           unsigned long old_frag_offset;
7221           int i;
7222
7223           old_frag = frag_now;
7224           old_frag_offset = frag_now_fix ();
7225
7226           for (i = 0; i < nops; i++)
7227             add_fixed_insn (NOP_INSN);
7228           insert_into_history (0, nops, NOP_INSN);
7229
7230           if (listing)
7231             {
7232               listing_prev_line ();
7233               /* We may be at the start of a variant frag.  In case we
7234                  are, make sure there is enough space for the frag
7235                  after the frags created by listing_prev_line.  The
7236                  argument to frag_grow here must be at least as large
7237                  as the argument to all other calls to frag_grow in
7238                  this file.  We don't have to worry about being in the
7239                  middle of a variant frag, because the variants insert
7240                  all needed nop instructions themselves.  */
7241               frag_grow (40);
7242             }
7243
7244           mips_move_text_labels ();
7245
7246 #ifndef NO_ECOFF_DEBUGGING
7247           if (ECOFF_DEBUGGING)
7248             ecoff_fix_loc (old_frag, old_frag_offset);
7249 #endif
7250         }
7251     }
7252   else if (mips_relax.sequence != 2 && prev_nop_frag != NULL)
7253     {
7254       int nops;
7255
7256       /* Work out how many nops in prev_nop_frag are needed by IP,
7257          ignoring hazards generated by the first prev_nop_frag_since
7258          instructions.  */
7259       nops = nops_for_insn_or_target (prev_nop_frag_since, history, ip);
7260       gas_assert (nops <= prev_nop_frag_holds);
7261
7262       /* Enforce NOPS as a minimum.  */
7263       if (nops > prev_nop_frag_required)
7264         prev_nop_frag_required = nops;
7265
7266       if (prev_nop_frag_holds == prev_nop_frag_required)
7267         {
7268           /* Settle for the current number of nops.  Update the history
7269              accordingly (for the benefit of any future .set reorder code).  */
7270           prev_nop_frag = NULL;
7271           insert_into_history (prev_nop_frag_since,
7272                                prev_nop_frag_holds, NOP_INSN);
7273         }
7274       else
7275         {
7276           /* Allow this instruction to replace one of the nops that was
7277              tentatively added to prev_nop_frag.  */
7278           prev_nop_frag->fr_fix -= NOP_INSN_SIZE;
7279           prev_nop_frag_holds--;
7280           prev_nop_frag_since++;
7281         }
7282     }
7283
7284   method = get_append_method (ip, address_expr, reloc_type);
7285   branch_disp = method == APPEND_SWAP ? insn_length (history) : 0;
7286
7287   dwarf2_emit_insn (0);
7288   /* We want MIPS16 and microMIPS debug info to use ISA-encoded addresses,
7289      so "move" the instruction address accordingly.
7290
7291      Also, it doesn't seem appropriate for the assembler to reorder .loc
7292      entries.  If this instruction is a branch that we are going to swap
7293      with the previous instruction, the two instructions should be
7294      treated as a unit, and the debug information for both instructions
7295      should refer to the start of the branch sequence.  Using the
7296      current position is certainly wrong when swapping a 32-bit branch
7297      and a 16-bit delay slot, since the current position would then be
7298      in the middle of a branch.  */
7299   dwarf2_move_insn ((HAVE_CODE_COMPRESSION ? 1 : 0) - branch_disp);
7300
7301   relax32 = (mips_relax_branch
7302              /* Don't try branch relaxation within .set nomacro, or within
7303                 .set noat if we use $at for PIC computations.  If it turns
7304                 out that the branch was out-of-range, we'll get an error.  */
7305              && !mips_opts.warn_about_macros
7306              && (mips_opts.at || mips_pic == NO_PIC)
7307              /* Don't relax BPOSGE32/64 or BC1ANY2T/F and BC1ANY4T/F
7308                 as they have no complementing branches.  */
7309              && !(ip->insn_mo->ase & (ASE_MIPS3D | ASE_DSP64 | ASE_DSP)));
7310
7311   if (!HAVE_CODE_COMPRESSION
7312       && address_expr
7313       && relax32
7314       && *reloc_type == BFD_RELOC_16_PCREL_S2
7315       && delayed_branch_p (ip))
7316     {
7317       relaxed_branch = TRUE;
7318       add_relaxed_insn (ip, (relaxed_branch_length
7319                              (NULL, NULL,
7320                               uncond_branch_p (ip) ? -1
7321                               : branch_likely_p (ip) ? 1
7322                               : 0)), 4,
7323                         RELAX_BRANCH_ENCODE
7324                         (AT,
7325                          uncond_branch_p (ip),
7326                          branch_likely_p (ip),
7327                          pinfo & INSN_WRITE_GPR_31,
7328                          0),
7329                         address_expr->X_add_symbol,
7330                         address_expr->X_add_number);
7331       *reloc_type = BFD_RELOC_UNUSED;
7332     }
7333   else if (mips_opts.micromips
7334            && address_expr
7335            && ((relax32 && *reloc_type == BFD_RELOC_16_PCREL_S2)
7336                || *reloc_type > BFD_RELOC_UNUSED)
7337            && (delayed_branch_p (ip) || compact_branch_p (ip))
7338            /* Don't try branch relaxation when users specify
7339               16-bit/32-bit instructions.  */
7340            && !forced_insn_length)
7341     {
7342       bfd_boolean relax16 = (method != APPEND_ADD_COMPACT
7343                              && *reloc_type > BFD_RELOC_UNUSED);
7344       int type = relax16 ? *reloc_type - BFD_RELOC_UNUSED : 0;
7345       int uncond = uncond_branch_p (ip) ? -1 : 0;
7346       int compact = compact_branch_p (ip) || method == APPEND_ADD_COMPACT;
7347       int nods = method == APPEND_ADD_WITH_NOP;
7348       int al = pinfo & INSN_WRITE_GPR_31;
7349       int length32 = nods ? 8 : 4;
7350
7351       gas_assert (address_expr != NULL);
7352       gas_assert (!mips_relax.sequence);
7353
7354       relaxed_branch = TRUE;
7355       if (nods)
7356         method = APPEND_ADD;
7357       if (relax32)
7358         length32 = relaxed_micromips_32bit_branch_length (NULL, NULL, uncond);
7359       add_relaxed_insn (ip, length32, relax16 ? 2 : 4,
7360                         RELAX_MICROMIPS_ENCODE (type, AT, mips_opts.insn32,
7361                                                 uncond, compact, al, nods,
7362                                                 relax32, 0, 0),
7363                         address_expr->X_add_symbol,
7364                         address_expr->X_add_number);
7365       *reloc_type = BFD_RELOC_UNUSED;
7366     }
7367   else if (mips_opts.mips16 && *reloc_type > BFD_RELOC_UNUSED)
7368     {
7369       bfd_boolean require_unextended;
7370       bfd_boolean require_extended;
7371       symbolS *symbol;
7372       offsetT offset;
7373
7374       if (forced_insn_length != 0)
7375         {
7376           require_unextended = forced_insn_length == 2;
7377           require_extended = forced_insn_length == 4;
7378         }
7379       else
7380         {
7381           require_unextended = (mips_opts.noautoextend
7382                                 && !mips_opcode_32bit_p (ip->insn_mo));
7383           require_extended = 0;
7384         }
7385
7386       /* We need to set up a variant frag.  */
7387       gas_assert (address_expr != NULL);
7388       /* Pass any `O_symbol' expression unchanged as an `expr_section'
7389          symbol created by `make_expr_symbol' may not get a necessary
7390          external relocation produced.  */
7391       if (address_expr->X_op == O_symbol)
7392         {
7393           symbol = address_expr->X_add_symbol;
7394           offset = address_expr->X_add_number;
7395         }
7396       else
7397         {
7398           symbol = make_expr_symbol (address_expr);
7399           offset = 0;
7400         }
7401       add_relaxed_insn (ip, 4, 0,
7402                         RELAX_MIPS16_ENCODE
7403                         (*reloc_type - BFD_RELOC_UNUSED,
7404                          require_unextended, require_extended,
7405                          delayed_branch_p (&history[0]),
7406                          history[0].mips16_absolute_jump_p),
7407                         symbol, offset);
7408     }
7409   else if (mips_opts.mips16 && insn_length (ip) == 2)
7410     {
7411       if (!delayed_branch_p (ip))
7412         /* Make sure there is enough room to swap this instruction with
7413            a following jump instruction.  */
7414         frag_grow (6);
7415       add_fixed_insn (ip);
7416     }
7417   else
7418     {
7419       if (mips_opts.mips16
7420           && mips_opts.noreorder
7421           && delayed_branch_p (&history[0]))
7422         as_warn (_("extended instruction in delay slot"));
7423
7424       if (mips_relax.sequence)
7425         {
7426           /* If we've reached the end of this frag, turn it into a variant
7427              frag and record the information for the instructions we've
7428              written so far.  */
7429           if (frag_room () < 4)
7430             relax_close_frag ();
7431           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (ip);
7432         }
7433
7434       if (mips_relax.sequence != 2)
7435         {
7436           if (mips_macro_warning.first_insn_sizes[0] == 0)
7437             mips_macro_warning.first_insn_sizes[0] = insn_length (ip);
7438           mips_macro_warning.sizes[0] += insn_length (ip);
7439           mips_macro_warning.insns[0]++;
7440         }
7441       if (mips_relax.sequence != 1)
7442         {
7443           if (mips_macro_warning.first_insn_sizes[1] == 0)
7444             mips_macro_warning.first_insn_sizes[1] = insn_length (ip);
7445           mips_macro_warning.sizes[1] += insn_length (ip);
7446           mips_macro_warning.insns[1]++;
7447         }
7448
7449       if (mips_opts.mips16)
7450         {
7451           ip->fixed_p = 1;
7452           ip->mips16_absolute_jump_p = (*reloc_type == BFD_RELOC_MIPS16_JMP);
7453         }
7454       add_fixed_insn (ip);
7455     }
7456
7457   if (!ip->complete_p && *reloc_type < BFD_RELOC_UNUSED)
7458     {
7459       bfd_reloc_code_real_type final_type[3];
7460       reloc_howto_type *howto0;
7461       reloc_howto_type *howto;
7462       int i;
7463
7464       /* Perform any necessary conversion to microMIPS relocations
7465          and find out how many relocations there actually are.  */
7466       for (i = 0; i < 3 && reloc_type[i] != BFD_RELOC_UNUSED; i++)
7467         final_type[i] = micromips_map_reloc (reloc_type[i]);
7468
7469       /* In a compound relocation, it is the final (outermost)
7470          operator that determines the relocated field.  */
7471       howto = howto0 = bfd_reloc_type_lookup (stdoutput, final_type[i - 1]);
7472       if (!howto)
7473         abort ();
7474
7475       if (i > 1)
7476         howto0 = bfd_reloc_type_lookup (stdoutput, final_type[0]);
7477       ip->fixp[0] = fix_new_exp (ip->frag, ip->where,
7478                                  bfd_get_reloc_size (howto),
7479                                  address_expr,
7480                                  howto0 && howto0->pc_relative,
7481                                  final_type[0]);
7482
7483       /* Tag symbols that have a R_MIPS16_26 relocation against them.  */
7484       if (final_type[0] == BFD_RELOC_MIPS16_JMP && ip->fixp[0]->fx_addsy)
7485         *symbol_get_tc (ip->fixp[0]->fx_addsy) = 1;
7486
7487       /* These relocations can have an addend that won't fit in
7488          4 octets for 64bit assembly.  */
7489       if (GPR_SIZE == 64
7490           && ! howto->partial_inplace
7491           && (reloc_type[0] == BFD_RELOC_16
7492               || reloc_type[0] == BFD_RELOC_32
7493               || reloc_type[0] == BFD_RELOC_MIPS_JMP
7494               || reloc_type[0] == BFD_RELOC_GPREL16
7495               || reloc_type[0] == BFD_RELOC_MIPS_LITERAL
7496               || reloc_type[0] == BFD_RELOC_GPREL32
7497               || reloc_type[0] == BFD_RELOC_64
7498               || reloc_type[0] == BFD_RELOC_CTOR
7499               || reloc_type[0] == BFD_RELOC_MIPS_SUB
7500               || reloc_type[0] == BFD_RELOC_MIPS_HIGHEST
7501               || reloc_type[0] == BFD_RELOC_MIPS_HIGHER
7502               || reloc_type[0] == BFD_RELOC_MIPS_SCN_DISP
7503               || reloc_type[0] == BFD_RELOC_MIPS_REL16
7504               || reloc_type[0] == BFD_RELOC_MIPS_RELGOT
7505               || reloc_type[0] == BFD_RELOC_MIPS16_GPREL
7506               || hi16_reloc_p (reloc_type[0])
7507               || lo16_reloc_p (reloc_type[0])))
7508         ip->fixp[0]->fx_no_overflow = 1;
7509
7510       /* These relocations can have an addend that won't fit in 2 octets.  */
7511       if (reloc_type[0] == BFD_RELOC_MICROMIPS_7_PCREL_S1
7512           || reloc_type[0] == BFD_RELOC_MICROMIPS_10_PCREL_S1)
7513         ip->fixp[0]->fx_no_overflow = 1;
7514
7515       if (mips_relax.sequence)
7516         {
7517           if (mips_relax.first_fixup == 0)
7518             mips_relax.first_fixup = ip->fixp[0];
7519         }
7520       else if (reloc_needs_lo_p (*reloc_type))
7521         {
7522           struct mips_hi_fixup *hi_fixup;
7523
7524           /* Reuse the last entry if it already has a matching %lo.  */
7525           hi_fixup = mips_hi_fixup_list;
7526           if (hi_fixup == 0
7527               || !fixup_has_matching_lo_p (hi_fixup->fixp))
7528             {
7529               hi_fixup = XNEW (struct mips_hi_fixup);
7530               hi_fixup->next = mips_hi_fixup_list;
7531               mips_hi_fixup_list = hi_fixup;
7532             }
7533           hi_fixup->fixp = ip->fixp[0];
7534           hi_fixup->seg = now_seg;
7535         }
7536
7537       /* Add fixups for the second and third relocations, if given.
7538          Note that the ABI allows the second relocation to be
7539          against RSS_UNDEF, RSS_GP, RSS_GP0 or RSS_LOC.  At the
7540          moment we only use RSS_UNDEF, but we could add support
7541          for the others if it ever becomes necessary.  */
7542       for (i = 1; i < 3; i++)
7543         if (reloc_type[i] != BFD_RELOC_UNUSED)
7544           {
7545             ip->fixp[i] = fix_new (ip->frag, ip->where,
7546                                    ip->fixp[0]->fx_size, NULL, 0,
7547                                    FALSE, final_type[i]);
7548
7549             /* Use fx_tcbit to mark compound relocs.  */
7550             ip->fixp[0]->fx_tcbit = 1;
7551             ip->fixp[i]->fx_tcbit = 1;
7552           }
7553     }
7554
7555   /* Update the register mask information.  */
7556   mips_gprmask |= gpr_read_mask (ip) | gpr_write_mask (ip);
7557   mips_cprmask[1] |= fpr_read_mask (ip) | fpr_write_mask (ip);
7558
7559   switch (method)
7560     {
7561     case APPEND_ADD:
7562       insert_into_history (0, 1, ip);
7563       break;
7564
7565     case APPEND_ADD_WITH_NOP:
7566       {
7567         struct mips_cl_insn *nop;
7568
7569         insert_into_history (0, 1, ip);
7570         nop = get_delay_slot_nop (ip);
7571         add_fixed_insn (nop);
7572         insert_into_history (0, 1, nop);
7573         if (mips_relax.sequence)
7574           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (nop);
7575       }
7576       break;
7577
7578     case APPEND_ADD_COMPACT:
7579       /* Convert MIPS16 jr/jalr into a "compact" jump.  */
7580       if (mips_opts.mips16)
7581         {
7582           ip->insn_opcode |= 0x0080;
7583           find_altered_mips16_opcode (ip);
7584         }
7585       /* Convert microMIPS instructions.  */
7586       else if (mips_opts.micromips)
7587         {
7588           /* jr16->jrc */
7589           if ((ip->insn_opcode & 0xffe0) == 0x4580)
7590             ip->insn_opcode |= 0x0020;
7591           /* b16->bc */
7592           else if ((ip->insn_opcode & 0xfc00) == 0xcc00)
7593             ip->insn_opcode = 0x40e00000;
7594           /* beqz16->beqzc, bnez16->bnezc */
7595           else if ((ip->insn_opcode & 0xdc00) == 0x8c00)
7596             {
7597               unsigned long regno;
7598
7599               regno = ip->insn_opcode >> MICROMIPSOP_SH_MD;
7600               regno &= MICROMIPSOP_MASK_MD;
7601               regno = micromips_to_32_reg_d_map[regno];
7602               ip->insn_opcode = (((ip->insn_opcode << 9) & 0x00400000)
7603                                  | (regno << MICROMIPSOP_SH_RS)
7604                                  | 0x40a00000) ^ 0x00400000;
7605             }
7606           /* beqz->beqzc, bnez->bnezc */
7607           else if ((ip->insn_opcode & 0xdfe00000) == 0x94000000)
7608             ip->insn_opcode = ((ip->insn_opcode & 0x001f0000)
7609                                | ((ip->insn_opcode >> 7) & 0x00400000)
7610                                | 0x40a00000) ^ 0x00400000;
7611           /* beq $0->beqzc, bne $0->bnezc */
7612           else if ((ip->insn_opcode & 0xdc1f0000) == 0x94000000)
7613             ip->insn_opcode = (((ip->insn_opcode >>
7614                                  (MICROMIPSOP_SH_RT - MICROMIPSOP_SH_RS))
7615                                 & (MICROMIPSOP_MASK_RS << MICROMIPSOP_SH_RS))
7616                                | ((ip->insn_opcode >> 7) & 0x00400000)
7617                                | 0x40a00000) ^ 0x00400000;
7618           else
7619             abort ();
7620           find_altered_micromips_opcode (ip);
7621         }
7622       else
7623         abort ();
7624       install_insn (ip);
7625       insert_into_history (0, 1, ip);
7626       break;
7627
7628     case APPEND_SWAP:
7629       {
7630         struct mips_cl_insn delay = history[0];
7631
7632         if (relaxed_branch || delay.frag != ip->frag)
7633           {
7634             /* Add the delay slot instruction to the end of the
7635                current frag and shrink the fixed part of the
7636                original frag.  If the branch occupies the tail of
7637                the latter, move it backwards to cover the gap.  */
7638             delay.frag->fr_fix -= branch_disp;
7639             if (delay.frag == ip->frag)
7640               move_insn (ip, ip->frag, ip->where - branch_disp);
7641             add_fixed_insn (&delay);
7642           }
7643         else
7644           {
7645             /* If this is not a relaxed branch and we are in the
7646                same frag, then just swap the instructions.  */
7647             move_insn (ip, delay.frag, delay.where);
7648             move_insn (&delay, ip->frag, ip->where + insn_length (ip));
7649           }
7650         history[0] = *ip;
7651         delay.fixed_p = 1;
7652         insert_into_history (0, 1, &delay);
7653       }
7654       break;
7655     }
7656
7657   /* If we have just completed an unconditional branch, clear the history.  */
7658   if ((delayed_branch_p (&history[1]) && uncond_branch_p (&history[1]))
7659       || (compact_branch_p (&history[0]) && uncond_branch_p (&history[0])))
7660     {
7661       unsigned int i;
7662
7663       mips_no_prev_insn ();
7664
7665       for (i = 0; i < ARRAY_SIZE (history); i++)
7666         history[i].cleared_p = 1;
7667     }
7668
7669   /* We need to emit a label at the end of branch-likely macros.  */
7670   if (emit_branch_likely_macro)
7671     {
7672       emit_branch_likely_macro = FALSE;
7673       micromips_add_label ();
7674     }
7675
7676   /* We just output an insn, so the next one doesn't have a label.  */
7677   mips_clear_insn_labels ();
7678 }
7679
7680 /* Forget that there was any previous instruction or label.
7681    When BRANCH is true, the branch history is also flushed.  */
7682
7683 static void
7684 mips_no_prev_insn (void)
7685 {
7686   prev_nop_frag = NULL;
7687   insert_into_history (0, ARRAY_SIZE (history), NOP_INSN);
7688   mips_clear_insn_labels ();
7689 }
7690
7691 /* This function must be called before we emit something other than
7692    instructions.  It is like mips_no_prev_insn except that it inserts
7693    any NOPS that might be needed by previous instructions.  */
7694
7695 void
7696 mips_emit_delays (void)
7697 {
7698   if (! mips_opts.noreorder)
7699     {
7700       int nops = nops_for_insn (0, history, NULL);
7701       if (nops > 0)
7702         {
7703           while (nops-- > 0)
7704             add_fixed_insn (NOP_INSN);
7705           mips_move_text_labels ();
7706         }
7707     }
7708   mips_no_prev_insn ();
7709 }
7710
7711 /* Start a (possibly nested) noreorder block.  */
7712
7713 static void
7714 start_noreorder (void)
7715 {
7716   if (mips_opts.noreorder == 0)
7717     {
7718       unsigned int i;
7719       int nops;
7720
7721       /* None of the instructions before the .set noreorder can be moved.  */
7722       for (i = 0; i < ARRAY_SIZE (history); i++)
7723         history[i].fixed_p = 1;
7724
7725       /* Insert any nops that might be needed between the .set noreorder
7726          block and the previous instructions.  We will later remove any
7727          nops that turn out not to be needed.  */
7728       nops = nops_for_insn (0, history, NULL);
7729       if (nops > 0)
7730         {
7731           if (mips_optimize != 0)
7732             {
7733               /* Record the frag which holds the nop instructions, so
7734                  that we can remove them if we don't need them.  */
7735               frag_grow (nops * NOP_INSN_SIZE);
7736               prev_nop_frag = frag_now;
7737               prev_nop_frag_holds = nops;
7738               prev_nop_frag_required = 0;
7739               prev_nop_frag_since = 0;
7740             }
7741
7742           for (; nops > 0; --nops)
7743             add_fixed_insn (NOP_INSN);
7744
7745           /* Move on to a new frag, so that it is safe to simply
7746              decrease the size of prev_nop_frag.  */
7747           frag_wane (frag_now);
7748           frag_new (0);
7749           mips_move_text_labels ();
7750         }
7751       mips_mark_labels ();
7752       mips_clear_insn_labels ();
7753     }
7754   mips_opts.noreorder++;
7755   mips_any_noreorder = 1;
7756 }
7757
7758 /* End a nested noreorder block.  */
7759
7760 static void
7761 end_noreorder (void)
7762 {
7763   mips_opts.noreorder--;
7764   if (mips_opts.noreorder == 0 && prev_nop_frag != NULL)
7765     {
7766       /* Commit to inserting prev_nop_frag_required nops and go back to
7767          handling nop insertion the .set reorder way.  */
7768       prev_nop_frag->fr_fix -= ((prev_nop_frag_holds - prev_nop_frag_required)
7769                                 * NOP_INSN_SIZE);
7770       insert_into_history (prev_nop_frag_since,
7771                            prev_nop_frag_required, NOP_INSN);
7772       prev_nop_frag = NULL;
7773     }
7774 }
7775
7776 /* Sign-extend 32-bit mode constants that have bit 31 set and all
7777    higher bits unset.  */
7778
7779 static void
7780 normalize_constant_expr (expressionS *ex)
7781 {
7782   if (ex->X_op == O_constant
7783       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7784     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7785                         - 0x80000000);
7786 }
7787
7788 /* Sign-extend 32-bit mode address offsets that have bit 31 set and
7789    all higher bits unset.  */
7790
7791 static void
7792 normalize_address_expr (expressionS *ex)
7793 {
7794   if (((ex->X_op == O_constant && HAVE_32BIT_ADDRESSES)
7795         || (ex->X_op == O_symbol && HAVE_32BIT_SYMBOLS))
7796       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7797     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7798                         - 0x80000000);
7799 }
7800
7801 /* Try to match TOKENS against OPCODE, storing the result in INSN.
7802    Return true if the match was successful.
7803
7804    OPCODE_EXTRA is a value that should be ORed into the opcode
7805    (used for VU0 channel suffixes, etc.).  MORE_ALTS is true if
7806    there are more alternatives after OPCODE and SOFT_MATCH is
7807    as for mips_arg_info.  */
7808
7809 static bfd_boolean
7810 match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
7811             struct mips_operand_token *tokens, unsigned int opcode_extra,
7812             bfd_boolean lax_match, bfd_boolean complete_p)
7813 {
7814   const char *args;
7815   struct mips_arg_info arg;
7816   const struct mips_operand *operand;
7817   char c;
7818
7819   imm_expr.X_op = O_absent;
7820   offset_expr.X_op = O_absent;
7821   offset_reloc[0] = BFD_RELOC_UNUSED;
7822   offset_reloc[1] = BFD_RELOC_UNUSED;
7823   offset_reloc[2] = BFD_RELOC_UNUSED;
7824
7825   create_insn (insn, opcode);
7826   /* When no opcode suffix is specified, assume ".xyzw". */
7827   if ((opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0 && opcode_extra == 0)
7828     insn->insn_opcode |= 0xf << mips_vu0_channel_mask.lsb;
7829   else
7830     insn->insn_opcode |= opcode_extra;
7831   memset (&arg, 0, sizeof (arg));
7832   arg.insn = insn;
7833   arg.token = tokens;
7834   arg.argnum = 1;
7835   arg.last_regno = ILLEGAL_REG;
7836   arg.dest_regno = ILLEGAL_REG;
7837   arg.lax_match = lax_match;
7838   for (args = opcode->args;; ++args)
7839     {
7840       if (arg.token->type == OT_END)
7841         {
7842           /* Handle unary instructions in which only one operand is given.
7843              The source is then the same as the destination.  */
7844           if (arg.opnum == 1 && *args == ',')
7845             {
7846               operand = (mips_opts.micromips
7847                          ? decode_micromips_operand (args + 1)
7848                          : decode_mips_operand (args + 1));
7849               if (operand && mips_optional_operand_p (operand))
7850                 {
7851                   arg.token = tokens;
7852                   arg.argnum = 1;
7853                   continue;
7854                 }
7855             }
7856
7857           /* Treat elided base registers as $0.  */
7858           if (strcmp (args, "(b)") == 0)
7859             args += 3;
7860
7861           if (args[0] == '+')
7862             switch (args[1])
7863               {
7864               case 'K':
7865               case 'N':
7866                 /* The register suffix is optional. */
7867                 args += 2;
7868                 break;
7869               }
7870
7871           /* Fail the match if there were too few operands.  */
7872           if (*args)
7873             return FALSE;
7874
7875           /* Successful match.  */
7876           if (!complete_p)
7877             return TRUE;
7878           clear_insn_error ();
7879           if (arg.dest_regno == arg.last_regno
7880               && strncmp (insn->insn_mo->name, "jalr", 4) == 0)
7881             {
7882               if (arg.opnum == 2)
7883                 set_insn_error
7884                   (0, _("source and destination must be different"));
7885               else if (arg.last_regno == 31)
7886                 set_insn_error
7887                   (0, _("a destination register must be supplied"));
7888             }
7889           else if (arg.last_regno == 31
7890                    && (strncmp (insn->insn_mo->name, "bltzal", 6) == 0
7891                        || strncmp (insn->insn_mo->name, "bgezal", 6) == 0))
7892             set_insn_error (0, _("the source register must not be $31"));
7893           check_completed_insn (&arg);
7894           return TRUE;
7895         }
7896
7897       /* Fail the match if the line has too many operands.   */
7898       if (*args == 0)
7899         return FALSE;
7900
7901       /* Handle characters that need to match exactly.  */
7902       if (*args == '(' || *args == ')' || *args == ',')
7903         {
7904           if (match_char (&arg, *args))
7905             continue;
7906           return FALSE;
7907         }
7908       if (*args == '#')
7909         {
7910           ++args;
7911           if (arg.token->type == OT_DOUBLE_CHAR
7912               && arg.token->u.ch == *args)
7913             {
7914               ++arg.token;
7915               continue;
7916             }
7917           return FALSE;
7918         }
7919
7920       /* Handle special macro operands.  Work out the properties of
7921          other operands.  */
7922       arg.opnum += 1;
7923       switch (*args)
7924         {
7925         case '-':
7926           switch (args[1])
7927             {
7928             case 'A':
7929               *offset_reloc = BFD_RELOC_MIPS_19_PCREL_S2;
7930               break;
7931
7932             case 'B':
7933               *offset_reloc = BFD_RELOC_MIPS_18_PCREL_S3;
7934               break;
7935             }
7936           break;
7937
7938         case '+':
7939           switch (args[1])
7940             {
7941             case 'i':
7942               *offset_reloc = BFD_RELOC_MIPS_JMP;
7943               break;
7944
7945             case '\'':
7946               *offset_reloc = BFD_RELOC_MIPS_26_PCREL_S2;
7947               break;
7948
7949             case '\"':
7950               *offset_reloc = BFD_RELOC_MIPS_21_PCREL_S2;
7951               break;
7952             }
7953           break;
7954
7955         case 'I':
7956           if (!match_const_int (&arg, &imm_expr.X_add_number))
7957             return FALSE;
7958           imm_expr.X_op = O_constant;
7959           if (GPR_SIZE == 32)
7960             normalize_constant_expr (&imm_expr);
7961           continue;
7962
7963         case 'A':
7964           if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
7965             {
7966               /* Assume that the offset has been elided and that what
7967                  we saw was a base register.  The match will fail later
7968                  if that assumption turns out to be wrong.  */
7969               offset_expr.X_op = O_constant;
7970               offset_expr.X_add_number = 0;
7971             }
7972           else
7973             {
7974               if (!match_expression (&arg, &offset_expr, offset_reloc))
7975                 return FALSE;
7976               normalize_address_expr (&offset_expr);
7977             }
7978           continue;
7979
7980         case 'F':
7981           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7982                                      8, TRUE))
7983             return FALSE;
7984           continue;
7985
7986         case 'L':
7987           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7988                                      8, FALSE))
7989             return FALSE;
7990           continue;
7991
7992         case 'f':
7993           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7994                                      4, TRUE))
7995             return FALSE;
7996           continue;
7997
7998         case 'l':
7999           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
8000                                      4, FALSE))
8001             return FALSE;
8002           continue;
8003
8004         case 'p':
8005           *offset_reloc = BFD_RELOC_16_PCREL_S2;
8006           break;
8007
8008         case 'a':
8009           *offset_reloc = BFD_RELOC_MIPS_JMP;
8010           break;
8011
8012         case 'm':
8013           gas_assert (mips_opts.micromips);
8014           c = args[1];
8015           switch (c)
8016             {
8017             case 'D':
8018             case 'E':
8019               if (!forced_insn_length)
8020                 *offset_reloc = (int) BFD_RELOC_UNUSED + c;
8021               else if (c == 'D')
8022                 *offset_reloc = BFD_RELOC_MICROMIPS_10_PCREL_S1;
8023               else
8024                 *offset_reloc = BFD_RELOC_MICROMIPS_7_PCREL_S1;
8025               break;
8026             }
8027           break;
8028         }
8029
8030       operand = (mips_opts.micromips
8031                  ? decode_micromips_operand (args)
8032                  : decode_mips_operand (args));
8033       if (!operand)
8034         abort ();
8035
8036       /* Skip prefixes.  */
8037       if (*args == '+' || *args == 'm' || *args == '-')
8038         args++;
8039
8040       if (mips_optional_operand_p (operand)
8041           && args[1] == ','
8042           && (arg.token[0].type != OT_REG
8043               || arg.token[1].type == OT_END))
8044         {
8045           /* Assume that the register has been elided and is the
8046              same as the first operand.  */
8047           arg.token = tokens;
8048           arg.argnum = 1;
8049         }
8050
8051       if (!match_operand (&arg, operand))
8052         return FALSE;
8053     }
8054 }
8055
8056 /* Like match_insn, but for MIPS16.  */
8057
8058 static bfd_boolean
8059 match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
8060                    struct mips_operand_token *tokens)
8061 {
8062   const char *args;
8063   const struct mips_operand *operand;
8064   const struct mips_operand *ext_operand;
8065   int required_insn_length;
8066   struct mips_arg_info arg;
8067   int relax_char;
8068
8069   if (forced_insn_length)
8070     required_insn_length = forced_insn_length;
8071   else if (mips_opts.noautoextend && !mips_opcode_32bit_p (opcode))
8072     required_insn_length = 2;
8073   else
8074     required_insn_length = 0;
8075
8076   create_insn (insn, opcode);
8077   imm_expr.X_op = O_absent;
8078   offset_expr.X_op = O_absent;
8079   offset_reloc[0] = BFD_RELOC_UNUSED;
8080   offset_reloc[1] = BFD_RELOC_UNUSED;
8081   offset_reloc[2] = BFD_RELOC_UNUSED;
8082   relax_char = 0;
8083
8084   memset (&arg, 0, sizeof (arg));
8085   arg.insn = insn;
8086   arg.token = tokens;
8087   arg.argnum = 1;
8088   arg.last_regno = ILLEGAL_REG;
8089   arg.dest_regno = ILLEGAL_REG;
8090   relax_char = 0;
8091   for (args = opcode->args;; ++args)
8092     {
8093       int c;
8094
8095       if (arg.token->type == OT_END)
8096         {
8097           offsetT value;
8098
8099           /* Handle unary instructions in which only one operand is given.
8100              The source is then the same as the destination.  */
8101           if (arg.opnum == 1 && *args == ',')
8102             {
8103               operand = decode_mips16_operand (args[1], FALSE);
8104               if (operand && mips_optional_operand_p (operand))
8105                 {
8106                   arg.token = tokens;
8107                   arg.argnum = 1;
8108                   continue;
8109                 }
8110             }
8111
8112           /* Fail the match if there were too few operands.  */
8113           if (*args)
8114             return FALSE;
8115
8116           /* Successful match.  Stuff the immediate value in now, if
8117              we can.  */
8118           clear_insn_error ();
8119           if (opcode->pinfo == INSN_MACRO)
8120             {
8121               gas_assert (relax_char == 0 || relax_char == 'p');
8122               gas_assert (*offset_reloc == BFD_RELOC_UNUSED);
8123             }
8124           else if (relax_char
8125                    && offset_expr.X_op == O_constant
8126                    && calculate_reloc (*offset_reloc,
8127                                        offset_expr.X_add_number,
8128                                        &value))
8129             {
8130               mips16_immed (NULL, 0, relax_char, *offset_reloc, value,
8131                             required_insn_length, &insn->insn_opcode);
8132               offset_expr.X_op = O_absent;
8133               *offset_reloc = BFD_RELOC_UNUSED;
8134             }
8135           else if (relax_char && *offset_reloc != BFD_RELOC_UNUSED)
8136             {
8137               if (required_insn_length == 2)
8138                 set_insn_error (0, _("invalid unextended operand value"));
8139               else
8140                 {
8141                   forced_insn_length = 4;
8142                   insn->insn_opcode |= MIPS16_EXTEND;
8143                 }
8144             }
8145           else if (relax_char)
8146             *offset_reloc = (int) BFD_RELOC_UNUSED + relax_char;
8147
8148           check_completed_insn (&arg);
8149           return TRUE;
8150         }
8151
8152       /* Fail the match if the line has too many operands.   */
8153       if (*args == 0)
8154         return FALSE;
8155
8156       /* Handle characters that need to match exactly.  */
8157       if (*args == '(' || *args == ')' || *args == ',')
8158         {
8159           if (match_char (&arg, *args))
8160             continue;
8161           return FALSE;
8162         }
8163
8164       arg.opnum += 1;
8165       c = *args;
8166       switch (c)
8167         {
8168         case 'p':
8169         case 'q':
8170         case 'A':
8171         case 'B':
8172         case 'E':
8173           relax_char = c;
8174           break;
8175
8176         case 'I':
8177           if (!match_const_int (&arg, &imm_expr.X_add_number))
8178             return FALSE;
8179           imm_expr.X_op = O_constant;
8180           if (GPR_SIZE == 32)
8181             normalize_constant_expr (&imm_expr);
8182           continue;
8183
8184         case 'a':
8185         case 'i':
8186           *offset_reloc = BFD_RELOC_MIPS16_JMP;
8187           break;
8188         }
8189
8190       operand = decode_mips16_operand (c, mips_opcode_32bit_p (opcode));
8191       if (!operand)
8192         abort ();
8193
8194       if (operand->type != OP_PCREL)
8195         {
8196           ext_operand = decode_mips16_operand (c, TRUE);
8197           if (operand != ext_operand)
8198             {
8199               if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
8200                 {
8201                   offset_expr.X_op = O_constant;
8202                   offset_expr.X_add_number = 0;
8203                   relax_char = c;
8204                   continue;
8205                 }
8206
8207               /* We need the OT_INTEGER check because some MIPS16
8208                  immediate variants are listed before the register ones.  */
8209               if (arg.token->type != OT_INTEGER
8210                   || !match_expression (&arg, &offset_expr, offset_reloc))
8211                 return FALSE;
8212
8213               /* '8' is used for SLTI(U) and has traditionally not
8214                  been allowed to take relocation operators.  */
8215               if (offset_reloc[0] != BFD_RELOC_UNUSED
8216                   && (ext_operand->size != 16 || c == '8'))
8217                 return FALSE;
8218
8219               relax_char = c;
8220               continue;
8221             }
8222         }
8223
8224       if (mips_optional_operand_p (operand)
8225           && args[1] == ','
8226           && (arg.token[0].type != OT_REG
8227               || arg.token[1].type == OT_END))
8228         {
8229           /* Assume that the register has been elided and is the
8230              same as the first operand.  */
8231           arg.token = tokens;
8232           arg.argnum = 1;
8233         }
8234
8235       if (!match_operand (&arg, operand))
8236         return FALSE;
8237     }
8238 }
8239
8240 /* Record that the current instruction is invalid for the current ISA.  */
8241
8242 static void
8243 match_invalid_for_isa (void)
8244 {
8245   set_insn_error_ss
8246     (0, _("opcode not supported on this processor: %s (%s)"),
8247      mips_cpu_info_from_arch (mips_opts.arch)->name,
8248      mips_cpu_info_from_isa (mips_opts.isa)->name);
8249 }
8250
8251 /* Try to match TOKENS against a series of opcode entries, starting at FIRST.
8252    Return true if a definite match or failure was found, storing any match
8253    in INSN.  OPCODE_EXTRA is a value that should be ORed into the opcode
8254    (to handle things like VU0 suffixes).  LAX_MATCH is true if we have already
8255    tried and failed to match under normal conditions and now want to try a
8256    more relaxed match.  */
8257
8258 static bfd_boolean
8259 match_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
8260              const struct mips_opcode *past, struct mips_operand_token *tokens,
8261              int opcode_extra, bfd_boolean lax_match)
8262 {
8263   const struct mips_opcode *opcode;
8264   const struct mips_opcode *invalid_delay_slot;
8265   bfd_boolean seen_valid_for_isa, seen_valid_for_size;
8266
8267   /* Search for a match, ignoring alternatives that don't satisfy the
8268      current ISA or forced_length.  */
8269   invalid_delay_slot = 0;
8270   seen_valid_for_isa = FALSE;
8271   seen_valid_for_size = FALSE;
8272   opcode = first;
8273   do
8274     {
8275       gas_assert (strcmp (opcode->name, first->name) == 0);
8276       if (is_opcode_valid (opcode))
8277         {
8278           seen_valid_for_isa = TRUE;
8279           if (is_size_valid (opcode))
8280             {
8281               bfd_boolean delay_slot_ok;
8282
8283               seen_valid_for_size = TRUE;
8284               delay_slot_ok = is_delay_slot_valid (opcode);
8285               if (match_insn (insn, opcode, tokens, opcode_extra,
8286                               lax_match, delay_slot_ok))
8287                 {
8288                   if (!delay_slot_ok)
8289                     {
8290                       if (!invalid_delay_slot)
8291                         invalid_delay_slot = opcode;
8292                     }
8293                   else
8294                     return TRUE;
8295                 }
8296             }
8297         }
8298       ++opcode;
8299     }
8300   while (opcode < past && strcmp (opcode->name, first->name) == 0);
8301
8302   /* If the only matches we found had the wrong length for the delay slot,
8303      pick the first such match.  We'll issue an appropriate warning later.  */
8304   if (invalid_delay_slot)
8305     {
8306       if (match_insn (insn, invalid_delay_slot, tokens, opcode_extra,
8307                       lax_match, TRUE))
8308         return TRUE;
8309       abort ();
8310     }
8311
8312   /* Handle the case where we didn't try to match an instruction because
8313      all the alternatives were incompatible with the current ISA.  */
8314   if (!seen_valid_for_isa)
8315     {
8316       match_invalid_for_isa ();
8317       return TRUE;
8318     }
8319
8320   /* Handle the case where we didn't try to match an instruction because
8321      all the alternatives were of the wrong size.  */
8322   if (!seen_valid_for_size)
8323     {
8324       if (mips_opts.insn32)
8325         set_insn_error (0, _("opcode not supported in the `insn32' mode"));
8326       else
8327         set_insn_error_i
8328           (0, _("unrecognized %d-bit version of microMIPS opcode"),
8329            8 * forced_insn_length);
8330       return TRUE;
8331     }
8332
8333   return FALSE;
8334 }
8335
8336 /* Like match_insns, but for MIPS16.  */
8337
8338 static bfd_boolean
8339 match_mips16_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
8340                     struct mips_operand_token *tokens)
8341 {
8342   const struct mips_opcode *opcode;
8343   bfd_boolean seen_valid_for_isa;
8344   bfd_boolean seen_valid_for_size;
8345
8346   /* Search for a match, ignoring alternatives that don't satisfy the
8347      current ISA.  There are no separate entries for extended forms so
8348      we deal with forced_length later.  */
8349   seen_valid_for_isa = FALSE;
8350   seen_valid_for_size = FALSE;
8351   opcode = first;
8352   do
8353     {
8354       gas_assert (strcmp (opcode->name, first->name) == 0);
8355       if (is_opcode_valid_16 (opcode))
8356         {
8357           seen_valid_for_isa = TRUE;
8358           if (is_size_valid_16 (opcode))
8359             {
8360               seen_valid_for_size = TRUE;
8361               if (match_mips16_insn (insn, opcode, tokens))
8362                 return TRUE;
8363             }
8364         }
8365       ++opcode;
8366     }
8367   while (opcode < &mips16_opcodes[bfd_mips16_num_opcodes]
8368          && strcmp (opcode->name, first->name) == 0);
8369
8370   /* Handle the case where we didn't try to match an instruction because
8371      all the alternatives were incompatible with the current ISA.  */
8372   if (!seen_valid_for_isa)
8373     {
8374       match_invalid_for_isa ();
8375       return TRUE;
8376     }
8377
8378   /* Handle the case where we didn't try to match an instruction because
8379      all the alternatives were of the wrong size.  */
8380   if (!seen_valid_for_size)
8381     {
8382       if (forced_insn_length == 2)
8383         set_insn_error
8384           (0, _("unrecognized unextended version of MIPS16 opcode"));
8385       else
8386         set_insn_error
8387           (0, _("unrecognized extended version of MIPS16 opcode"));
8388       return TRUE;
8389     }
8390
8391   return FALSE;
8392 }
8393
8394 /* Set up global variables for the start of a new macro.  */
8395
8396 static void
8397 macro_start (void)
8398 {
8399   memset (&mips_macro_warning.sizes, 0, sizeof (mips_macro_warning.sizes));
8400   memset (&mips_macro_warning.first_insn_sizes, 0,
8401           sizeof (mips_macro_warning.first_insn_sizes));
8402   memset (&mips_macro_warning.insns, 0, sizeof (mips_macro_warning.insns));
8403   mips_macro_warning.delay_slot_p = (mips_opts.noreorder
8404                                      && delayed_branch_p (&history[0]));
8405   if (history[0].frag
8406       && history[0].frag->fr_type == rs_machine_dependent
8407       && RELAX_MICROMIPS_P (history[0].frag->fr_subtype)
8408       && RELAX_MICROMIPS_NODS (history[0].frag->fr_subtype))
8409     mips_macro_warning.delay_slot_length = 0;
8410   else
8411     switch (history[0].insn_mo->pinfo2
8412             & (INSN2_BRANCH_DELAY_32BIT | INSN2_BRANCH_DELAY_16BIT))
8413       {
8414       case INSN2_BRANCH_DELAY_32BIT:
8415         mips_macro_warning.delay_slot_length = 4;
8416         break;
8417       case INSN2_BRANCH_DELAY_16BIT:
8418         mips_macro_warning.delay_slot_length = 2;
8419         break;
8420       default:
8421         mips_macro_warning.delay_slot_length = 0;
8422         break;
8423       }
8424   mips_macro_warning.first_frag = NULL;
8425 }
8426
8427 /* Given that a macro is longer than one instruction or of the wrong size,
8428    return the appropriate warning for it.  Return null if no warning is
8429    needed.  SUBTYPE is a bitmask of RELAX_DELAY_SLOT, RELAX_DELAY_SLOT_16BIT,
8430    RELAX_DELAY_SLOT_SIZE_FIRST, RELAX_DELAY_SLOT_SIZE_SECOND,
8431    and RELAX_NOMACRO.  */
8432
8433 static const char *
8434 macro_warning (relax_substateT subtype)
8435 {
8436   if (subtype & RELAX_DELAY_SLOT)
8437     return _("macro instruction expanded into multiple instructions"
8438              " in a branch delay slot");
8439   else if (subtype & RELAX_NOMACRO)
8440     return _("macro instruction expanded into multiple instructions");
8441   else if (subtype & (RELAX_DELAY_SLOT_SIZE_FIRST
8442                       | RELAX_DELAY_SLOT_SIZE_SECOND))
8443     return ((subtype & RELAX_DELAY_SLOT_16BIT)
8444             ? _("macro instruction expanded into a wrong size instruction"
8445                 " in a 16-bit branch delay slot")
8446             : _("macro instruction expanded into a wrong size instruction"
8447                 " in a 32-bit branch delay slot"));
8448   else
8449     return 0;
8450 }
8451
8452 /* Finish up a macro.  Emit warnings as appropriate.  */
8453
8454 static void
8455 macro_end (void)
8456 {
8457   /* Relaxation warning flags.  */
8458   relax_substateT subtype = 0;
8459
8460   /* Check delay slot size requirements.  */
8461   if (mips_macro_warning.delay_slot_length == 2)
8462     subtype |= RELAX_DELAY_SLOT_16BIT;
8463   if (mips_macro_warning.delay_slot_length != 0)
8464     {
8465       if (mips_macro_warning.delay_slot_length
8466           != mips_macro_warning.first_insn_sizes[0])
8467         subtype |= RELAX_DELAY_SLOT_SIZE_FIRST;
8468       if (mips_macro_warning.delay_slot_length
8469           != mips_macro_warning.first_insn_sizes[1])
8470         subtype |= RELAX_DELAY_SLOT_SIZE_SECOND;
8471     }
8472
8473   /* Check instruction count requirements.  */
8474   if (mips_macro_warning.insns[0] > 1 || mips_macro_warning.insns[1] > 1)
8475     {
8476       if (mips_macro_warning.insns[1] > mips_macro_warning.insns[0])
8477         subtype |= RELAX_SECOND_LONGER;
8478       if (mips_opts.warn_about_macros)
8479         subtype |= RELAX_NOMACRO;
8480       if (mips_macro_warning.delay_slot_p)
8481         subtype |= RELAX_DELAY_SLOT;
8482     }
8483
8484   /* If both alternatives fail to fill a delay slot correctly,
8485      emit the warning now.  */
8486   if ((subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0
8487       && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0)
8488     {
8489       relax_substateT s;
8490       const char *msg;
8491
8492       s = subtype & (RELAX_DELAY_SLOT_16BIT
8493                      | RELAX_DELAY_SLOT_SIZE_FIRST
8494                      | RELAX_DELAY_SLOT_SIZE_SECOND);
8495       msg = macro_warning (s);
8496       if (msg != NULL)
8497         as_warn ("%s", msg);
8498       subtype &= ~s;
8499     }
8500
8501   /* If both implementations are longer than 1 instruction, then emit the
8502      warning now.  */
8503   if (mips_macro_warning.insns[0] > 1 && mips_macro_warning.insns[1] > 1)
8504     {
8505       relax_substateT s;
8506       const char *msg;
8507
8508       s = subtype & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT);
8509       msg = macro_warning (s);
8510       if (msg != NULL)
8511         as_warn ("%s", msg);
8512       subtype &= ~s;
8513     }
8514
8515   /* If any flags still set, then one implementation might need a warning
8516      and the other either will need one of a different kind or none at all.
8517      Pass any remaining flags over to relaxation.  */
8518   if (mips_macro_warning.first_frag != NULL)
8519     mips_macro_warning.first_frag->fr_subtype |= subtype;
8520 }
8521
8522 /* Instruction operand formats used in macros that vary between
8523    standard MIPS and microMIPS code.  */
8524
8525 static const char * const brk_fmt[2][2] = { { "c", "c" }, { "mF", "c" } };
8526 static const char * const cop12_fmt[2] = { "E,o(b)", "E,~(b)" };
8527 static const char * const jalr_fmt[2] = { "d,s", "t,s" };
8528 static const char * const lui_fmt[2] = { "t,u", "s,u" };
8529 static const char * const mem12_fmt[2] = { "t,o(b)", "t,~(b)" };
8530 static const char * const mfhl_fmt[2][2] = { { "d", "d" }, { "mj", "s" } };
8531 static const char * const shft_fmt[2] = { "d,w,<", "t,r,<" };
8532 static const char * const trap_fmt[2] = { "s,t,q", "s,t,|" };
8533
8534 #define BRK_FMT (brk_fmt[mips_opts.micromips][mips_opts.insn32])
8535 #define COP12_FMT (ISA_IS_R6 (mips_opts.isa) ? "E,+:(d)" \
8536                                              : cop12_fmt[mips_opts.micromips])
8537 #define JALR_FMT (jalr_fmt[mips_opts.micromips])
8538 #define LUI_FMT (lui_fmt[mips_opts.micromips])
8539 #define MEM12_FMT (mem12_fmt[mips_opts.micromips])
8540 #define LL_SC_FMT (ISA_IS_R6 (mips_opts.isa) ? "t,+j(b)" \
8541                                              : mem12_fmt[mips_opts.micromips])
8542 #define MFHL_FMT (mfhl_fmt[mips_opts.micromips][mips_opts.insn32])
8543 #define SHFT_FMT (shft_fmt[mips_opts.micromips])
8544 #define TRAP_FMT (trap_fmt[mips_opts.micromips])
8545
8546 /* Read a macro's relocation codes from *ARGS and store them in *R.
8547    The first argument in *ARGS will be either the code for a single
8548    relocation or -1 followed by the three codes that make up a
8549    composite relocation.  */
8550
8551 static void
8552 macro_read_relocs (va_list *args, bfd_reloc_code_real_type *r)
8553 {
8554   int i, next;
8555
8556   next = va_arg (*args, int);
8557   if (next >= 0)
8558     r[0] = (bfd_reloc_code_real_type) next;
8559   else
8560     {
8561       for (i = 0; i < 3; i++)
8562         r[i] = (bfd_reloc_code_real_type) va_arg (*args, int);
8563       /* This function is only used for 16-bit relocation fields.
8564          To make the macro code simpler, treat an unrelocated value
8565          in the same way as BFD_RELOC_LO16.  */
8566       if (r[0] == BFD_RELOC_UNUSED)
8567         r[0] = BFD_RELOC_LO16;
8568     }
8569 }
8570
8571 /* Build an instruction created by a macro expansion.  This is passed
8572    a pointer to the count of instructions created so far, an
8573    expression, the name of the instruction to build, an operand format
8574    string, and corresponding arguments.  */
8575
8576 static void
8577 macro_build (expressionS *ep, const char *name, const char *fmt, ...)
8578 {
8579   const struct mips_opcode *mo = NULL;
8580   bfd_reloc_code_real_type r[3];
8581   const struct mips_opcode *amo;
8582   const struct mips_operand *operand;
8583   struct hash_control *hash;
8584   struct mips_cl_insn insn;
8585   va_list args;
8586   unsigned int uval;
8587
8588   va_start (args, fmt);
8589
8590   if (mips_opts.mips16)
8591     {
8592       mips16_macro_build (ep, name, fmt, &args);
8593       va_end (args);
8594       return;
8595     }
8596
8597   r[0] = BFD_RELOC_UNUSED;
8598   r[1] = BFD_RELOC_UNUSED;
8599   r[2] = BFD_RELOC_UNUSED;
8600   hash = mips_opts.micromips ? micromips_op_hash : op_hash;
8601   amo = (struct mips_opcode *) hash_find (hash, name);
8602   gas_assert (amo);
8603   gas_assert (strcmp (name, amo->name) == 0);
8604
8605   do
8606     {
8607       /* Search until we get a match for NAME.  It is assumed here that
8608          macros will never generate MDMX, MIPS-3D, or MT instructions.
8609          We try to match an instruction that fulfils the branch delay
8610          slot instruction length requirement (if any) of the previous
8611          instruction.  While doing this we record the first instruction
8612          seen that matches all the other conditions and use it anyway
8613          if the requirement cannot be met; we will issue an appropriate
8614          warning later on.  */
8615       if (strcmp (fmt, amo->args) == 0
8616           && amo->pinfo != INSN_MACRO
8617           && is_opcode_valid (amo)
8618           && is_size_valid (amo))
8619         {
8620           if (is_delay_slot_valid (amo))
8621             {
8622               mo = amo;
8623               break;
8624             }
8625           else if (!mo)
8626             mo = amo;
8627         }
8628
8629       ++amo;
8630       gas_assert (amo->name);
8631     }
8632   while (strcmp (name, amo->name) == 0);
8633
8634   gas_assert (mo);
8635   create_insn (&insn, mo);
8636   for (; *fmt; ++fmt)
8637     {
8638       switch (*fmt)
8639         {
8640         case ',':
8641         case '(':
8642         case ')':
8643         case 'z':
8644           break;
8645
8646         case 'i':
8647         case 'j':
8648           macro_read_relocs (&args, r);
8649           gas_assert (*r == BFD_RELOC_GPREL16
8650                       || *r == BFD_RELOC_MIPS_HIGHER
8651                       || *r == BFD_RELOC_HI16_S
8652                       || *r == BFD_RELOC_LO16
8653                       || *r == BFD_RELOC_MIPS_GOT_OFST);
8654           break;
8655
8656         case 'o':
8657           macro_read_relocs (&args, r);
8658           break;
8659
8660         case 'u':
8661           macro_read_relocs (&args, r);
8662           gas_assert (ep != NULL
8663                       && (ep->X_op == O_constant
8664                           || (ep->X_op == O_symbol
8665                               && (*r == BFD_RELOC_MIPS_HIGHEST
8666                                   || *r == BFD_RELOC_HI16_S
8667                                   || *r == BFD_RELOC_HI16
8668                                   || *r == BFD_RELOC_GPREL16
8669                                   || *r == BFD_RELOC_MIPS_GOT_HI16
8670                                   || *r == BFD_RELOC_MIPS_CALL_HI16))));
8671           break;
8672
8673         case 'p':
8674           gas_assert (ep != NULL);
8675
8676           /*
8677            * This allows macro() to pass an immediate expression for
8678            * creating short branches without creating a symbol.
8679            *
8680            * We don't allow branch relaxation for these branches, as
8681            * they should only appear in ".set nomacro" anyway.
8682            */
8683           if (ep->X_op == O_constant)
8684             {
8685               /* For microMIPS we always use relocations for branches.
8686                  So we should not resolve immediate values.  */
8687               gas_assert (!mips_opts.micromips);
8688
8689               if ((ep->X_add_number & 3) != 0)
8690                 as_bad (_("branch to misaligned address (0x%lx)"),
8691                         (unsigned long) ep->X_add_number);
8692               if ((ep->X_add_number + 0x20000) & ~0x3ffff)
8693                 as_bad (_("branch address range overflow (0x%lx)"),
8694                         (unsigned long) ep->X_add_number);
8695               insn.insn_opcode |= (ep->X_add_number >> 2) & 0xffff;
8696               ep = NULL;
8697             }
8698           else
8699             *r = BFD_RELOC_16_PCREL_S2;
8700           break;
8701
8702         case 'a':
8703           gas_assert (ep != NULL);
8704           *r = BFD_RELOC_MIPS_JMP;
8705           break;
8706
8707         default:
8708           operand = (mips_opts.micromips
8709                      ? decode_micromips_operand (fmt)
8710                      : decode_mips_operand (fmt));
8711           if (!operand)
8712             abort ();
8713
8714           uval = va_arg (args, int);
8715           if (operand->type == OP_CLO_CLZ_DEST)
8716             uval |= (uval << 5);
8717           insn_insert_operand (&insn, operand, uval);
8718
8719           if (*fmt == '+' || *fmt == 'm' || *fmt == '-')
8720             ++fmt;
8721           break;
8722         }
8723     }
8724   va_end (args);
8725   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
8726
8727   append_insn (&insn, ep, r, TRUE);
8728 }
8729
8730 static void
8731 mips16_macro_build (expressionS *ep, const char *name, const char *fmt,
8732                     va_list *args)
8733 {
8734   struct mips_opcode *mo;
8735   struct mips_cl_insn insn;
8736   const struct mips_operand *operand;
8737   bfd_reloc_code_real_type r[3]
8738     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
8739
8740   mo = (struct mips_opcode *) hash_find (mips16_op_hash, name);
8741   gas_assert (mo);
8742   gas_assert (strcmp (name, mo->name) == 0);
8743
8744   while (strcmp (fmt, mo->args) != 0 || mo->pinfo == INSN_MACRO)
8745     {
8746       ++mo;
8747       gas_assert (mo->name);
8748       gas_assert (strcmp (name, mo->name) == 0);
8749     }
8750
8751   create_insn (&insn, mo);
8752   for (; *fmt; ++fmt)
8753     {
8754       int c;
8755
8756       c = *fmt;
8757       switch (c)
8758         {
8759         case ',':
8760         case '(':
8761         case ')':
8762           break;
8763
8764         case '.':
8765         case 'S':
8766         case 'P':
8767         case 'R':
8768           break;
8769
8770         case '<':
8771         case '5':
8772         case 'F':
8773         case 'H':
8774         case 'W':
8775         case 'D':
8776         case 'j':
8777         case '8':
8778         case 'V':
8779         case 'C':
8780         case 'U':
8781         case 'k':
8782         case 'K':
8783         case 'p':
8784         case 'q':
8785           {
8786             offsetT value;
8787
8788             gas_assert (ep != NULL);
8789
8790             if (ep->X_op != O_constant)
8791               *r = (int) BFD_RELOC_UNUSED + c;
8792             else if (calculate_reloc (*r, ep->X_add_number, &value))
8793               {
8794                 mips16_immed (NULL, 0, c, *r, value, 0, &insn.insn_opcode);
8795                 ep = NULL;
8796                 *r = BFD_RELOC_UNUSED;
8797               }
8798           }
8799           break;
8800
8801         default:
8802           operand = decode_mips16_operand (c, FALSE);
8803           if (!operand)
8804             abort ();
8805
8806           insn_insert_operand (&insn, operand, va_arg (*args, int));
8807           break;
8808         }
8809     }
8810
8811   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
8812
8813   append_insn (&insn, ep, r, TRUE);
8814 }
8815
8816 /*
8817  * Generate a "jalr" instruction with a relocation hint to the called
8818  * function.  This occurs in NewABI PIC code.
8819  */
8820 static void
8821 macro_build_jalr (expressionS *ep, int cprestore)
8822 {
8823   static const bfd_reloc_code_real_type jalr_relocs[2]
8824     = { BFD_RELOC_MIPS_JALR, BFD_RELOC_MICROMIPS_JALR };
8825   bfd_reloc_code_real_type jalr_reloc = jalr_relocs[mips_opts.micromips];
8826   const char *jalr;
8827   char *f = NULL;
8828
8829   if (MIPS_JALR_HINT_P (ep))
8830     {
8831       frag_grow (8);
8832       f = frag_more (0);
8833     }
8834   if (mips_opts.micromips)
8835     {
8836       jalr = ((mips_opts.noreorder && !cprestore) || mips_opts.insn32
8837               ? "jalr" : "jalrs");
8838       if (MIPS_JALR_HINT_P (ep)
8839           || mips_opts.insn32
8840           || (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
8841         macro_build (NULL, jalr, "t,s", RA, PIC_CALL_REG);
8842       else
8843         macro_build (NULL, jalr, "mj", PIC_CALL_REG);
8844     }
8845   else
8846     macro_build (NULL, "jalr", "d,s", RA, PIC_CALL_REG);
8847   if (MIPS_JALR_HINT_P (ep))
8848     fix_new_exp (frag_now, f - frag_now->fr_literal, 4, ep, FALSE, jalr_reloc);
8849 }
8850
8851 /*
8852  * Generate a "lui" instruction.
8853  */
8854 static void
8855 macro_build_lui (expressionS *ep, int regnum)
8856 {
8857   gas_assert (! mips_opts.mips16);
8858
8859   if (ep->X_op != O_constant)
8860     {
8861       gas_assert (ep->X_op == O_symbol);
8862       /* _gp_disp is a special case, used from s_cpload.
8863          __gnu_local_gp is used if mips_no_shared.  */
8864       gas_assert (mips_pic == NO_PIC
8865               || (! HAVE_NEWABI
8866                   && strcmp (S_GET_NAME (ep->X_add_symbol), "_gp_disp") == 0)
8867               || (! mips_in_shared
8868                   && strcmp (S_GET_NAME (ep->X_add_symbol),
8869                              "__gnu_local_gp") == 0));
8870     }
8871
8872   macro_build (ep, "lui", LUI_FMT, regnum, BFD_RELOC_HI16_S);
8873 }
8874
8875 /* Generate a sequence of instructions to do a load or store from a constant
8876    offset off of a base register (breg) into/from a target register (treg),
8877    using AT if necessary.  */
8878 static void
8879 macro_build_ldst_constoffset (expressionS *ep, const char *op,
8880                               int treg, int breg, int dbl)
8881 {
8882   gas_assert (ep->X_op == O_constant);
8883
8884   /* Sign-extending 32-bit constants makes their handling easier.  */
8885   if (!dbl)
8886     normalize_constant_expr (ep);
8887
8888   /* Right now, this routine can only handle signed 32-bit constants.  */
8889   if (! IS_SEXT_32BIT_NUM(ep->X_add_number + 0x8000))
8890     as_warn (_("operand overflow"));
8891
8892   if (IS_SEXT_16BIT_NUM(ep->X_add_number))
8893     {
8894       /* Signed 16-bit offset will fit in the op.  Easy!  */
8895       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, breg);
8896     }
8897   else
8898     {
8899       /* 32-bit offset, need multiple instructions and AT, like:
8900            lui      $tempreg,const_hi       (BFD_RELOC_HI16_S)
8901            addu     $tempreg,$tempreg,$breg
8902            <op>     $treg,const_lo($tempreg)   (BFD_RELOC_LO16)
8903          to handle the complete offset.  */
8904       macro_build_lui (ep, AT);
8905       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
8906       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, AT);
8907
8908       if (!mips_opts.at)
8909         as_bad (_("macro used $at after \".set noat\""));
8910     }
8911 }
8912
8913 /*                      set_at()
8914  * Generates code to set the $at register to true (one)
8915  * if reg is less than the immediate expression.
8916  */
8917 static void
8918 set_at (int reg, int unsignedp)
8919 {
8920   if (imm_expr.X_add_number >= -0x8000
8921       && imm_expr.X_add_number < 0x8000)
8922     macro_build (&imm_expr, unsignedp ? "sltiu" : "slti", "t,r,j",
8923                  AT, reg, BFD_RELOC_LO16);
8924   else
8925     {
8926       load_register (AT, &imm_expr, GPR_SIZE == 64);
8927       macro_build (NULL, unsignedp ? "sltu" : "slt", "d,v,t", AT, reg, AT);
8928     }
8929 }
8930
8931 /* Count the leading zeroes by performing a binary chop. This is a
8932    bulky bit of source, but performance is a LOT better for the
8933    majority of values than a simple loop to count the bits:
8934        for (lcnt = 0; (lcnt < 32); lcnt++)
8935          if ((v) & (1 << (31 - lcnt)))
8936            break;
8937   However it is not code size friendly, and the gain will drop a bit
8938   on certain cached systems.
8939 */
8940 #define COUNT_TOP_ZEROES(v)             \
8941   (((v) & ~0xffff) == 0                 \
8942    ? ((v) & ~0xff) == 0                 \
8943      ? ((v) & ~0xf) == 0                \
8944        ? ((v) & ~0x3) == 0              \
8945          ? ((v) & ~0x1) == 0            \
8946            ? !(v)                       \
8947              ? 32                       \
8948              : 31                       \
8949            : 30                         \
8950          : ((v) & ~0x7) == 0            \
8951            ? 29                         \
8952            : 28                         \
8953        : ((v) & ~0x3f) == 0             \
8954          ? ((v) & ~0x1f) == 0           \
8955            ? 27                         \
8956            : 26                         \
8957          : ((v) & ~0x7f) == 0           \
8958            ? 25                         \
8959            : 24                         \
8960      : ((v) & ~0xfff) == 0              \
8961        ? ((v) & ~0x3ff) == 0            \
8962          ? ((v) & ~0x1ff) == 0          \
8963            ? 23                         \
8964            : 22                         \
8965          : ((v) & ~0x7ff) == 0          \
8966            ? 21                         \
8967            : 20                         \
8968        : ((v) & ~0x3fff) == 0           \
8969          ? ((v) & ~0x1fff) == 0         \
8970            ? 19                         \
8971            : 18                         \
8972          : ((v) & ~0x7fff) == 0         \
8973            ? 17                         \
8974            : 16                         \
8975    : ((v) & ~0xffffff) == 0             \
8976      ? ((v) & ~0xfffff) == 0            \
8977        ? ((v) & ~0x3ffff) == 0          \
8978          ? ((v) & ~0x1ffff) == 0        \
8979            ? 15                         \
8980            : 14                         \
8981          : ((v) & ~0x7ffff) == 0        \
8982            ? 13                         \
8983            : 12                         \
8984        : ((v) & ~0x3fffff) == 0         \
8985          ? ((v) & ~0x1fffff) == 0       \
8986            ? 11                         \
8987            : 10                         \
8988          : ((v) & ~0x7fffff) == 0       \
8989            ? 9                          \
8990            : 8                          \
8991      : ((v) & ~0xfffffff) == 0          \
8992        ? ((v) & ~0x3ffffff) == 0        \
8993          ? ((v) & ~0x1ffffff) == 0      \
8994            ? 7                          \
8995            : 6                          \
8996          : ((v) & ~0x7ffffff) == 0      \
8997            ? 5                          \
8998            : 4                          \
8999        : ((v) & ~0x3fffffff) == 0       \
9000          ? ((v) & ~0x1fffffff) == 0     \
9001            ? 3                          \
9002            : 2                          \
9003          : ((v) & ~0x7fffffff) == 0     \
9004            ? 1                          \
9005            : 0)
9006
9007 /*                      load_register()
9008  *  This routine generates the least number of instructions necessary to load
9009  *  an absolute expression value into a register.
9010  */
9011 static void
9012 load_register (int reg, expressionS *ep, int dbl)
9013 {
9014   int freg;
9015   expressionS hi32, lo32;
9016
9017   if (ep->X_op != O_big)
9018     {
9019       gas_assert (ep->X_op == O_constant);
9020
9021       /* Sign-extending 32-bit constants makes their handling easier.  */
9022       if (!dbl)
9023         normalize_constant_expr (ep);
9024
9025       if (IS_SEXT_16BIT_NUM (ep->X_add_number))
9026         {
9027           /* We can handle 16 bit signed values with an addiu to
9028              $zero.  No need to ever use daddiu here, since $zero and
9029              the result are always correct in 32 bit mode.  */
9030           macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
9031           return;
9032         }
9033       else if (ep->X_add_number >= 0 && ep->X_add_number < 0x10000)
9034         {
9035           /* We can handle 16 bit unsigned values with an ori to
9036              $zero.  */
9037           macro_build (ep, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
9038           return;
9039         }
9040       else if ((IS_SEXT_32BIT_NUM (ep->X_add_number)))
9041         {
9042           /* 32 bit values require an lui.  */
9043           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
9044           if ((ep->X_add_number & 0xffff) != 0)
9045             macro_build (ep, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
9046           return;
9047         }
9048     }
9049
9050   /* The value is larger than 32 bits.  */
9051
9052   if (!dbl || GPR_SIZE == 32)
9053     {
9054       char value[32];
9055
9056       sprintf_vma (value, ep->X_add_number);
9057       as_bad (_("number (0x%s) larger than 32 bits"), value);
9058       macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
9059       return;
9060     }
9061
9062   if (ep->X_op != O_big)
9063     {
9064       hi32 = *ep;
9065       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
9066       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
9067       hi32.X_add_number &= 0xffffffff;
9068       lo32 = *ep;
9069       lo32.X_add_number &= 0xffffffff;
9070     }
9071   else
9072     {
9073       gas_assert (ep->X_add_number > 2);
9074       if (ep->X_add_number == 3)
9075         generic_bignum[3] = 0;
9076       else if (ep->X_add_number > 4)
9077         as_bad (_("number larger than 64 bits"));
9078       lo32.X_op = O_constant;
9079       lo32.X_add_number = generic_bignum[0] + (generic_bignum[1] << 16);
9080       hi32.X_op = O_constant;
9081       hi32.X_add_number = generic_bignum[2] + (generic_bignum[3] << 16);
9082     }
9083
9084   if (hi32.X_add_number == 0)
9085     freg = 0;
9086   else
9087     {
9088       int shift, bit;
9089       unsigned long hi, lo;
9090
9091       if (hi32.X_add_number == (offsetT) 0xffffffff)
9092         {
9093           if ((lo32.X_add_number & 0xffff8000) == 0xffff8000)
9094             {
9095               macro_build (&lo32, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
9096               return;
9097             }
9098           if (lo32.X_add_number & 0x80000000)
9099             {
9100               macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
9101               if (lo32.X_add_number & 0xffff)
9102                 macro_build (&lo32, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
9103               return;
9104             }
9105         }
9106
9107       /* Check for 16bit shifted constant.  We know that hi32 is
9108          non-zero, so start the mask on the first bit of the hi32
9109          value.  */
9110       shift = 17;
9111       do
9112         {
9113           unsigned long himask, lomask;
9114
9115           if (shift < 32)
9116             {
9117               himask = 0xffff >> (32 - shift);
9118               lomask = (0xffff << shift) & 0xffffffff;
9119             }
9120           else
9121             {
9122               himask = 0xffff << (shift - 32);
9123               lomask = 0;
9124             }
9125           if ((hi32.X_add_number & ~(offsetT) himask) == 0
9126               && (lo32.X_add_number & ~(offsetT) lomask) == 0)
9127             {
9128               expressionS tmp;
9129
9130               tmp.X_op = O_constant;
9131               if (shift < 32)
9132                 tmp.X_add_number = ((hi32.X_add_number << (32 - shift))
9133                                     | (lo32.X_add_number >> shift));
9134               else
9135                 tmp.X_add_number = hi32.X_add_number >> (shift - 32);
9136               macro_build (&tmp, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
9137               macro_build (NULL, (shift >= 32) ? "dsll32" : "dsll", SHFT_FMT,
9138                            reg, reg, (shift >= 32) ? shift - 32 : shift);
9139               return;
9140             }
9141           ++shift;
9142         }
9143       while (shift <= (64 - 16));
9144
9145       /* Find the bit number of the lowest one bit, and store the
9146          shifted value in hi/lo.  */
9147       hi = (unsigned long) (hi32.X_add_number & 0xffffffff);
9148       lo = (unsigned long) (lo32.X_add_number & 0xffffffff);
9149       if (lo != 0)
9150         {
9151           bit = 0;
9152           while ((lo & 1) == 0)
9153             {
9154               lo >>= 1;
9155               ++bit;
9156             }
9157           lo |= (hi & (((unsigned long) 1 << bit) - 1)) << (32 - bit);
9158           hi >>= bit;
9159         }
9160       else
9161         {
9162           bit = 32;
9163           while ((hi & 1) == 0)
9164             {
9165               hi >>= 1;
9166               ++bit;
9167             }
9168           lo = hi;
9169           hi = 0;
9170         }
9171
9172       /* Optimize if the shifted value is a (power of 2) - 1.  */
9173       if ((hi == 0 && ((lo + 1) & lo) == 0)
9174           || (lo == 0xffffffff && ((hi + 1) & hi) == 0))
9175         {
9176           shift = COUNT_TOP_ZEROES ((unsigned int) hi32.X_add_number);
9177           if (shift != 0)
9178             {
9179               expressionS tmp;
9180
9181               /* This instruction will set the register to be all
9182                  ones.  */
9183               tmp.X_op = O_constant;
9184               tmp.X_add_number = (offsetT) -1;
9185               macro_build (&tmp, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
9186               if (bit != 0)
9187                 {
9188                   bit += shift;
9189                   macro_build (NULL, (bit >= 32) ? "dsll32" : "dsll", SHFT_FMT,
9190                                reg, reg, (bit >= 32) ? bit - 32 : bit);
9191                 }
9192               macro_build (NULL, (shift >= 32) ? "dsrl32" : "dsrl", SHFT_FMT,
9193                            reg, reg, (shift >= 32) ? shift - 32 : shift);
9194               return;
9195             }
9196         }
9197
9198       /* Sign extend hi32 before calling load_register, because we can
9199          generally get better code when we load a sign extended value.  */
9200       if ((hi32.X_add_number & 0x80000000) != 0)
9201         hi32.X_add_number |= ~(offsetT) 0xffffffff;
9202       load_register (reg, &hi32, 0);
9203       freg = reg;
9204     }
9205   if ((lo32.X_add_number & 0xffff0000) == 0)
9206     {
9207       if (freg != 0)
9208         {
9209           macro_build (NULL, "dsll32", SHFT_FMT, reg, freg, 0);
9210           freg = reg;
9211         }
9212     }
9213   else
9214     {
9215       expressionS mid16;
9216
9217       if ((freg == 0) && (lo32.X_add_number == (offsetT) 0xffffffff))
9218         {
9219           macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
9220           macro_build (NULL, "dsrl32", SHFT_FMT, reg, reg, 0);
9221           return;
9222         }
9223
9224       if (freg != 0)
9225         {
9226           macro_build (NULL, "dsll", SHFT_FMT, reg, freg, 16);
9227           freg = reg;
9228         }
9229       mid16 = lo32;
9230       mid16.X_add_number >>= 16;
9231       macro_build (&mid16, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
9232       macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9233       freg = reg;
9234     }
9235   if ((lo32.X_add_number & 0xffff) != 0)
9236     macro_build (&lo32, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
9237 }
9238
9239 static inline void
9240 load_delay_nop (void)
9241 {
9242   if (!gpr_interlocks)
9243     macro_build (NULL, "nop", "");
9244 }
9245
9246 /* Load an address into a register.  */
9247
9248 static void
9249 load_address (int reg, expressionS *ep, int *used_at)
9250 {
9251   if (ep->X_op != O_constant
9252       && ep->X_op != O_symbol)
9253     {
9254       as_bad (_("expression too complex"));
9255       ep->X_op = O_constant;
9256     }
9257
9258   if (ep->X_op == O_constant)
9259     {
9260       load_register (reg, ep, HAVE_64BIT_ADDRESSES);
9261       return;
9262     }
9263
9264   if (mips_pic == NO_PIC)
9265     {
9266       /* If this is a reference to a GP relative symbol, we want
9267            addiu        $reg,$gp,<sym>          (BFD_RELOC_GPREL16)
9268          Otherwise we want
9269            lui          $reg,<sym>              (BFD_RELOC_HI16_S)
9270            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9271          If we have an addend, we always use the latter form.
9272
9273          With 64bit address space and a usable $at we want
9274            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
9275            lui          $at,<sym>               (BFD_RELOC_HI16_S)
9276            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
9277            daddiu       $at,<sym>               (BFD_RELOC_LO16)
9278            dsll32       $reg,0
9279            daddu        $reg,$reg,$at
9280
9281          If $at is already in use, we use a path which is suboptimal
9282          on superscalar processors.
9283            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
9284            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
9285            dsll         $reg,16
9286            daddiu       $reg,<sym>              (BFD_RELOC_HI16_S)
9287            dsll         $reg,16
9288            daddiu       $reg,<sym>              (BFD_RELOC_LO16)
9289
9290          For GP relative symbols in 64bit address space we can use
9291          the same sequence as in 32bit address space.  */
9292       if (HAVE_64BIT_SYMBOLS)
9293         {
9294           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
9295               && !nopic_need_relax (ep->X_add_symbol, 1))
9296             {
9297               relax_start (ep->X_add_symbol);
9298               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
9299                            mips_gp_register, BFD_RELOC_GPREL16);
9300               relax_switch ();
9301             }
9302
9303           if (*used_at == 0 && mips_opts.at)
9304             {
9305               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
9306               macro_build (ep, "lui", LUI_FMT, AT, BFD_RELOC_HI16_S);
9307               macro_build (ep, "daddiu", "t,r,j", reg, reg,
9308                            BFD_RELOC_MIPS_HIGHER);
9309               macro_build (ep, "daddiu", "t,r,j", AT, AT, BFD_RELOC_LO16);
9310               macro_build (NULL, "dsll32", SHFT_FMT, reg, reg, 0);
9311               macro_build (NULL, "daddu", "d,v,t", reg, reg, AT);
9312               *used_at = 1;
9313             }
9314           else
9315             {
9316               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
9317               macro_build (ep, "daddiu", "t,r,j", reg, reg,
9318                            BFD_RELOC_MIPS_HIGHER);
9319               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9320               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_HI16_S);
9321               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9322               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_LO16);
9323             }
9324
9325           if (mips_relax.sequence)
9326             relax_end ();
9327         }
9328       else
9329         {
9330           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
9331               && !nopic_need_relax (ep->X_add_symbol, 1))
9332             {
9333               relax_start (ep->X_add_symbol);
9334               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
9335                            mips_gp_register, BFD_RELOC_GPREL16);
9336               relax_switch ();
9337             }
9338           macro_build_lui (ep, reg);
9339           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j",
9340                        reg, reg, BFD_RELOC_LO16);
9341           if (mips_relax.sequence)
9342             relax_end ();
9343         }
9344     }
9345   else if (!mips_big_got)
9346     {
9347       expressionS ex;
9348
9349       /* If this is a reference to an external symbol, we want
9350            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9351          Otherwise we want
9352            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9353            nop
9354            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9355          If there is a constant, it must be added in after.
9356
9357          If we have NewABI, we want
9358            lw           $reg,<sym+cst>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
9359          unless we're referencing a global symbol with a non-zero
9360          offset, in which case cst must be added separately.  */
9361       if (HAVE_NEWABI)
9362         {
9363           if (ep->X_add_number)
9364             {
9365               ex.X_add_number = ep->X_add_number;
9366               ep->X_add_number = 0;
9367               relax_start (ep->X_add_symbol);
9368               macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9369                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
9370               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9371                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9372               ex.X_op = O_constant;
9373               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
9374                            reg, reg, BFD_RELOC_LO16);
9375               ep->X_add_number = ex.X_add_number;
9376               relax_switch ();
9377             }
9378           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9379                        BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
9380           if (mips_relax.sequence)
9381             relax_end ();
9382         }
9383       else
9384         {
9385           ex.X_add_number = ep->X_add_number;
9386           ep->X_add_number = 0;
9387           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9388                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
9389           load_delay_nop ();
9390           relax_start (ep->X_add_symbol);
9391           relax_switch ();
9392           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9393                        BFD_RELOC_LO16);
9394           relax_end ();
9395
9396           if (ex.X_add_number != 0)
9397             {
9398               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9399                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9400               ex.X_op = O_constant;
9401               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
9402                            reg, reg, BFD_RELOC_LO16);
9403             }
9404         }
9405     }
9406   else if (mips_big_got)
9407     {
9408       expressionS ex;
9409
9410       /* This is the large GOT case.  If this is a reference to an
9411          external symbol, we want
9412            lui          $reg,<sym>              (BFD_RELOC_MIPS_GOT_HI16)
9413            addu         $reg,$reg,$gp
9414            lw           $reg,<sym>($reg)        (BFD_RELOC_MIPS_GOT_LO16)
9415
9416          Otherwise, for a reference to a local symbol in old ABI, we want
9417            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9418            nop
9419            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9420          If there is a constant, it must be added in after.
9421
9422          In the NewABI, for local symbols, with or without offsets, we want:
9423            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
9424            addiu        $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
9425       */
9426       if (HAVE_NEWABI)
9427         {
9428           ex.X_add_number = ep->X_add_number;
9429           ep->X_add_number = 0;
9430           relax_start (ep->X_add_symbol);
9431           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
9432           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
9433                        reg, reg, mips_gp_register);
9434           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
9435                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
9436           if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9437             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9438           else if (ex.X_add_number)
9439             {
9440               ex.X_op = O_constant;
9441               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9442                            BFD_RELOC_LO16);
9443             }
9444
9445           ep->X_add_number = ex.X_add_number;
9446           relax_switch ();
9447           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9448                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
9449           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9450                        BFD_RELOC_MIPS_GOT_OFST);
9451           relax_end ();
9452         }
9453       else
9454         {
9455           ex.X_add_number = ep->X_add_number;
9456           ep->X_add_number = 0;
9457           relax_start (ep->X_add_symbol);
9458           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
9459           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
9460                        reg, reg, mips_gp_register);
9461           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
9462                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
9463           relax_switch ();
9464           if (reg_needs_delay (mips_gp_register))
9465             {
9466               /* We need a nop before loading from $gp.  This special
9467                  check is required because the lui which starts the main
9468                  instruction stream does not refer to $gp, and so will not
9469                  insert the nop which may be required.  */
9470               macro_build (NULL, "nop", "");
9471             }
9472           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9473                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
9474           load_delay_nop ();
9475           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9476                        BFD_RELOC_LO16);
9477           relax_end ();
9478
9479           if (ex.X_add_number != 0)
9480             {
9481               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9482                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9483               ex.X_op = O_constant;
9484               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9485                            BFD_RELOC_LO16);
9486             }
9487         }
9488     }
9489   else
9490     abort ();
9491
9492   if (!mips_opts.at && *used_at == 1)
9493     as_bad (_("macro used $at after \".set noat\""));
9494 }
9495
9496 /* Move the contents of register SOURCE into register DEST.  */
9497
9498 static void
9499 move_register (int dest, int source)
9500 {
9501   /* Prefer to use a 16-bit microMIPS instruction unless the previous
9502      instruction specifically requires a 32-bit one.  */
9503   if (mips_opts.micromips
9504       && !mips_opts.insn32
9505       && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
9506     macro_build (NULL, "move", "mp,mj", dest, source);
9507   else
9508     macro_build (NULL, "or", "d,v,t", dest, source, 0);
9509 }
9510
9511 /* Emit an SVR4 PIC sequence to load address LOCAL into DEST, where
9512    LOCAL is the sum of a symbol and a 16-bit or 32-bit displacement.
9513    The two alternatives are:
9514
9515    Global symbol                Local sybmol
9516    -------------                ------------
9517    lw DEST,%got(SYMBOL)         lw DEST,%got(SYMBOL + OFFSET)
9518    ...                          ...
9519    addiu DEST,DEST,OFFSET       addiu DEST,DEST,%lo(SYMBOL + OFFSET)
9520
9521    load_got_offset emits the first instruction and add_got_offset
9522    emits the second for a 16-bit offset or add_got_offset_hilo emits
9523    a sequence to add a 32-bit offset using a scratch register.  */
9524
9525 static void
9526 load_got_offset (int dest, expressionS *local)
9527 {
9528   expressionS global;
9529
9530   global = *local;
9531   global.X_add_number = 0;
9532
9533   relax_start (local->X_add_symbol);
9534   macro_build (&global, ADDRESS_LOAD_INSN, "t,o(b)", dest,
9535                BFD_RELOC_MIPS_GOT16, mips_gp_register);
9536   relax_switch ();
9537   macro_build (local, ADDRESS_LOAD_INSN, "t,o(b)", dest,
9538                BFD_RELOC_MIPS_GOT16, mips_gp_register);
9539   relax_end ();
9540 }
9541
9542 static void
9543 add_got_offset (int dest, expressionS *local)
9544 {
9545   expressionS global;
9546
9547   global.X_op = O_constant;
9548   global.X_op_symbol = NULL;
9549   global.X_add_symbol = NULL;
9550   global.X_add_number = local->X_add_number;
9551
9552   relax_start (local->X_add_symbol);
9553   macro_build (&global, ADDRESS_ADDI_INSN, "t,r,j",
9554                dest, dest, BFD_RELOC_LO16);
9555   relax_switch ();
9556   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", dest, dest, BFD_RELOC_LO16);
9557   relax_end ();
9558 }
9559
9560 static void
9561 add_got_offset_hilo (int dest, expressionS *local, int tmp)
9562 {
9563   expressionS global;
9564   int hold_mips_optimize;
9565
9566   global.X_op = O_constant;
9567   global.X_op_symbol = NULL;
9568   global.X_add_symbol = NULL;
9569   global.X_add_number = local->X_add_number;
9570
9571   relax_start (local->X_add_symbol);
9572   load_register (tmp, &global, HAVE_64BIT_ADDRESSES);
9573   relax_switch ();
9574   /* Set mips_optimize around the lui instruction to avoid
9575      inserting an unnecessary nop after the lw.  */
9576   hold_mips_optimize = mips_optimize;
9577   mips_optimize = 2;
9578   macro_build_lui (&global, tmp);
9579   mips_optimize = hold_mips_optimize;
9580   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", tmp, tmp, BFD_RELOC_LO16);
9581   relax_end ();
9582
9583   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dest, dest, tmp);
9584 }
9585
9586 /* Emit a sequence of instructions to emulate a branch likely operation.
9587    BR is an ordinary branch corresponding to one to be emulated.  BRNEG
9588    is its complementing branch with the original condition negated.
9589    CALL is set if the original branch specified the link operation.
9590    EP, FMT, SREG and TREG specify the usual macro_build() parameters.
9591
9592    Code like this is produced in the noreorder mode:
9593
9594         BRNEG   <args>, 1f
9595          nop
9596         b       <sym>
9597          delay slot (executed only if branch taken)
9598     1:
9599
9600    or, if CALL is set:
9601
9602         BRNEG   <args>, 1f
9603          nop
9604         bal     <sym>
9605          delay slot (executed only if branch taken)
9606     1:
9607
9608    In the reorder mode the delay slot would be filled with a nop anyway,
9609    so code produced is simply:
9610
9611         BR      <args>, <sym>
9612          nop
9613
9614    This function is used when producing code for the microMIPS ASE that
9615    does not implement branch likely instructions in hardware.  */
9616
9617 static void
9618 macro_build_branch_likely (const char *br, const char *brneg,
9619                            int call, expressionS *ep, const char *fmt,
9620                            unsigned int sreg, unsigned int treg)
9621 {
9622   int noreorder = mips_opts.noreorder;
9623   expressionS expr1;
9624
9625   gas_assert (mips_opts.micromips);
9626   start_noreorder ();
9627   if (noreorder)
9628     {
9629       micromips_label_expr (&expr1);
9630       macro_build (&expr1, brneg, fmt, sreg, treg);
9631       macro_build (NULL, "nop", "");
9632       macro_build (ep, call ? "bal" : "b", "p");
9633
9634       /* Set to true so that append_insn adds a label.  */
9635       emit_branch_likely_macro = TRUE;
9636     }
9637   else
9638     {
9639       macro_build (ep, br, fmt, sreg, treg);
9640       macro_build (NULL, "nop", "");
9641     }
9642   end_noreorder ();
9643 }
9644
9645 /* Emit a coprocessor branch-likely macro specified by TYPE, using CC as
9646    the condition code tested.  EP specifies the branch target.  */
9647
9648 static void
9649 macro_build_branch_ccl (int type, expressionS *ep, unsigned int cc)
9650 {
9651   const int call = 0;
9652   const char *brneg;
9653   const char *br;
9654
9655   switch (type)
9656     {
9657     case M_BC1FL:
9658       br = "bc1f";
9659       brneg = "bc1t";
9660       break;
9661     case M_BC1TL:
9662       br = "bc1t";
9663       brneg = "bc1f";
9664       break;
9665     case M_BC2FL:
9666       br = "bc2f";
9667       brneg = "bc2t";
9668       break;
9669     case M_BC2TL:
9670       br = "bc2t";
9671       brneg = "bc2f";
9672       break;
9673     default:
9674       abort ();
9675     }
9676   macro_build_branch_likely (br, brneg, call, ep, "N,p", cc, ZERO);
9677 }
9678
9679 /* Emit a two-argument branch macro specified by TYPE, using SREG as
9680    the register tested.  EP specifies the branch target.  */
9681
9682 static void
9683 macro_build_branch_rs (int type, expressionS *ep, unsigned int sreg)
9684 {
9685   const char *brneg = NULL;
9686   const char *br;
9687   int call = 0;
9688
9689   switch (type)
9690     {
9691     case M_BGEZ:
9692       br = "bgez";
9693       break;
9694     case M_BGEZL:
9695       br = mips_opts.micromips ? "bgez" : "bgezl";
9696       brneg = "bltz";
9697       break;
9698     case M_BGEZALL:
9699       gas_assert (mips_opts.micromips);
9700       br = mips_opts.insn32 ? "bgezal" : "bgezals";
9701       brneg = "bltz";
9702       call = 1;
9703       break;
9704     case M_BGTZ:
9705       br = "bgtz";
9706       break;
9707     case M_BGTZL:
9708       br = mips_opts.micromips ? "bgtz" : "bgtzl";
9709       brneg = "blez";
9710       break;
9711     case M_BLEZ:
9712       br = "blez";
9713       break;
9714     case M_BLEZL:
9715       br = mips_opts.micromips ? "blez" : "blezl";
9716       brneg = "bgtz";
9717       break;
9718     case M_BLTZ:
9719       br = "bltz";
9720       break;
9721     case M_BLTZL:
9722       br = mips_opts.micromips ? "bltz" : "bltzl";
9723       brneg = "bgez";
9724       break;
9725     case M_BLTZALL:
9726       gas_assert (mips_opts.micromips);
9727       br = mips_opts.insn32 ? "bltzal" : "bltzals";
9728       brneg = "bgez";
9729       call = 1;
9730       break;
9731     default:
9732       abort ();
9733     }
9734   if (mips_opts.micromips && brneg)
9735     macro_build_branch_likely (br, brneg, call, ep, "s,p", sreg, ZERO);
9736   else
9737     macro_build (ep, br, "s,p", sreg);
9738 }
9739
9740 /* Emit a three-argument branch macro specified by TYPE, using SREG and
9741    TREG as the registers tested.  EP specifies the branch target.  */
9742
9743 static void
9744 macro_build_branch_rsrt (int type, expressionS *ep,
9745                          unsigned int sreg, unsigned int treg)
9746 {
9747   const char *brneg = NULL;
9748   const int call = 0;
9749   const char *br;
9750
9751   switch (type)
9752     {
9753     case M_BEQ:
9754     case M_BEQ_I:
9755       br = "beq";
9756       break;
9757     case M_BEQL:
9758     case M_BEQL_I:
9759       br = mips_opts.micromips ? "beq" : "beql";
9760       brneg = "bne";
9761       break;
9762     case M_BNE:
9763     case M_BNE_I:
9764       br = "bne";
9765       break;
9766     case M_BNEL:
9767     case M_BNEL_I:
9768       br = mips_opts.micromips ? "bne" : "bnel";
9769       brneg = "beq";
9770       break;
9771     default:
9772       abort ();
9773     }
9774   if (mips_opts.micromips && brneg)
9775     macro_build_branch_likely (br, brneg, call, ep, "s,t,p", sreg, treg);
9776   else
9777     macro_build (ep, br, "s,t,p", sreg, treg);
9778 }
9779
9780 /* Return the high part that should be loaded in order to make the low
9781    part of VALUE accessible using an offset of OFFBITS bits.  */
9782
9783 static offsetT
9784 offset_high_part (offsetT value, unsigned int offbits)
9785 {
9786   offsetT bias;
9787   addressT low_mask;
9788
9789   if (offbits == 0)
9790     return value;
9791   bias = 1 << (offbits - 1);
9792   low_mask = bias * 2 - 1;
9793   return (value + bias) & ~low_mask;
9794 }
9795
9796 /* Return true if the value stored in offset_expr and offset_reloc
9797    fits into a signed offset of OFFBITS bits.  RANGE is the maximum
9798    amount that the caller wants to add without inducing overflow
9799    and ALIGN is the known alignment of the value in bytes.  */
9800
9801 static bfd_boolean
9802 small_offset_p (unsigned int range, unsigned int align, unsigned int offbits)
9803 {
9804   if (offbits == 16)
9805     {
9806       /* Accept any relocation operator if overflow isn't a concern.  */
9807       if (range < align && *offset_reloc != BFD_RELOC_UNUSED)
9808         return TRUE;
9809
9810       /* These relocations are guaranteed not to overflow in correct links.  */
9811       if (*offset_reloc == BFD_RELOC_MIPS_LITERAL
9812           || gprel16_reloc_p (*offset_reloc))
9813         return TRUE;
9814     }
9815   if (offset_expr.X_op == O_constant
9816       && offset_high_part (offset_expr.X_add_number, offbits) == 0
9817       && offset_high_part (offset_expr.X_add_number + range, offbits) == 0)
9818     return TRUE;
9819   return FALSE;
9820 }
9821
9822 /*
9823  *                      Build macros
9824  *   This routine implements the seemingly endless macro or synthesized
9825  * instructions and addressing modes in the mips assembly language. Many
9826  * of these macros are simple and are similar to each other. These could
9827  * probably be handled by some kind of table or grammar approach instead of
9828  * this verbose method. Others are not simple macros but are more like
9829  * optimizing code generation.
9830  *   One interesting optimization is when several store macros appear
9831  * consecutively that would load AT with the upper half of the same address.
9832  * The ensuing load upper instructions are omitted. This implies some kind
9833  * of global optimization. We currently only optimize within a single macro.
9834  *   For many of the load and store macros if the address is specified as a
9835  * constant expression in the first 64k of memory (ie ld $2,0x4000c) we
9836  * first load register 'at' with zero and use it as the base register. The
9837  * mips assembler simply uses register $zero. Just one tiny optimization
9838  * we're missing.
9839  */
9840 static void
9841 macro (struct mips_cl_insn *ip, char *str)
9842 {
9843   const struct mips_operand_array *operands;
9844   unsigned int breg, i;
9845   unsigned int tempreg;
9846   int mask;
9847   int used_at = 0;
9848   expressionS label_expr;
9849   expressionS expr1;
9850   expressionS *ep;
9851   const char *s;
9852   const char *s2;
9853   const char *fmt;
9854   int likely = 0;
9855   int coproc = 0;
9856   int offbits = 16;
9857   int call = 0;
9858   int jals = 0;
9859   int dbl = 0;
9860   int imm = 0;
9861   int ust = 0;
9862   int lp = 0;
9863   bfd_boolean large_offset;
9864   int off;
9865   int hold_mips_optimize;
9866   unsigned int align;
9867   unsigned int op[MAX_OPERANDS];
9868
9869   gas_assert (! mips_opts.mips16);
9870
9871   operands = insn_operands (ip);
9872   for (i = 0; i < MAX_OPERANDS; i++)
9873     if (operands->operand[i])
9874       op[i] = insn_extract_operand (ip, operands->operand[i]);
9875     else
9876       op[i] = -1;
9877
9878   mask = ip->insn_mo->mask;
9879
9880   label_expr.X_op = O_constant;
9881   label_expr.X_op_symbol = NULL;
9882   label_expr.X_add_symbol = NULL;
9883   label_expr.X_add_number = 0;
9884
9885   expr1.X_op = O_constant;
9886   expr1.X_op_symbol = NULL;
9887   expr1.X_add_symbol = NULL;
9888   expr1.X_add_number = 1;
9889   align = 1;
9890
9891   switch (mask)
9892     {
9893     case M_DABS:
9894       dbl = 1;
9895       /* Fall through.  */
9896     case M_ABS:
9897       /*    bgez    $a0,1f
9898             move    v0,$a0
9899             sub     v0,$zero,$a0
9900          1:
9901        */
9902
9903       start_noreorder ();
9904
9905       if (mips_opts.micromips)
9906         micromips_label_expr (&label_expr);
9907       else
9908         label_expr.X_add_number = 8;
9909       macro_build (&label_expr, "bgez", "s,p", op[1]);
9910       if (op[0] == op[1])
9911         macro_build (NULL, "nop", "");
9912       else
9913         move_register (op[0], op[1]);
9914       macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", op[0], 0, op[1]);
9915       if (mips_opts.micromips)
9916         micromips_add_label ();
9917
9918       end_noreorder ();
9919       break;
9920
9921     case M_ADD_I:
9922       s = "addi";
9923       s2 = "add";
9924       goto do_addi;
9925     case M_ADDU_I:
9926       s = "addiu";
9927       s2 = "addu";
9928       goto do_addi;
9929     case M_DADD_I:
9930       dbl = 1;
9931       s = "daddi";
9932       s2 = "dadd";
9933       if (!mips_opts.micromips)
9934         goto do_addi;
9935       if (imm_expr.X_add_number >= -0x200
9936           && imm_expr.X_add_number < 0x200)
9937         {
9938           macro_build (NULL, s, "t,r,.", op[0], op[1],
9939                        (int) imm_expr.X_add_number);
9940           break;
9941         }
9942       goto do_addi_i;
9943     case M_DADDU_I:
9944       dbl = 1;
9945       s = "daddiu";
9946       s2 = "daddu";
9947     do_addi:
9948       if (imm_expr.X_add_number >= -0x8000
9949           && imm_expr.X_add_number < 0x8000)
9950         {
9951           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
9952           break;
9953         }
9954     do_addi_i:
9955       used_at = 1;
9956       load_register (AT, &imm_expr, dbl);
9957       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9958       break;
9959
9960     case M_AND_I:
9961       s = "andi";
9962       s2 = "and";
9963       goto do_bit;
9964     case M_OR_I:
9965       s = "ori";
9966       s2 = "or";
9967       goto do_bit;
9968     case M_NOR_I:
9969       s = "";
9970       s2 = "nor";
9971       goto do_bit;
9972     case M_XOR_I:
9973       s = "xori";
9974       s2 = "xor";
9975     do_bit:
9976       if (imm_expr.X_add_number >= 0
9977           && imm_expr.X_add_number < 0x10000)
9978         {
9979           if (mask != M_NOR_I)
9980             macro_build (&imm_expr, s, "t,r,i", op[0], op[1], BFD_RELOC_LO16);
9981           else
9982             {
9983               macro_build (&imm_expr, "ori", "t,r,i",
9984                            op[0], op[1], BFD_RELOC_LO16);
9985               macro_build (NULL, "nor", "d,v,t", op[0], op[0], 0);
9986             }
9987           break;
9988         }
9989
9990       used_at = 1;
9991       load_register (AT, &imm_expr, GPR_SIZE == 64);
9992       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9993       break;
9994
9995     case M_BALIGN:
9996       switch (imm_expr.X_add_number)
9997         {
9998         case 0:
9999           macro_build (NULL, "nop", "");
10000           break;
10001         case 2:
10002           macro_build (NULL, "packrl.ph", "d,s,t", op[0], op[0], op[1]);
10003           break;
10004         case 1:
10005         case 3:
10006           macro_build (NULL, "balign", "t,s,2", op[0], op[1],
10007                        (int) imm_expr.X_add_number);
10008           break;
10009         default:
10010           as_bad (_("BALIGN immediate not 0, 1, 2 or 3 (%lu)"),
10011                   (unsigned long) imm_expr.X_add_number);
10012           break;
10013         }
10014       break;
10015
10016     case M_BC1FL:
10017     case M_BC1TL:
10018     case M_BC2FL:
10019     case M_BC2TL:
10020       gas_assert (mips_opts.micromips);
10021       macro_build_branch_ccl (mask, &offset_expr,
10022                               EXTRACT_OPERAND (1, BCC, *ip));
10023       break;
10024
10025     case M_BEQ_I:
10026     case M_BEQL_I:
10027     case M_BNE_I:
10028     case M_BNEL_I:
10029       if (imm_expr.X_add_number == 0)
10030         op[1] = 0;
10031       else
10032         {
10033           op[1] = AT;
10034           used_at = 1;
10035           load_register (op[1], &imm_expr, GPR_SIZE == 64);
10036         }
10037       /* Fall through.  */
10038     case M_BEQL:
10039     case M_BNEL:
10040       macro_build_branch_rsrt (mask, &offset_expr, op[0], op[1]);
10041       break;
10042
10043     case M_BGEL:
10044       likely = 1;
10045       /* Fall through.  */
10046     case M_BGE:
10047       if (op[1] == 0)
10048         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[0]);
10049       else if (op[0] == 0)
10050         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[1]);
10051       else
10052         {
10053           used_at = 1;
10054           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
10055           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10056                                    &offset_expr, AT, ZERO);
10057         }
10058       break;
10059
10060     case M_BGEZL:
10061     case M_BGEZALL:
10062     case M_BGTZL:
10063     case M_BLEZL:
10064     case M_BLTZL:
10065     case M_BLTZALL:
10066       macro_build_branch_rs (mask, &offset_expr, op[0]);
10067       break;
10068
10069     case M_BGTL_I:
10070       likely = 1;
10071       /* Fall through.  */
10072     case M_BGT_I:
10073       /* Check for > max integer.  */
10074       if (imm_expr.X_add_number >= GPR_SMAX)
10075         {
10076         do_false:
10077           /* Result is always false.  */
10078           if (! likely)
10079             macro_build (NULL, "nop", "");
10080           else
10081             macro_build_branch_rsrt (M_BNEL, &offset_expr, ZERO, ZERO);
10082           break;
10083         }
10084       ++imm_expr.X_add_number;
10085       /* FALLTHROUGH */
10086     case M_BGE_I:
10087     case M_BGEL_I:
10088       if (mask == M_BGEL_I)
10089         likely = 1;
10090       if (imm_expr.X_add_number == 0)
10091         {
10092           macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ,
10093                                  &offset_expr, op[0]);
10094           break;
10095         }
10096       if (imm_expr.X_add_number == 1)
10097         {
10098           macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ,
10099                                  &offset_expr, op[0]);
10100           break;
10101         }
10102       if (imm_expr.X_add_number <= GPR_SMIN)
10103         {
10104         do_true:
10105           /* result is always true */
10106           as_warn (_("branch %s is always true"), ip->insn_mo->name);
10107           macro_build (&offset_expr, "b", "p");
10108           break;
10109         }
10110       used_at = 1;
10111       set_at (op[0], 0);
10112       macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10113                                &offset_expr, AT, ZERO);
10114       break;
10115
10116     case M_BGEUL:
10117       likely = 1;
10118       /* Fall through.  */
10119     case M_BGEU:
10120       if (op[1] == 0)
10121         goto do_true;
10122       else if (op[0] == 0)
10123         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10124                                  &offset_expr, ZERO, op[1]);
10125       else
10126         {
10127           used_at = 1;
10128           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
10129           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10130                                    &offset_expr, AT, ZERO);
10131         }
10132       break;
10133
10134     case M_BGTUL_I:
10135       likely = 1;
10136       /* Fall through.  */
10137     case M_BGTU_I:
10138       if (op[0] == 0
10139           || (GPR_SIZE == 32
10140               && imm_expr.X_add_number == -1))
10141         goto do_false;
10142       ++imm_expr.X_add_number;
10143       /* FALLTHROUGH */
10144     case M_BGEU_I:
10145     case M_BGEUL_I:
10146       if (mask == M_BGEUL_I)
10147         likely = 1;
10148       if (imm_expr.X_add_number == 0)
10149         goto do_true;
10150       else if (imm_expr.X_add_number == 1)
10151         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10152                                  &offset_expr, op[0], ZERO);
10153       else
10154         {
10155           used_at = 1;
10156           set_at (op[0], 1);
10157           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10158                                    &offset_expr, AT, ZERO);
10159         }
10160       break;
10161
10162     case M_BGTL:
10163       likely = 1;
10164       /* Fall through.  */
10165     case M_BGT:
10166       if (op[1] == 0)
10167         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[0]);
10168       else if (op[0] == 0)
10169         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[1]);
10170       else
10171         {
10172           used_at = 1;
10173           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
10174           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10175                                    &offset_expr, AT, ZERO);
10176         }
10177       break;
10178
10179     case M_BGTUL:
10180       likely = 1;
10181       /* Fall through.  */
10182     case M_BGTU:
10183       if (op[1] == 0)
10184         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10185                                  &offset_expr, op[0], ZERO);
10186       else if (op[0] == 0)
10187         goto do_false;
10188       else
10189         {
10190           used_at = 1;
10191           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
10192           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10193                                    &offset_expr, AT, ZERO);
10194         }
10195       break;
10196
10197     case M_BLEL:
10198       likely = 1;
10199       /* Fall through.  */
10200     case M_BLE:
10201       if (op[1] == 0)
10202         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
10203       else if (op[0] == 0)
10204         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[1]);
10205       else
10206         {
10207           used_at = 1;
10208           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
10209           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10210                                    &offset_expr, AT, ZERO);
10211         }
10212       break;
10213
10214     case M_BLEL_I:
10215       likely = 1;
10216       /* Fall through.  */
10217     case M_BLE_I:
10218       if (imm_expr.X_add_number >= GPR_SMAX)
10219         goto do_true;
10220       ++imm_expr.X_add_number;
10221       /* FALLTHROUGH */
10222     case M_BLT_I:
10223     case M_BLTL_I:
10224       if (mask == M_BLTL_I)
10225         likely = 1;
10226       if (imm_expr.X_add_number == 0)
10227         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
10228       else if (imm_expr.X_add_number == 1)
10229         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
10230       else
10231         {
10232           used_at = 1;
10233           set_at (op[0], 0);
10234           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10235                                    &offset_expr, AT, ZERO);
10236         }
10237       break;
10238
10239     case M_BLEUL:
10240       likely = 1;
10241       /* Fall through.  */
10242     case M_BLEU:
10243       if (op[1] == 0)
10244         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10245                                  &offset_expr, op[0], ZERO);
10246       else if (op[0] == 0)
10247         goto do_true;
10248       else
10249         {
10250           used_at = 1;
10251           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
10252           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10253                                    &offset_expr, AT, ZERO);
10254         }
10255       break;
10256
10257     case M_BLEUL_I:
10258       likely = 1;
10259       /* Fall through.  */
10260     case M_BLEU_I:
10261       if (op[0] == 0
10262           || (GPR_SIZE == 32
10263               && imm_expr.X_add_number == -1))
10264         goto do_true;
10265       ++imm_expr.X_add_number;
10266       /* FALLTHROUGH */
10267     case M_BLTU_I:
10268     case M_BLTUL_I:
10269       if (mask == M_BLTUL_I)
10270         likely = 1;
10271       if (imm_expr.X_add_number == 0)
10272         goto do_false;
10273       else if (imm_expr.X_add_number == 1)
10274         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10275                                  &offset_expr, op[0], ZERO);
10276       else
10277         {
10278           used_at = 1;
10279           set_at (op[0], 1);
10280           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10281                                    &offset_expr, AT, ZERO);
10282         }
10283       break;
10284
10285     case M_BLTL:
10286       likely = 1;
10287       /* Fall through.  */
10288     case M_BLT:
10289       if (op[1] == 0)
10290         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
10291       else if (op[0] == 0)
10292         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[1]);
10293       else
10294         {
10295           used_at = 1;
10296           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
10297           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10298                                    &offset_expr, AT, ZERO);
10299         }
10300       break;
10301
10302     case M_BLTUL:
10303       likely = 1;
10304       /* Fall through.  */
10305     case M_BLTU:
10306       if (op[1] == 0)
10307         goto do_false;
10308       else if (op[0] == 0)
10309         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10310                                  &offset_expr, ZERO, op[1]);
10311       else
10312         {
10313           used_at = 1;
10314           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
10315           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10316                                    &offset_expr, AT, ZERO);
10317         }
10318       break;
10319
10320     case M_DDIV_3:
10321       dbl = 1;
10322       /* Fall through.  */
10323     case M_DIV_3:
10324       s = "mflo";
10325       goto do_div3;
10326     case M_DREM_3:
10327       dbl = 1;
10328       /* Fall through.  */
10329     case M_REM_3:
10330       s = "mfhi";
10331     do_div3:
10332       if (op[2] == 0)
10333         {
10334           as_warn (_("divide by zero"));
10335           if (mips_trap)
10336             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
10337           else
10338             macro_build (NULL, "break", BRK_FMT, 7);
10339           break;
10340         }
10341
10342       start_noreorder ();
10343       if (mips_trap)
10344         {
10345           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
10346           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
10347         }
10348       else
10349         {
10350           if (mips_opts.micromips)
10351             micromips_label_expr (&label_expr);
10352           else
10353             label_expr.X_add_number = 8;
10354           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
10355           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
10356           macro_build (NULL, "break", BRK_FMT, 7);
10357           if (mips_opts.micromips)
10358             micromips_add_label ();
10359         }
10360       expr1.X_add_number = -1;
10361       used_at = 1;
10362       load_register (AT, &expr1, dbl);
10363       if (mips_opts.micromips)
10364         micromips_label_expr (&label_expr);
10365       else
10366         label_expr.X_add_number = mips_trap ? (dbl ? 12 : 8) : (dbl ? 20 : 16);
10367       macro_build (&label_expr, "bne", "s,t,p", op[2], AT);
10368       if (dbl)
10369         {
10370           expr1.X_add_number = 1;
10371           load_register (AT, &expr1, dbl);
10372           macro_build (NULL, "dsll32", SHFT_FMT, AT, AT, 31);
10373         }
10374       else
10375         {
10376           expr1.X_add_number = 0x80000000;
10377           macro_build (&expr1, "lui", LUI_FMT, AT, BFD_RELOC_HI16);
10378         }
10379       if (mips_trap)
10380         {
10381           macro_build (NULL, "teq", TRAP_FMT, op[1], AT, 6);
10382           /* We want to close the noreorder block as soon as possible, so
10383              that later insns are available for delay slot filling.  */
10384           end_noreorder ();
10385         }
10386       else
10387         {
10388           if (mips_opts.micromips)
10389             micromips_label_expr (&label_expr);
10390           else
10391             label_expr.X_add_number = 8;
10392           macro_build (&label_expr, "bne", "s,t,p", op[1], AT);
10393           macro_build (NULL, "nop", "");
10394
10395           /* We want to close the noreorder block as soon as possible, so
10396              that later insns are available for delay slot filling.  */
10397           end_noreorder ();
10398
10399           macro_build (NULL, "break", BRK_FMT, 6);
10400         }
10401       if (mips_opts.micromips)
10402         micromips_add_label ();
10403       macro_build (NULL, s, MFHL_FMT, op[0]);
10404       break;
10405
10406     case M_DIV_3I:
10407       s = "div";
10408       s2 = "mflo";
10409       goto do_divi;
10410     case M_DIVU_3I:
10411       s = "divu";
10412       s2 = "mflo";
10413       goto do_divi;
10414     case M_REM_3I:
10415       s = "div";
10416       s2 = "mfhi";
10417       goto do_divi;
10418     case M_REMU_3I:
10419       s = "divu";
10420       s2 = "mfhi";
10421       goto do_divi;
10422     case M_DDIV_3I:
10423       dbl = 1;
10424       s = "ddiv";
10425       s2 = "mflo";
10426       goto do_divi;
10427     case M_DDIVU_3I:
10428       dbl = 1;
10429       s = "ddivu";
10430       s2 = "mflo";
10431       goto do_divi;
10432     case M_DREM_3I:
10433       dbl = 1;
10434       s = "ddiv";
10435       s2 = "mfhi";
10436       goto do_divi;
10437     case M_DREMU_3I:
10438       dbl = 1;
10439       s = "ddivu";
10440       s2 = "mfhi";
10441     do_divi:
10442       if (imm_expr.X_add_number == 0)
10443         {
10444           as_warn (_("divide by zero"));
10445           if (mips_trap)
10446             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
10447           else
10448             macro_build (NULL, "break", BRK_FMT, 7);
10449           break;
10450         }
10451       if (imm_expr.X_add_number == 1)
10452         {
10453           if (strcmp (s2, "mflo") == 0)
10454             move_register (op[0], op[1]);
10455           else
10456             move_register (op[0], ZERO);
10457           break;
10458         }
10459       if (imm_expr.X_add_number == -1 && s[strlen (s) - 1] != 'u')
10460         {
10461           if (strcmp (s2, "mflo") == 0)
10462             macro_build (NULL, dbl ? "dneg" : "neg", "d,w", op[0], op[1]);
10463           else
10464             move_register (op[0], ZERO);
10465           break;
10466         }
10467
10468       used_at = 1;
10469       load_register (AT, &imm_expr, dbl);
10470       macro_build (NULL, s, "z,s,t", op[1], AT);
10471       macro_build (NULL, s2, MFHL_FMT, op[0]);
10472       break;
10473
10474     case M_DIVU_3:
10475       s = "divu";
10476       s2 = "mflo";
10477       goto do_divu3;
10478     case M_REMU_3:
10479       s = "divu";
10480       s2 = "mfhi";
10481       goto do_divu3;
10482     case M_DDIVU_3:
10483       s = "ddivu";
10484       s2 = "mflo";
10485       goto do_divu3;
10486     case M_DREMU_3:
10487       s = "ddivu";
10488       s2 = "mfhi";
10489     do_divu3:
10490       start_noreorder ();
10491       if (mips_trap)
10492         {
10493           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
10494           macro_build (NULL, s, "z,s,t", op[1], op[2]);
10495           /* We want to close the noreorder block as soon as possible, so
10496              that later insns are available for delay slot filling.  */
10497           end_noreorder ();
10498         }
10499       else
10500         {
10501           if (mips_opts.micromips)
10502             micromips_label_expr (&label_expr);
10503           else
10504             label_expr.X_add_number = 8;
10505           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
10506           macro_build (NULL, s, "z,s,t", op[1], op[2]);
10507
10508           /* We want to close the noreorder block as soon as possible, so
10509              that later insns are available for delay slot filling.  */
10510           end_noreorder ();
10511           macro_build (NULL, "break", BRK_FMT, 7);
10512           if (mips_opts.micromips)
10513             micromips_add_label ();
10514         }
10515       macro_build (NULL, s2, MFHL_FMT, op[0]);
10516       break;
10517
10518     case M_DLCA_AB:
10519       dbl = 1;
10520       /* Fall through.  */
10521     case M_LCA_AB:
10522       call = 1;
10523       goto do_la;
10524     case M_DLA_AB:
10525       dbl = 1;
10526       /* Fall through.  */
10527     case M_LA_AB:
10528     do_la:
10529       /* Load the address of a symbol into a register.  If breg is not
10530          zero, we then add a base register to it.  */
10531
10532       breg = op[2];
10533       if (dbl && GPR_SIZE == 32)
10534         as_warn (_("dla used to load 32-bit register; recommend using la "
10535                    "instead"));
10536
10537       if (!dbl && HAVE_64BIT_OBJECTS)
10538         as_warn (_("la used to load 64-bit address; recommend using dla "
10539                    "instead"));
10540
10541       if (small_offset_p (0, align, 16))
10542         {
10543           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", op[0], breg,
10544                        -1, offset_reloc[0], offset_reloc[1], offset_reloc[2]);
10545           break;
10546         }
10547
10548       if (mips_opts.at && (op[0] == breg))
10549         {
10550           tempreg = AT;
10551           used_at = 1;
10552         }
10553       else
10554         tempreg = op[0];
10555
10556       if (offset_expr.X_op != O_symbol
10557           && offset_expr.X_op != O_constant)
10558         {
10559           as_bad (_("expression too complex"));
10560           offset_expr.X_op = O_constant;
10561         }
10562
10563       if (offset_expr.X_op == O_constant)
10564         load_register (tempreg, &offset_expr, HAVE_64BIT_ADDRESSES);
10565       else if (mips_pic == NO_PIC)
10566         {
10567           /* If this is a reference to a GP relative symbol, we want
10568                addiu    $tempreg,$gp,<sym>      (BFD_RELOC_GPREL16)
10569              Otherwise we want
10570                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
10571                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10572              If we have a constant, we need two instructions anyhow,
10573              so we may as well always use the latter form.
10574
10575              With 64bit address space and a usable $at we want
10576                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
10577                lui      $at,<sym>               (BFD_RELOC_HI16_S)
10578                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
10579                daddiu   $at,<sym>               (BFD_RELOC_LO16)
10580                dsll32   $tempreg,0
10581                daddu    $tempreg,$tempreg,$at
10582
10583              If $at is already in use, we use a path which is suboptimal
10584              on superscalar processors.
10585                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
10586                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
10587                dsll     $tempreg,16
10588                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
10589                dsll     $tempreg,16
10590                daddiu   $tempreg,<sym>          (BFD_RELOC_LO16)
10591
10592              For GP relative symbols in 64bit address space we can use
10593              the same sequence as in 32bit address space.  */
10594           if (HAVE_64BIT_SYMBOLS)
10595             {
10596               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
10597                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
10598                 {
10599                   relax_start (offset_expr.X_add_symbol);
10600                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10601                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
10602                   relax_switch ();
10603                 }
10604
10605               if (used_at == 0 && mips_opts.at)
10606                 {
10607                   macro_build (&offset_expr, "lui", LUI_FMT,
10608                                tempreg, BFD_RELOC_MIPS_HIGHEST);
10609                   macro_build (&offset_expr, "lui", LUI_FMT,
10610                                AT, BFD_RELOC_HI16_S);
10611                   macro_build (&offset_expr, "daddiu", "t,r,j",
10612                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
10613                   macro_build (&offset_expr, "daddiu", "t,r,j",
10614                                AT, AT, BFD_RELOC_LO16);
10615                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
10616                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
10617                   used_at = 1;
10618                 }
10619               else
10620                 {
10621                   macro_build (&offset_expr, "lui", LUI_FMT,
10622                                tempreg, BFD_RELOC_MIPS_HIGHEST);
10623                   macro_build (&offset_expr, "daddiu", "t,r,j",
10624                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
10625                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
10626                   macro_build (&offset_expr, "daddiu", "t,r,j",
10627                                tempreg, tempreg, BFD_RELOC_HI16_S);
10628                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
10629                   macro_build (&offset_expr, "daddiu", "t,r,j",
10630                                tempreg, tempreg, BFD_RELOC_LO16);
10631                 }
10632
10633               if (mips_relax.sequence)
10634                 relax_end ();
10635             }
10636           else
10637             {
10638               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
10639                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
10640                 {
10641                   relax_start (offset_expr.X_add_symbol);
10642                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10643                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
10644                   relax_switch ();
10645                 }
10646               if (!IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
10647                 as_bad (_("offset too large"));
10648               macro_build_lui (&offset_expr, tempreg);
10649               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10650                            tempreg, tempreg, BFD_RELOC_LO16);
10651               if (mips_relax.sequence)
10652                 relax_end ();
10653             }
10654         }
10655       else if (!mips_big_got && !HAVE_NEWABI)
10656         {
10657           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
10658
10659           /* If this is a reference to an external symbol, and there
10660              is no constant, we want
10661                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10662              or for lca or if tempreg is PIC_CALL_REG
10663                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
10664              For a local symbol, we want
10665                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10666                nop
10667                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10668
10669              If we have a small constant, and this is a reference to
10670              an external symbol, we want
10671                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10672                nop
10673                addiu    $tempreg,$tempreg,<constant>
10674              For a local symbol, we want the same instruction
10675              sequence, but we output a BFD_RELOC_LO16 reloc on the
10676              addiu instruction.
10677
10678              If we have a large constant, and this is a reference to
10679              an external symbol, we want
10680                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10681                lui      $at,<hiconstant>
10682                addiu    $at,$at,<loconstant>
10683                addu     $tempreg,$tempreg,$at
10684              For a local symbol, we want the same instruction
10685              sequence, but we output a BFD_RELOC_LO16 reloc on the
10686              addiu instruction.
10687            */
10688
10689           if (offset_expr.X_add_number == 0)
10690             {
10691               if (mips_pic == SVR4_PIC
10692                   && breg == 0
10693                   && (call || tempreg == PIC_CALL_REG))
10694                 lw_reloc_type = (int) BFD_RELOC_MIPS_CALL16;
10695
10696               relax_start (offset_expr.X_add_symbol);
10697               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10698                            lw_reloc_type, mips_gp_register);
10699               if (breg != 0)
10700                 {
10701                   /* We're going to put in an addu instruction using
10702                      tempreg, so we may as well insert the nop right
10703                      now.  */
10704                   load_delay_nop ();
10705                 }
10706               relax_switch ();
10707               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10708                            tempreg, BFD_RELOC_MIPS_GOT16, mips_gp_register);
10709               load_delay_nop ();
10710               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10711                            tempreg, tempreg, BFD_RELOC_LO16);
10712               relax_end ();
10713               /* FIXME: If breg == 0, and the next instruction uses
10714                  $tempreg, then if this variant case is used an extra
10715                  nop will be generated.  */
10716             }
10717           else if (offset_expr.X_add_number >= -0x8000
10718                    && offset_expr.X_add_number < 0x8000)
10719             {
10720               load_got_offset (tempreg, &offset_expr);
10721               load_delay_nop ();
10722               add_got_offset (tempreg, &offset_expr);
10723             }
10724           else
10725             {
10726               expr1.X_add_number = offset_expr.X_add_number;
10727               offset_expr.X_add_number =
10728                 SEXT_16BIT (offset_expr.X_add_number);
10729               load_got_offset (tempreg, &offset_expr);
10730               offset_expr.X_add_number = expr1.X_add_number;
10731               /* If we are going to add in a base register, and the
10732                  target register and the base register are the same,
10733                  then we are using AT as a temporary register.  Since
10734                  we want to load the constant into AT, we add our
10735                  current AT (from the global offset table) and the
10736                  register into the register now, and pretend we were
10737                  not using a base register.  */
10738               if (breg == op[0])
10739                 {
10740                   load_delay_nop ();
10741                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10742                                op[0], AT, breg);
10743                   breg = 0;
10744                   tempreg = op[0];
10745                 }
10746               add_got_offset_hilo (tempreg, &offset_expr, AT);
10747               used_at = 1;
10748             }
10749         }
10750       else if (!mips_big_got && HAVE_NEWABI)
10751         {
10752           int add_breg_early = 0;
10753
10754           /* If this is a reference to an external, and there is no
10755              constant, or local symbol (*), with or without a
10756              constant, we want
10757                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10758              or for lca or if tempreg is PIC_CALL_REG
10759                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
10760
10761              If we have a small constant, and this is a reference to
10762              an external symbol, we want
10763                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10764                addiu    $tempreg,$tempreg,<constant>
10765
10766              If we have a large constant, and this is a reference to
10767              an external symbol, we want
10768                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10769                lui      $at,<hiconstant>
10770                addiu    $at,$at,<loconstant>
10771                addu     $tempreg,$tempreg,$at
10772
10773              (*) Other assemblers seem to prefer GOT_PAGE/GOT_OFST for
10774              local symbols, even though it introduces an additional
10775              instruction.  */
10776
10777           if (offset_expr.X_add_number)
10778             {
10779               expr1.X_add_number = offset_expr.X_add_number;
10780               offset_expr.X_add_number = 0;
10781
10782               relax_start (offset_expr.X_add_symbol);
10783               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10784                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10785
10786               if (expr1.X_add_number >= -0x8000
10787                   && expr1.X_add_number < 0x8000)
10788                 {
10789                   macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10790                                tempreg, tempreg, BFD_RELOC_LO16);
10791                 }
10792               else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
10793                 {
10794                   unsigned int dreg;
10795
10796                   /* If we are going to add in a base register, and the
10797                      target register and the base register are the same,
10798                      then we are using AT as a temporary register.  Since
10799                      we want to load the constant into AT, we add our
10800                      current AT (from the global offset table) and the
10801                      register into the register now, and pretend we were
10802                      not using a base register.  */
10803                   if (breg != op[0])
10804                     dreg = tempreg;
10805                   else
10806                     {
10807                       gas_assert (tempreg == AT);
10808                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10809                                    op[0], AT, breg);
10810                       dreg = op[0];
10811                       add_breg_early = 1;
10812                     }
10813
10814                   load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10815                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10816                                dreg, dreg, AT);
10817
10818                   used_at = 1;
10819                 }
10820               else
10821                 as_bad (_("PIC code offset overflow (max 32 signed bits)"));
10822
10823               relax_switch ();
10824               offset_expr.X_add_number = expr1.X_add_number;
10825
10826               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10827                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10828               if (add_breg_early)
10829                 {
10830                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10831                                op[0], tempreg, breg);
10832                   breg = 0;
10833                   tempreg = op[0];
10834                 }
10835               relax_end ();
10836             }
10837           else if (breg == 0 && (call || tempreg == PIC_CALL_REG))
10838             {
10839               relax_start (offset_expr.X_add_symbol);
10840               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10841                            BFD_RELOC_MIPS_CALL16, mips_gp_register);
10842               relax_switch ();
10843               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10844                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10845               relax_end ();
10846             }
10847           else
10848             {
10849               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10850                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10851             }
10852         }
10853       else if (mips_big_got && !HAVE_NEWABI)
10854         {
10855           int gpdelay;
10856           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
10857           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
10858           int local_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
10859
10860           /* This is the large GOT case.  If this is a reference to an
10861              external symbol, and there is no constant, we want
10862                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10863                addu     $tempreg,$tempreg,$gp
10864                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10865              or for lca or if tempreg is PIC_CALL_REG
10866                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
10867                addu     $tempreg,$tempreg,$gp
10868                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
10869              For a local symbol, we want
10870                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10871                nop
10872                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10873
10874              If we have a small constant, and this is a reference to
10875              an external symbol, we want
10876                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10877                addu     $tempreg,$tempreg,$gp
10878                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10879                nop
10880                addiu    $tempreg,$tempreg,<constant>
10881              For a local symbol, we want
10882                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10883                nop
10884                addiu    $tempreg,$tempreg,<constant> (BFD_RELOC_LO16)
10885
10886              If we have a large constant, and this is a reference to
10887              an external symbol, we want
10888                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10889                addu     $tempreg,$tempreg,$gp
10890                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10891                lui      $at,<hiconstant>
10892                addiu    $at,$at,<loconstant>
10893                addu     $tempreg,$tempreg,$at
10894              For a local symbol, we want
10895                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10896                lui      $at,<hiconstant>
10897                addiu    $at,$at,<loconstant>    (BFD_RELOC_LO16)
10898                addu     $tempreg,$tempreg,$at
10899           */
10900
10901           expr1.X_add_number = offset_expr.X_add_number;
10902           offset_expr.X_add_number = 0;
10903           relax_start (offset_expr.X_add_symbol);
10904           gpdelay = reg_needs_delay (mips_gp_register);
10905           if (expr1.X_add_number == 0 && breg == 0
10906               && (call || tempreg == PIC_CALL_REG))
10907             {
10908               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
10909               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
10910             }
10911           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
10912           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10913                        tempreg, tempreg, mips_gp_register);
10914           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10915                        tempreg, lw_reloc_type, tempreg);
10916           if (expr1.X_add_number == 0)
10917             {
10918               if (breg != 0)
10919                 {
10920                   /* We're going to put in an addu instruction using
10921                      tempreg, so we may as well insert the nop right
10922                      now.  */
10923                   load_delay_nop ();
10924                 }
10925             }
10926           else if (expr1.X_add_number >= -0x8000
10927                    && expr1.X_add_number < 0x8000)
10928             {
10929               load_delay_nop ();
10930               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10931                            tempreg, tempreg, BFD_RELOC_LO16);
10932             }
10933           else
10934             {
10935               unsigned int dreg;
10936
10937               /* If we are going to add in a base register, and the
10938                  target register and the base register are the same,
10939                  then we are using AT as a temporary register.  Since
10940                  we want to load the constant into AT, we add our
10941                  current AT (from the global offset table) and the
10942                  register into the register now, and pretend we were
10943                  not using a base register.  */
10944               if (breg != op[0])
10945                 dreg = tempreg;
10946               else
10947                 {
10948                   gas_assert (tempreg == AT);
10949                   load_delay_nop ();
10950                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10951                                op[0], AT, breg);
10952                   dreg = op[0];
10953                 }
10954
10955               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10956               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
10957
10958               used_at = 1;
10959             }
10960           offset_expr.X_add_number = SEXT_16BIT (expr1.X_add_number);
10961           relax_switch ();
10962
10963           if (gpdelay)
10964             {
10965               /* This is needed because this instruction uses $gp, but
10966                  the first instruction on the main stream does not.  */
10967               macro_build (NULL, "nop", "");
10968             }
10969
10970           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10971                        local_reloc_type, mips_gp_register);
10972           if (expr1.X_add_number >= -0x8000
10973               && expr1.X_add_number < 0x8000)
10974             {
10975               load_delay_nop ();
10976               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10977                            tempreg, tempreg, BFD_RELOC_LO16);
10978               /* FIXME: If add_number is 0, and there was no base
10979                  register, the external symbol case ended with a load,
10980                  so if the symbol turns out to not be external, and
10981                  the next instruction uses tempreg, an unnecessary nop
10982                  will be inserted.  */
10983             }
10984           else
10985             {
10986               if (breg == op[0])
10987                 {
10988                   /* We must add in the base register now, as in the
10989                      external symbol case.  */
10990                   gas_assert (tempreg == AT);
10991                   load_delay_nop ();
10992                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10993                                op[0], AT, breg);
10994                   tempreg = op[0];
10995                   /* We set breg to 0 because we have arranged to add
10996                      it in in both cases.  */
10997                   breg = 0;
10998                 }
10999
11000               macro_build_lui (&expr1, AT);
11001               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11002                            AT, AT, BFD_RELOC_LO16);
11003               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11004                            tempreg, tempreg, AT);
11005               used_at = 1;
11006             }
11007           relax_end ();
11008         }
11009       else if (mips_big_got && HAVE_NEWABI)
11010         {
11011           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
11012           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
11013           int add_breg_early = 0;
11014
11015           /* This is the large GOT case.  If this is a reference to an
11016              external symbol, and there is no constant, we want
11017                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11018                add      $tempreg,$tempreg,$gp
11019                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11020              or for lca or if tempreg is PIC_CALL_REG
11021                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
11022                add      $tempreg,$tempreg,$gp
11023                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
11024
11025              If we have a small constant, and this is a reference to
11026              an external symbol, we want
11027                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11028                add      $tempreg,$tempreg,$gp
11029                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11030                addi     $tempreg,$tempreg,<constant>
11031
11032              If we have a large constant, and this is a reference to
11033              an external symbol, we want
11034                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11035                addu     $tempreg,$tempreg,$gp
11036                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11037                lui      $at,<hiconstant>
11038                addi     $at,$at,<loconstant>
11039                add      $tempreg,$tempreg,$at
11040
11041              If we have NewABI, and we know it's a local symbol, we want
11042                lw       $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
11043                addiu    $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
11044              otherwise we have to resort to GOT_HI16/GOT_LO16.  */
11045
11046           relax_start (offset_expr.X_add_symbol);
11047
11048           expr1.X_add_number = offset_expr.X_add_number;
11049           offset_expr.X_add_number = 0;
11050
11051           if (expr1.X_add_number == 0 && breg == 0
11052               && (call || tempreg == PIC_CALL_REG))
11053             {
11054               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
11055               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
11056             }
11057           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
11058           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11059                        tempreg, tempreg, mips_gp_register);
11060           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11061                        tempreg, lw_reloc_type, tempreg);
11062
11063           if (expr1.X_add_number == 0)
11064             ;
11065           else if (expr1.X_add_number >= -0x8000
11066                    && expr1.X_add_number < 0x8000)
11067             {
11068               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
11069                            tempreg, tempreg, BFD_RELOC_LO16);
11070             }
11071           else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
11072             {
11073               unsigned int dreg;
11074
11075               /* If we are going to add in a base register, and the
11076                  target register and the base register are the same,
11077                  then we are using AT as a temporary register.  Since
11078                  we want to load the constant into AT, we add our
11079                  current AT (from the global offset table) and the
11080                  register into the register now, and pretend we were
11081                  not using a base register.  */
11082               if (breg != op[0])
11083                 dreg = tempreg;
11084               else
11085                 {
11086                   gas_assert (tempreg == AT);
11087                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11088                                op[0], AT, breg);
11089                   dreg = op[0];
11090                   add_breg_early = 1;
11091                 }
11092
11093               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
11094               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
11095
11096               used_at = 1;
11097             }
11098           else
11099             as_bad (_("PIC code offset overflow (max 32 signed bits)"));
11100
11101           relax_switch ();
11102           offset_expr.X_add_number = expr1.X_add_number;
11103           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11104                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
11105           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
11106                        tempreg, BFD_RELOC_MIPS_GOT_OFST);
11107           if (add_breg_early)
11108             {
11109               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11110                            op[0], tempreg, breg);
11111               breg = 0;
11112               tempreg = op[0];
11113             }
11114           relax_end ();
11115         }
11116       else
11117         abort ();
11118
11119       if (breg != 0)
11120         macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", op[0], tempreg, breg);
11121       break;
11122
11123     case M_MSGSND:
11124       gas_assert (!mips_opts.micromips);
11125       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x01);
11126       break;
11127
11128     case M_MSGLD:
11129       gas_assert (!mips_opts.micromips);
11130       macro_build (NULL, "c2", "C", 0x02);
11131       break;
11132
11133     case M_MSGLD_T:
11134       gas_assert (!mips_opts.micromips);
11135       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x02);
11136       break;
11137
11138     case M_MSGWAIT:
11139       gas_assert (!mips_opts.micromips);
11140       macro_build (NULL, "c2", "C", 3);
11141       break;
11142
11143     case M_MSGWAIT_T:
11144       gas_assert (!mips_opts.micromips);
11145       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x03);
11146       break;
11147
11148     case M_J_A:
11149       /* The j instruction may not be used in PIC code, since it
11150          requires an absolute address.  We convert it to a b
11151          instruction.  */
11152       if (mips_pic == NO_PIC)
11153         macro_build (&offset_expr, "j", "a");
11154       else
11155         macro_build (&offset_expr, "b", "p");
11156       break;
11157
11158       /* The jal instructions must be handled as macros because when
11159          generating PIC code they expand to multi-instruction
11160          sequences.  Normally they are simple instructions.  */
11161     case M_JALS_1:
11162       op[1] = op[0];
11163       op[0] = RA;
11164       /* Fall through.  */
11165     case M_JALS_2:
11166       gas_assert (mips_opts.micromips);
11167       if (mips_opts.insn32)
11168         {
11169           as_bad (_("opcode not supported in the `insn32' mode `%s'"), str);
11170           break;
11171         }
11172       jals = 1;
11173       goto jal;
11174     case M_JAL_1:
11175       op[1] = op[0];
11176       op[0] = RA;
11177       /* Fall through.  */
11178     case M_JAL_2:
11179     jal:
11180       if (mips_pic == NO_PIC)
11181         {
11182           s = jals ? "jalrs" : "jalr";
11183           if (mips_opts.micromips
11184               && !mips_opts.insn32
11185               && op[0] == RA
11186               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
11187             macro_build (NULL, s, "mj", op[1]);
11188           else
11189             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
11190         }
11191       else
11192         {
11193           int cprestore = (mips_pic == SVR4_PIC && !HAVE_NEWABI
11194                            && mips_cprestore_offset >= 0);
11195
11196           if (op[1] != PIC_CALL_REG)
11197             as_warn (_("MIPS PIC call to register other than $25"));
11198
11199           s = ((mips_opts.micromips
11200                 && !mips_opts.insn32
11201                 && (!mips_opts.noreorder || cprestore))
11202                ? "jalrs" : "jalr");
11203           if (mips_opts.micromips
11204               && !mips_opts.insn32
11205               && op[0] == RA
11206               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
11207             macro_build (NULL, s, "mj", op[1]);
11208           else
11209             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
11210           if (mips_pic == SVR4_PIC && !HAVE_NEWABI)
11211             {
11212               if (mips_cprestore_offset < 0)
11213                 as_warn (_("no .cprestore pseudo-op used in PIC code"));
11214               else
11215                 {
11216                   if (!mips_frame_reg_valid)
11217                     {
11218                       as_warn (_("no .frame pseudo-op used in PIC code"));
11219                       /* Quiet this warning.  */
11220                       mips_frame_reg_valid = 1;
11221                     }
11222                   if (!mips_cprestore_valid)
11223                     {
11224                       as_warn (_("no .cprestore pseudo-op used in PIC code"));
11225                       /* Quiet this warning.  */
11226                       mips_cprestore_valid = 1;
11227                     }
11228                   if (mips_opts.noreorder)
11229                     macro_build (NULL, "nop", "");
11230                   expr1.X_add_number = mips_cprestore_offset;
11231                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
11232                                                 mips_gp_register,
11233                                                 mips_frame_reg,
11234                                                 HAVE_64BIT_ADDRESSES);
11235                 }
11236             }
11237         }
11238
11239       break;
11240
11241     case M_JALS_A:
11242       gas_assert (mips_opts.micromips);
11243       if (mips_opts.insn32)
11244         {
11245           as_bad (_("opcode not supported in the `insn32' mode `%s'"), str);
11246           break;
11247         }
11248       jals = 1;
11249       /* Fall through.  */
11250     case M_JAL_A:
11251       if (mips_pic == NO_PIC)
11252         macro_build (&offset_expr, jals ? "jals" : "jal", "a");
11253       else if (mips_pic == SVR4_PIC)
11254         {
11255           /* If this is a reference to an external symbol, and we are
11256              using a small GOT, we want
11257                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_CALL16)
11258                nop
11259                jalr     $ra,$25
11260                nop
11261                lw       $gp,cprestore($sp)
11262              The cprestore value is set using the .cprestore
11263              pseudo-op.  If we are using a big GOT, we want
11264                lui      $25,<sym>               (BFD_RELOC_MIPS_CALL_HI16)
11265                addu     $25,$25,$gp
11266                lw       $25,<sym>($25)          (BFD_RELOC_MIPS_CALL_LO16)
11267                nop
11268                jalr     $ra,$25
11269                nop
11270                lw       $gp,cprestore($sp)
11271              If the symbol is not external, we want
11272                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
11273                nop
11274                addiu    $25,$25,<sym>           (BFD_RELOC_LO16)
11275                jalr     $ra,$25
11276                nop
11277                lw $gp,cprestore($sp)
11278
11279              For NewABI, we use the same CALL16 or CALL_HI16/CALL_LO16
11280              sequences above, minus nops, unless the symbol is local,
11281              which enables us to use GOT_PAGE/GOT_OFST (big got) or
11282              GOT_DISP.  */
11283           if (HAVE_NEWABI)
11284             {
11285               if (!mips_big_got)
11286                 {
11287                   relax_start (offset_expr.X_add_symbol);
11288                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11289                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
11290                                mips_gp_register);
11291                   relax_switch ();
11292                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11293                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_DISP,
11294                                mips_gp_register);
11295                   relax_end ();
11296                 }
11297               else
11298                 {
11299                   relax_start (offset_expr.X_add_symbol);
11300                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
11301                                BFD_RELOC_MIPS_CALL_HI16);
11302                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
11303                                PIC_CALL_REG, mips_gp_register);
11304                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11305                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
11306                                PIC_CALL_REG);
11307                   relax_switch ();
11308                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11309                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_PAGE,
11310                                mips_gp_register);
11311                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11312                                PIC_CALL_REG, PIC_CALL_REG,
11313                                BFD_RELOC_MIPS_GOT_OFST);
11314                   relax_end ();
11315                 }
11316
11317               macro_build_jalr (&offset_expr, 0);
11318             }
11319           else
11320             {
11321               relax_start (offset_expr.X_add_symbol);
11322               if (!mips_big_got)
11323                 {
11324                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11325                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
11326                                mips_gp_register);
11327                   load_delay_nop ();
11328                   relax_switch ();
11329                 }
11330               else
11331                 {
11332                   int gpdelay;
11333
11334                   gpdelay = reg_needs_delay (mips_gp_register);
11335                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
11336                                BFD_RELOC_MIPS_CALL_HI16);
11337                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
11338                                PIC_CALL_REG, mips_gp_register);
11339                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11340                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
11341                                PIC_CALL_REG);
11342                   load_delay_nop ();
11343                   relax_switch ();
11344                   if (gpdelay)
11345                     macro_build (NULL, "nop", "");
11346                 }
11347               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11348                            PIC_CALL_REG, BFD_RELOC_MIPS_GOT16,
11349                            mips_gp_register);
11350               load_delay_nop ();
11351               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11352                            PIC_CALL_REG, PIC_CALL_REG, BFD_RELOC_LO16);
11353               relax_end ();
11354               macro_build_jalr (&offset_expr, mips_cprestore_offset >= 0);
11355
11356               if (mips_cprestore_offset < 0)
11357                 as_warn (_("no .cprestore pseudo-op used in PIC code"));
11358               else
11359                 {
11360                   if (!mips_frame_reg_valid)
11361                     {
11362                       as_warn (_("no .frame pseudo-op used in PIC code"));
11363                       /* Quiet this warning.  */
11364                       mips_frame_reg_valid = 1;
11365                     }
11366                   if (!mips_cprestore_valid)
11367                     {
11368                       as_warn (_("no .cprestore pseudo-op used in PIC code"));
11369                       /* Quiet this warning.  */
11370                       mips_cprestore_valid = 1;
11371                     }
11372                   if (mips_opts.noreorder)
11373                     macro_build (NULL, "nop", "");
11374                   expr1.X_add_number = mips_cprestore_offset;
11375                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
11376                                                 mips_gp_register,
11377                                                 mips_frame_reg,
11378                                                 HAVE_64BIT_ADDRESSES);
11379                 }
11380             }
11381         }
11382       else if (mips_pic == VXWORKS_PIC)
11383         as_bad (_("non-PIC jump used in PIC library"));
11384       else
11385         abort ();
11386
11387       break;
11388
11389     case M_LBUE_AB:
11390       s = "lbue";
11391       fmt = "t,+j(b)";
11392       offbits = 9;
11393       goto ld_st;
11394     case M_LHUE_AB:
11395       s = "lhue";
11396       fmt = "t,+j(b)";
11397       offbits = 9;
11398       goto ld_st;
11399     case M_LBE_AB:
11400       s = "lbe";
11401       fmt = "t,+j(b)";
11402       offbits = 9;
11403       goto ld_st;
11404     case M_LHE_AB:
11405       s = "lhe";
11406       fmt = "t,+j(b)";
11407       offbits = 9;
11408       goto ld_st;
11409     case M_LLE_AB:
11410       s = "lle";
11411       fmt = "t,+j(b)";
11412       offbits = 9;
11413       goto ld_st;
11414     case M_LWE_AB:
11415       s = "lwe";
11416       fmt = "t,+j(b)";
11417       offbits = 9;
11418       goto ld_st;
11419     case M_LWLE_AB:
11420       s = "lwle";
11421       fmt = "t,+j(b)";
11422       offbits = 9;
11423       goto ld_st;
11424     case M_LWRE_AB:
11425       s = "lwre";
11426       fmt = "t,+j(b)";
11427       offbits = 9;
11428       goto ld_st;
11429     case M_SBE_AB:
11430       s = "sbe";
11431       fmt = "t,+j(b)";
11432       offbits = 9;
11433       goto ld_st;
11434     case M_SCE_AB:
11435       s = "sce";
11436       fmt = "t,+j(b)";
11437       offbits = 9;
11438       goto ld_st;
11439     case M_SHE_AB:
11440       s = "she";
11441       fmt = "t,+j(b)";
11442       offbits = 9;
11443       goto ld_st;
11444     case M_SWE_AB:
11445       s = "swe";
11446       fmt = "t,+j(b)";
11447       offbits = 9;
11448       goto ld_st;
11449     case M_SWLE_AB:
11450       s = "swle";
11451       fmt = "t,+j(b)";
11452       offbits = 9;
11453       goto ld_st;
11454     case M_SWRE_AB:
11455       s = "swre";
11456       fmt = "t,+j(b)";
11457       offbits = 9;
11458       goto ld_st;
11459     case M_ACLR_AB:
11460       s = "aclr";
11461       fmt = "\\,~(b)";
11462       offbits = 12;
11463       goto ld_st;
11464     case M_ASET_AB:
11465       s = "aset";
11466       fmt = "\\,~(b)";
11467       offbits = 12;
11468       goto ld_st;
11469     case M_LB_AB:
11470       s = "lb";
11471       fmt = "t,o(b)";
11472       goto ld;
11473     case M_LBU_AB:
11474       s = "lbu";
11475       fmt = "t,o(b)";
11476       goto ld;
11477     case M_LH_AB:
11478       s = "lh";
11479       fmt = "t,o(b)";
11480       goto ld;
11481     case M_LHU_AB:
11482       s = "lhu";
11483       fmt = "t,o(b)";
11484       goto ld;
11485     case M_LW_AB:
11486       s = "lw";
11487       fmt = "t,o(b)";
11488       goto ld;
11489     case M_LWC0_AB:
11490       gas_assert (!mips_opts.micromips);
11491       s = "lwc0";
11492       fmt = "E,o(b)";
11493       /* Itbl support may require additional care here.  */
11494       coproc = 1;
11495       goto ld_st;
11496     case M_LWC1_AB:
11497       s = "lwc1";
11498       fmt = "T,o(b)";
11499       /* Itbl support may require additional care here.  */
11500       coproc = 1;
11501       goto ld_st;
11502     case M_LWC2_AB:
11503       s = "lwc2";
11504       fmt = COP12_FMT;
11505       offbits = (mips_opts.micromips ? 12
11506                  : ISA_IS_R6 (mips_opts.isa) ? 11
11507                  : 16);
11508       /* Itbl support may require additional care here.  */
11509       coproc = 1;
11510       goto ld_st;
11511     case M_LWC3_AB:
11512       gas_assert (!mips_opts.micromips);
11513       s = "lwc3";
11514       fmt = "E,o(b)";
11515       /* Itbl support may require additional care here.  */
11516       coproc = 1;
11517       goto ld_st;
11518     case M_LWL_AB:
11519       s = "lwl";
11520       fmt = MEM12_FMT;
11521       offbits = (mips_opts.micromips ? 12 : 16);
11522       goto ld_st;
11523     case M_LWR_AB:
11524       s = "lwr";
11525       fmt = MEM12_FMT;
11526       offbits = (mips_opts.micromips ? 12 : 16);
11527       goto ld_st;
11528     case M_LDC1_AB:
11529       s = "ldc1";
11530       fmt = "T,o(b)";
11531       /* Itbl support may require additional care here.  */
11532       coproc = 1;
11533       goto ld_st;
11534     case M_LDC2_AB:
11535       s = "ldc2";
11536       fmt = COP12_FMT;
11537       offbits = (mips_opts.micromips ? 12
11538                  : ISA_IS_R6 (mips_opts.isa) ? 11
11539                  : 16);
11540       /* Itbl support may require additional care here.  */
11541       coproc = 1;
11542       goto ld_st;
11543     case M_LQC2_AB:
11544       s = "lqc2";
11545       fmt = "+7,o(b)";
11546       /* Itbl support may require additional care here.  */
11547       coproc = 1;
11548       goto ld_st;
11549     case M_LDC3_AB:
11550       s = "ldc3";
11551       fmt = "E,o(b)";
11552       /* Itbl support may require additional care here.  */
11553       coproc = 1;
11554       goto ld_st;
11555     case M_LDL_AB:
11556       s = "ldl";
11557       fmt = MEM12_FMT;
11558       offbits = (mips_opts.micromips ? 12 : 16);
11559       goto ld_st;
11560     case M_LDR_AB:
11561       s = "ldr";
11562       fmt = MEM12_FMT;
11563       offbits = (mips_opts.micromips ? 12 : 16);
11564       goto ld_st;
11565     case M_LL_AB:
11566       s = "ll";
11567       fmt = LL_SC_FMT;
11568       offbits = (mips_opts.micromips ? 12
11569                  : ISA_IS_R6 (mips_opts.isa) ? 9
11570                  : 16);
11571       goto ld;
11572     case M_LLD_AB:
11573       s = "lld";
11574       fmt = LL_SC_FMT;
11575       offbits = (mips_opts.micromips ? 12
11576                  : ISA_IS_R6 (mips_opts.isa) ? 9
11577                  : 16);
11578       goto ld;
11579     case M_LWU_AB:
11580       s = "lwu";
11581       fmt = MEM12_FMT;
11582       offbits = (mips_opts.micromips ? 12 : 16);
11583       goto ld;
11584     case M_LWP_AB:
11585       gas_assert (mips_opts.micromips);
11586       s = "lwp";
11587       fmt = "t,~(b)";
11588       offbits = 12;
11589       lp = 1;
11590       goto ld;
11591     case M_LDP_AB:
11592       gas_assert (mips_opts.micromips);
11593       s = "ldp";
11594       fmt = "t,~(b)";
11595       offbits = 12;
11596       lp = 1;
11597       goto ld;
11598     case M_LWM_AB:
11599       gas_assert (mips_opts.micromips);
11600       s = "lwm";
11601       fmt = "n,~(b)";
11602       offbits = 12;
11603       goto ld_st;
11604     case M_LDM_AB:
11605       gas_assert (mips_opts.micromips);
11606       s = "ldm";
11607       fmt = "n,~(b)";
11608       offbits = 12;
11609       goto ld_st;
11610
11611     ld:
11612       /* We don't want to use $0 as tempreg.  */
11613       if (op[2] == op[0] + lp || op[0] + lp == ZERO)
11614         goto ld_st;
11615       else
11616         tempreg = op[0] + lp;
11617       goto ld_noat;
11618
11619     case M_SB_AB:
11620       s = "sb";
11621       fmt = "t,o(b)";
11622       goto ld_st;
11623     case M_SH_AB:
11624       s = "sh";
11625       fmt = "t,o(b)";
11626       goto ld_st;
11627     case M_SW_AB:
11628       s = "sw";
11629       fmt = "t,o(b)";
11630       goto ld_st;
11631     case M_SWC0_AB:
11632       gas_assert (!mips_opts.micromips);
11633       s = "swc0";
11634       fmt = "E,o(b)";
11635       /* Itbl support may require additional care here.  */
11636       coproc = 1;
11637       goto ld_st;
11638     case M_SWC1_AB:
11639       s = "swc1";
11640       fmt = "T,o(b)";
11641       /* Itbl support may require additional care here.  */
11642       coproc = 1;
11643       goto ld_st;
11644     case M_SWC2_AB:
11645       s = "swc2";
11646       fmt = COP12_FMT;
11647       offbits = (mips_opts.micromips ? 12
11648                  : ISA_IS_R6 (mips_opts.isa) ? 11
11649                  : 16);
11650       /* Itbl support may require additional care here.  */
11651       coproc = 1;
11652       goto ld_st;
11653     case M_SWC3_AB:
11654       gas_assert (!mips_opts.micromips);
11655       s = "swc3";
11656       fmt = "E,o(b)";
11657       /* Itbl support may require additional care here.  */
11658       coproc = 1;
11659       goto ld_st;
11660     case M_SWL_AB:
11661       s = "swl";
11662       fmt = MEM12_FMT;
11663       offbits = (mips_opts.micromips ? 12 : 16);
11664       goto ld_st;
11665     case M_SWR_AB:
11666       s = "swr";
11667       fmt = MEM12_FMT;
11668       offbits = (mips_opts.micromips ? 12 : 16);
11669       goto ld_st;
11670     case M_SC_AB:
11671       s = "sc";
11672       fmt = LL_SC_FMT;
11673       offbits = (mips_opts.micromips ? 12
11674                  : ISA_IS_R6 (mips_opts.isa) ? 9
11675                  : 16);
11676       goto ld_st;
11677     case M_SCD_AB:
11678       s = "scd";
11679       fmt = LL_SC_FMT;
11680       offbits = (mips_opts.micromips ? 12
11681                  : ISA_IS_R6 (mips_opts.isa) ? 9
11682                  : 16);
11683       goto ld_st;
11684     case M_CACHE_AB:
11685       s = "cache";
11686       fmt = (mips_opts.micromips ? "k,~(b)"
11687              : ISA_IS_R6 (mips_opts.isa) ? "k,+j(b)"
11688              : "k,o(b)");
11689       offbits = (mips_opts.micromips ? 12
11690                  : ISA_IS_R6 (mips_opts.isa) ? 9
11691                  : 16);
11692       goto ld_st;
11693     case M_CACHEE_AB:
11694       s = "cachee";
11695       fmt = "k,+j(b)";
11696       offbits = 9;
11697       goto ld_st;
11698     case M_PREF_AB:
11699       s = "pref";
11700       fmt = (mips_opts.micromips ? "k,~(b)"
11701              : ISA_IS_R6 (mips_opts.isa) ? "k,+j(b)"
11702              : "k,o(b)");
11703       offbits = (mips_opts.micromips ? 12
11704                  : ISA_IS_R6 (mips_opts.isa) ? 9
11705                  : 16);
11706       goto ld_st;
11707     case M_PREFE_AB:
11708       s = "prefe";
11709       fmt = "k,+j(b)";
11710       offbits = 9;
11711       goto ld_st;
11712     case M_SDC1_AB:
11713       s = "sdc1";
11714       fmt = "T,o(b)";
11715       coproc = 1;
11716       /* Itbl support may require additional care here.  */
11717       goto ld_st;
11718     case M_SDC2_AB:
11719       s = "sdc2";
11720       fmt = COP12_FMT;
11721       offbits = (mips_opts.micromips ? 12
11722                  : ISA_IS_R6 (mips_opts.isa) ? 11
11723                  : 16);
11724       /* Itbl support may require additional care here.  */
11725       coproc = 1;
11726       goto ld_st;
11727     case M_SQC2_AB:
11728       s = "sqc2";
11729       fmt = "+7,o(b)";
11730       /* Itbl support may require additional care here.  */
11731       coproc = 1;
11732       goto ld_st;
11733     case M_SDC3_AB:
11734       gas_assert (!mips_opts.micromips);
11735       s = "sdc3";
11736       fmt = "E,o(b)";
11737       /* Itbl support may require additional care here.  */
11738       coproc = 1;
11739       goto ld_st;
11740     case M_SDL_AB:
11741       s = "sdl";
11742       fmt = MEM12_FMT;
11743       offbits = (mips_opts.micromips ? 12 : 16);
11744       goto ld_st;
11745     case M_SDR_AB:
11746       s = "sdr";
11747       fmt = MEM12_FMT;
11748       offbits = (mips_opts.micromips ? 12 : 16);
11749       goto ld_st;
11750     case M_SWP_AB:
11751       gas_assert (mips_opts.micromips);
11752       s = "swp";
11753       fmt = "t,~(b)";
11754       offbits = 12;
11755       goto ld_st;
11756     case M_SDP_AB:
11757       gas_assert (mips_opts.micromips);
11758       s = "sdp";
11759       fmt = "t,~(b)";
11760       offbits = 12;
11761       goto ld_st;
11762     case M_SWM_AB:
11763       gas_assert (mips_opts.micromips);
11764       s = "swm";
11765       fmt = "n,~(b)";
11766       offbits = 12;
11767       goto ld_st;
11768     case M_SDM_AB:
11769       gas_assert (mips_opts.micromips);
11770       s = "sdm";
11771       fmt = "n,~(b)";
11772       offbits = 12;
11773
11774     ld_st:
11775       tempreg = AT;
11776     ld_noat:
11777       breg = op[2];
11778       if (small_offset_p (0, align, 16))
11779         {
11780           /* The first case exists for M_LD_AB and M_SD_AB, which are
11781              macros for o32 but which should act like normal instructions
11782              otherwise.  */
11783           if (offbits == 16)
11784             macro_build (&offset_expr, s, fmt, op[0], -1, offset_reloc[0],
11785                          offset_reloc[1], offset_reloc[2], breg);
11786           else if (small_offset_p (0, align, offbits))
11787             {
11788               if (offbits == 0)
11789                 macro_build (NULL, s, fmt, op[0], breg);
11790               else
11791                 macro_build (NULL, s, fmt, op[0],
11792                              (int) offset_expr.X_add_number, breg);
11793             }
11794           else
11795             {
11796               if (tempreg == AT)
11797                 used_at = 1;
11798               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11799                            tempreg, breg, -1, offset_reloc[0],
11800                            offset_reloc[1], offset_reloc[2]);
11801               if (offbits == 0)
11802                 macro_build (NULL, s, fmt, op[0], tempreg);
11803               else
11804                 macro_build (NULL, s, fmt, op[0], 0, tempreg);
11805             }
11806           break;
11807         }
11808
11809       if (tempreg == AT)
11810         used_at = 1;
11811
11812       if (offset_expr.X_op != O_constant
11813           && offset_expr.X_op != O_symbol)
11814         {
11815           as_bad (_("expression too complex"));
11816           offset_expr.X_op = O_constant;
11817         }
11818
11819       if (HAVE_32BIT_ADDRESSES
11820           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
11821         {
11822           char value [32];
11823
11824           sprintf_vma (value, offset_expr.X_add_number);
11825           as_bad (_("number (0x%s) larger than 32 bits"), value);
11826         }
11827
11828       /* A constant expression in PIC code can be handled just as it
11829          is in non PIC code.  */
11830       if (offset_expr.X_op == O_constant)
11831         {
11832           expr1.X_add_number = offset_high_part (offset_expr.X_add_number,
11833                                                  offbits == 0 ? 16 : offbits);
11834           offset_expr.X_add_number -= expr1.X_add_number;
11835
11836           load_register (tempreg, &expr1, HAVE_64BIT_ADDRESSES);
11837           if (breg != 0)
11838             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11839                          tempreg, tempreg, breg);
11840           if (offbits == 0)
11841             {
11842               if (offset_expr.X_add_number != 0)
11843                 macro_build (&offset_expr, ADDRESS_ADDI_INSN,
11844                              "t,r,j", tempreg, tempreg, BFD_RELOC_LO16);
11845               macro_build (NULL, s, fmt, op[0], tempreg);
11846             }
11847           else if (offbits == 16)
11848             macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11849           else
11850             macro_build (NULL, s, fmt, op[0],
11851                          (int) offset_expr.X_add_number, tempreg);
11852         }
11853       else if (offbits != 16)
11854         {
11855           /* The offset field is too narrow to be used for a low-part
11856              relocation, so load the whole address into the auxiliary
11857              register.  */
11858           load_address (tempreg, &offset_expr, &used_at);
11859           if (breg != 0)
11860             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11861                          tempreg, tempreg, breg);
11862           if (offbits == 0)
11863             macro_build (NULL, s, fmt, op[0], tempreg);
11864           else
11865             macro_build (NULL, s, fmt, op[0], 0, tempreg);
11866         }
11867       else if (mips_pic == NO_PIC)
11868         {
11869           /* If this is a reference to a GP relative symbol, and there
11870              is no base register, we want
11871                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
11872              Otherwise, if there is no base register, we want
11873                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11874                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11875              If we have a constant, we need two instructions anyhow,
11876              so we always use the latter form.
11877
11878              If we have a base register, and this is a reference to a
11879              GP relative symbol, we want
11880                addu     $tempreg,$breg,$gp
11881                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_GPREL16)
11882              Otherwise we want
11883                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11884                addu     $tempreg,$tempreg,$breg
11885                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11886              With a constant we always use the latter case.
11887
11888              With 64bit address space and no base register and $at usable,
11889              we want
11890                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11891                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11892                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11893                dsll32   $tempreg,0
11894                daddu    $tempreg,$at
11895                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11896              If we have a base register, we want
11897                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11898                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11899                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11900                daddu    $at,$breg
11901                dsll32   $tempreg,0
11902                daddu    $tempreg,$at
11903                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11904
11905              Without $at we can't generate the optimal path for superscalar
11906              processors here since this would require two temporary registers.
11907                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11908                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11909                dsll     $tempreg,16
11910                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11911                dsll     $tempreg,16
11912                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11913              If we have a base register, we want
11914                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11915                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11916                dsll     $tempreg,16
11917                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11918                dsll     $tempreg,16
11919                daddu    $tempreg,$tempreg,$breg
11920                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11921
11922              For GP relative symbols in 64bit address space we can use
11923              the same sequence as in 32bit address space.  */
11924           if (HAVE_64BIT_SYMBOLS)
11925             {
11926               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11927                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11928                 {
11929                   relax_start (offset_expr.X_add_symbol);
11930                   if (breg == 0)
11931                     {
11932                       macro_build (&offset_expr, s, fmt, op[0],
11933                                    BFD_RELOC_GPREL16, mips_gp_register);
11934                     }
11935                   else
11936                     {
11937                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11938                                    tempreg, breg, mips_gp_register);
11939                       macro_build (&offset_expr, s, fmt, op[0],
11940                                    BFD_RELOC_GPREL16, tempreg);
11941                     }
11942                   relax_switch ();
11943                 }
11944
11945               if (used_at == 0 && mips_opts.at)
11946                 {
11947                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11948                                BFD_RELOC_MIPS_HIGHEST);
11949                   macro_build (&offset_expr, "lui", LUI_FMT, AT,
11950                                BFD_RELOC_HI16_S);
11951                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11952                                tempreg, BFD_RELOC_MIPS_HIGHER);
11953                   if (breg != 0)
11954                     macro_build (NULL, "daddu", "d,v,t", AT, AT, breg);
11955                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
11956                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
11957                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16,
11958                                tempreg);
11959                   used_at = 1;
11960                 }
11961               else
11962                 {
11963                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11964                                BFD_RELOC_MIPS_HIGHEST);
11965                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11966                                tempreg, BFD_RELOC_MIPS_HIGHER);
11967                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11968                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11969                                tempreg, BFD_RELOC_HI16_S);
11970                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11971                   if (breg != 0)
11972                     macro_build (NULL, "daddu", "d,v,t",
11973                                  tempreg, tempreg, breg);
11974                   macro_build (&offset_expr, s, fmt, op[0],
11975                                BFD_RELOC_LO16, tempreg);
11976                 }
11977
11978               if (mips_relax.sequence)
11979                 relax_end ();
11980               break;
11981             }
11982
11983           if (breg == 0)
11984             {
11985               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11986                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11987                 {
11988                   relax_start (offset_expr.X_add_symbol);
11989                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_GPREL16,
11990                                mips_gp_register);
11991                   relax_switch ();
11992                 }
11993               macro_build_lui (&offset_expr, tempreg);
11994               macro_build (&offset_expr, s, fmt, op[0],
11995                            BFD_RELOC_LO16, tempreg);
11996               if (mips_relax.sequence)
11997                 relax_end ();
11998             }
11999           else
12000             {
12001               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
12002                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
12003                 {
12004                   relax_start (offset_expr.X_add_symbol);
12005                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12006                                tempreg, breg, mips_gp_register);
12007                   macro_build (&offset_expr, s, fmt, op[0],
12008                                BFD_RELOC_GPREL16, tempreg);
12009                   relax_switch ();
12010                 }
12011               macro_build_lui (&offset_expr, tempreg);
12012               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12013                            tempreg, tempreg, breg);
12014               macro_build (&offset_expr, s, fmt, op[0],
12015                            BFD_RELOC_LO16, tempreg);
12016               if (mips_relax.sequence)
12017                 relax_end ();
12018             }
12019         }
12020       else if (!mips_big_got)
12021         {
12022           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
12023
12024           /* If this is a reference to an external symbol, we want
12025                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
12026                nop
12027                <op>     op[0],0($tempreg)
12028              Otherwise we want
12029                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
12030                nop
12031                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
12032                <op>     op[0],0($tempreg)
12033
12034              For NewABI, we want
12035                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
12036                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)
12037
12038              If there is a base register, we add it to $tempreg before
12039              the <op>.  If there is a constant, we stick it in the
12040              <op> instruction.  We don't handle constants larger than
12041              16 bits, because we have no way to load the upper 16 bits
12042              (actually, we could handle them for the subset of cases
12043              in which we are not using $at).  */
12044           gas_assert (offset_expr.X_op == O_symbol);
12045           if (HAVE_NEWABI)
12046             {
12047               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
12048                            BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
12049               if (breg != 0)
12050                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12051                              tempreg, tempreg, breg);
12052               macro_build (&offset_expr, s, fmt, op[0],
12053                            BFD_RELOC_MIPS_GOT_OFST, tempreg);
12054               break;
12055             }
12056           expr1.X_add_number = offset_expr.X_add_number;
12057           offset_expr.X_add_number = 0;
12058           if (expr1.X_add_number < -0x8000
12059               || expr1.X_add_number >= 0x8000)
12060             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12061           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
12062                        lw_reloc_type, mips_gp_register);
12063           load_delay_nop ();
12064           relax_start (offset_expr.X_add_symbol);
12065           relax_switch ();
12066           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
12067                        tempreg, BFD_RELOC_LO16);
12068           relax_end ();
12069           if (breg != 0)
12070             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12071                          tempreg, tempreg, breg);
12072           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
12073         }
12074       else if (mips_big_got && !HAVE_NEWABI)
12075         {
12076           int gpdelay;
12077
12078           /* If this is a reference to an external symbol, we want
12079                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
12080                addu     $tempreg,$tempreg,$gp
12081                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
12082                <op>     op[0],0($tempreg)
12083              Otherwise we want
12084                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
12085                nop
12086                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
12087                <op>     op[0],0($tempreg)
12088              If there is a base register, we add it to $tempreg before
12089              the <op>.  If there is a constant, we stick it in the
12090              <op> instruction.  We don't handle constants larger than
12091              16 bits, because we have no way to load the upper 16 bits
12092              (actually, we could handle them for the subset of cases
12093              in which we are not using $at).  */
12094           gas_assert (offset_expr.X_op == O_symbol);
12095           expr1.X_add_number = offset_expr.X_add_number;
12096           offset_expr.X_add_number = 0;
12097           if (expr1.X_add_number < -0x8000
12098               || expr1.X_add_number >= 0x8000)
12099             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12100           gpdelay = reg_needs_delay (mips_gp_register);
12101           relax_start (offset_expr.X_add_symbol);
12102           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
12103                        BFD_RELOC_MIPS_GOT_HI16);
12104           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
12105                        mips_gp_register);
12106           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
12107                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
12108           relax_switch ();
12109           if (gpdelay)
12110             macro_build (NULL, "nop", "");
12111           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
12112                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
12113           load_delay_nop ();
12114           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
12115                        tempreg, BFD_RELOC_LO16);
12116           relax_end ();
12117
12118           if (breg != 0)
12119             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12120                          tempreg, tempreg, breg);
12121           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
12122         }
12123       else if (mips_big_got && HAVE_NEWABI)
12124         {
12125           /* If this is a reference to an external symbol, we want
12126                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
12127                add      $tempreg,$tempreg,$gp
12128                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
12129                <op>     op[0],<ofst>($tempreg)
12130              Otherwise, for local symbols, we want:
12131                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
12132                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)  */
12133           gas_assert (offset_expr.X_op == O_symbol);
12134           expr1.X_add_number = offset_expr.X_add_number;
12135           offset_expr.X_add_number = 0;
12136           if (expr1.X_add_number < -0x8000
12137               || expr1.X_add_number >= 0x8000)
12138             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12139           relax_start (offset_expr.X_add_symbol);
12140           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
12141                        BFD_RELOC_MIPS_GOT_HI16);
12142           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
12143                        mips_gp_register);
12144           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
12145                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
12146           if (breg != 0)
12147             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12148                          tempreg, tempreg, breg);
12149           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
12150
12151           relax_switch ();
12152           offset_expr.X_add_number = expr1.X_add_number;
12153           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
12154                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
12155           if (breg != 0)
12156             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12157                          tempreg, tempreg, breg);
12158           macro_build (&offset_expr, s, fmt, op[0],
12159                        BFD_RELOC_MIPS_GOT_OFST, tempreg);
12160           relax_end ();
12161         }
12162       else
12163         abort ();
12164
12165       break;
12166
12167     case M_JRADDIUSP:
12168       gas_assert (mips_opts.micromips);
12169       gas_assert (mips_opts.insn32);
12170       start_noreorder ();
12171       macro_build (NULL, "jr", "s", RA);
12172       expr1.X_add_number = op[0] << 2;
12173       macro_build (&expr1, "addiu", "t,r,j", SP, SP, BFD_RELOC_LO16);
12174       end_noreorder ();
12175       break;
12176
12177     case M_JRC:
12178       gas_assert (mips_opts.micromips);
12179       gas_assert (mips_opts.insn32);
12180       macro_build (NULL, "jr", "s", op[0]);
12181       if (mips_opts.noreorder)
12182         macro_build (NULL, "nop", "");
12183       break;
12184
12185     case M_LI:
12186     case M_LI_S:
12187       load_register (op[0], &imm_expr, 0);
12188       break;
12189
12190     case M_DLI:
12191       load_register (op[0], &imm_expr, 1);
12192       break;
12193
12194     case M_LI_SS:
12195       if (imm_expr.X_op == O_constant)
12196         {
12197           used_at = 1;
12198           load_register (AT, &imm_expr, 0);
12199           macro_build (NULL, "mtc1", "t,G", AT, op[0]);
12200           break;
12201         }
12202       else
12203         {
12204           gas_assert (imm_expr.X_op == O_absent
12205                       && offset_expr.X_op == O_symbol
12206                       && strcmp (segment_name (S_GET_SEGMENT
12207                                                (offset_expr.X_add_symbol)),
12208                                  ".lit4") == 0
12209                       && offset_expr.X_add_number == 0);
12210           macro_build (&offset_expr, "lwc1", "T,o(b)", op[0],
12211                        BFD_RELOC_MIPS_LITERAL, mips_gp_register);
12212           break;
12213         }
12214
12215     case M_LI_D:
12216       /* Check if we have a constant in IMM_EXPR.  If the GPRs are 64 bits
12217          wide, IMM_EXPR is the entire value.  Otherwise IMM_EXPR is the high
12218          order 32 bits of the value and the low order 32 bits are either
12219          zero or in OFFSET_EXPR.  */
12220       if (imm_expr.X_op == O_constant)
12221         {
12222           if (GPR_SIZE == 64)
12223             load_register (op[0], &imm_expr, 1);
12224           else
12225             {
12226               int hreg, lreg;
12227
12228               if (target_big_endian)
12229                 {
12230                   hreg = op[0];
12231                   lreg = op[0] + 1;
12232                 }
12233               else
12234                 {
12235                   hreg = op[0] + 1;
12236                   lreg = op[0];
12237                 }
12238
12239               if (hreg <= 31)
12240                 load_register (hreg, &imm_expr, 0);
12241               if (lreg <= 31)
12242                 {
12243                   if (offset_expr.X_op == O_absent)
12244                     move_register (lreg, 0);
12245                   else
12246                     {
12247                       gas_assert (offset_expr.X_op == O_constant);
12248                       load_register (lreg, &offset_expr, 0);
12249                     }
12250                 }
12251             }
12252           break;
12253         }
12254       gas_assert (imm_expr.X_op == O_absent);
12255
12256       /* We know that sym is in the .rdata section.  First we get the
12257          upper 16 bits of the address.  */
12258       if (mips_pic == NO_PIC)
12259         {
12260           macro_build_lui (&offset_expr, AT);
12261           used_at = 1;
12262         }
12263       else
12264         {
12265           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12266                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
12267           used_at = 1;
12268         }
12269
12270       /* Now we load the register(s).  */
12271       if (GPR_SIZE == 64)
12272         {
12273           used_at = 1;
12274           macro_build (&offset_expr, "ld", "t,o(b)", op[0],
12275                        BFD_RELOC_LO16, AT);
12276         }
12277       else
12278         {
12279           used_at = 1;
12280           macro_build (&offset_expr, "lw", "t,o(b)", op[0],
12281                        BFD_RELOC_LO16, AT);
12282           if (op[0] != RA)
12283             {
12284               /* FIXME: How in the world do we deal with the possible
12285                  overflow here?  */
12286               offset_expr.X_add_number += 4;
12287               macro_build (&offset_expr, "lw", "t,o(b)",
12288                            op[0] + 1, BFD_RELOC_LO16, AT);
12289             }
12290         }
12291       break;
12292
12293     case M_LI_DD:
12294       /* Check if we have a constant in IMM_EXPR.  If the FPRs are 64 bits
12295          wide, IMM_EXPR is the entire value and the GPRs are known to be 64
12296          bits wide as well.  Otherwise IMM_EXPR is the high order 32 bits of
12297          the value and the low order 32 bits are either zero or in
12298          OFFSET_EXPR.  */
12299       if (imm_expr.X_op == O_constant)
12300         {
12301           used_at = 1;
12302           load_register (AT, &imm_expr, FPR_SIZE == 64);
12303           if (FPR_SIZE == 64 && GPR_SIZE == 64)
12304             macro_build (NULL, "dmtc1", "t,S", AT, op[0]);
12305           else
12306             {
12307               if (ISA_HAS_MXHC1 (mips_opts.isa))
12308                 macro_build (NULL, "mthc1", "t,G", AT, op[0]);
12309               else if (FPR_SIZE != 32)
12310                 as_bad (_("Unable to generate `%s' compliant code "
12311                           "without mthc1"),
12312                         (FPR_SIZE == 64) ? "fp64" : "fpxx");
12313               else
12314                 macro_build (NULL, "mtc1", "t,G", AT, op[0] + 1);
12315               if (offset_expr.X_op == O_absent)
12316                 macro_build (NULL, "mtc1", "t,G", 0, op[0]);
12317               else
12318                 {
12319                   gas_assert (offset_expr.X_op == O_constant);
12320                   load_register (AT, &offset_expr, 0);
12321                   macro_build (NULL, "mtc1", "t,G", AT, op[0]);
12322                 }
12323             }
12324           break;
12325         }
12326
12327       gas_assert (imm_expr.X_op == O_absent
12328                   && offset_expr.X_op == O_symbol
12329                   && offset_expr.X_add_number == 0);
12330       s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
12331       if (strcmp (s, ".lit8") == 0)
12332         {
12333           op[2] = mips_gp_register;
12334           offset_reloc[0] = BFD_RELOC_MIPS_LITERAL;
12335           offset_reloc[1] = BFD_RELOC_UNUSED;
12336           offset_reloc[2] = BFD_RELOC_UNUSED;
12337         }
12338       else
12339         {
12340           gas_assert (strcmp (s, RDATA_SECTION_NAME) == 0);
12341           used_at = 1;
12342           if (mips_pic != NO_PIC)
12343             macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12344                          BFD_RELOC_MIPS_GOT16, mips_gp_register);
12345           else
12346             {
12347               /* FIXME: This won't work for a 64 bit address.  */
12348               macro_build_lui (&offset_expr, AT);
12349             }
12350
12351           op[2] = AT;
12352           offset_reloc[0] = BFD_RELOC_LO16;
12353           offset_reloc[1] = BFD_RELOC_UNUSED;
12354           offset_reloc[2] = BFD_RELOC_UNUSED;
12355         }
12356       align = 8;
12357       /* Fall through */
12358
12359     case M_L_DAB:
12360       /*
12361        * The MIPS assembler seems to check for X_add_number not
12362        * being double aligned and generating:
12363        *        lui     at,%hi(foo+1)
12364        *        addu    at,at,v1
12365        *        addiu   at,at,%lo(foo+1)
12366        *        lwc1    f2,0(at)
12367        *        lwc1    f3,4(at)
12368        * But, the resulting address is the same after relocation so why
12369        * generate the extra instruction?
12370        */
12371       /* Itbl support may require additional care here.  */
12372       coproc = 1;
12373       fmt = "T,o(b)";
12374       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
12375         {
12376           s = "ldc1";
12377           goto ld_st;
12378         }
12379       s = "lwc1";
12380       goto ldd_std;
12381
12382     case M_S_DAB:
12383       gas_assert (!mips_opts.micromips);
12384       /* Itbl support may require additional care here.  */
12385       coproc = 1;
12386       fmt = "T,o(b)";
12387       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
12388         {
12389           s = "sdc1";
12390           goto ld_st;
12391         }
12392       s = "swc1";
12393       goto ldd_std;
12394
12395     case M_LQ_AB:
12396       fmt = "t,o(b)";
12397       s = "lq";
12398       goto ld;
12399
12400     case M_SQ_AB:
12401       fmt = "t,o(b)";
12402       s = "sq";
12403       goto ld_st;
12404
12405     case M_LD_AB:
12406       fmt = "t,o(b)";
12407       if (GPR_SIZE == 64)
12408         {
12409           s = "ld";
12410           goto ld;
12411         }
12412       s = "lw";
12413       goto ldd_std;
12414
12415     case M_SD_AB:
12416       fmt = "t,o(b)";
12417       if (GPR_SIZE == 64)
12418         {
12419           s = "sd";
12420           goto ld_st;
12421         }
12422       s = "sw";
12423
12424     ldd_std:
12425       /* Even on a big endian machine $fn comes before $fn+1.  We have
12426          to adjust when loading from memory.  We set coproc if we must
12427          load $fn+1 first.  */
12428       /* Itbl support may require additional care here.  */
12429       if (!target_big_endian)
12430         coproc = 0;
12431
12432       breg = op[2];
12433       if (small_offset_p (0, align, 16))
12434         {
12435           ep = &offset_expr;
12436           if (!small_offset_p (4, align, 16))
12437             {
12438               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", AT, breg,
12439                            -1, offset_reloc[0], offset_reloc[1],
12440                            offset_reloc[2]);
12441               expr1.X_add_number = 0;
12442               ep = &expr1;
12443               breg = AT;
12444               used_at = 1;
12445               offset_reloc[0] = BFD_RELOC_LO16;
12446               offset_reloc[1] = BFD_RELOC_UNUSED;
12447               offset_reloc[2] = BFD_RELOC_UNUSED;
12448             }
12449           if (strcmp (s, "lw") == 0 && op[0] == breg)
12450             {
12451               ep->X_add_number += 4;
12452               macro_build (ep, s, fmt, op[0] + 1, -1, offset_reloc[0],
12453                            offset_reloc[1], offset_reloc[2], breg);
12454               ep->X_add_number -= 4;
12455               macro_build (ep, s, fmt, op[0], -1, offset_reloc[0],
12456                            offset_reloc[1], offset_reloc[2], breg);
12457             }
12458           else
12459             {
12460               macro_build (ep, s, fmt, coproc ? op[0] + 1 : op[0], -1,
12461                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
12462                            breg);
12463               ep->X_add_number += 4;
12464               macro_build (ep, s, fmt, coproc ? op[0] : op[0] + 1, -1,
12465                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
12466                            breg);
12467             }
12468           break;
12469         }
12470
12471       if (offset_expr.X_op != O_symbol
12472           && offset_expr.X_op != O_constant)
12473         {
12474           as_bad (_("expression too complex"));
12475           offset_expr.X_op = O_constant;
12476         }
12477
12478       if (HAVE_32BIT_ADDRESSES
12479           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
12480         {
12481           char value [32];
12482
12483           sprintf_vma (value, offset_expr.X_add_number);
12484           as_bad (_("number (0x%s) larger than 32 bits"), value);
12485         }
12486
12487       if (mips_pic == NO_PIC || offset_expr.X_op == O_constant)
12488         {
12489           /* If this is a reference to a GP relative symbol, we want
12490                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
12491                <op>     op[0]+1,<sym>+4($gp)    (BFD_RELOC_GPREL16)
12492              If we have a base register, we use this
12493                addu     $at,$breg,$gp
12494                <op>     op[0],<sym>($at)        (BFD_RELOC_GPREL16)
12495                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_GPREL16)
12496              If this is not a GP relative symbol, we want
12497                lui      $at,<sym>               (BFD_RELOC_HI16_S)
12498                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12499                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12500              If there is a base register, we add it to $at after the
12501              lui instruction.  If there is a constant, we always use
12502              the last case.  */
12503           if (offset_expr.X_op == O_symbol
12504               && (valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
12505               && !nopic_need_relax (offset_expr.X_add_symbol, 1))
12506             {
12507               relax_start (offset_expr.X_add_symbol);
12508               if (breg == 0)
12509                 {
12510                   tempreg = mips_gp_register;
12511                 }
12512               else
12513                 {
12514                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12515                                AT, breg, mips_gp_register);
12516                   tempreg = AT;
12517                   used_at = 1;
12518                 }
12519
12520               /* Itbl support may require additional care here.  */
12521               macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12522                            BFD_RELOC_GPREL16, tempreg);
12523               offset_expr.X_add_number += 4;
12524
12525               /* Set mips_optimize to 2 to avoid inserting an
12526                  undesired nop.  */
12527               hold_mips_optimize = mips_optimize;
12528               mips_optimize = 2;
12529               /* Itbl support may require additional care here.  */
12530               macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12531                            BFD_RELOC_GPREL16, tempreg);
12532               mips_optimize = hold_mips_optimize;
12533
12534               relax_switch ();
12535
12536               offset_expr.X_add_number -= 4;
12537             }
12538           used_at = 1;
12539           if (offset_high_part (offset_expr.X_add_number, 16)
12540               != offset_high_part (offset_expr.X_add_number + 4, 16))
12541             {
12542               load_address (AT, &offset_expr, &used_at);
12543               offset_expr.X_op = O_constant;
12544               offset_expr.X_add_number = 0;
12545             }
12546           else
12547             macro_build_lui (&offset_expr, AT);
12548           if (breg != 0)
12549             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12550           /* Itbl support may require additional care here.  */
12551           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12552                        BFD_RELOC_LO16, AT);
12553           /* FIXME: How do we handle overflow here?  */
12554           offset_expr.X_add_number += 4;
12555           /* Itbl support may require additional care here.  */
12556           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12557                        BFD_RELOC_LO16, AT);
12558           if (mips_relax.sequence)
12559             relax_end ();
12560         }
12561       else if (!mips_big_got)
12562         {
12563           /* If this is a reference to an external symbol, we want
12564                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12565                nop
12566                <op>     op[0],0($at)
12567                <op>     op[0]+1,4($at)
12568              Otherwise we want
12569                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12570                nop
12571                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12572                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12573              If there is a base register we add it to $at before the
12574              lwc1 instructions.  If there is a constant we include it
12575              in the lwc1 instructions.  */
12576           used_at = 1;
12577           expr1.X_add_number = offset_expr.X_add_number;
12578           if (expr1.X_add_number < -0x8000
12579               || expr1.X_add_number >= 0x8000 - 4)
12580             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12581           load_got_offset (AT, &offset_expr);
12582           load_delay_nop ();
12583           if (breg != 0)
12584             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12585
12586           /* Set mips_optimize to 2 to avoid inserting an undesired
12587              nop.  */
12588           hold_mips_optimize = mips_optimize;
12589           mips_optimize = 2;
12590
12591           /* Itbl support may require additional care here.  */
12592           relax_start (offset_expr.X_add_symbol);
12593           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
12594                        BFD_RELOC_LO16, AT);
12595           expr1.X_add_number += 4;
12596           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
12597                        BFD_RELOC_LO16, AT);
12598           relax_switch ();
12599           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12600                        BFD_RELOC_LO16, AT);
12601           offset_expr.X_add_number += 4;
12602           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12603                        BFD_RELOC_LO16, AT);
12604           relax_end ();
12605
12606           mips_optimize = hold_mips_optimize;
12607         }
12608       else if (mips_big_got)
12609         {
12610           int gpdelay;
12611
12612           /* If this is a reference to an external symbol, we want
12613                lui      $at,<sym>               (BFD_RELOC_MIPS_GOT_HI16)
12614                addu     $at,$at,$gp
12615                lw       $at,<sym>($at)          (BFD_RELOC_MIPS_GOT_LO16)
12616                nop
12617                <op>     op[0],0($at)
12618                <op>     op[0]+1,4($at)
12619              Otherwise we want
12620                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12621                nop
12622                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12623                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12624              If there is a base register we add it to $at before the
12625              lwc1 instructions.  If there is a constant we include it
12626              in the lwc1 instructions.  */
12627           used_at = 1;
12628           expr1.X_add_number = offset_expr.X_add_number;
12629           offset_expr.X_add_number = 0;
12630           if (expr1.X_add_number < -0x8000
12631               || expr1.X_add_number >= 0x8000 - 4)
12632             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12633           gpdelay = reg_needs_delay (mips_gp_register);
12634           relax_start (offset_expr.X_add_symbol);
12635           macro_build (&offset_expr, "lui", LUI_FMT,
12636                        AT, BFD_RELOC_MIPS_GOT_HI16);
12637           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12638                        AT, AT, mips_gp_register);
12639           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
12640                        AT, BFD_RELOC_MIPS_GOT_LO16, AT);
12641           load_delay_nop ();
12642           if (breg != 0)
12643             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12644           /* Itbl support may require additional care here.  */
12645           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
12646                        BFD_RELOC_LO16, AT);
12647           expr1.X_add_number += 4;
12648
12649           /* Set mips_optimize to 2 to avoid inserting an undesired
12650              nop.  */
12651           hold_mips_optimize = mips_optimize;
12652           mips_optimize = 2;
12653           /* Itbl support may require additional care here.  */
12654           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
12655                        BFD_RELOC_LO16, AT);
12656           mips_optimize = hold_mips_optimize;
12657           expr1.X_add_number -= 4;
12658
12659           relax_switch ();
12660           offset_expr.X_add_number = expr1.X_add_number;
12661           if (gpdelay)
12662             macro_build (NULL, "nop", "");
12663           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12664                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
12665           load_delay_nop ();
12666           if (breg != 0)
12667             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12668           /* Itbl support may require additional care here.  */
12669           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12670                        BFD_RELOC_LO16, AT);
12671           offset_expr.X_add_number += 4;
12672
12673           /* Set mips_optimize to 2 to avoid inserting an undesired
12674              nop.  */
12675           hold_mips_optimize = mips_optimize;
12676           mips_optimize = 2;
12677           /* Itbl support may require additional care here.  */
12678           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12679                        BFD_RELOC_LO16, AT);
12680           mips_optimize = hold_mips_optimize;
12681           relax_end ();
12682         }
12683       else
12684         abort ();
12685
12686       break;
12687
12688     case M_SAA_AB:
12689       s = "saa";
12690       goto saa_saad;
12691     case M_SAAD_AB:
12692       s = "saad";
12693     saa_saad:
12694       gas_assert (!mips_opts.micromips);
12695       offbits = 0;
12696       fmt = "t,(b)";
12697       goto ld_st;
12698
12699    /* New code added to support COPZ instructions.
12700       This code builds table entries out of the macros in mip_opcodes.
12701       R4000 uses interlocks to handle coproc delays.
12702       Other chips (like the R3000) require nops to be inserted for delays.
12703
12704       FIXME: Currently, we require that the user handle delays.
12705       In order to fill delay slots for non-interlocked chips,
12706       we must have a way to specify delays based on the coprocessor.
12707       Eg. 4 cycles if load coproc reg from memory, 1 if in cache, etc.
12708       What are the side-effects of the cop instruction?
12709       What cache support might we have and what are its effects?
12710       Both coprocessor & memory require delays. how long???
12711       What registers are read/set/modified?
12712
12713       If an itbl is provided to interpret cop instructions,
12714       this knowledge can be encoded in the itbl spec.  */
12715
12716     case M_COP0:
12717       s = "c0";
12718       goto copz;
12719     case M_COP1:
12720       s = "c1";
12721       goto copz;
12722     case M_COP2:
12723       s = "c2";
12724       goto copz;
12725     case M_COP3:
12726       s = "c3";
12727     copz:
12728       gas_assert (!mips_opts.micromips);
12729       /* For now we just do C (same as Cz).  The parameter will be
12730          stored in insn_opcode by mips_ip.  */
12731       macro_build (NULL, s, "C", (int) ip->insn_opcode);
12732       break;
12733
12734     case M_MOVE:
12735       move_register (op[0], op[1]);
12736       break;
12737
12738     case M_MOVEP:
12739       gas_assert (mips_opts.micromips);
12740       gas_assert (mips_opts.insn32);
12741       move_register (micromips_to_32_reg_h_map1[op[0]],
12742                      micromips_to_32_reg_m_map[op[1]]);
12743       move_register (micromips_to_32_reg_h_map2[op[0]],
12744                      micromips_to_32_reg_n_map[op[2]]);
12745       break;
12746
12747     case M_DMUL:
12748       dbl = 1;
12749       /* Fall through.  */
12750     case M_MUL:
12751       if (mips_opts.arch == CPU_R5900)
12752         macro_build (NULL, dbl ? "dmultu" : "multu", "d,s,t", op[0], op[1],
12753                      op[2]);
12754       else
12755         {
12756           macro_build (NULL, dbl ? "dmultu" : "multu", "s,t", op[1], op[2]);
12757           macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12758         }
12759       break;
12760
12761     case M_DMUL_I:
12762       dbl = 1;
12763       /* Fall through.  */
12764     case M_MUL_I:
12765       /* The MIPS assembler some times generates shifts and adds.  I'm
12766          not trying to be that fancy. GCC should do this for us
12767          anyway.  */
12768       used_at = 1;
12769       load_register (AT, &imm_expr, dbl);
12770       macro_build (NULL, dbl ? "dmult" : "mult", "s,t", op[1], AT);
12771       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12772       break;
12773
12774     case M_DMULO_I:
12775       dbl = 1;
12776       /* Fall through.  */
12777     case M_MULO_I:
12778       imm = 1;
12779       goto do_mulo;
12780
12781     case M_DMULO:
12782       dbl = 1;
12783       /* Fall through.  */
12784     case M_MULO:
12785     do_mulo:
12786       start_noreorder ();
12787       used_at = 1;
12788       if (imm)
12789         load_register (AT, &imm_expr, dbl);
12790       macro_build (NULL, dbl ? "dmult" : "mult", "s,t",
12791                    op[1], imm ? AT : op[2]);
12792       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12793       macro_build (NULL, dbl ? "dsra32" : "sra", SHFT_FMT, op[0], op[0], 31);
12794       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12795       if (mips_trap)
12796         macro_build (NULL, "tne", TRAP_FMT, op[0], AT, 6);
12797       else
12798         {
12799           if (mips_opts.micromips)
12800             micromips_label_expr (&label_expr);
12801           else
12802             label_expr.X_add_number = 8;
12803           macro_build (&label_expr, "beq", "s,t,p", op[0], AT);
12804           macro_build (NULL, "nop", "");
12805           macro_build (NULL, "break", BRK_FMT, 6);
12806           if (mips_opts.micromips)
12807             micromips_add_label ();
12808         }
12809       end_noreorder ();
12810       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12811       break;
12812
12813     case M_DMULOU_I:
12814       dbl = 1;
12815       /* Fall through.  */
12816     case M_MULOU_I:
12817       imm = 1;
12818       goto do_mulou;
12819
12820     case M_DMULOU:
12821       dbl = 1;
12822       /* Fall through.  */
12823     case M_MULOU:
12824     do_mulou:
12825       start_noreorder ();
12826       used_at = 1;
12827       if (imm)
12828         load_register (AT, &imm_expr, dbl);
12829       macro_build (NULL, dbl ? "dmultu" : "multu", "s,t",
12830                    op[1], imm ? AT : op[2]);
12831       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12832       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12833       if (mips_trap)
12834         macro_build (NULL, "tne", TRAP_FMT, AT, ZERO, 6);
12835       else
12836         {
12837           if (mips_opts.micromips)
12838             micromips_label_expr (&label_expr);
12839           else
12840             label_expr.X_add_number = 8;
12841           macro_build (&label_expr, "beq", "s,t,p", AT, ZERO);
12842           macro_build (NULL, "nop", "");
12843           macro_build (NULL, "break", BRK_FMT, 6);
12844           if (mips_opts.micromips)
12845             micromips_add_label ();
12846         }
12847       end_noreorder ();
12848       break;
12849
12850     case M_DROL:
12851       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12852         {
12853           if (op[0] == op[1])
12854             {
12855               tempreg = AT;
12856               used_at = 1;
12857             }
12858           else
12859             tempreg = op[0];
12860           macro_build (NULL, "dnegu", "d,w", tempreg, op[2]);
12861           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], tempreg);
12862           break;
12863         }
12864       used_at = 1;
12865       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12866       macro_build (NULL, "dsrlv", "d,t,s", AT, op[1], AT);
12867       macro_build (NULL, "dsllv", "d,t,s", op[0], op[1], op[2]);
12868       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12869       break;
12870
12871     case M_ROL:
12872       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12873         {
12874           if (op[0] == op[1])
12875             {
12876               tempreg = AT;
12877               used_at = 1;
12878             }
12879           else
12880             tempreg = op[0];
12881           macro_build (NULL, "negu", "d,w", tempreg, op[2]);
12882           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], tempreg);
12883           break;
12884         }
12885       used_at = 1;
12886       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12887       macro_build (NULL, "srlv", "d,t,s", AT, op[1], AT);
12888       macro_build (NULL, "sllv", "d,t,s", op[0], op[1], op[2]);
12889       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12890       break;
12891
12892     case M_DROL_I:
12893       {
12894         unsigned int rot;
12895         const char *l;
12896         const char *rr;
12897
12898         rot = imm_expr.X_add_number & 0x3f;
12899         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12900           {
12901             rot = (64 - rot) & 0x3f;
12902             if (rot >= 32)
12903               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12904             else
12905               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12906             break;
12907           }
12908         if (rot == 0)
12909           {
12910             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12911             break;
12912           }
12913         l = (rot < 0x20) ? "dsll" : "dsll32";
12914         rr = ((0x40 - rot) < 0x20) ? "dsrl" : "dsrl32";
12915         rot &= 0x1f;
12916         used_at = 1;
12917         macro_build (NULL, l, SHFT_FMT, AT, op[1], rot);
12918         macro_build (NULL, rr, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12919         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12920       }
12921       break;
12922
12923     case M_ROL_I:
12924       {
12925         unsigned int rot;
12926
12927         rot = imm_expr.X_add_number & 0x1f;
12928         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12929           {
12930             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1],
12931                          (32 - rot) & 0x1f);
12932             break;
12933           }
12934         if (rot == 0)
12935           {
12936             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
12937             break;
12938           }
12939         used_at = 1;
12940         macro_build (NULL, "sll", SHFT_FMT, AT, op[1], rot);
12941         macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12942         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12943       }
12944       break;
12945
12946     case M_DROR:
12947       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12948         {
12949           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], op[2]);
12950           break;
12951         }
12952       used_at = 1;
12953       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12954       macro_build (NULL, "dsllv", "d,t,s", AT, op[1], AT);
12955       macro_build (NULL, "dsrlv", "d,t,s", op[0], op[1], op[2]);
12956       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12957       break;
12958
12959     case M_ROR:
12960       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12961         {
12962           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], op[2]);
12963           break;
12964         }
12965       used_at = 1;
12966       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12967       macro_build (NULL, "sllv", "d,t,s", AT, op[1], AT);
12968       macro_build (NULL, "srlv", "d,t,s", op[0], op[1], op[2]);
12969       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12970       break;
12971
12972     case M_DROR_I:
12973       {
12974         unsigned int rot;
12975         const char *l;
12976         const char *rr;
12977
12978         rot = imm_expr.X_add_number & 0x3f;
12979         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12980           {
12981             if (rot >= 32)
12982               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12983             else
12984               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12985             break;
12986           }
12987         if (rot == 0)
12988           {
12989             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12990             break;
12991           }
12992         rr = (rot < 0x20) ? "dsrl" : "dsrl32";
12993         l = ((0x40 - rot) < 0x20) ? "dsll" : "dsll32";
12994         rot &= 0x1f;
12995         used_at = 1;
12996         macro_build (NULL, rr, SHFT_FMT, AT, op[1], rot);
12997         macro_build (NULL, l, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12998         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12999       }
13000       break;
13001
13002     case M_ROR_I:
13003       {
13004         unsigned int rot;
13005
13006         rot = imm_expr.X_add_number & 0x1f;
13007         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
13008           {
13009             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1], rot);
13010             break;
13011           }
13012         if (rot == 0)
13013           {
13014             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
13015             break;
13016           }
13017         used_at = 1;
13018         macro_build (NULL, "srl", SHFT_FMT, AT, op[1], rot);
13019         macro_build (NULL, "sll", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
13020         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
13021       }
13022       break;
13023
13024     case M_SEQ:
13025       if (op[1] == 0)
13026         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[2], BFD_RELOC_LO16);
13027       else if (op[2] == 0)
13028         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13029       else
13030         {
13031           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
13032           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
13033         }
13034       break;
13035
13036     case M_SEQ_I:
13037       if (imm_expr.X_add_number == 0)
13038         {
13039           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13040           break;
13041         }
13042       if (op[1] == 0)
13043         {
13044           as_warn (_("instruction %s: result is always false"),
13045                    ip->insn_mo->name);
13046           move_register (op[0], 0);
13047           break;
13048         }
13049       if (CPU_HAS_SEQ (mips_opts.arch)
13050           && -512 <= imm_expr.X_add_number
13051           && imm_expr.X_add_number < 512)
13052         {
13053           macro_build (NULL, "seqi", "t,r,+Q", op[0], op[1],
13054                        (int) imm_expr.X_add_number);
13055           break;
13056         }
13057       if (imm_expr.X_add_number >= 0
13058           && imm_expr.X_add_number < 0x10000)
13059         macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1], BFD_RELOC_LO16);
13060       else if (imm_expr.X_add_number > -0x8000
13061                && imm_expr.X_add_number < 0)
13062         {
13063           imm_expr.X_add_number = -imm_expr.X_add_number;
13064           macro_build (&imm_expr, GPR_SIZE == 32 ? "addiu" : "daddiu",
13065                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13066         }
13067       else if (CPU_HAS_SEQ (mips_opts.arch))
13068         {
13069           used_at = 1;
13070           load_register (AT, &imm_expr, GPR_SIZE == 64);
13071           macro_build (NULL, "seq", "d,v,t", op[0], op[1], AT);
13072           break;
13073         }
13074       else
13075         {
13076           load_register (AT, &imm_expr, GPR_SIZE == 64);
13077           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
13078           used_at = 1;
13079         }
13080       macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
13081       break;
13082
13083     case M_SGE:         /* X >= Y  <==>  not (X < Y) */
13084       s = "slt";
13085       goto sge;
13086     case M_SGEU:
13087       s = "sltu";
13088     sge:
13089       macro_build (NULL, s, "d,v,t", op[0], op[1], op[2]);
13090       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
13091       break;
13092
13093     case M_SGE_I:       /* X >= I  <==>  not (X < I) */
13094     case M_SGEU_I:
13095       if (imm_expr.X_add_number >= -0x8000
13096           && imm_expr.X_add_number < 0x8000)
13097         macro_build (&imm_expr, mask == M_SGE_I ? "slti" : "sltiu", "t,r,j",
13098                      op[0], op[1], BFD_RELOC_LO16);
13099       else
13100         {
13101           load_register (AT, &imm_expr, GPR_SIZE == 64);
13102           macro_build (NULL, mask == M_SGE_I ? "slt" : "sltu", "d,v,t",
13103                        op[0], op[1], AT);
13104           used_at = 1;
13105         }
13106       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
13107       break;
13108
13109     case M_SGT:         /* X > Y  <==>  Y < X */
13110       s = "slt";
13111       goto sgt;
13112     case M_SGTU:
13113       s = "sltu";
13114     sgt:
13115       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
13116       break;
13117
13118     case M_SGT_I:       /* X > I  <==>  I < X */
13119       s = "slt";
13120       goto sgti;
13121     case M_SGTU_I:
13122       s = "sltu";
13123     sgti:
13124       used_at = 1;
13125       load_register (AT, &imm_expr, GPR_SIZE == 64);
13126       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
13127       break;
13128
13129     case M_SLE:         /* X <= Y  <==>  Y >= X  <==>  not (Y < X) */
13130       s = "slt";
13131       goto sle;
13132     case M_SLEU:
13133       s = "sltu";
13134     sle:
13135       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
13136       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
13137       break;
13138
13139     case M_SLE_I:       /* X <= I  <==>  I >= X  <==>  not (I < X) */
13140       s = "slt";
13141       goto slei;
13142     case M_SLEU_I:
13143       s = "sltu";
13144     slei:
13145       used_at = 1;
13146       load_register (AT, &imm_expr, GPR_SIZE == 64);
13147       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
13148       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
13149       break;
13150
13151     case M_SLT_I:
13152       if (imm_expr.X_add_number >= -0x8000
13153           && imm_expr.X_add_number < 0x8000)
13154         {
13155           macro_build (&imm_expr, "slti", "t,r,j", op[0], op[1],
13156                        BFD_RELOC_LO16);
13157           break;
13158         }
13159       used_at = 1;
13160       load_register (AT, &imm_expr, GPR_SIZE == 64);
13161       macro_build (NULL, "slt", "d,v,t", op[0], op[1], AT);
13162       break;
13163
13164     case M_SLTU_I:
13165       if (imm_expr.X_add_number >= -0x8000
13166           && imm_expr.X_add_number < 0x8000)
13167         {
13168           macro_build (&imm_expr, "sltiu", "t,r,j", op[0], op[1],
13169                        BFD_RELOC_LO16);
13170           break;
13171         }
13172       used_at = 1;
13173       load_register (AT, &imm_expr, GPR_SIZE == 64);
13174       macro_build (NULL, "sltu", "d,v,t", op[0], op[1], AT);
13175       break;
13176
13177     case M_SNE:
13178       if (op[1] == 0)
13179         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[2]);
13180       else if (op[2] == 0)
13181         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
13182       else
13183         {
13184           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
13185           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
13186         }
13187       break;
13188
13189     case M_SNE_I:
13190       if (imm_expr.X_add_number == 0)
13191         {
13192           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
13193           break;
13194         }
13195       if (op[1] == 0)
13196         {
13197           as_warn (_("instruction %s: result is always true"),
13198                    ip->insn_mo->name);
13199           macro_build (&expr1, GPR_SIZE == 32 ? "addiu" : "daddiu", "t,r,j",
13200                        op[0], 0, BFD_RELOC_LO16);
13201           break;
13202         }
13203       if (CPU_HAS_SEQ (mips_opts.arch)
13204           && -512 <= imm_expr.X_add_number
13205           && imm_expr.X_add_number < 512)
13206         {
13207           macro_build (NULL, "snei", "t,r,+Q", op[0], op[1],
13208                        (int) imm_expr.X_add_number);
13209           break;
13210         }
13211       if (imm_expr.X_add_number >= 0
13212           && imm_expr.X_add_number < 0x10000)
13213         {
13214           macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1],
13215                        BFD_RELOC_LO16);
13216         }
13217       else if (imm_expr.X_add_number > -0x8000
13218                && imm_expr.X_add_number < 0)
13219         {
13220           imm_expr.X_add_number = -imm_expr.X_add_number;
13221           macro_build (&imm_expr, GPR_SIZE == 32 ? "addiu" : "daddiu",
13222                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13223         }
13224       else if (CPU_HAS_SEQ (mips_opts.arch))
13225         {
13226           used_at = 1;
13227           load_register (AT, &imm_expr, GPR_SIZE == 64);
13228           macro_build (NULL, "sne", "d,v,t", op[0], op[1], AT);
13229           break;
13230         }
13231       else
13232         {
13233           load_register (AT, &imm_expr, GPR_SIZE == 64);
13234           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
13235           used_at = 1;
13236         }
13237       macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
13238       break;
13239
13240     case M_SUB_I:
13241       s = "addi";
13242       s2 = "sub";
13243       goto do_subi;
13244     case M_SUBU_I:
13245       s = "addiu";
13246       s2 = "subu";
13247       goto do_subi;
13248     case M_DSUB_I:
13249       dbl = 1;
13250       s = "daddi";
13251       s2 = "dsub";
13252       if (!mips_opts.micromips)
13253         goto do_subi;
13254       if (imm_expr.X_add_number > -0x200
13255           && imm_expr.X_add_number <= 0x200)
13256         {
13257           macro_build (NULL, s, "t,r,.", op[0], op[1],
13258                        (int) -imm_expr.X_add_number);
13259           break;
13260         }
13261       goto do_subi_i;
13262     case M_DSUBU_I:
13263       dbl = 1;
13264       s = "daddiu";
13265       s2 = "dsubu";
13266     do_subi:
13267       if (imm_expr.X_add_number > -0x8000
13268           && imm_expr.X_add_number <= 0x8000)
13269         {
13270           imm_expr.X_add_number = -imm_expr.X_add_number;
13271           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13272           break;
13273         }
13274     do_subi_i:
13275       used_at = 1;
13276       load_register (AT, &imm_expr, dbl);
13277       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
13278       break;
13279
13280     case M_TEQ_I:
13281       s = "teq";
13282       goto trap;
13283     case M_TGE_I:
13284       s = "tge";
13285       goto trap;
13286     case M_TGEU_I:
13287       s = "tgeu";
13288       goto trap;
13289     case M_TLT_I:
13290       s = "tlt";
13291       goto trap;
13292     case M_TLTU_I:
13293       s = "tltu";
13294       goto trap;
13295     case M_TNE_I:
13296       s = "tne";
13297     trap:
13298       used_at = 1;
13299       load_register (AT, &imm_expr, GPR_SIZE == 64);
13300       macro_build (NULL, s, "s,t", op[0], AT);
13301       break;
13302
13303     case M_TRUNCWS:
13304     case M_TRUNCWD:
13305       gas_assert (!mips_opts.micromips);
13306       gas_assert (mips_opts.isa == ISA_MIPS1);
13307       used_at = 1;
13308
13309       /*
13310        * Is the double cfc1 instruction a bug in the mips assembler;
13311        * or is there a reason for it?
13312        */
13313       start_noreorder ();
13314       macro_build (NULL, "cfc1", "t,G", op[2], RA);
13315       macro_build (NULL, "cfc1", "t,G", op[2], RA);
13316       macro_build (NULL, "nop", "");
13317       expr1.X_add_number = 3;
13318       macro_build (&expr1, "ori", "t,r,i", AT, op[2], BFD_RELOC_LO16);
13319       expr1.X_add_number = 2;
13320       macro_build (&expr1, "xori", "t,r,i", AT, AT, BFD_RELOC_LO16);
13321       macro_build (NULL, "ctc1", "t,G", AT, RA);
13322       macro_build (NULL, "nop", "");
13323       macro_build (NULL, mask == M_TRUNCWD ? "cvt.w.d" : "cvt.w.s", "D,S",
13324                    op[0], op[1]);
13325       macro_build (NULL, "ctc1", "t,G", op[2], RA);
13326       macro_build (NULL, "nop", "");
13327       end_noreorder ();
13328       break;
13329
13330     case M_ULH_AB:
13331       s = "lb";
13332       s2 = "lbu";
13333       off = 1;
13334       goto uld_st;
13335     case M_ULHU_AB:
13336       s = "lbu";
13337       s2 = "lbu";
13338       off = 1;
13339       goto uld_st;
13340     case M_ULW_AB:
13341       s = "lwl";
13342       s2 = "lwr";
13343       offbits = (mips_opts.micromips ? 12 : 16);
13344       off = 3;
13345       goto uld_st;
13346     case M_ULD_AB:
13347       s = "ldl";
13348       s2 = "ldr";
13349       offbits = (mips_opts.micromips ? 12 : 16);
13350       off = 7;
13351       goto uld_st;
13352     case M_USH_AB:
13353       s = "sb";
13354       s2 = "sb";
13355       off = 1;
13356       ust = 1;
13357       goto uld_st;
13358     case M_USW_AB:
13359       s = "swl";
13360       s2 = "swr";
13361       offbits = (mips_opts.micromips ? 12 : 16);
13362       off = 3;
13363       ust = 1;
13364       goto uld_st;
13365     case M_USD_AB:
13366       s = "sdl";
13367       s2 = "sdr";
13368       offbits = (mips_opts.micromips ? 12 : 16);
13369       off = 7;
13370       ust = 1;
13371
13372     uld_st:
13373       breg = op[2];
13374       large_offset = !small_offset_p (off, align, offbits);
13375       ep = &offset_expr;
13376       expr1.X_add_number = 0;
13377       if (large_offset)
13378         {
13379           used_at = 1;
13380           tempreg = AT;
13381           if (small_offset_p (0, align, 16))
13382             macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", tempreg, breg, -1,
13383                          offset_reloc[0], offset_reloc[1], offset_reloc[2]);
13384           else
13385             {
13386               load_address (tempreg, ep, &used_at);
13387               if (breg != 0)
13388                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
13389                              tempreg, tempreg, breg);
13390             }
13391           offset_reloc[0] = BFD_RELOC_LO16;
13392           offset_reloc[1] = BFD_RELOC_UNUSED;
13393           offset_reloc[2] = BFD_RELOC_UNUSED;
13394           breg = tempreg;
13395           tempreg = op[0];
13396           ep = &expr1;
13397         }
13398       else if (!ust && op[0] == breg)
13399         {
13400           used_at = 1;
13401           tempreg = AT;
13402         }
13403       else
13404         tempreg = op[0];
13405
13406       if (off == 1)
13407         goto ulh_sh;
13408
13409       if (!target_big_endian)
13410         ep->X_add_number += off;
13411       if (offbits == 12)
13412         macro_build (NULL, s, "t,~(b)", tempreg, (int) ep->X_add_number, breg);
13413       else
13414         macro_build (ep, s, "t,o(b)", tempreg, -1,
13415                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13416
13417       if (!target_big_endian)
13418         ep->X_add_number -= off;
13419       else
13420         ep->X_add_number += off;
13421       if (offbits == 12)
13422         macro_build (NULL, s2, "t,~(b)",
13423                      tempreg, (int) ep->X_add_number, breg);
13424       else
13425         macro_build (ep, s2, "t,o(b)", tempreg, -1,
13426                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13427
13428       /* If necessary, move the result in tempreg to the final destination.  */
13429       if (!ust && op[0] != tempreg)
13430         {
13431           /* Protect second load's delay slot.  */
13432           load_delay_nop ();
13433           move_register (op[0], tempreg);
13434         }
13435       break;
13436
13437     ulh_sh:
13438       used_at = 1;
13439       if (target_big_endian == ust)
13440         ep->X_add_number += off;
13441       tempreg = ust || large_offset ? op[0] : AT;
13442       macro_build (ep, s, "t,o(b)", tempreg, -1,
13443                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13444
13445       /* For halfword transfers we need a temporary register to shuffle
13446          bytes.  Unfortunately for M_USH_A we have none available before
13447          the next store as AT holds the base address.  We deal with this
13448          case by clobbering TREG and then restoring it as with ULH.  */
13449       tempreg = ust == large_offset ? op[0] : AT;
13450       if (ust)
13451         macro_build (NULL, "srl", SHFT_FMT, tempreg, op[0], 8);
13452
13453       if (target_big_endian == ust)
13454         ep->X_add_number -= off;
13455       else
13456         ep->X_add_number += off;
13457       macro_build (ep, s2, "t,o(b)", tempreg, -1,
13458                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13459
13460       /* For M_USH_A re-retrieve the LSB.  */
13461       if (ust && large_offset)
13462         {
13463           if (target_big_endian)
13464             ep->X_add_number += off;
13465           else
13466             ep->X_add_number -= off;
13467           macro_build (&expr1, "lbu", "t,o(b)", AT, -1,
13468                        offset_reloc[0], offset_reloc[1], offset_reloc[2], AT);
13469         }
13470       /* For ULH and M_USH_A OR the LSB in.  */
13471       if (!ust || large_offset)
13472         {
13473           tempreg = !large_offset ? AT : op[0];
13474           macro_build (NULL, "sll", SHFT_FMT, tempreg, tempreg, 8);
13475           macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
13476         }
13477       break;
13478
13479     default:
13480       /* FIXME: Check if this is one of the itbl macros, since they
13481          are added dynamically.  */
13482       as_bad (_("macro %s not implemented yet"), ip->insn_mo->name);
13483       break;
13484     }
13485   if (!mips_opts.at && used_at)
13486     as_bad (_("macro used $at after \".set noat\""));
13487 }
13488
13489 /* Implement macros in mips16 mode.  */
13490
13491 static void
13492 mips16_macro (struct mips_cl_insn *ip)
13493 {
13494   const struct mips_operand_array *operands;
13495   int mask;
13496   int tmp;
13497   expressionS expr1;
13498   int dbl;
13499   const char *s, *s2, *s3;
13500   unsigned int op[MAX_OPERANDS];
13501   unsigned int i;
13502
13503   mask = ip->insn_mo->mask;
13504
13505   operands = insn_operands (ip);
13506   for (i = 0; i < MAX_OPERANDS; i++)
13507     if (operands->operand[i])
13508       op[i] = insn_extract_operand (ip, operands->operand[i]);
13509     else
13510       op[i] = -1;
13511
13512   expr1.X_op = O_constant;
13513   expr1.X_op_symbol = NULL;
13514   expr1.X_add_symbol = NULL;
13515   expr1.X_add_number = 1;
13516
13517   dbl = 0;
13518
13519   switch (mask)
13520     {
13521     default:
13522       abort ();
13523
13524     case M_DDIV_3:
13525       dbl = 1;
13526       /* Fall through.  */
13527     case M_DIV_3:
13528       s = "mflo";
13529       goto do_div3;
13530     case M_DREM_3:
13531       dbl = 1;
13532       /* Fall through.  */
13533     case M_REM_3:
13534       s = "mfhi";
13535     do_div3:
13536       start_noreorder ();
13537       macro_build (NULL, dbl ? "ddiv" : "div", ".,x,y", op[1], op[2]);
13538       expr1.X_add_number = 2;
13539       macro_build (&expr1, "bnez", "x,p", op[2]);
13540       macro_build (NULL, "break", "6", 7);
13541
13542       /* FIXME: The normal code checks for of -1 / -0x80000000 here,
13543          since that causes an overflow.  We should do that as well,
13544          but I don't see how to do the comparisons without a temporary
13545          register.  */
13546       end_noreorder ();
13547       macro_build (NULL, s, "x", op[0]);
13548       break;
13549
13550     case M_DIVU_3:
13551       s = "divu";
13552       s2 = "mflo";
13553       goto do_divu3;
13554     case M_REMU_3:
13555       s = "divu";
13556       s2 = "mfhi";
13557       goto do_divu3;
13558     case M_DDIVU_3:
13559       s = "ddivu";
13560       s2 = "mflo";
13561       goto do_divu3;
13562     case M_DREMU_3:
13563       s = "ddivu";
13564       s2 = "mfhi";
13565     do_divu3:
13566       start_noreorder ();
13567       macro_build (NULL, s, ".,x,y", op[1], op[2]);
13568       expr1.X_add_number = 2;
13569       macro_build (&expr1, "bnez", "x,p", op[2]);
13570       macro_build (NULL, "break", "6", 7);
13571       end_noreorder ();
13572       macro_build (NULL, s2, "x", op[0]);
13573       break;
13574
13575     case M_DMUL:
13576       dbl = 1;
13577       /* Fall through.  */
13578     case M_MUL:
13579       macro_build (NULL, dbl ? "dmultu" : "multu", "x,y", op[1], op[2]);
13580       macro_build (NULL, "mflo", "x", op[0]);
13581       break;
13582
13583     case M_DSUBU_I:
13584       dbl = 1;
13585       goto do_subu;
13586     case M_SUBU_I:
13587     do_subu:
13588       imm_expr.X_add_number = -imm_expr.X_add_number;
13589       macro_build (&imm_expr, dbl ? "daddiu" : "addiu", "y,x,F", op[0], op[1]);
13590       break;
13591
13592     case M_SUBU_I_2:
13593       imm_expr.X_add_number = -imm_expr.X_add_number;
13594       macro_build (&imm_expr, "addiu", "x,k", op[0]);
13595       break;
13596
13597     case M_DSUBU_I_2:
13598       imm_expr.X_add_number = -imm_expr.X_add_number;
13599       macro_build (&imm_expr, "daddiu", "y,j", op[0]);
13600       break;
13601
13602     case M_BEQ:
13603       s = "cmp";
13604       s2 = "bteqz";
13605       goto do_branch;
13606     case M_BNE:
13607       s = "cmp";
13608       s2 = "btnez";
13609       goto do_branch;
13610     case M_BLT:
13611       s = "slt";
13612       s2 = "btnez";
13613       goto do_branch;
13614     case M_BLTU:
13615       s = "sltu";
13616       s2 = "btnez";
13617       goto do_branch;
13618     case M_BLE:
13619       s = "slt";
13620       s2 = "bteqz";
13621       goto do_reverse_branch;
13622     case M_BLEU:
13623       s = "sltu";
13624       s2 = "bteqz";
13625       goto do_reverse_branch;
13626     case M_BGE:
13627       s = "slt";
13628       s2 = "bteqz";
13629       goto do_branch;
13630     case M_BGEU:
13631       s = "sltu";
13632       s2 = "bteqz";
13633       goto do_branch;
13634     case M_BGT:
13635       s = "slt";
13636       s2 = "btnez";
13637       goto do_reverse_branch;
13638     case M_BGTU:
13639       s = "sltu";
13640       s2 = "btnez";
13641
13642     do_reverse_branch:
13643       tmp = op[1];
13644       op[1] = op[0];
13645       op[0] = tmp;
13646
13647     do_branch:
13648       macro_build (NULL, s, "x,y", op[0], op[1]);
13649       macro_build (&offset_expr, s2, "p");
13650       break;
13651
13652     case M_BEQ_I:
13653       s = "cmpi";
13654       s2 = "bteqz";
13655       s3 = "x,U";
13656       goto do_branch_i;
13657     case M_BNE_I:
13658       s = "cmpi";
13659       s2 = "btnez";
13660       s3 = "x,U";
13661       goto do_branch_i;
13662     case M_BLT_I:
13663       s = "slti";
13664       s2 = "btnez";
13665       s3 = "x,8";
13666       goto do_branch_i;
13667     case M_BLTU_I:
13668       s = "sltiu";
13669       s2 = "btnez";
13670       s3 = "x,8";
13671       goto do_branch_i;
13672     case M_BLE_I:
13673       s = "slti";
13674       s2 = "btnez";
13675       s3 = "x,8";
13676       goto do_addone_branch_i;
13677     case M_BLEU_I:
13678       s = "sltiu";
13679       s2 = "btnez";
13680       s3 = "x,8";
13681       goto do_addone_branch_i;
13682     case M_BGE_I:
13683       s = "slti";
13684       s2 = "bteqz";
13685       s3 = "x,8";
13686       goto do_branch_i;
13687     case M_BGEU_I:
13688       s = "sltiu";
13689       s2 = "bteqz";
13690       s3 = "x,8";
13691       goto do_branch_i;
13692     case M_BGT_I:
13693       s = "slti";
13694       s2 = "bteqz";
13695       s3 = "x,8";
13696       goto do_addone_branch_i;
13697     case M_BGTU_I:
13698       s = "sltiu";
13699       s2 = "bteqz";
13700       s3 = "x,8";
13701
13702     do_addone_branch_i:
13703       ++imm_expr.X_add_number;
13704
13705     do_branch_i:
13706       macro_build (&imm_expr, s, s3, op[0]);
13707       macro_build (&offset_expr, s2, "p");
13708       break;
13709
13710     case M_ABS:
13711       expr1.X_add_number = 0;
13712       macro_build (&expr1, "slti", "x,8", op[1]);
13713       if (op[0] != op[1])
13714         macro_build (NULL, "move", "y,X", op[0], mips16_to_32_reg_map[op[1]]);
13715       expr1.X_add_number = 2;
13716       macro_build (&expr1, "bteqz", "p");
13717       macro_build (NULL, "neg", "x,w", op[0], op[0]);
13718       break;
13719     }
13720 }
13721
13722 /* Look up instruction [START, START + LENGTH) in HASH.  Record any extra
13723    opcode bits in *OPCODE_EXTRA.  */
13724
13725 static struct mips_opcode *
13726 mips_lookup_insn (struct hash_control *hash, const char *start,
13727                   ssize_t length, unsigned int *opcode_extra)
13728 {
13729   char *name, *dot, *p;
13730   unsigned int mask, suffix;
13731   ssize_t opend;
13732   struct mips_opcode *insn;
13733
13734   /* Make a copy of the instruction so that we can fiddle with it.  */
13735   name = xstrndup (start, length);
13736
13737   /* Look up the instruction as-is.  */
13738   insn = (struct mips_opcode *) hash_find (hash, name);
13739   if (insn)
13740     goto end;
13741
13742   dot = strchr (name, '.');
13743   if (dot && dot[1])
13744     {
13745       /* Try to interpret the text after the dot as a VU0 channel suffix.  */
13746       p = mips_parse_vu0_channels (dot + 1, &mask);
13747       if (*p == 0 && mask != 0)
13748         {
13749           *dot = 0;
13750           insn = (struct mips_opcode *) hash_find (hash, name);
13751           *dot = '.';
13752           if (insn && (insn->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0)
13753             {
13754               *opcode_extra |= mask << mips_vu0_channel_mask.lsb;
13755               goto end;
13756             }
13757         }
13758     }
13759
13760   if (mips_opts.micromips)
13761     {
13762       /* See if there's an instruction size override suffix,
13763          either `16' or `32', at the end of the mnemonic proper,
13764          that defines the operation, i.e. before the first `.'
13765          character if any.  Strip it and retry.  */
13766       opend = dot != NULL ? dot - name : length;
13767       if (opend >= 3 && name[opend - 2] == '1' && name[opend - 1] == '6')
13768         suffix = 2;
13769       else if (name[opend - 2] == '3' && name[opend - 1] == '2')
13770         suffix = 4;
13771       else
13772         suffix = 0;
13773       if (suffix)
13774         {
13775           memcpy (name + opend - 2, name + opend, length - opend + 1);
13776           insn = (struct mips_opcode *) hash_find (hash, name);
13777           if (insn)
13778             {
13779               forced_insn_length = suffix;
13780               goto end;
13781             }
13782         }
13783     }
13784
13785   insn = NULL;
13786  end:
13787   free (name);
13788   return insn;
13789 }
13790
13791 /* Assemble an instruction into its binary format.  If the instruction
13792    is a macro, set imm_expr and offset_expr to the values associated
13793    with "I" and "A" operands respectively.  Otherwise store the value
13794    of the relocatable field (if any) in offset_expr.  In both cases
13795    set offset_reloc to the relocation operators applied to offset_expr.  */
13796
13797 static void
13798 mips_ip (char *str, struct mips_cl_insn *insn)
13799 {
13800   const struct mips_opcode *first, *past;
13801   struct hash_control *hash;
13802   char format;
13803   size_t end;
13804   struct mips_operand_token *tokens;
13805   unsigned int opcode_extra;
13806
13807   if (mips_opts.micromips)
13808     {
13809       hash = micromips_op_hash;
13810       past = &micromips_opcodes[bfd_micromips_num_opcodes];
13811     }
13812   else
13813     {
13814       hash = op_hash;
13815       past = &mips_opcodes[NUMOPCODES];
13816     }
13817   forced_insn_length = 0;
13818   opcode_extra = 0;
13819
13820   /* We first try to match an instruction up to a space or to the end.  */
13821   for (end = 0; str[end] != '\0' && !ISSPACE (str[end]); end++)
13822     continue;
13823
13824   first = mips_lookup_insn (hash, str, end, &opcode_extra);
13825   if (first == NULL)
13826     {
13827       set_insn_error (0, _("unrecognized opcode"));
13828       return;
13829     }
13830
13831   if (strcmp (first->name, "li.s") == 0)
13832     format = 'f';
13833   else if (strcmp (first->name, "li.d") == 0)
13834     format = 'd';
13835   else
13836     format = 0;
13837   tokens = mips_parse_arguments (str + end, format);
13838   if (!tokens)
13839     return;
13840
13841   if (!match_insns (insn, first, past, tokens, opcode_extra, FALSE)
13842       && !match_insns (insn, first, past, tokens, opcode_extra, TRUE))
13843     set_insn_error (0, _("invalid operands"));
13844
13845   obstack_free (&mips_operand_tokens, tokens);
13846 }
13847
13848 /* As for mips_ip, but used when assembling MIPS16 code.
13849    Also set forced_insn_length to the resulting instruction size in
13850    bytes if the user explicitly requested a small or extended instruction.  */
13851
13852 static void
13853 mips16_ip (char *str, struct mips_cl_insn *insn)
13854 {
13855   char *end, *s, c;
13856   struct mips_opcode *first;
13857   struct mips_operand_token *tokens;
13858   unsigned int l;
13859
13860   for (s = str; ISLOWER (*s); ++s)
13861     ;
13862   end = s;
13863   c = *end;
13864
13865   l = 0;
13866   switch (c)
13867     {
13868     case '\0':
13869       break;
13870
13871     case ' ':
13872       s++;
13873       break;
13874
13875     case '.':
13876       s++;
13877       if (*s == 't')
13878         {
13879           l = 2;
13880           s++;
13881         }
13882       else if (*s == 'e')
13883         {
13884           l = 4;
13885           s++;
13886         }
13887       if (*s == '\0')
13888         break;
13889       else if (*s++ == ' ')
13890         break;
13891       /* Fall through.  */
13892     default:
13893       set_insn_error (0, _("unrecognized opcode"));
13894       return;
13895     }
13896   forced_insn_length = l;
13897
13898   *end = 0;
13899   first = (struct mips_opcode *) hash_find (mips16_op_hash, str);
13900   *end = c;
13901
13902   if (!first)
13903     {
13904       set_insn_error (0, _("unrecognized opcode"));
13905       return;
13906     }
13907
13908   tokens = mips_parse_arguments (s, 0);
13909   if (!tokens)
13910     return;
13911
13912   if (!match_mips16_insns (insn, first, tokens))
13913     set_insn_error (0, _("invalid operands"));
13914
13915   obstack_free (&mips_operand_tokens, tokens);
13916 }
13917
13918 /* Marshal immediate value VAL for an extended MIPS16 instruction.
13919    NBITS is the number of significant bits in VAL.  */
13920
13921 static unsigned long
13922 mips16_immed_extend (offsetT val, unsigned int nbits)
13923 {
13924   int extval;
13925   if (nbits == 16)
13926     {
13927       extval = ((val >> 11) & 0x1f) | (val & 0x7e0);
13928       val &= 0x1f;
13929     }
13930   else if (nbits == 15)
13931     {
13932       extval = ((val >> 11) & 0xf) | (val & 0x7f0);
13933       val &= 0xf;
13934     }
13935   else
13936     {
13937       extval = ((val & 0x1f) << 6) | (val & 0x20);
13938       val = 0;
13939     }
13940   return (extval << 16) | val;
13941 }
13942
13943 /* Like decode_mips16_operand, but require the operand to be defined and
13944    require it to be an integer.  */
13945
13946 static const struct mips_int_operand *
13947 mips16_immed_operand (int type, bfd_boolean extended_p)
13948 {
13949   const struct mips_operand *operand;
13950
13951   operand = decode_mips16_operand (type, extended_p);
13952   if (!operand || (operand->type != OP_INT && operand->type != OP_PCREL))
13953     abort ();
13954   return (const struct mips_int_operand *) operand;
13955 }
13956
13957 /* Return true if SVAL fits OPERAND.  RELOC is as for mips16_immed.  */
13958
13959 static bfd_boolean
13960 mips16_immed_in_range_p (const struct mips_int_operand *operand,
13961                          bfd_reloc_code_real_type reloc, offsetT sval)
13962 {
13963   int min_val, max_val;
13964
13965   min_val = mips_int_operand_min (operand);
13966   max_val = mips_int_operand_max (operand);
13967   if (reloc != BFD_RELOC_UNUSED)
13968     {
13969       if (min_val < 0)
13970         sval = SEXT_16BIT (sval);
13971       else
13972         sval &= 0xffff;
13973     }
13974
13975   return (sval >= min_val
13976           && sval <= max_val
13977           && (sval & ((1 << operand->shift) - 1)) == 0);
13978 }
13979
13980 /* Install immediate value VAL into MIPS16 instruction *INSN,
13981    extending it if necessary.  The instruction in *INSN may
13982    already be extended.
13983
13984    RELOC is the relocation that produced VAL, or BFD_RELOC_UNUSED
13985    if none.  In the former case, VAL is a 16-bit number with no
13986    defined signedness.
13987
13988    TYPE is the type of the immediate field.  USER_INSN_LENGTH
13989    is the length that the user requested, or 0 if none.  */
13990
13991 static void
13992 mips16_immed (const char *file, unsigned int line, int type,
13993               bfd_reloc_code_real_type reloc, offsetT val,
13994               unsigned int user_insn_length, unsigned long *insn)
13995 {
13996   const struct mips_int_operand *operand;
13997   unsigned int uval, length;
13998
13999   operand = mips16_immed_operand (type, FALSE);
14000   if (!mips16_immed_in_range_p (operand, reloc, val))
14001     {
14002       /* We need an extended instruction.  */
14003       if (user_insn_length == 2)
14004         as_bad_where (file, line, _("invalid unextended operand value"));
14005       else
14006         *insn |= MIPS16_EXTEND;
14007     }
14008   else if (user_insn_length == 4)
14009     {
14010       /* The operand doesn't force an unextended instruction to be extended.
14011          Warn if the user wanted an extended instruction anyway.  */
14012       *insn |= MIPS16_EXTEND;
14013       as_warn_where (file, line,
14014                      _("extended operand requested but not required"));
14015     }
14016
14017   length = mips16_opcode_length (*insn);
14018   if (length == 4)
14019     {
14020       operand = mips16_immed_operand (type, TRUE);
14021       if (!mips16_immed_in_range_p (operand, reloc, val))
14022         as_bad_where (file, line,
14023                       _("operand value out of range for instruction"));
14024     }
14025   uval = ((unsigned int) val >> operand->shift) - operand->bias;
14026   if (length == 2 || operand->root.lsb != 0)
14027     *insn = mips_insert_operand (&operand->root, *insn, uval);
14028   else
14029     *insn |= mips16_immed_extend (uval, operand->root.size);
14030 }
14031 \f
14032 struct percent_op_match
14033 {
14034   const char *str;
14035   bfd_reloc_code_real_type reloc;
14036 };
14037
14038 static const struct percent_op_match mips_percent_op[] =
14039 {
14040   {"%lo", BFD_RELOC_LO16},
14041   {"%call_hi", BFD_RELOC_MIPS_CALL_HI16},
14042   {"%call_lo", BFD_RELOC_MIPS_CALL_LO16},
14043   {"%call16", BFD_RELOC_MIPS_CALL16},
14044   {"%got_disp", BFD_RELOC_MIPS_GOT_DISP},
14045   {"%got_page", BFD_RELOC_MIPS_GOT_PAGE},
14046   {"%got_ofst", BFD_RELOC_MIPS_GOT_OFST},
14047   {"%got_hi", BFD_RELOC_MIPS_GOT_HI16},
14048   {"%got_lo", BFD_RELOC_MIPS_GOT_LO16},
14049   {"%got", BFD_RELOC_MIPS_GOT16},
14050   {"%gp_rel", BFD_RELOC_GPREL16},
14051   {"%half", BFD_RELOC_16},
14052   {"%highest", BFD_RELOC_MIPS_HIGHEST},
14053   {"%higher", BFD_RELOC_MIPS_HIGHER},
14054   {"%neg", BFD_RELOC_MIPS_SUB},
14055   {"%tlsgd", BFD_RELOC_MIPS_TLS_GD},
14056   {"%tlsldm", BFD_RELOC_MIPS_TLS_LDM},
14057   {"%dtprel_hi", BFD_RELOC_MIPS_TLS_DTPREL_HI16},
14058   {"%dtprel_lo", BFD_RELOC_MIPS_TLS_DTPREL_LO16},
14059   {"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16},
14060   {"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16},
14061   {"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL},
14062   {"%hi", BFD_RELOC_HI16_S},
14063   {"%pcrel_hi", BFD_RELOC_HI16_S_PCREL},
14064   {"%pcrel_lo", BFD_RELOC_LO16_PCREL}
14065 };
14066
14067 static const struct percent_op_match mips16_percent_op[] =
14068 {
14069   {"%lo", BFD_RELOC_MIPS16_LO16},
14070   {"%gprel", BFD_RELOC_MIPS16_GPREL},
14071   {"%got", BFD_RELOC_MIPS16_GOT16},
14072   {"%call16", BFD_RELOC_MIPS16_CALL16},
14073   {"%hi", BFD_RELOC_MIPS16_HI16_S},
14074   {"%tlsgd", BFD_RELOC_MIPS16_TLS_GD},
14075   {"%tlsldm", BFD_RELOC_MIPS16_TLS_LDM},
14076   {"%dtprel_hi", BFD_RELOC_MIPS16_TLS_DTPREL_HI16},
14077   {"%dtprel_lo", BFD_RELOC_MIPS16_TLS_DTPREL_LO16},
14078   {"%tprel_hi", BFD_RELOC_MIPS16_TLS_TPREL_HI16},
14079   {"%tprel_lo", BFD_RELOC_MIPS16_TLS_TPREL_LO16},
14080   {"%gottprel", BFD_RELOC_MIPS16_TLS_GOTTPREL}
14081 };
14082
14083
14084 /* Return true if *STR points to a relocation operator.  When returning true,
14085    move *STR over the operator and store its relocation code in *RELOC.
14086    Leave both *STR and *RELOC alone when returning false.  */
14087
14088 static bfd_boolean
14089 parse_relocation (char **str, bfd_reloc_code_real_type *reloc)
14090 {
14091   const struct percent_op_match *percent_op;
14092   size_t limit, i;
14093
14094   if (mips_opts.mips16)
14095     {
14096       percent_op = mips16_percent_op;
14097       limit = ARRAY_SIZE (mips16_percent_op);
14098     }
14099   else
14100     {
14101       percent_op = mips_percent_op;
14102       limit = ARRAY_SIZE (mips_percent_op);
14103     }
14104
14105   for (i = 0; i < limit; i++)
14106     if (strncasecmp (*str, percent_op[i].str, strlen (percent_op[i].str)) == 0)
14107       {
14108         int len = strlen (percent_op[i].str);
14109
14110         if (!ISSPACE ((*str)[len]) && (*str)[len] != '(')
14111           continue;
14112
14113         *str += strlen (percent_op[i].str);
14114         *reloc = percent_op[i].reloc;
14115
14116         /* Check whether the output BFD supports this relocation.
14117            If not, issue an error and fall back on something safe.  */
14118         if (!bfd_reloc_type_lookup (stdoutput, percent_op[i].reloc))
14119           {
14120             as_bad (_("relocation %s isn't supported by the current ABI"),
14121                     percent_op[i].str);
14122             *reloc = BFD_RELOC_UNUSED;
14123           }
14124         return TRUE;
14125       }
14126   return FALSE;
14127 }
14128
14129
14130 /* Parse string STR as a 16-bit relocatable operand.  Store the
14131    expression in *EP and the relocations in the array starting
14132    at RELOC.  Return the number of relocation operators used.
14133
14134    On exit, EXPR_END points to the first character after the expression.  */
14135
14136 static size_t
14137 my_getSmallExpression (expressionS *ep, bfd_reloc_code_real_type *reloc,
14138                        char *str)
14139 {
14140   bfd_reloc_code_real_type reversed_reloc[3];
14141   size_t reloc_index, i;
14142   int crux_depth, str_depth;
14143   char *crux;
14144
14145   /* Search for the start of the main expression, recoding relocations
14146      in REVERSED_RELOC.  End the loop with CRUX pointing to the start
14147      of the main expression and with CRUX_DEPTH containing the number
14148      of open brackets at that point.  */
14149   reloc_index = -1;
14150   str_depth = 0;
14151   do
14152     {
14153       reloc_index++;
14154       crux = str;
14155       crux_depth = str_depth;
14156
14157       /* Skip over whitespace and brackets, keeping count of the number
14158          of brackets.  */
14159       while (*str == ' ' || *str == '\t' || *str == '(')
14160         if (*str++ == '(')
14161           str_depth++;
14162     }
14163   while (*str == '%'
14164          && reloc_index < (HAVE_NEWABI ? 3 : 1)
14165          && parse_relocation (&str, &reversed_reloc[reloc_index]));
14166
14167   my_getExpression (ep, crux);
14168   str = expr_end;
14169
14170   /* Match every open bracket.  */
14171   while (crux_depth > 0 && (*str == ')' || *str == ' ' || *str == '\t'))
14172     if (*str++ == ')')
14173       crux_depth--;
14174
14175   if (crux_depth > 0)
14176     as_bad (_("unclosed '('"));
14177
14178   expr_end = str;
14179
14180   if (reloc_index != 0)
14181     {
14182       prev_reloc_op_frag = frag_now;
14183       for (i = 0; i < reloc_index; i++)
14184         reloc[i] = reversed_reloc[reloc_index - 1 - i];
14185     }
14186
14187   return reloc_index;
14188 }
14189
14190 static void
14191 my_getExpression (expressionS *ep, char *str)
14192 {
14193   char *save_in;
14194
14195   save_in = input_line_pointer;
14196   input_line_pointer = str;
14197   expression (ep);
14198   expr_end = input_line_pointer;
14199   input_line_pointer = save_in;
14200 }
14201
14202 const char *
14203 md_atof (int type, char *litP, int *sizeP)
14204 {
14205   return ieee_md_atof (type, litP, sizeP, target_big_endian);
14206 }
14207
14208 void
14209 md_number_to_chars (char *buf, valueT val, int n)
14210 {
14211   if (target_big_endian)
14212     number_to_chars_bigendian (buf, val, n);
14213   else
14214     number_to_chars_littleendian (buf, val, n);
14215 }
14216 \f
14217 static int support_64bit_objects(void)
14218 {
14219   const char **list, **l;
14220   int yes;
14221
14222   list = bfd_target_list ();
14223   for (l = list; *l != NULL; l++)
14224     if (strcmp (*l, ELF_TARGET ("elf64-", "big")) == 0
14225         || strcmp (*l, ELF_TARGET ("elf64-", "little")) == 0)
14226       break;
14227   yes = (*l != NULL);
14228   free (list);
14229   return yes;
14230 }
14231
14232 /* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to
14233    NEW_VALUE.  Warn if another value was already specified.  Note:
14234    we have to defer parsing the -march and -mtune arguments in order
14235    to handle 'from-abi' correctly, since the ABI might be specified
14236    in a later argument.  */
14237
14238 static void
14239 mips_set_option_string (const char **string_ptr, const char *new_value)
14240 {
14241   if (*string_ptr != 0 && strcasecmp (*string_ptr, new_value) != 0)
14242     as_warn (_("a different %s was already specified, is now %s"),
14243              string_ptr == &mips_arch_string ? "-march" : "-mtune",
14244              new_value);
14245
14246   *string_ptr = new_value;
14247 }
14248
14249 int
14250 md_parse_option (int c, const char *arg)
14251 {
14252   unsigned int i;
14253
14254   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
14255     if (c == mips_ases[i].option_on || c == mips_ases[i].option_off)
14256       {
14257         file_ase_explicit |= mips_set_ase (&mips_ases[i], &file_mips_opts,
14258                                            c == mips_ases[i].option_on);
14259         return 1;
14260       }
14261
14262   switch (c)
14263     {
14264     case OPTION_CONSTRUCT_FLOATS:
14265       mips_disable_float_construction = 0;
14266       break;
14267
14268     case OPTION_NO_CONSTRUCT_FLOATS:
14269       mips_disable_float_construction = 1;
14270       break;
14271
14272     case OPTION_TRAP:
14273       mips_trap = 1;
14274       break;
14275
14276     case OPTION_BREAK:
14277       mips_trap = 0;
14278       break;
14279
14280     case OPTION_EB:
14281       target_big_endian = 1;
14282       break;
14283
14284     case OPTION_EL:
14285       target_big_endian = 0;
14286       break;
14287
14288     case 'O':
14289       if (arg == NULL)
14290         mips_optimize = 1;
14291       else if (arg[0] == '0')
14292         mips_optimize = 0;
14293       else if (arg[0] == '1')
14294         mips_optimize = 1;
14295       else
14296         mips_optimize = 2;
14297       break;
14298
14299     case 'g':
14300       if (arg == NULL)
14301         mips_debug = 2;
14302       else
14303         mips_debug = atoi (arg);
14304       break;
14305
14306     case OPTION_MIPS1:
14307       file_mips_opts.isa = ISA_MIPS1;
14308       break;
14309
14310     case OPTION_MIPS2:
14311       file_mips_opts.isa = ISA_MIPS2;
14312       break;
14313
14314     case OPTION_MIPS3:
14315       file_mips_opts.isa = ISA_MIPS3;
14316       break;
14317
14318     case OPTION_MIPS4:
14319       file_mips_opts.isa = ISA_MIPS4;
14320       break;
14321
14322     case OPTION_MIPS5:
14323       file_mips_opts.isa = ISA_MIPS5;
14324       break;
14325
14326     case OPTION_MIPS32:
14327       file_mips_opts.isa = ISA_MIPS32;
14328       break;
14329
14330     case OPTION_MIPS32R2:
14331       file_mips_opts.isa = ISA_MIPS32R2;
14332       break;
14333
14334     case OPTION_MIPS32R3:
14335       file_mips_opts.isa = ISA_MIPS32R3;
14336       break;
14337
14338     case OPTION_MIPS32R5:
14339       file_mips_opts.isa = ISA_MIPS32R5;
14340       break;
14341
14342     case OPTION_MIPS32R6:
14343       file_mips_opts.isa = ISA_MIPS32R6;
14344       break;
14345
14346     case OPTION_MIPS64R2:
14347       file_mips_opts.isa = ISA_MIPS64R2;
14348       break;
14349
14350     case OPTION_MIPS64R3:
14351       file_mips_opts.isa = ISA_MIPS64R3;
14352       break;
14353
14354     case OPTION_MIPS64R5:
14355       file_mips_opts.isa = ISA_MIPS64R5;
14356       break;
14357
14358     case OPTION_MIPS64R6:
14359       file_mips_opts.isa = ISA_MIPS64R6;
14360       break;
14361
14362     case OPTION_MIPS64:
14363       file_mips_opts.isa = ISA_MIPS64;
14364       break;
14365
14366     case OPTION_MTUNE:
14367       mips_set_option_string (&mips_tune_string, arg);
14368       break;
14369
14370     case OPTION_MARCH:
14371       mips_set_option_string (&mips_arch_string, arg);
14372       break;
14373
14374     case OPTION_M4650:
14375       mips_set_option_string (&mips_arch_string, "4650");
14376       mips_set_option_string (&mips_tune_string, "4650");
14377       break;
14378
14379     case OPTION_NO_M4650:
14380       break;
14381
14382     case OPTION_M4010:
14383       mips_set_option_string (&mips_arch_string, "4010");
14384       mips_set_option_string (&mips_tune_string, "4010");
14385       break;
14386
14387     case OPTION_NO_M4010:
14388       break;
14389
14390     case OPTION_M4100:
14391       mips_set_option_string (&mips_arch_string, "4100");
14392       mips_set_option_string (&mips_tune_string, "4100");
14393       break;
14394
14395     case OPTION_NO_M4100:
14396       break;
14397
14398     case OPTION_M3900:
14399       mips_set_option_string (&mips_arch_string, "3900");
14400       mips_set_option_string (&mips_tune_string, "3900");
14401       break;
14402
14403     case OPTION_NO_M3900:
14404       break;
14405
14406     case OPTION_MICROMIPS:
14407       if (file_mips_opts.mips16 == 1)
14408         {
14409           as_bad (_("-mmicromips cannot be used with -mips16"));
14410           return 0;
14411         }
14412       file_mips_opts.micromips = 1;
14413       mips_no_prev_insn ();
14414       break;
14415
14416     case OPTION_NO_MICROMIPS:
14417       file_mips_opts.micromips = 0;
14418       mips_no_prev_insn ();
14419       break;
14420
14421     case OPTION_MIPS16:
14422       if (file_mips_opts.micromips == 1)
14423         {
14424           as_bad (_("-mips16 cannot be used with -micromips"));
14425           return 0;
14426         }
14427       file_mips_opts.mips16 = 1;
14428       mips_no_prev_insn ();
14429       break;
14430
14431     case OPTION_NO_MIPS16:
14432       file_mips_opts.mips16 = 0;
14433       mips_no_prev_insn ();
14434       break;
14435
14436     case OPTION_FIX_24K:
14437       mips_fix_24k = 1;
14438       break;
14439
14440     case OPTION_NO_FIX_24K:
14441       mips_fix_24k = 0;
14442       break;
14443
14444     case OPTION_FIX_RM7000:
14445       mips_fix_rm7000 = 1;
14446       break;
14447
14448     case OPTION_NO_FIX_RM7000:
14449       mips_fix_rm7000 = 0;
14450       break;
14451
14452     case OPTION_FIX_LOONGSON2F_JUMP:
14453       mips_fix_loongson2f_jump = TRUE;
14454       break;
14455
14456     case OPTION_NO_FIX_LOONGSON2F_JUMP:
14457       mips_fix_loongson2f_jump = FALSE;
14458       break;
14459
14460     case OPTION_FIX_LOONGSON2F_NOP:
14461       mips_fix_loongson2f_nop = TRUE;
14462       break;
14463
14464     case OPTION_NO_FIX_LOONGSON2F_NOP:
14465       mips_fix_loongson2f_nop = FALSE;
14466       break;
14467
14468     case OPTION_FIX_VR4120:
14469       mips_fix_vr4120 = 1;
14470       break;
14471
14472     case OPTION_NO_FIX_VR4120:
14473       mips_fix_vr4120 = 0;
14474       break;
14475
14476     case OPTION_FIX_VR4130:
14477       mips_fix_vr4130 = 1;
14478       break;
14479
14480     case OPTION_NO_FIX_VR4130:
14481       mips_fix_vr4130 = 0;
14482       break;
14483
14484     case OPTION_FIX_CN63XXP1:
14485       mips_fix_cn63xxp1 = TRUE;
14486       break;
14487
14488     case OPTION_NO_FIX_CN63XXP1:
14489       mips_fix_cn63xxp1 = FALSE;
14490       break;
14491
14492     case OPTION_RELAX_BRANCH:
14493       mips_relax_branch = 1;
14494       break;
14495
14496     case OPTION_NO_RELAX_BRANCH:
14497       mips_relax_branch = 0;
14498       break;
14499
14500     case OPTION_INSN32:
14501       file_mips_opts.insn32 = TRUE;
14502       break;
14503
14504     case OPTION_NO_INSN32:
14505       file_mips_opts.insn32 = FALSE;
14506       break;
14507
14508     case OPTION_MSHARED:
14509       mips_in_shared = TRUE;
14510       break;
14511
14512     case OPTION_MNO_SHARED:
14513       mips_in_shared = FALSE;
14514       break;
14515
14516     case OPTION_MSYM32:
14517       file_mips_opts.sym32 = TRUE;
14518       break;
14519
14520     case OPTION_MNO_SYM32:
14521       file_mips_opts.sym32 = FALSE;
14522       break;
14523
14524       /* When generating ELF code, we permit -KPIC and -call_shared to
14525          select SVR4_PIC, and -non_shared to select no PIC.  This is
14526          intended to be compatible with Irix 5.  */
14527     case OPTION_CALL_SHARED:
14528       mips_pic = SVR4_PIC;
14529       mips_abicalls = TRUE;
14530       break;
14531
14532     case OPTION_CALL_NONPIC:
14533       mips_pic = NO_PIC;
14534       mips_abicalls = TRUE;
14535       break;
14536
14537     case OPTION_NON_SHARED:
14538       mips_pic = NO_PIC;
14539       mips_abicalls = FALSE;
14540       break;
14541
14542       /* The -xgot option tells the assembler to use 32 bit offsets
14543          when accessing the got in SVR4_PIC mode.  It is for Irix
14544          compatibility.  */
14545     case OPTION_XGOT:
14546       mips_big_got = 1;
14547       break;
14548
14549     case 'G':
14550       g_switch_value = atoi (arg);
14551       g_switch_seen = 1;
14552       break;
14553
14554       /* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
14555          and -mabi=64.  */
14556     case OPTION_32:
14557       mips_abi = O32_ABI;
14558       break;
14559
14560     case OPTION_N32:
14561       mips_abi = N32_ABI;
14562       break;
14563
14564     case OPTION_64:
14565       mips_abi = N64_ABI;
14566       if (!support_64bit_objects())
14567         as_fatal (_("no compiled in support for 64 bit object file format"));
14568       break;
14569
14570     case OPTION_GP32:
14571       file_mips_opts.gp = 32;
14572       break;
14573
14574     case OPTION_GP64:
14575       file_mips_opts.gp = 64;
14576       break;
14577
14578     case OPTION_FP32:
14579       file_mips_opts.fp = 32;
14580       break;
14581
14582     case OPTION_FPXX:
14583       file_mips_opts.fp = 0;
14584       break;
14585
14586     case OPTION_FP64:
14587       file_mips_opts.fp = 64;
14588       break;
14589
14590     case OPTION_ODD_SPREG:
14591       file_mips_opts.oddspreg = 1;
14592       break;
14593
14594     case OPTION_NO_ODD_SPREG:
14595       file_mips_opts.oddspreg = 0;
14596       break;
14597
14598     case OPTION_SINGLE_FLOAT:
14599       file_mips_opts.single_float = 1;
14600       break;
14601
14602     case OPTION_DOUBLE_FLOAT:
14603       file_mips_opts.single_float = 0;
14604       break;
14605
14606     case OPTION_SOFT_FLOAT:
14607       file_mips_opts.soft_float = 1;
14608       break;
14609
14610     case OPTION_HARD_FLOAT:
14611       file_mips_opts.soft_float = 0;
14612       break;
14613
14614     case OPTION_MABI:
14615       if (strcmp (arg, "32") == 0)
14616         mips_abi = O32_ABI;
14617       else if (strcmp (arg, "o64") == 0)
14618         mips_abi = O64_ABI;
14619       else if (strcmp (arg, "n32") == 0)
14620         mips_abi = N32_ABI;
14621       else if (strcmp (arg, "64") == 0)
14622         {
14623           mips_abi = N64_ABI;
14624           if (! support_64bit_objects())
14625             as_fatal (_("no compiled in support for 64 bit object file "
14626                         "format"));
14627         }
14628       else if (strcmp (arg, "eabi") == 0)
14629         mips_abi = EABI_ABI;
14630       else
14631         {
14632           as_fatal (_("invalid abi -mabi=%s"), arg);
14633           return 0;
14634         }
14635       break;
14636
14637     case OPTION_M7000_HILO_FIX:
14638       mips_7000_hilo_fix = TRUE;
14639       break;
14640
14641     case OPTION_MNO_7000_HILO_FIX:
14642       mips_7000_hilo_fix = FALSE;
14643       break;
14644
14645     case OPTION_MDEBUG:
14646       mips_flag_mdebug = TRUE;
14647       break;
14648
14649     case OPTION_NO_MDEBUG:
14650       mips_flag_mdebug = FALSE;
14651       break;
14652
14653     case OPTION_PDR:
14654       mips_flag_pdr = TRUE;
14655       break;
14656
14657     case OPTION_NO_PDR:
14658       mips_flag_pdr = FALSE;
14659       break;
14660
14661     case OPTION_MVXWORKS_PIC:
14662       mips_pic = VXWORKS_PIC;
14663       break;
14664
14665     case OPTION_NAN:
14666       if (strcmp (arg, "2008") == 0)
14667         mips_nan2008 = 1;
14668       else if (strcmp (arg, "legacy") == 0)
14669         mips_nan2008 = 0;
14670       else
14671         {
14672           as_fatal (_("invalid NaN setting -mnan=%s"), arg);
14673           return 0;
14674         }
14675       break;
14676
14677     default:
14678       return 0;
14679     }
14680
14681     mips_fix_loongson2f = mips_fix_loongson2f_nop || mips_fix_loongson2f_jump;
14682
14683   return 1;
14684 }
14685 \f
14686 /* Set up globals to tune for the ISA or processor described by INFO.  */
14687
14688 static void
14689 mips_set_tune (const struct mips_cpu_info *info)
14690 {
14691   if (info != 0)
14692     mips_tune = info->cpu;
14693 }
14694
14695
14696 void
14697 mips_after_parse_args (void)
14698 {
14699   const struct mips_cpu_info *arch_info = 0;
14700   const struct mips_cpu_info *tune_info = 0;
14701
14702   /* GP relative stuff not working for PE */
14703   if (strncmp (TARGET_OS, "pe", 2) == 0)
14704     {
14705       if (g_switch_seen && g_switch_value != 0)
14706         as_bad (_("-G not supported in this configuration"));
14707       g_switch_value = 0;
14708     }
14709
14710   if (mips_abi == NO_ABI)
14711     mips_abi = MIPS_DEFAULT_ABI;
14712
14713   /* The following code determines the architecture.
14714      Similar code was added to GCC 3.3 (see override_options() in
14715      config/mips/mips.c).  The GAS and GCC code should be kept in sync
14716      as much as possible.  */
14717
14718   if (mips_arch_string != 0)
14719     arch_info = mips_parse_cpu ("-march", mips_arch_string);
14720
14721   if (file_mips_opts.isa != ISA_UNKNOWN)
14722     {
14723       /* Handle -mipsN.  At this point, file_mips_opts.isa contains the
14724          ISA level specified by -mipsN, while arch_info->isa contains
14725          the -march selection (if any).  */
14726       if (arch_info != 0)
14727         {
14728           /* -march takes precedence over -mipsN, since it is more descriptive.
14729              There's no harm in specifying both as long as the ISA levels
14730              are the same.  */
14731           if (file_mips_opts.isa != arch_info->isa)
14732             as_bad (_("-%s conflicts with the other architecture options,"
14733                       " which imply -%s"),
14734                     mips_cpu_info_from_isa (file_mips_opts.isa)->name,
14735                     mips_cpu_info_from_isa (arch_info->isa)->name);
14736         }
14737       else
14738         arch_info = mips_cpu_info_from_isa (file_mips_opts.isa);
14739     }
14740
14741   if (arch_info == 0)
14742     {
14743       arch_info = mips_parse_cpu ("default CPU", MIPS_CPU_STRING_DEFAULT);
14744       gas_assert (arch_info);
14745     }
14746
14747   if (ABI_NEEDS_64BIT_REGS (mips_abi) && !ISA_HAS_64BIT_REGS (arch_info->isa))
14748     as_bad (_("-march=%s is not compatible with the selected ABI"),
14749             arch_info->name);
14750
14751   file_mips_opts.arch = arch_info->cpu;
14752   file_mips_opts.isa = arch_info->isa;
14753
14754   /* Set up initial mips_opts state.  */
14755   mips_opts = file_mips_opts;
14756
14757   /* The register size inference code is now placed in
14758      file_mips_check_options.  */
14759
14760   /* Optimize for file_mips_opts.arch, unless -mtune selects a different
14761      processor.  */
14762   if (mips_tune_string != 0)
14763     tune_info = mips_parse_cpu ("-mtune", mips_tune_string);
14764
14765   if (tune_info == 0)
14766     mips_set_tune (arch_info);
14767   else
14768     mips_set_tune (tune_info);
14769
14770   if (mips_flag_mdebug < 0)
14771     mips_flag_mdebug = 0;
14772 }
14773 \f
14774 void
14775 mips_init_after_args (void)
14776 {
14777   /* initialize opcodes */
14778   bfd_mips_num_opcodes = bfd_mips_num_builtin_opcodes;
14779   mips_opcodes = (struct mips_opcode *) mips_builtin_opcodes;
14780 }
14781
14782 long
14783 md_pcrel_from (fixS *fixP)
14784 {
14785   valueT addr = fixP->fx_where + fixP->fx_frag->fr_address;
14786   switch (fixP->fx_r_type)
14787     {
14788     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
14789     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
14790       /* Return the address of the delay slot.  */
14791       return addr + 2;
14792
14793     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
14794     case BFD_RELOC_MICROMIPS_JMP:
14795     case BFD_RELOC_MIPS16_16_PCREL_S1:
14796     case BFD_RELOC_16_PCREL_S2:
14797     case BFD_RELOC_MIPS_21_PCREL_S2:
14798     case BFD_RELOC_MIPS_26_PCREL_S2:
14799     case BFD_RELOC_MIPS_JMP:
14800       /* Return the address of the delay slot.  */
14801       return addr + 4;
14802
14803     case BFD_RELOC_MIPS_18_PCREL_S3:
14804       /* Return the aligned address of the doubleword containing
14805          the instruction.  */
14806       return addr & ~7;
14807
14808     default:
14809       return addr;
14810     }
14811 }
14812
14813 /* This is called before the symbol table is processed.  In order to
14814    work with gcc when using mips-tfile, we must keep all local labels.
14815    However, in other cases, we want to discard them.  If we were
14816    called with -g, but we didn't see any debugging information, it may
14817    mean that gcc is smuggling debugging information through to
14818    mips-tfile, in which case we must generate all local labels.  */
14819
14820 void
14821 mips_frob_file_before_adjust (void)
14822 {
14823 #ifndef NO_ECOFF_DEBUGGING
14824   if (ECOFF_DEBUGGING
14825       && mips_debug != 0
14826       && ! ecoff_debugging_seen)
14827     flag_keep_locals = 1;
14828 #endif
14829 }
14830
14831 /* Sort any unmatched HI16 and GOT16 relocs so that they immediately precede
14832    the corresponding LO16 reloc.  This is called before md_apply_fix and
14833    tc_gen_reloc.  Unmatched relocs can only be generated by use of explicit
14834    relocation operators.
14835
14836    For our purposes, a %lo() expression matches a %got() or %hi()
14837    expression if:
14838
14839       (a) it refers to the same symbol; and
14840       (b) the offset applied in the %lo() expression is no lower than
14841           the offset applied in the %got() or %hi().
14842
14843    (b) allows us to cope with code like:
14844
14845         lui     $4,%hi(foo)
14846         lh      $4,%lo(foo+2)($4)
14847
14848    ...which is legal on RELA targets, and has a well-defined behaviour
14849    if the user knows that adding 2 to "foo" will not induce a carry to
14850    the high 16 bits.
14851
14852    When several %lo()s match a particular %got() or %hi(), we use the
14853    following rules to distinguish them:
14854
14855      (1) %lo()s with smaller offsets are a better match than %lo()s with
14856          higher offsets.
14857
14858      (2) %lo()s with no matching %got() or %hi() are better than those
14859          that already have a matching %got() or %hi().
14860
14861      (3) later %lo()s are better than earlier %lo()s.
14862
14863    These rules are applied in order.
14864
14865    (1) means, among other things, that %lo()s with identical offsets are
14866    chosen if they exist.
14867
14868    (2) means that we won't associate several high-part relocations with
14869    the same low-part relocation unless there's no alternative.  Having
14870    several high parts for the same low part is a GNU extension; this rule
14871    allows careful users to avoid it.
14872
14873    (3) is purely cosmetic.  mips_hi_fixup_list is is in reverse order,
14874    with the last high-part relocation being at the front of the list.
14875    It therefore makes sense to choose the last matching low-part
14876    relocation, all other things being equal.  It's also easier
14877    to code that way.  */
14878
14879 void
14880 mips_frob_file (void)
14881 {
14882   struct mips_hi_fixup *l;
14883   bfd_reloc_code_real_type looking_for_rtype = BFD_RELOC_UNUSED;
14884
14885   for (l = mips_hi_fixup_list; l != NULL; l = l->next)
14886     {
14887       segment_info_type *seginfo;
14888       bfd_boolean matched_lo_p;
14889       fixS **hi_pos, **lo_pos, **pos;
14890
14891       gas_assert (reloc_needs_lo_p (l->fixp->fx_r_type));
14892
14893       /* If a GOT16 relocation turns out to be against a global symbol,
14894          there isn't supposed to be a matching LO.  Ignore %gots against
14895          constants; we'll report an error for those later.  */
14896       if (got16_reloc_p (l->fixp->fx_r_type)
14897           && !(l->fixp->fx_addsy
14898                && pic_need_relax (l->fixp->fx_addsy, l->seg)))
14899         continue;
14900
14901       /* Check quickly whether the next fixup happens to be a matching %lo.  */
14902       if (fixup_has_matching_lo_p (l->fixp))
14903         continue;
14904
14905       seginfo = seg_info (l->seg);
14906
14907       /* Set HI_POS to the position of this relocation in the chain.
14908          Set LO_POS to the position of the chosen low-part relocation.
14909          MATCHED_LO_P is true on entry to the loop if *POS is a low-part
14910          relocation that matches an immediately-preceding high-part
14911          relocation.  */
14912       hi_pos = NULL;
14913       lo_pos = NULL;
14914       matched_lo_p = FALSE;
14915       looking_for_rtype = matching_lo_reloc (l->fixp->fx_r_type);
14916
14917       for (pos = &seginfo->fix_root; *pos != NULL; pos = &(*pos)->fx_next)
14918         {
14919           if (*pos == l->fixp)
14920             hi_pos = pos;
14921
14922           if ((*pos)->fx_r_type == looking_for_rtype
14923               && symbol_same_p ((*pos)->fx_addsy, l->fixp->fx_addsy)
14924               && (*pos)->fx_offset >= l->fixp->fx_offset
14925               && (lo_pos == NULL
14926                   || (*pos)->fx_offset < (*lo_pos)->fx_offset
14927                   || (!matched_lo_p
14928                       && (*pos)->fx_offset == (*lo_pos)->fx_offset)))
14929             lo_pos = pos;
14930
14931           matched_lo_p = (reloc_needs_lo_p ((*pos)->fx_r_type)
14932                           && fixup_has_matching_lo_p (*pos));
14933         }
14934
14935       /* If we found a match, remove the high-part relocation from its
14936          current position and insert it before the low-part relocation.
14937          Make the offsets match so that fixup_has_matching_lo_p()
14938          will return true.
14939
14940          We don't warn about unmatched high-part relocations since some
14941          versions of gcc have been known to emit dead "lui ...%hi(...)"
14942          instructions.  */
14943       if (lo_pos != NULL)
14944         {
14945           l->fixp->fx_offset = (*lo_pos)->fx_offset;
14946           if (l->fixp->fx_next != *lo_pos)
14947             {
14948               *hi_pos = l->fixp->fx_next;
14949               l->fixp->fx_next = *lo_pos;
14950               *lo_pos = l->fixp;
14951             }
14952         }
14953     }
14954 }
14955
14956 int
14957 mips_force_relocation (fixS *fixp)
14958 {
14959   if (generic_force_reloc (fixp))
14960     return 1;
14961
14962   /* We want to keep BFD_RELOC_MICROMIPS_*_PCREL_S1 relocation,
14963      so that the linker relaxation can update targets.  */
14964   if (fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
14965       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
14966       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1)
14967     return 1;
14968
14969   /* We want to keep BFD_RELOC_16_PCREL_S2 BFD_RELOC_MIPS_21_PCREL_S2
14970      and BFD_RELOC_MIPS_26_PCREL_S2 relocations against MIPS16 and
14971      microMIPS symbols so that we can do cross-mode branch diagnostics
14972      and BAL to JALX conversion by the linker.  */
14973   if ((fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
14974        || fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
14975        || fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2)
14976       && fixp->fx_addsy
14977       && ELF_ST_IS_COMPRESSED (S_GET_OTHER (fixp->fx_addsy)))
14978     return 1;
14979
14980   /* We want all PC-relative relocations to be kept for R6 relaxation.  */
14981   if (ISA_IS_R6 (file_mips_opts.isa)
14982       && (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
14983           || fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
14984           || fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2
14985           || fixp->fx_r_type == BFD_RELOC_MIPS_18_PCREL_S3
14986           || fixp->fx_r_type == BFD_RELOC_MIPS_19_PCREL_S2
14987           || fixp->fx_r_type == BFD_RELOC_HI16_S_PCREL
14988           || fixp->fx_r_type == BFD_RELOC_LO16_PCREL))
14989     return 1;
14990
14991   return 0;
14992 }
14993
14994 /* Implement TC_FORCE_RELOCATION_ABS.  */
14995
14996 bfd_boolean
14997 mips_force_relocation_abs (fixS *fixp)
14998 {
14999   if (generic_force_reloc (fixp))
15000     return TRUE;
15001
15002   /* These relocations do not have enough bits in the in-place addend
15003      to hold an arbitrary absolute section's offset.  */
15004   if (HAVE_IN_PLACE_ADDENDS && limited_pcrel_reloc_p (fixp->fx_r_type))
15005     return TRUE;
15006
15007   return FALSE;
15008 }
15009
15010 /* Read the instruction associated with RELOC from BUF.  */
15011
15012 static unsigned int
15013 read_reloc_insn (char *buf, bfd_reloc_code_real_type reloc)
15014 {
15015   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
15016     return read_compressed_insn (buf, 4);
15017   else
15018     return read_insn (buf);
15019 }
15020
15021 /* Write instruction INSN to BUF, given that it has been relocated
15022    by RELOC.  */
15023
15024 static void
15025 write_reloc_insn (char *buf, bfd_reloc_code_real_type reloc,
15026                   unsigned long insn)
15027 {
15028   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
15029     write_compressed_insn (buf, insn, 4);
15030   else
15031     write_insn (buf, insn);
15032 }
15033
15034 /* Return TRUE if the instruction pointed to by FIXP is an invalid jump
15035    to a symbol in another ISA mode, which cannot be converted to JALX.  */
15036
15037 static bfd_boolean
15038 fix_bad_cross_mode_jump_p (fixS *fixP)
15039 {
15040   unsigned long opcode;
15041   int other;
15042   char *buf;
15043
15044   if (!fixP->fx_addsy || S_FORCE_RELOC (fixP->fx_addsy, TRUE))
15045     return FALSE;
15046
15047   other = S_GET_OTHER (fixP->fx_addsy);
15048   buf = fixP->fx_frag->fr_literal + fixP->fx_where;
15049   opcode = read_reloc_insn (buf, fixP->fx_r_type) >> 26;
15050   switch (fixP->fx_r_type)
15051     {
15052     case BFD_RELOC_MIPS_JMP:
15053       return opcode != 0x1d && opcode != 0x03 && ELF_ST_IS_COMPRESSED (other);
15054     case BFD_RELOC_MICROMIPS_JMP:
15055       return opcode != 0x3c && opcode != 0x3d && !ELF_ST_IS_MICROMIPS (other);
15056     default:
15057       return FALSE;
15058     }
15059 }
15060
15061 /* Return TRUE if the instruction pointed to by FIXP is an invalid JALX
15062    jump to a symbol in the same ISA mode.  */
15063
15064 static bfd_boolean
15065 fix_bad_same_mode_jalx_p (fixS *fixP)
15066 {
15067   unsigned long opcode;
15068   int other;
15069   char *buf;
15070
15071   if (!fixP->fx_addsy || S_FORCE_RELOC (fixP->fx_addsy, TRUE))
15072     return FALSE;
15073
15074   other = S_GET_OTHER (fixP->fx_addsy);
15075   buf = fixP->fx_frag->fr_literal + fixP->fx_where;
15076   opcode = read_reloc_insn (buf, fixP->fx_r_type) >> 26;
15077   switch (fixP->fx_r_type)
15078     {
15079     case BFD_RELOC_MIPS_JMP:
15080       return opcode == 0x1d && !ELF_ST_IS_COMPRESSED (other);
15081     case BFD_RELOC_MIPS16_JMP:
15082       return opcode == 0x07 && ELF_ST_IS_COMPRESSED (other);
15083     case BFD_RELOC_MICROMIPS_JMP:
15084       return opcode == 0x3c && ELF_ST_IS_COMPRESSED (other);
15085     default:
15086       return FALSE;
15087     }
15088 }
15089
15090 /* Return TRUE if the instruction pointed to by FIXP is an invalid jump
15091    to a symbol whose value plus addend is not aligned according to the
15092    ultimate (after linker relaxation) jump instruction's immediate field
15093    requirement, either to (1 << SHIFT), or, for jumps from microMIPS to
15094    regular MIPS code, to (1 << 2).  */
15095
15096 static bfd_boolean
15097 fix_bad_misaligned_jump_p (fixS *fixP, int shift)
15098 {
15099   bfd_boolean micro_to_mips_p;
15100   valueT val;
15101   int other;
15102
15103   if (!fixP->fx_addsy || S_FORCE_RELOC (fixP->fx_addsy, TRUE))
15104     return FALSE;
15105
15106   other = S_GET_OTHER (fixP->fx_addsy);
15107   val = S_GET_VALUE (fixP->fx_addsy) | ELF_ST_IS_COMPRESSED (other);
15108   val += fixP->fx_offset;
15109   micro_to_mips_p = (fixP->fx_r_type == BFD_RELOC_MICROMIPS_JMP
15110                      && !ELF_ST_IS_MICROMIPS (other));
15111   return ((val & ((1 << (micro_to_mips_p ? 2 : shift)) - 1))
15112           != ELF_ST_IS_COMPRESSED (other));
15113 }
15114
15115 /* Return TRUE if the instruction pointed to by FIXP is an invalid branch
15116    to a symbol whose annotation indicates another ISA mode.  For absolute
15117    symbols check the ISA bit instead.
15118
15119    We accept BFD_RELOC_16_PCREL_S2 relocations against MIPS16 and microMIPS
15120    symbols or BFD_RELOC_MICROMIPS_16_PCREL_S1 relocations against regular
15121    MIPS symbols and associated with BAL instructions as these instructions
15122    may be be converted to JALX by the linker.  */
15123
15124 static bfd_boolean
15125 fix_bad_cross_mode_branch_p (fixS *fixP)
15126 {
15127   bfd_boolean absolute_p;
15128   unsigned long opcode;
15129   asection *symsec;
15130   valueT val;
15131   int other;
15132   char *buf;
15133
15134   if (!fixP->fx_addsy || S_FORCE_RELOC (fixP->fx_addsy, TRUE))
15135     return FALSE;
15136
15137   symsec = S_GET_SEGMENT (fixP->fx_addsy);
15138   absolute_p = bfd_is_abs_section (symsec);
15139
15140   val = S_GET_VALUE (fixP->fx_addsy) + fixP->fx_offset;
15141   other = S_GET_OTHER (fixP->fx_addsy);
15142
15143   buf = fixP->fx_frag->fr_literal + fixP->fx_where;
15144   opcode = read_reloc_insn (buf, fixP->fx_r_type) >> 16;
15145   switch (fixP->fx_r_type)
15146     {
15147     case BFD_RELOC_16_PCREL_S2:
15148       return ((absolute_p ? val & 1 : ELF_ST_IS_COMPRESSED (other))
15149               && opcode != 0x0411);
15150     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
15151       return ((absolute_p ? !(val & 1) : !ELF_ST_IS_MICROMIPS (other))
15152               && opcode != 0x4060);
15153     case BFD_RELOC_MIPS_21_PCREL_S2:
15154     case BFD_RELOC_MIPS_26_PCREL_S2:
15155       return absolute_p ? val & 1 : ELF_ST_IS_COMPRESSED (other);
15156     case BFD_RELOC_MIPS16_16_PCREL_S1:
15157       return absolute_p ? !(val & 1) : !ELF_ST_IS_MIPS16 (other);
15158     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
15159     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
15160       return absolute_p ? !(val & 1) : !ELF_ST_IS_MICROMIPS (other);
15161     default:
15162       abort ();
15163     }
15164 }
15165
15166 /* Return TRUE if the symbol plus addend associated with a regular MIPS
15167    branch instruction pointed to by FIXP is not aligned according to the
15168    branch instruction's immediate field requirement.  We need the addend
15169    to preserve the ISA bit and also the sum must not have bit 2 set.  We
15170    must explicitly OR in the ISA bit from symbol annotation as the bit
15171    won't be set in the symbol's value then.  */
15172
15173 static bfd_boolean
15174 fix_bad_misaligned_branch_p (fixS *fixP)
15175 {
15176   bfd_boolean absolute_p;
15177   asection *symsec;
15178   valueT isa_bit;
15179   valueT val;
15180   valueT off;
15181   int other;
15182
15183   if (!fixP->fx_addsy || S_FORCE_RELOC (fixP->fx_addsy, TRUE))
15184     return FALSE;
15185
15186   symsec = S_GET_SEGMENT (fixP->fx_addsy);
15187   absolute_p = bfd_is_abs_section (symsec);
15188
15189   val = S_GET_VALUE (fixP->fx_addsy);
15190   other = S_GET_OTHER (fixP->fx_addsy);
15191   off = fixP->fx_offset;
15192
15193   isa_bit = absolute_p ? (val + off) & 1 : ELF_ST_IS_COMPRESSED (other);
15194   val |= ELF_ST_IS_COMPRESSED (other);
15195   val += off;
15196   return (val & 0x3) != isa_bit;
15197 }
15198
15199 /* Make the necessary checks on a regular MIPS branch pointed to by FIXP
15200    and its calculated value VAL.  */
15201
15202 static void
15203 fix_validate_branch (fixS *fixP, valueT val)
15204 {
15205   if (fixP->fx_done && (val & 0x3) != 0)
15206     as_bad_where (fixP->fx_file, fixP->fx_line,
15207                   _("branch to misaligned address (0x%lx)"),
15208                   (long) (val + md_pcrel_from (fixP)));
15209   else if (fix_bad_cross_mode_branch_p (fixP))
15210     as_bad_where (fixP->fx_file, fixP->fx_line,
15211                   _("branch to a symbol in another ISA mode"));
15212   else if (fix_bad_misaligned_branch_p (fixP))
15213     as_bad_where (fixP->fx_file, fixP->fx_line,
15214                   _("branch to misaligned address (0x%lx)"),
15215                   (long) (S_GET_VALUE (fixP->fx_addsy) + fixP->fx_offset));
15216   else if (HAVE_IN_PLACE_ADDENDS && (fixP->fx_offset & 0x3) != 0)
15217     as_bad_where (fixP->fx_file, fixP->fx_line,
15218                   _("cannot encode misaligned addend "
15219                     "in the relocatable field (0x%lx)"),
15220                   (long) fixP->fx_offset);
15221 }
15222
15223 /* Apply a fixup to the object file.  */
15224
15225 void
15226 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
15227 {
15228   char *buf;
15229   unsigned long insn;
15230   reloc_howto_type *howto;
15231
15232   if (fixP->fx_pcrel)
15233     switch (fixP->fx_r_type)
15234       {
15235       case BFD_RELOC_16_PCREL_S2:
15236       case BFD_RELOC_MIPS16_16_PCREL_S1:
15237       case BFD_RELOC_MICROMIPS_7_PCREL_S1:
15238       case BFD_RELOC_MICROMIPS_10_PCREL_S1:
15239       case BFD_RELOC_MICROMIPS_16_PCREL_S1:
15240       case BFD_RELOC_32_PCREL:
15241       case BFD_RELOC_MIPS_21_PCREL_S2:
15242       case BFD_RELOC_MIPS_26_PCREL_S2:
15243       case BFD_RELOC_MIPS_18_PCREL_S3:
15244       case BFD_RELOC_MIPS_19_PCREL_S2:
15245       case BFD_RELOC_HI16_S_PCREL:
15246       case BFD_RELOC_LO16_PCREL:
15247         break;
15248
15249       case BFD_RELOC_32:
15250         fixP->fx_r_type = BFD_RELOC_32_PCREL;
15251         break;
15252
15253       default:
15254         as_bad_where (fixP->fx_file, fixP->fx_line,
15255                       _("PC-relative reference to a different section"));
15256         break;
15257       }
15258
15259   /* Handle BFD_RELOC_8, since it's easy.  Punt on other bfd relocations
15260      that have no MIPS ELF equivalent.  */
15261   if (fixP->fx_r_type != BFD_RELOC_8)
15262     {
15263       howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
15264       if (!howto)
15265         return;
15266     }
15267
15268   gas_assert (fixP->fx_size == 2
15269               || fixP->fx_size == 4
15270               || fixP->fx_r_type == BFD_RELOC_8
15271               || fixP->fx_r_type == BFD_RELOC_16
15272               || fixP->fx_r_type == BFD_RELOC_64
15273               || fixP->fx_r_type == BFD_RELOC_CTOR
15274               || fixP->fx_r_type == BFD_RELOC_MIPS_SUB
15275               || fixP->fx_r_type == BFD_RELOC_MICROMIPS_SUB
15276               || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
15277               || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY
15278               || fixP->fx_r_type == BFD_RELOC_MIPS_TLS_DTPREL64
15279               || fixP->fx_r_type == BFD_RELOC_NONE);
15280
15281   buf = fixP->fx_frag->fr_literal + fixP->fx_where;
15282
15283   /* Don't treat parts of a composite relocation as done.  There are two
15284      reasons for this:
15285
15286      (1) The second and third parts will be against 0 (RSS_UNDEF) but
15287          should nevertheless be emitted if the first part is.
15288
15289      (2) In normal usage, composite relocations are never assembly-time
15290          constants.  The easiest way of dealing with the pathological
15291          exceptions is to generate a relocation against STN_UNDEF and
15292          leave everything up to the linker.  */
15293   if (fixP->fx_addsy == NULL && !fixP->fx_pcrel && fixP->fx_tcbit == 0)
15294     fixP->fx_done = 1;
15295
15296   switch (fixP->fx_r_type)
15297     {
15298     case BFD_RELOC_MIPS_TLS_GD:
15299     case BFD_RELOC_MIPS_TLS_LDM:
15300     case BFD_RELOC_MIPS_TLS_DTPREL32:
15301     case BFD_RELOC_MIPS_TLS_DTPREL64:
15302     case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
15303     case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
15304     case BFD_RELOC_MIPS_TLS_GOTTPREL:
15305     case BFD_RELOC_MIPS_TLS_TPREL32:
15306     case BFD_RELOC_MIPS_TLS_TPREL64:
15307     case BFD_RELOC_MIPS_TLS_TPREL_HI16:
15308     case BFD_RELOC_MIPS_TLS_TPREL_LO16:
15309     case BFD_RELOC_MICROMIPS_TLS_GD:
15310     case BFD_RELOC_MICROMIPS_TLS_LDM:
15311     case BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16:
15312     case BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16:
15313     case BFD_RELOC_MICROMIPS_TLS_GOTTPREL:
15314     case BFD_RELOC_MICROMIPS_TLS_TPREL_HI16:
15315     case BFD_RELOC_MICROMIPS_TLS_TPREL_LO16:
15316     case BFD_RELOC_MIPS16_TLS_GD:
15317     case BFD_RELOC_MIPS16_TLS_LDM:
15318     case BFD_RELOC_MIPS16_TLS_DTPREL_HI16:
15319     case BFD_RELOC_MIPS16_TLS_DTPREL_LO16:
15320     case BFD_RELOC_MIPS16_TLS_GOTTPREL:
15321     case BFD_RELOC_MIPS16_TLS_TPREL_HI16:
15322     case BFD_RELOC_MIPS16_TLS_TPREL_LO16:
15323       if (fixP->fx_addsy)
15324         S_SET_THREAD_LOCAL (fixP->fx_addsy);
15325       else
15326         as_bad_where (fixP->fx_file, fixP->fx_line,
15327                       _("TLS relocation against a constant"));
15328       break;
15329
15330     case BFD_RELOC_MIPS_JMP:
15331     case BFD_RELOC_MIPS16_JMP:
15332     case BFD_RELOC_MICROMIPS_JMP:
15333       {
15334         int shift;
15335
15336         gas_assert (!fixP->fx_done);
15337
15338         /* Shift is 2, unusually, for microMIPS JALX.  */
15339         if (fixP->fx_r_type == BFD_RELOC_MICROMIPS_JMP
15340             && (read_compressed_insn (buf, 4) >> 26) != 0x3c)
15341           shift = 1;
15342         else
15343           shift = 2;
15344
15345         if (fix_bad_cross_mode_jump_p (fixP))
15346           as_bad_where (fixP->fx_file, fixP->fx_line,
15347                         _("jump to a symbol in another ISA mode"));
15348         else if (fix_bad_same_mode_jalx_p (fixP))
15349           as_bad_where (fixP->fx_file, fixP->fx_line,
15350                         _("JALX to a symbol in the same ISA mode"));
15351         else if (fix_bad_misaligned_jump_p (fixP, shift))
15352           as_bad_where (fixP->fx_file, fixP->fx_line,
15353                         _("jump to misaligned address (0x%lx)"),
15354                         (long) (S_GET_VALUE (fixP->fx_addsy)
15355                                 + fixP->fx_offset));
15356         else if (HAVE_IN_PLACE_ADDENDS
15357                  && (fixP->fx_offset & ((1 << shift) - 1)) != 0)
15358           as_bad_where (fixP->fx_file, fixP->fx_line,
15359                         _("cannot encode misaligned addend "
15360                           "in the relocatable field (0x%lx)"),
15361                         (long) fixP->fx_offset);
15362       }
15363       /* Fall through.  */
15364
15365     case BFD_RELOC_MIPS_SHIFT5:
15366     case BFD_RELOC_MIPS_SHIFT6:
15367     case BFD_RELOC_MIPS_GOT_DISP:
15368     case BFD_RELOC_MIPS_GOT_PAGE:
15369     case BFD_RELOC_MIPS_GOT_OFST:
15370     case BFD_RELOC_MIPS_SUB:
15371     case BFD_RELOC_MIPS_INSERT_A:
15372     case BFD_RELOC_MIPS_INSERT_B:
15373     case BFD_RELOC_MIPS_DELETE:
15374     case BFD_RELOC_MIPS_HIGHEST:
15375     case BFD_RELOC_MIPS_HIGHER:
15376     case BFD_RELOC_MIPS_SCN_DISP:
15377     case BFD_RELOC_MIPS_REL16:
15378     case BFD_RELOC_MIPS_RELGOT:
15379     case BFD_RELOC_MIPS_JALR:
15380     case BFD_RELOC_HI16:
15381     case BFD_RELOC_HI16_S:
15382     case BFD_RELOC_LO16:
15383     case BFD_RELOC_GPREL16:
15384     case BFD_RELOC_MIPS_LITERAL:
15385     case BFD_RELOC_MIPS_CALL16:
15386     case BFD_RELOC_MIPS_GOT16:
15387     case BFD_RELOC_GPREL32:
15388     case BFD_RELOC_MIPS_GOT_HI16:
15389     case BFD_RELOC_MIPS_GOT_LO16:
15390     case BFD_RELOC_MIPS_CALL_HI16:
15391     case BFD_RELOC_MIPS_CALL_LO16:
15392     case BFD_RELOC_HI16_S_PCREL:
15393     case BFD_RELOC_LO16_PCREL:
15394     case BFD_RELOC_MIPS16_GPREL:
15395     case BFD_RELOC_MIPS16_GOT16:
15396     case BFD_RELOC_MIPS16_CALL16:
15397     case BFD_RELOC_MIPS16_HI16:
15398     case BFD_RELOC_MIPS16_HI16_S:
15399     case BFD_RELOC_MIPS16_LO16:
15400     case BFD_RELOC_MICROMIPS_GOT_DISP:
15401     case BFD_RELOC_MICROMIPS_GOT_PAGE:
15402     case BFD_RELOC_MICROMIPS_GOT_OFST:
15403     case BFD_RELOC_MICROMIPS_SUB:
15404     case BFD_RELOC_MICROMIPS_HIGHEST:
15405     case BFD_RELOC_MICROMIPS_HIGHER:
15406     case BFD_RELOC_MICROMIPS_SCN_DISP:
15407     case BFD_RELOC_MICROMIPS_JALR:
15408     case BFD_RELOC_MICROMIPS_HI16:
15409     case BFD_RELOC_MICROMIPS_HI16_S:
15410     case BFD_RELOC_MICROMIPS_LO16:
15411     case BFD_RELOC_MICROMIPS_GPREL16:
15412     case BFD_RELOC_MICROMIPS_LITERAL:
15413     case BFD_RELOC_MICROMIPS_CALL16:
15414     case BFD_RELOC_MICROMIPS_GOT16:
15415     case BFD_RELOC_MICROMIPS_GOT_HI16:
15416     case BFD_RELOC_MICROMIPS_GOT_LO16:
15417     case BFD_RELOC_MICROMIPS_CALL_HI16:
15418     case BFD_RELOC_MICROMIPS_CALL_LO16:
15419     case BFD_RELOC_MIPS_EH:
15420       if (fixP->fx_done)
15421         {
15422           offsetT value;
15423
15424           if (calculate_reloc (fixP->fx_r_type, *valP, &value))
15425             {
15426               insn = read_reloc_insn (buf, fixP->fx_r_type);
15427               if (mips16_reloc_p (fixP->fx_r_type))
15428                 insn |= mips16_immed_extend (value, 16);
15429               else
15430                 insn |= (value & 0xffff);
15431               write_reloc_insn (buf, fixP->fx_r_type, insn);
15432             }
15433           else
15434             as_bad_where (fixP->fx_file, fixP->fx_line,
15435                           _("unsupported constant in relocation"));
15436         }
15437       break;
15438
15439     case BFD_RELOC_64:
15440       /* This is handled like BFD_RELOC_32, but we output a sign
15441          extended value if we are only 32 bits.  */
15442       if (fixP->fx_done)
15443         {
15444           if (8 <= sizeof (valueT))
15445             md_number_to_chars (buf, *valP, 8);
15446           else
15447             {
15448               valueT hiv;
15449
15450               if ((*valP & 0x80000000) != 0)
15451                 hiv = 0xffffffff;
15452               else
15453                 hiv = 0;
15454               md_number_to_chars (buf + (target_big_endian ? 4 : 0), *valP, 4);
15455               md_number_to_chars (buf + (target_big_endian ? 0 : 4), hiv, 4);
15456             }
15457         }
15458       break;
15459
15460     case BFD_RELOC_RVA:
15461     case BFD_RELOC_32:
15462     case BFD_RELOC_32_PCREL:
15463     case BFD_RELOC_16:
15464     case BFD_RELOC_8:
15465       /* If we are deleting this reloc entry, we must fill in the
15466          value now.  This can happen if we have a .word which is not
15467          resolved when it appears but is later defined.  */
15468       if (fixP->fx_done)
15469         md_number_to_chars (buf, *valP, fixP->fx_size);
15470       break;
15471
15472     case BFD_RELOC_MIPS_21_PCREL_S2:
15473       fix_validate_branch (fixP, *valP);
15474       if (!fixP->fx_done)
15475         break;
15476
15477       if (*valP + 0x400000 <= 0x7fffff)
15478         {
15479           insn = read_insn (buf);
15480           insn |= (*valP >> 2) & 0x1fffff;
15481           write_insn (buf, insn);
15482         }
15483       else
15484         as_bad_where (fixP->fx_file, fixP->fx_line,
15485                       _("branch out of range"));
15486       break;
15487
15488     case BFD_RELOC_MIPS_26_PCREL_S2:
15489       fix_validate_branch (fixP, *valP);
15490       if (!fixP->fx_done)
15491         break;
15492
15493       if (*valP + 0x8000000 <= 0xfffffff)
15494         {
15495           insn = read_insn (buf);
15496           insn |= (*valP >> 2) & 0x3ffffff;
15497           write_insn (buf, insn);
15498         }
15499       else
15500         as_bad_where (fixP->fx_file, fixP->fx_line,
15501                       _("branch out of range"));
15502       break;
15503
15504     case BFD_RELOC_MIPS_18_PCREL_S3:
15505       if (fixP->fx_addsy && (S_GET_VALUE (fixP->fx_addsy) & 0x7) != 0)
15506         as_bad_where (fixP->fx_file, fixP->fx_line,
15507                       _("PC-relative access using misaligned symbol (%lx)"),
15508                       (long) S_GET_VALUE (fixP->fx_addsy));
15509       if ((fixP->fx_offset & 0x7) != 0)
15510         as_bad_where (fixP->fx_file, fixP->fx_line,
15511                       _("PC-relative access using misaligned offset (%lx)"),
15512                       (long) fixP->fx_offset);
15513       if (!fixP->fx_done)
15514         break;
15515
15516       if (*valP + 0x100000 <= 0x1fffff)
15517         {
15518           insn = read_insn (buf);
15519           insn |= (*valP >> 3) & 0x3ffff;
15520           write_insn (buf, insn);
15521         }
15522       else
15523         as_bad_where (fixP->fx_file, fixP->fx_line,
15524                       _("PC-relative access out of range"));
15525       break;
15526
15527     case BFD_RELOC_MIPS_19_PCREL_S2:
15528       if ((*valP & 0x3) != 0)
15529         as_bad_where (fixP->fx_file, fixP->fx_line,
15530                       _("PC-relative access to misaligned address (%lx)"),
15531                       (long) *valP);
15532       if (!fixP->fx_done)
15533         break;
15534
15535       if (*valP + 0x100000 <= 0x1fffff)
15536         {
15537           insn = read_insn (buf);
15538           insn |= (*valP >> 2) & 0x7ffff;
15539           write_insn (buf, insn);
15540         }
15541       else
15542         as_bad_where (fixP->fx_file, fixP->fx_line,
15543                       _("PC-relative access out of range"));
15544       break;
15545
15546     case BFD_RELOC_16_PCREL_S2:
15547       fix_validate_branch (fixP, *valP);
15548
15549       /* We need to save the bits in the instruction since fixup_segment()
15550          might be deleting the relocation entry (i.e., a branch within
15551          the current segment).  */
15552       if (! fixP->fx_done)
15553         break;
15554
15555       /* Update old instruction data.  */
15556       insn = read_insn (buf);
15557
15558       if (*valP + 0x20000 <= 0x3ffff)
15559         {
15560           insn |= (*valP >> 2) & 0xffff;
15561           write_insn (buf, insn);
15562         }
15563       else if (mips_pic == NO_PIC
15564                && fixP->fx_done
15565                && fixP->fx_frag->fr_address >= text_section->vma
15566                && (fixP->fx_frag->fr_address
15567                    < text_section->vma + bfd_get_section_size (text_section))
15568                && ((insn & 0xffff0000) == 0x10000000     /* beq $0,$0 */
15569                    || (insn & 0xffff0000) == 0x04010000  /* bgez $0 */
15570                    || (insn & 0xffff0000) == 0x04110000)) /* bgezal $0 */
15571         {
15572           /* The branch offset is too large.  If this is an
15573              unconditional branch, and we are not generating PIC code,
15574              we can convert it to an absolute jump instruction.  */
15575           if ((insn & 0xffff0000) == 0x04110000)         /* bgezal $0 */
15576             insn = 0x0c000000;  /* jal */
15577           else
15578             insn = 0x08000000;  /* j */
15579           fixP->fx_r_type = BFD_RELOC_MIPS_JMP;
15580           fixP->fx_done = 0;
15581           fixP->fx_addsy = section_symbol (text_section);
15582           *valP += md_pcrel_from (fixP);
15583           write_insn (buf, insn);
15584         }
15585       else
15586         {
15587           /* If we got here, we have branch-relaxation disabled,
15588              and there's nothing we can do to fix this instruction
15589              without turning it into a longer sequence.  */
15590           as_bad_where (fixP->fx_file, fixP->fx_line,
15591                         _("branch out of range"));
15592         }
15593       break;
15594
15595     case BFD_RELOC_MIPS16_16_PCREL_S1:
15596     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
15597     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
15598     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
15599       gas_assert (!fixP->fx_done);
15600       if (fix_bad_cross_mode_branch_p (fixP))
15601         as_bad_where (fixP->fx_file, fixP->fx_line,
15602                       _("branch to a symbol in another ISA mode"));
15603       else if (fixP->fx_addsy
15604                && !S_FORCE_RELOC (fixP->fx_addsy, TRUE)
15605                && !bfd_is_abs_section (S_GET_SEGMENT (fixP->fx_addsy))
15606                && (fixP->fx_offset & 0x1) != 0)
15607         as_bad_where (fixP->fx_file, fixP->fx_line,
15608                       _("branch to misaligned address (0x%lx)"),
15609                       (long) (S_GET_VALUE (fixP->fx_addsy) + fixP->fx_offset));
15610       else if (HAVE_IN_PLACE_ADDENDS && (fixP->fx_offset & 0x1) != 0)
15611         as_bad_where (fixP->fx_file, fixP->fx_line,
15612                       _("cannot encode misaligned addend "
15613                         "in the relocatable field (0x%lx)"),
15614                       (long) fixP->fx_offset);
15615       break;
15616
15617     case BFD_RELOC_VTABLE_INHERIT:
15618       fixP->fx_done = 0;
15619       if (fixP->fx_addsy
15620           && !S_IS_DEFINED (fixP->fx_addsy)
15621           && !S_IS_WEAK (fixP->fx_addsy))
15622         S_SET_WEAK (fixP->fx_addsy);
15623       break;
15624
15625     case BFD_RELOC_NONE:
15626     case BFD_RELOC_VTABLE_ENTRY:
15627       fixP->fx_done = 0;
15628       break;
15629
15630     default:
15631       abort ();
15632     }
15633
15634   /* Remember value for tc_gen_reloc.  */
15635   fixP->fx_addnumber = *valP;
15636 }
15637
15638 static symbolS *
15639 get_symbol (void)
15640 {
15641   int c;
15642   char *name;
15643   symbolS *p;
15644
15645   c = get_symbol_name (&name);
15646   p = (symbolS *) symbol_find_or_make (name);
15647   (void) restore_line_pointer (c);
15648   return p;
15649 }
15650
15651 /* Align the current frag to a given power of two.  If a particular
15652    fill byte should be used, FILL points to an integer that contains
15653    that byte, otherwise FILL is null.
15654
15655    This function used to have the comment:
15656
15657       The MIPS assembler also automatically adjusts any preceding label.
15658
15659    The implementation therefore applied the adjustment to a maximum of
15660    one label.  However, other label adjustments are applied to batches
15661    of labels, and adjusting just one caused problems when new labels
15662    were added for the sake of debugging or unwind information.
15663    We therefore adjust all preceding labels (given as LABELS) instead.  */
15664
15665 static void
15666 mips_align (int to, int *fill, struct insn_label_list *labels)
15667 {
15668   mips_emit_delays ();
15669   mips_record_compressed_mode ();
15670   if (fill == NULL && subseg_text_p (now_seg))
15671     frag_align_code (to, 0);
15672   else
15673     frag_align (to, fill ? *fill : 0, 0);
15674   record_alignment (now_seg, to);
15675   mips_move_labels (labels, FALSE);
15676 }
15677
15678 /* Align to a given power of two.  .align 0 turns off the automatic
15679    alignment used by the data creating pseudo-ops.  */
15680
15681 static void
15682 s_align (int x ATTRIBUTE_UNUSED)
15683 {
15684   int temp, fill_value, *fill_ptr;
15685   long max_alignment = 28;
15686
15687   /* o Note that the assembler pulls down any immediately preceding label
15688        to the aligned address.
15689      o It's not documented but auto alignment is reinstated by
15690        a .align pseudo instruction.
15691      o Note also that after auto alignment is turned off the mips assembler
15692        issues an error on attempt to assemble an improperly aligned data item.
15693        We don't.  */
15694
15695   temp = get_absolute_expression ();
15696   if (temp > max_alignment)
15697     as_bad (_("alignment too large, %d assumed"), temp = max_alignment);
15698   else if (temp < 0)
15699     {
15700       as_warn (_("alignment negative, 0 assumed"));
15701       temp = 0;
15702     }
15703   if (*input_line_pointer == ',')
15704     {
15705       ++input_line_pointer;
15706       fill_value = get_absolute_expression ();
15707       fill_ptr = &fill_value;
15708     }
15709   else
15710     fill_ptr = 0;
15711   if (temp)
15712     {
15713       segment_info_type *si = seg_info (now_seg);
15714       struct insn_label_list *l = si->label_list;
15715       /* Auto alignment should be switched on by next section change.  */
15716       auto_align = 1;
15717       mips_align (temp, fill_ptr, l);
15718     }
15719   else
15720     {
15721       auto_align = 0;
15722     }
15723
15724   demand_empty_rest_of_line ();
15725 }
15726
15727 static void
15728 s_change_sec (int sec)
15729 {
15730   segT seg;
15731
15732   /* The ELF backend needs to know that we are changing sections, so
15733      that .previous works correctly.  We could do something like check
15734      for an obj_section_change_hook macro, but that might be confusing
15735      as it would not be appropriate to use it in the section changing
15736      functions in read.c, since obj-elf.c intercepts those.  FIXME:
15737      This should be cleaner, somehow.  */
15738   obj_elf_section_change_hook ();
15739
15740   mips_emit_delays ();
15741
15742   switch (sec)
15743     {
15744     case 't':
15745       s_text (0);
15746       break;
15747     case 'd':
15748       s_data (0);
15749       break;
15750     case 'b':
15751       subseg_set (bss_section, (subsegT) get_absolute_expression ());
15752       demand_empty_rest_of_line ();
15753       break;
15754
15755     case 'r':
15756       seg = subseg_new (RDATA_SECTION_NAME,
15757                         (subsegT) get_absolute_expression ());
15758       bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
15759                                               | SEC_READONLY | SEC_RELOC
15760                                               | SEC_DATA));
15761       if (strncmp (TARGET_OS, "elf", 3) != 0)
15762         record_alignment (seg, 4);
15763       demand_empty_rest_of_line ();
15764       break;
15765
15766     case 's':
15767       seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
15768       bfd_set_section_flags (stdoutput, seg,
15769                              SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
15770       if (strncmp (TARGET_OS, "elf", 3) != 0)
15771         record_alignment (seg, 4);
15772       demand_empty_rest_of_line ();
15773       break;
15774
15775     case 'B':
15776       seg = subseg_new (".sbss", (subsegT) get_absolute_expression ());
15777       bfd_set_section_flags (stdoutput, seg, SEC_ALLOC);
15778       if (strncmp (TARGET_OS, "elf", 3) != 0)
15779         record_alignment (seg, 4);
15780       demand_empty_rest_of_line ();
15781       break;
15782     }
15783
15784   auto_align = 1;
15785 }
15786
15787 void
15788 s_change_section (int ignore ATTRIBUTE_UNUSED)
15789 {
15790   char *saved_ilp;
15791   char *section_name;
15792   char c, endc;
15793   char next_c = 0;
15794   int section_type;
15795   int section_flag;
15796   int section_entry_size;
15797   int section_alignment;
15798
15799   saved_ilp = input_line_pointer;
15800   endc = get_symbol_name (&section_name);
15801   c = (endc == '"' ? input_line_pointer[1] : endc);
15802   if (c)
15803     next_c = input_line_pointer [(endc == '"' ? 2 : 1)];
15804
15805   /* Do we have .section Name<,"flags">?  */
15806   if (c != ',' || (c == ',' && next_c == '"'))
15807     {
15808       /* Just after name is now '\0'.  */
15809       (void) restore_line_pointer (endc);
15810       input_line_pointer = saved_ilp;
15811       obj_elf_section (ignore);
15812       return;
15813     }
15814
15815   section_name = xstrdup (section_name);
15816   c = restore_line_pointer (endc);
15817
15818   input_line_pointer++;
15819
15820   /* Do we have .section Name<,type><,flag><,entry_size><,alignment>  */
15821   if (c == ',')
15822     section_type = get_absolute_expression ();
15823   else
15824     section_type = 0;
15825
15826   if (*input_line_pointer++ == ',')
15827     section_flag = get_absolute_expression ();
15828   else
15829     section_flag = 0;
15830
15831   if (*input_line_pointer++ == ',')
15832     section_entry_size = get_absolute_expression ();
15833   else
15834     section_entry_size = 0;
15835
15836   if (*input_line_pointer++ == ',')
15837     section_alignment = get_absolute_expression ();
15838   else
15839     section_alignment = 0;
15840
15841   /* FIXME: really ignore?  */
15842   (void) section_alignment;
15843
15844   /* When using the generic form of .section (as implemented by obj-elf.c),
15845      there's no way to set the section type to SHT_MIPS_DWARF.  Users have
15846      traditionally had to fall back on the more common @progbits instead.
15847
15848      There's nothing really harmful in this, since bfd will correct
15849      SHT_PROGBITS to SHT_MIPS_DWARF before writing out the file.  But it
15850      means that, for backwards compatibility, the special_section entries
15851      for dwarf sections must use SHT_PROGBITS rather than SHT_MIPS_DWARF.
15852
15853      Even so, we shouldn't force users of the MIPS .section syntax to
15854      incorrectly label the sections as SHT_PROGBITS.  The best compromise
15855      seems to be to map SHT_MIPS_DWARF to SHT_PROGBITS before calling the
15856      generic type-checking code.  */
15857   if (section_type == SHT_MIPS_DWARF)
15858     section_type = SHT_PROGBITS;
15859
15860   obj_elf_change_section (section_name, section_type, section_flag,
15861                           section_entry_size, 0, 0, 0);
15862
15863   if (now_seg->name != section_name)
15864     free (section_name);
15865 }
15866
15867 void
15868 mips_enable_auto_align (void)
15869 {
15870   auto_align = 1;
15871 }
15872
15873 static void
15874 s_cons (int log_size)
15875 {
15876   segment_info_type *si = seg_info (now_seg);
15877   struct insn_label_list *l = si->label_list;
15878
15879   mips_emit_delays ();
15880   if (log_size > 0 && auto_align)
15881     mips_align (log_size, 0, l);
15882   cons (1 << log_size);
15883   mips_clear_insn_labels ();
15884 }
15885
15886 static void
15887 s_float_cons (int type)
15888 {
15889   segment_info_type *si = seg_info (now_seg);
15890   struct insn_label_list *l = si->label_list;
15891
15892   mips_emit_delays ();
15893
15894   if (auto_align)
15895     {
15896       if (type == 'd')
15897         mips_align (3, 0, l);
15898       else
15899         mips_align (2, 0, l);
15900     }
15901
15902   float_cons (type);
15903   mips_clear_insn_labels ();
15904 }
15905
15906 /* Handle .globl.  We need to override it because on Irix 5 you are
15907    permitted to say
15908        .globl foo .text
15909    where foo is an undefined symbol, to mean that foo should be
15910    considered to be the address of a function.  */
15911
15912 static void
15913 s_mips_globl (int x ATTRIBUTE_UNUSED)
15914 {
15915   char *name;
15916   int c;
15917   symbolS *symbolP;
15918   flagword flag;
15919
15920   do
15921     {
15922       c = get_symbol_name (&name);
15923       symbolP = symbol_find_or_make (name);
15924       S_SET_EXTERNAL (symbolP);
15925
15926       *input_line_pointer = c;
15927       SKIP_WHITESPACE_AFTER_NAME ();
15928
15929       /* On Irix 5, every global symbol that is not explicitly labelled as
15930          being a function is apparently labelled as being an object.  */
15931       flag = BSF_OBJECT;
15932
15933       if (!is_end_of_line[(unsigned char) *input_line_pointer]
15934           && (*input_line_pointer != ','))
15935         {
15936           char *secname;
15937           asection *sec;
15938
15939           c = get_symbol_name (&secname);
15940           sec = bfd_get_section_by_name (stdoutput, secname);
15941           if (sec == NULL)
15942             as_bad (_("%s: no such section"), secname);
15943           (void) restore_line_pointer (c);
15944
15945           if (sec != NULL && (sec->flags & SEC_CODE) != 0)
15946             flag = BSF_FUNCTION;
15947         }
15948
15949       symbol_get_bfdsym (symbolP)->flags |= flag;
15950
15951       c = *input_line_pointer;
15952       if (c == ',')
15953         {
15954           input_line_pointer++;
15955           SKIP_WHITESPACE ();
15956           if (is_end_of_line[(unsigned char) *input_line_pointer])
15957             c = '\n';
15958         }
15959     }
15960   while (c == ',');
15961
15962   demand_empty_rest_of_line ();
15963 }
15964
15965 static void
15966 s_option (int x ATTRIBUTE_UNUSED)
15967 {
15968   char *opt;
15969   char c;
15970
15971   c = get_symbol_name (&opt);
15972
15973   if (*opt == 'O')
15974     {
15975       /* FIXME: What does this mean?  */
15976     }
15977   else if (strncmp (opt, "pic", 3) == 0 && ISDIGIT (opt[3]) && opt[4] == '\0')
15978     {
15979       int i;
15980
15981       i = atoi (opt + 3);
15982       if (i != 0 && i != 2)
15983         as_bad (_(".option pic%d not supported"), i);
15984       else if (mips_pic == VXWORKS_PIC)
15985         as_bad (_(".option pic%d not supported in VxWorks PIC mode"), i);
15986       else if (i == 0)
15987         mips_pic = NO_PIC;
15988       else if (i == 2)
15989         {
15990           mips_pic = SVR4_PIC;
15991           mips_abicalls = TRUE;
15992         }
15993
15994       if (mips_pic == SVR4_PIC)
15995         {
15996           if (g_switch_seen && g_switch_value != 0)
15997             as_warn (_("-G may not be used with SVR4 PIC code"));
15998           g_switch_value = 0;
15999           bfd_set_gp_size (stdoutput, 0);
16000         }
16001     }
16002   else
16003     as_warn (_("unrecognized option \"%s\""), opt);
16004
16005   (void) restore_line_pointer (c);
16006   demand_empty_rest_of_line ();
16007 }
16008
16009 /* This structure is used to hold a stack of .set values.  */
16010
16011 struct mips_option_stack
16012 {
16013   struct mips_option_stack *next;
16014   struct mips_set_options options;
16015 };
16016
16017 static struct mips_option_stack *mips_opts_stack;
16018
16019 /* Return status for .set/.module option handling.  */
16020
16021 enum code_option_type
16022 {
16023   /* Unrecognized option.  */
16024   OPTION_TYPE_BAD = -1,
16025
16026   /* Ordinary option.  */
16027   OPTION_TYPE_NORMAL,
16028
16029   /* ISA changing option.  */
16030   OPTION_TYPE_ISA
16031 };
16032
16033 /* Handle common .set/.module options.  Return status indicating option
16034    type.  */
16035
16036 static enum code_option_type
16037 parse_code_option (char * name)
16038 {
16039   bfd_boolean isa_set = FALSE;
16040   const struct mips_ase *ase;
16041
16042   if (strncmp (name, "at=", 3) == 0)
16043     {
16044       char *s = name + 3;
16045
16046       if (!reg_lookup (&s, RTYPE_NUM | RTYPE_GP, &mips_opts.at))
16047         as_bad (_("unrecognized register name `%s'"), s);
16048     }
16049   else if (strcmp (name, "at") == 0)
16050     mips_opts.at = ATREG;
16051   else if (strcmp (name, "noat") == 0)
16052     mips_opts.at = ZERO;
16053   else if (strcmp (name, "move") == 0 || strcmp (name, "novolatile") == 0)
16054     mips_opts.nomove = 0;
16055   else if (strcmp (name, "nomove") == 0 || strcmp (name, "volatile") == 0)
16056     mips_opts.nomove = 1;
16057   else if (strcmp (name, "bopt") == 0)
16058     mips_opts.nobopt = 0;
16059   else if (strcmp (name, "nobopt") == 0)
16060     mips_opts.nobopt = 1;
16061   else if (strcmp (name, "gp=32") == 0)
16062     mips_opts.gp = 32;
16063   else if (strcmp (name, "gp=64") == 0)
16064     mips_opts.gp = 64;
16065   else if (strcmp (name, "fp=32") == 0)
16066     mips_opts.fp = 32;
16067   else if (strcmp (name, "fp=xx") == 0)
16068     mips_opts.fp = 0;
16069   else if (strcmp (name, "fp=64") == 0)
16070     mips_opts.fp = 64;
16071   else if (strcmp (name, "softfloat") == 0)
16072     mips_opts.soft_float = 1;
16073   else if (strcmp (name, "hardfloat") == 0)
16074     mips_opts.soft_float = 0;
16075   else if (strcmp (name, "singlefloat") == 0)
16076     mips_opts.single_float = 1;
16077   else if (strcmp (name, "doublefloat") == 0)
16078     mips_opts.single_float = 0;
16079   else if (strcmp (name, "nooddspreg") == 0)
16080     mips_opts.oddspreg = 0;
16081   else if (strcmp (name, "oddspreg") == 0)
16082     mips_opts.oddspreg = 1;
16083   else if (strcmp (name, "mips16") == 0
16084            || strcmp (name, "MIPS-16") == 0)
16085     mips_opts.mips16 = 1;
16086   else if (strcmp (name, "nomips16") == 0
16087            || strcmp (name, "noMIPS-16") == 0)
16088     mips_opts.mips16 = 0;
16089   else if (strcmp (name, "micromips") == 0)
16090     mips_opts.micromips = 1;
16091   else if (strcmp (name, "nomicromips") == 0)
16092     mips_opts.micromips = 0;
16093   else if (name[0] == 'n'
16094            && name[1] == 'o'
16095            && (ase = mips_lookup_ase (name + 2)))
16096     mips_set_ase (ase, &mips_opts, FALSE);
16097   else if ((ase = mips_lookup_ase (name)))
16098     mips_set_ase (ase, &mips_opts, TRUE);
16099   else if (strncmp (name, "mips", 4) == 0 || strncmp (name, "arch=", 5) == 0)
16100     {
16101       /* Permit the user to change the ISA and architecture on the fly.
16102          Needless to say, misuse can cause serious problems.  */
16103       if (strncmp (name, "arch=", 5) == 0)
16104         {
16105           const struct mips_cpu_info *p;
16106
16107           p = mips_parse_cpu ("internal use", name + 5);
16108           if (!p)
16109             as_bad (_("unknown architecture %s"), name + 5);
16110           else
16111             {
16112               mips_opts.arch = p->cpu;
16113               mips_opts.isa = p->isa;
16114               isa_set = TRUE;
16115             }
16116         }
16117       else if (strncmp (name, "mips", 4) == 0)
16118         {
16119           const struct mips_cpu_info *p;
16120
16121           p = mips_parse_cpu ("internal use", name);
16122           if (!p)
16123             as_bad (_("unknown ISA level %s"), name + 4);
16124           else
16125             {
16126               mips_opts.arch = p->cpu;
16127               mips_opts.isa = p->isa;
16128               isa_set = TRUE;
16129             }
16130         }
16131       else
16132         as_bad (_("unknown ISA or architecture %s"), name);
16133     }
16134   else if (strcmp (name, "autoextend") == 0)
16135     mips_opts.noautoextend = 0;
16136   else if (strcmp (name, "noautoextend") == 0)
16137     mips_opts.noautoextend = 1;
16138   else if (strcmp (name, "insn32") == 0)
16139     mips_opts.insn32 = TRUE;
16140   else if (strcmp (name, "noinsn32") == 0)
16141     mips_opts.insn32 = FALSE;
16142   else if (strcmp (name, "sym32") == 0)
16143     mips_opts.sym32 = TRUE;
16144   else if (strcmp (name, "nosym32") == 0)
16145     mips_opts.sym32 = FALSE;
16146   else
16147     return OPTION_TYPE_BAD;
16148
16149   return isa_set ? OPTION_TYPE_ISA : OPTION_TYPE_NORMAL;
16150 }
16151
16152 /* Handle the .set pseudo-op.  */
16153
16154 static void
16155 s_mipsset (int x ATTRIBUTE_UNUSED)
16156 {
16157   enum code_option_type type = OPTION_TYPE_NORMAL;
16158   char *name = input_line_pointer, ch;
16159
16160   file_mips_check_options ();
16161
16162   while (!is_end_of_line[(unsigned char) *input_line_pointer])
16163     ++input_line_pointer;
16164   ch = *input_line_pointer;
16165   *input_line_pointer = '\0';
16166
16167   if (strchr (name, ','))
16168     {
16169       /* Generic ".set" directive; use the generic handler.  */
16170       *input_line_pointer = ch;
16171       input_line_pointer = name;
16172       s_set (0);
16173       return;
16174     }
16175
16176   if (strcmp (name, "reorder") == 0)
16177     {
16178       if (mips_opts.noreorder)
16179         end_noreorder ();
16180     }
16181   else if (strcmp (name, "noreorder") == 0)
16182     {
16183       if (!mips_opts.noreorder)
16184         start_noreorder ();
16185     }
16186   else if (strcmp (name, "macro") == 0)
16187     mips_opts.warn_about_macros = 0;
16188   else if (strcmp (name, "nomacro") == 0)
16189     {
16190       if (mips_opts.noreorder == 0)
16191         as_bad (_("`noreorder' must be set before `nomacro'"));
16192       mips_opts.warn_about_macros = 1;
16193     }
16194   else if (strcmp (name, "gp=default") == 0)
16195     mips_opts.gp = file_mips_opts.gp;
16196   else if (strcmp (name, "fp=default") == 0)
16197     mips_opts.fp = file_mips_opts.fp;
16198   else if (strcmp (name, "mips0") == 0 || strcmp (name, "arch=default") == 0)
16199     {
16200       mips_opts.isa = file_mips_opts.isa;
16201       mips_opts.arch = file_mips_opts.arch;
16202       mips_opts.gp = file_mips_opts.gp;
16203       mips_opts.fp = file_mips_opts.fp;
16204     }
16205   else if (strcmp (name, "push") == 0)
16206     {
16207       struct mips_option_stack *s;
16208
16209       s = XNEW (struct mips_option_stack);
16210       s->next = mips_opts_stack;
16211       s->options = mips_opts;
16212       mips_opts_stack = s;
16213     }
16214   else if (strcmp (name, "pop") == 0)
16215     {
16216       struct mips_option_stack *s;
16217
16218       s = mips_opts_stack;
16219       if (s == NULL)
16220         as_bad (_(".set pop with no .set push"));
16221       else
16222         {
16223           /* If we're changing the reorder mode we need to handle
16224              delay slots correctly.  */
16225           if (s->options.noreorder && ! mips_opts.noreorder)
16226             start_noreorder ();
16227           else if (! s->options.noreorder && mips_opts.noreorder)
16228             end_noreorder ();
16229
16230           mips_opts = s->options;
16231           mips_opts_stack = s->next;
16232           free (s);
16233         }
16234     }
16235   else
16236     {
16237       type = parse_code_option (name);
16238       if (type == OPTION_TYPE_BAD)
16239         as_warn (_("tried to set unrecognized symbol: %s\n"), name);
16240     }
16241
16242   /* The use of .set [arch|cpu]= historically 'fixes' the width of gp and fp
16243      registers based on what is supported by the arch/cpu.  */
16244   if (type == OPTION_TYPE_ISA)
16245     {
16246       switch (mips_opts.isa)
16247         {
16248         case 0:
16249           break;
16250         case ISA_MIPS1:
16251           /* MIPS I cannot support FPXX.  */
16252           mips_opts.fp = 32;
16253           /* fall-through.  */
16254         case ISA_MIPS2:
16255         case ISA_MIPS32:
16256         case ISA_MIPS32R2:
16257         case ISA_MIPS32R3:
16258         case ISA_MIPS32R5:
16259           mips_opts.gp = 32;
16260           if (mips_opts.fp != 0)
16261             mips_opts.fp = 32;
16262           break;
16263         case ISA_MIPS32R6:
16264           mips_opts.gp = 32;
16265           mips_opts.fp = 64;
16266           break;
16267         case ISA_MIPS3:
16268         case ISA_MIPS4:
16269         case ISA_MIPS5:
16270         case ISA_MIPS64:
16271         case ISA_MIPS64R2:
16272         case ISA_MIPS64R3:
16273         case ISA_MIPS64R5:
16274         case ISA_MIPS64R6:
16275           mips_opts.gp = 64;
16276           if (mips_opts.fp != 0)
16277             {
16278               if (mips_opts.arch == CPU_R5900)
16279                 mips_opts.fp = 32;
16280               else
16281                 mips_opts.fp = 64;
16282             }
16283           break;
16284         default:
16285           as_bad (_("unknown ISA level %s"), name + 4);
16286           break;
16287         }
16288     }
16289
16290   mips_check_options (&mips_opts, FALSE);
16291
16292   mips_check_isa_supports_ases ();
16293   *input_line_pointer = ch;
16294   demand_empty_rest_of_line ();
16295 }
16296
16297 /* Handle the .module pseudo-op.  */
16298
16299 static void
16300 s_module (int ignore ATTRIBUTE_UNUSED)
16301 {
16302   char *name = input_line_pointer, ch;
16303
16304   while (!is_end_of_line[(unsigned char) *input_line_pointer])
16305     ++input_line_pointer;
16306   ch = *input_line_pointer;
16307   *input_line_pointer = '\0';
16308
16309   if (!file_mips_opts_checked)
16310     {
16311       if (parse_code_option (name) == OPTION_TYPE_BAD)
16312         as_bad (_(".module used with unrecognized symbol: %s\n"), name);
16313
16314       /* Update module level settings from mips_opts.  */
16315       file_mips_opts = mips_opts;
16316     }
16317   else
16318     as_bad (_(".module is not permitted after generating code"));
16319
16320   *input_line_pointer = ch;
16321   demand_empty_rest_of_line ();
16322 }
16323
16324 /* Handle the .abicalls pseudo-op.  I believe this is equivalent to
16325    .option pic2.  It means to generate SVR4 PIC calls.  */
16326
16327 static void
16328 s_abicalls (int ignore ATTRIBUTE_UNUSED)
16329 {
16330   mips_pic = SVR4_PIC;
16331   mips_abicalls = TRUE;
16332
16333   if (g_switch_seen && g_switch_value != 0)
16334     as_warn (_("-G may not be used with SVR4 PIC code"));
16335   g_switch_value = 0;
16336
16337   bfd_set_gp_size (stdoutput, 0);
16338   demand_empty_rest_of_line ();
16339 }
16340
16341 /* Handle the .cpload pseudo-op.  This is used when generating SVR4
16342    PIC code.  It sets the $gp register for the function based on the
16343    function address, which is in the register named in the argument.
16344    This uses a relocation against _gp_disp, which is handled specially
16345    by the linker.  The result is:
16346         lui     $gp,%hi(_gp_disp)
16347         addiu   $gp,$gp,%lo(_gp_disp)
16348         addu    $gp,$gp,.cpload argument
16349    The .cpload argument is normally $25 == $t9.
16350
16351    The -mno-shared option changes this to:
16352         lui     $gp,%hi(__gnu_local_gp)
16353         addiu   $gp,$gp,%lo(__gnu_local_gp)
16354    and the argument is ignored.  This saves an instruction, but the
16355    resulting code is not position independent; it uses an absolute
16356    address for __gnu_local_gp.  Thus code assembled with -mno-shared
16357    can go into an ordinary executable, but not into a shared library.  */
16358
16359 static void
16360 s_cpload (int ignore ATTRIBUTE_UNUSED)
16361 {
16362   expressionS ex;
16363   int reg;
16364   int in_shared;
16365
16366   file_mips_check_options ();
16367
16368   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
16369      .cpload is ignored.  */
16370   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
16371     {
16372       s_ignore (0);
16373       return;
16374     }
16375
16376   if (mips_opts.mips16)
16377     {
16378       as_bad (_("%s not supported in MIPS16 mode"), ".cpload");
16379       ignore_rest_of_line ();
16380       return;
16381     }
16382
16383   /* .cpload should be in a .set noreorder section.  */
16384   if (mips_opts.noreorder == 0)
16385     as_warn (_(".cpload not in noreorder section"));
16386
16387   reg = tc_get_register (0);
16388
16389   /* If we need to produce a 64-bit address, we are better off using
16390      the default instruction sequence.  */
16391   in_shared = mips_in_shared || HAVE_64BIT_SYMBOLS;
16392
16393   ex.X_op = O_symbol;
16394   ex.X_add_symbol = symbol_find_or_make (in_shared ? "_gp_disp" :
16395                                          "__gnu_local_gp");
16396   ex.X_op_symbol = NULL;
16397   ex.X_add_number = 0;
16398
16399   /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
16400   symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
16401
16402   mips_mark_labels ();
16403   mips_assembling_insn = TRUE;
16404
16405   macro_start ();
16406   macro_build_lui (&ex, mips_gp_register);
16407   macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
16408                mips_gp_register, BFD_RELOC_LO16);
16409   if (in_shared)
16410     macro_build (NULL, "addu", "d,v,t", mips_gp_register,
16411                  mips_gp_register, reg);
16412   macro_end ();
16413
16414   mips_assembling_insn = FALSE;
16415   demand_empty_rest_of_line ();
16416 }
16417
16418 /* Handle the .cpsetup pseudo-op defined for NewABI PIC code.  The syntax is:
16419      .cpsetup $reg1, offset|$reg2, label
16420
16421    If offset is given, this results in:
16422      sd         $gp, offset($sp)
16423      lui        $gp, %hi(%neg(%gp_rel(label)))
16424      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
16425      daddu      $gp, $gp, $reg1
16426
16427    If $reg2 is given, this results in:
16428      or         $reg2, $gp, $0
16429      lui        $gp, %hi(%neg(%gp_rel(label)))
16430      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
16431      daddu      $gp, $gp, $reg1
16432    $reg1 is normally $25 == $t9.
16433
16434    The -mno-shared option replaces the last three instructions with
16435         lui     $gp,%hi(_gp)
16436         addiu   $gp,$gp,%lo(_gp)  */
16437
16438 static void
16439 s_cpsetup (int ignore ATTRIBUTE_UNUSED)
16440 {
16441   expressionS ex_off;
16442   expressionS ex_sym;
16443   int reg1;
16444
16445   file_mips_check_options ();
16446
16447   /* If we are not generating SVR4 PIC code, .cpsetup is ignored.
16448      We also need NewABI support.  */
16449   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16450     {
16451       s_ignore (0);
16452       return;
16453     }
16454
16455   if (mips_opts.mips16)
16456     {
16457       as_bad (_("%s not supported in MIPS16 mode"), ".cpsetup");
16458       ignore_rest_of_line ();
16459       return;
16460     }
16461
16462   reg1 = tc_get_register (0);
16463   SKIP_WHITESPACE ();
16464   if (*input_line_pointer != ',')
16465     {
16466       as_bad (_("missing argument separator ',' for .cpsetup"));
16467       return;
16468     }
16469   else
16470     ++input_line_pointer;
16471   SKIP_WHITESPACE ();
16472   if (*input_line_pointer == '$')
16473     {
16474       mips_cpreturn_register = tc_get_register (0);
16475       mips_cpreturn_offset = -1;
16476     }
16477   else
16478     {
16479       mips_cpreturn_offset = get_absolute_expression ();
16480       mips_cpreturn_register = -1;
16481     }
16482   SKIP_WHITESPACE ();
16483   if (*input_line_pointer != ',')
16484     {
16485       as_bad (_("missing argument separator ',' for .cpsetup"));
16486       return;
16487     }
16488   else
16489     ++input_line_pointer;
16490   SKIP_WHITESPACE ();
16491   expression (&ex_sym);
16492
16493   mips_mark_labels ();
16494   mips_assembling_insn = TRUE;
16495
16496   macro_start ();
16497   if (mips_cpreturn_register == -1)
16498     {
16499       ex_off.X_op = O_constant;
16500       ex_off.X_add_symbol = NULL;
16501       ex_off.X_op_symbol = NULL;
16502       ex_off.X_add_number = mips_cpreturn_offset;
16503
16504       macro_build (&ex_off, "sd", "t,o(b)", mips_gp_register,
16505                    BFD_RELOC_LO16, SP);
16506     }
16507   else
16508     move_register (mips_cpreturn_register, mips_gp_register);
16509
16510   if (mips_in_shared || HAVE_64BIT_SYMBOLS)
16511     {
16512       macro_build (&ex_sym, "lui", LUI_FMT, mips_gp_register,
16513                    -1, BFD_RELOC_GPREL16, BFD_RELOC_MIPS_SUB,
16514                    BFD_RELOC_HI16_S);
16515
16516       macro_build (&ex_sym, "addiu", "t,r,j", mips_gp_register,
16517                    mips_gp_register, -1, BFD_RELOC_GPREL16,
16518                    BFD_RELOC_MIPS_SUB, BFD_RELOC_LO16);
16519
16520       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", mips_gp_register,
16521                    mips_gp_register, reg1);
16522     }
16523   else
16524     {
16525       expressionS ex;
16526
16527       ex.X_op = O_symbol;
16528       ex.X_add_symbol = symbol_find_or_make ("__gnu_local_gp");
16529       ex.X_op_symbol = NULL;
16530       ex.X_add_number = 0;
16531
16532       /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
16533       symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
16534
16535       macro_build_lui (&ex, mips_gp_register);
16536       macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
16537                    mips_gp_register, BFD_RELOC_LO16);
16538     }
16539
16540   macro_end ();
16541
16542   mips_assembling_insn = FALSE;
16543   demand_empty_rest_of_line ();
16544 }
16545
16546 static void
16547 s_cplocal (int ignore ATTRIBUTE_UNUSED)
16548 {
16549   file_mips_check_options ();
16550
16551   /* If we are not generating SVR4 PIC code, or if this is not NewABI code,
16552      .cplocal is ignored.  */
16553   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16554     {
16555       s_ignore (0);
16556       return;
16557     }
16558
16559   if (mips_opts.mips16)
16560     {
16561       as_bad (_("%s not supported in MIPS16 mode"), ".cplocal");
16562       ignore_rest_of_line ();
16563       return;
16564     }
16565
16566   mips_gp_register = tc_get_register (0);
16567   demand_empty_rest_of_line ();
16568 }
16569
16570 /* Handle the .cprestore pseudo-op.  This stores $gp into a given
16571    offset from $sp.  The offset is remembered, and after making a PIC
16572    call $gp is restored from that location.  */
16573
16574 static void
16575 s_cprestore (int ignore ATTRIBUTE_UNUSED)
16576 {
16577   expressionS ex;
16578
16579   file_mips_check_options ();
16580
16581   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
16582      .cprestore is ignored.  */
16583   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
16584     {
16585       s_ignore (0);
16586       return;
16587     }
16588
16589   if (mips_opts.mips16)
16590     {
16591       as_bad (_("%s not supported in MIPS16 mode"), ".cprestore");
16592       ignore_rest_of_line ();
16593       return;
16594     }
16595
16596   mips_cprestore_offset = get_absolute_expression ();
16597   mips_cprestore_valid = 1;
16598
16599   ex.X_op = O_constant;
16600   ex.X_add_symbol = NULL;
16601   ex.X_op_symbol = NULL;
16602   ex.X_add_number = mips_cprestore_offset;
16603
16604   mips_mark_labels ();
16605   mips_assembling_insn = TRUE;
16606
16607   macro_start ();
16608   macro_build_ldst_constoffset (&ex, ADDRESS_STORE_INSN, mips_gp_register,
16609                                 SP, HAVE_64BIT_ADDRESSES);
16610   macro_end ();
16611
16612   mips_assembling_insn = FALSE;
16613   demand_empty_rest_of_line ();
16614 }
16615
16616 /* Handle the .cpreturn pseudo-op defined for NewABI PIC code. If an offset
16617    was given in the preceding .cpsetup, it results in:
16618      ld         $gp, offset($sp)
16619
16620    If a register $reg2 was given there, it results in:
16621      or         $gp, $reg2, $0  */
16622
16623 static void
16624 s_cpreturn (int ignore ATTRIBUTE_UNUSED)
16625 {
16626   expressionS ex;
16627
16628   file_mips_check_options ();
16629
16630   /* If we are not generating SVR4 PIC code, .cpreturn is ignored.
16631      We also need NewABI support.  */
16632   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16633     {
16634       s_ignore (0);
16635       return;
16636     }
16637
16638   if (mips_opts.mips16)
16639     {
16640       as_bad (_("%s not supported in MIPS16 mode"), ".cpreturn");
16641       ignore_rest_of_line ();
16642       return;
16643     }
16644
16645   mips_mark_labels ();
16646   mips_assembling_insn = TRUE;
16647
16648   macro_start ();
16649   if (mips_cpreturn_register == -1)
16650     {
16651       ex.X_op = O_constant;
16652       ex.X_add_symbol = NULL;
16653       ex.X_op_symbol = NULL;
16654       ex.X_add_number = mips_cpreturn_offset;
16655
16656       macro_build (&ex, "ld", "t,o(b)", mips_gp_register, BFD_RELOC_LO16, SP);
16657     }
16658   else
16659     move_register (mips_gp_register, mips_cpreturn_register);
16660
16661   macro_end ();
16662
16663   mips_assembling_insn = FALSE;
16664   demand_empty_rest_of_line ();
16665 }
16666
16667 /* Handle a .dtprelword, .dtpreldword, .tprelword, or .tpreldword
16668    pseudo-op; DIRSTR says which. The pseudo-op generates a BYTES-size
16669    DTP- or TP-relative relocation of type RTYPE, for use in either DWARF
16670    debug information or MIPS16 TLS.  */
16671
16672 static void
16673 s_tls_rel_directive (const size_t bytes, const char *dirstr,
16674                      bfd_reloc_code_real_type rtype)
16675 {
16676   expressionS ex;
16677   char *p;
16678
16679   expression (&ex);
16680
16681   if (ex.X_op != O_symbol)
16682     {
16683       as_bad (_("unsupported use of %s"), dirstr);
16684       ignore_rest_of_line ();
16685     }
16686
16687   p = frag_more (bytes);
16688   md_number_to_chars (p, 0, bytes);
16689   fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE, rtype);
16690   demand_empty_rest_of_line ();
16691   mips_clear_insn_labels ();
16692 }
16693
16694 /* Handle .dtprelword.  */
16695
16696 static void
16697 s_dtprelword (int ignore ATTRIBUTE_UNUSED)
16698 {
16699   s_tls_rel_directive (4, ".dtprelword", BFD_RELOC_MIPS_TLS_DTPREL32);
16700 }
16701
16702 /* Handle .dtpreldword.  */
16703
16704 static void
16705 s_dtpreldword (int ignore ATTRIBUTE_UNUSED)
16706 {
16707   s_tls_rel_directive (8, ".dtpreldword", BFD_RELOC_MIPS_TLS_DTPREL64);
16708 }
16709
16710 /* Handle .tprelword.  */
16711
16712 static void
16713 s_tprelword (int ignore ATTRIBUTE_UNUSED)
16714 {
16715   s_tls_rel_directive (4, ".tprelword", BFD_RELOC_MIPS_TLS_TPREL32);
16716 }
16717
16718 /* Handle .tpreldword.  */
16719
16720 static void
16721 s_tpreldword (int ignore ATTRIBUTE_UNUSED)
16722 {
16723   s_tls_rel_directive (8, ".tpreldword", BFD_RELOC_MIPS_TLS_TPREL64);
16724 }
16725
16726 /* Handle the .gpvalue pseudo-op.  This is used when generating NewABI PIC
16727    code.  It sets the offset to use in gp_rel relocations.  */
16728
16729 static void
16730 s_gpvalue (int ignore ATTRIBUTE_UNUSED)
16731 {
16732   /* If we are not generating SVR4 PIC code, .gpvalue is ignored.
16733      We also need NewABI support.  */
16734   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16735     {
16736       s_ignore (0);
16737       return;
16738     }
16739
16740   mips_gprel_offset = get_absolute_expression ();
16741
16742   demand_empty_rest_of_line ();
16743 }
16744
16745 /* Handle the .gpword pseudo-op.  This is used when generating PIC
16746    code.  It generates a 32 bit GP relative reloc.  */
16747
16748 static void
16749 s_gpword (int ignore ATTRIBUTE_UNUSED)
16750 {
16751   segment_info_type *si;
16752   struct insn_label_list *l;
16753   expressionS ex;
16754   char *p;
16755
16756   /* When not generating PIC code, this is treated as .word.  */
16757   if (mips_pic != SVR4_PIC)
16758     {
16759       s_cons (2);
16760       return;
16761     }
16762
16763   si = seg_info (now_seg);
16764   l = si->label_list;
16765   mips_emit_delays ();
16766   if (auto_align)
16767     mips_align (2, 0, l);
16768
16769   expression (&ex);
16770   mips_clear_insn_labels ();
16771
16772   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16773     {
16774       as_bad (_("unsupported use of .gpword"));
16775       ignore_rest_of_line ();
16776     }
16777
16778   p = frag_more (4);
16779   md_number_to_chars (p, 0, 4);
16780   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16781                BFD_RELOC_GPREL32);
16782
16783   demand_empty_rest_of_line ();
16784 }
16785
16786 static void
16787 s_gpdword (int ignore ATTRIBUTE_UNUSED)
16788 {
16789   segment_info_type *si;
16790   struct insn_label_list *l;
16791   expressionS ex;
16792   char *p;
16793
16794   /* When not generating PIC code, this is treated as .dword.  */
16795   if (mips_pic != SVR4_PIC)
16796     {
16797       s_cons (3);
16798       return;
16799     }
16800
16801   si = seg_info (now_seg);
16802   l = si->label_list;
16803   mips_emit_delays ();
16804   if (auto_align)
16805     mips_align (3, 0, l);
16806
16807   expression (&ex);
16808   mips_clear_insn_labels ();
16809
16810   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16811     {
16812       as_bad (_("unsupported use of .gpdword"));
16813       ignore_rest_of_line ();
16814     }
16815
16816   p = frag_more (8);
16817   md_number_to_chars (p, 0, 8);
16818   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16819                BFD_RELOC_GPREL32)->fx_tcbit = 1;
16820
16821   /* GPREL32 composed with 64 gives a 64-bit GP offset.  */
16822   fix_new (frag_now, p - frag_now->fr_literal, 8, NULL, 0,
16823            FALSE, BFD_RELOC_64)->fx_tcbit = 1;
16824
16825   demand_empty_rest_of_line ();
16826 }
16827
16828 /* Handle the .ehword pseudo-op.  This is used when generating unwinding
16829    tables.  It generates a R_MIPS_EH reloc.  */
16830
16831 static void
16832 s_ehword (int ignore ATTRIBUTE_UNUSED)
16833 {
16834   expressionS ex;
16835   char *p;
16836
16837   mips_emit_delays ();
16838
16839   expression (&ex);
16840   mips_clear_insn_labels ();
16841
16842   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16843     {
16844       as_bad (_("unsupported use of .ehword"));
16845       ignore_rest_of_line ();
16846     }
16847
16848   p = frag_more (4);
16849   md_number_to_chars (p, 0, 4);
16850   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16851                BFD_RELOC_32_PCREL);
16852
16853   demand_empty_rest_of_line ();
16854 }
16855
16856 /* Handle the .cpadd pseudo-op.  This is used when dealing with switch
16857    tables in SVR4 PIC code.  */
16858
16859 static void
16860 s_cpadd (int ignore ATTRIBUTE_UNUSED)
16861 {
16862   int reg;
16863
16864   file_mips_check_options ();
16865
16866   /* This is ignored when not generating SVR4 PIC code.  */
16867   if (mips_pic != SVR4_PIC)
16868     {
16869       s_ignore (0);
16870       return;
16871     }
16872
16873   mips_mark_labels ();
16874   mips_assembling_insn = TRUE;
16875
16876   /* Add $gp to the register named as an argument.  */
16877   macro_start ();
16878   reg = tc_get_register (0);
16879   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", reg, reg, mips_gp_register);
16880   macro_end ();
16881
16882   mips_assembling_insn = FALSE;
16883   demand_empty_rest_of_line ();
16884 }
16885
16886 /* Handle the .insn pseudo-op.  This marks instruction labels in
16887    mips16/micromips mode.  This permits the linker to handle them specially,
16888    such as generating jalx instructions when needed.  We also make
16889    them odd for the duration of the assembly, in order to generate the
16890    right sort of code.  We will make them even in the adjust_symtab
16891    routine, while leaving them marked.  This is convenient for the
16892    debugger and the disassembler.  The linker knows to make them odd
16893    again.  */
16894
16895 static void
16896 s_insn (int ignore ATTRIBUTE_UNUSED)
16897 {
16898   file_mips_check_options ();
16899   file_ase_mips16 |= mips_opts.mips16;
16900   file_ase_micromips |= mips_opts.micromips;
16901
16902   mips_mark_labels ();
16903
16904   demand_empty_rest_of_line ();
16905 }
16906
16907 /* Handle the .nan pseudo-op.  */
16908
16909 static void
16910 s_nan (int ignore ATTRIBUTE_UNUSED)
16911 {
16912   static const char str_legacy[] = "legacy";
16913   static const char str_2008[] = "2008";
16914   size_t i;
16915
16916   for (i = 0; !is_end_of_line[(unsigned char) input_line_pointer[i]]; i++);
16917
16918   if (i == sizeof (str_2008) - 1
16919       && memcmp (input_line_pointer, str_2008, i) == 0)
16920     mips_nan2008 = 1;
16921   else if (i == sizeof (str_legacy) - 1
16922            && memcmp (input_line_pointer, str_legacy, i) == 0)
16923     {
16924       if (ISA_HAS_LEGACY_NAN (file_mips_opts.isa))
16925         mips_nan2008 = 0;
16926       else
16927         as_bad (_("`%s' does not support legacy NaN"),
16928                   mips_cpu_info_from_isa (file_mips_opts.isa)->name);
16929     }
16930   else
16931     as_bad (_("bad .nan directive"));
16932
16933   input_line_pointer += i;
16934   demand_empty_rest_of_line ();
16935 }
16936
16937 /* Handle a .stab[snd] directive.  Ideally these directives would be
16938    implemented in a transparent way, so that removing them would not
16939    have any effect on the generated instructions.  However, s_stab
16940    internally changes the section, so in practice we need to decide
16941    now whether the preceding label marks compressed code.  We do not
16942    support changing the compression mode of a label after a .stab*
16943    directive, such as in:
16944
16945    foo:
16946         .stabs ...
16947         .set mips16
16948
16949    so the current mode wins.  */
16950
16951 static void
16952 s_mips_stab (int type)
16953 {
16954   mips_mark_labels ();
16955   s_stab (type);
16956 }
16957
16958 /* Handle the .weakext pseudo-op as defined in Kane and Heinrich.  */
16959
16960 static void
16961 s_mips_weakext (int ignore ATTRIBUTE_UNUSED)
16962 {
16963   char *name;
16964   int c;
16965   symbolS *symbolP;
16966   expressionS exp;
16967
16968   c = get_symbol_name (&name);
16969   symbolP = symbol_find_or_make (name);
16970   S_SET_WEAK (symbolP);
16971   *input_line_pointer = c;
16972
16973   SKIP_WHITESPACE_AFTER_NAME ();
16974
16975   if (! is_end_of_line[(unsigned char) *input_line_pointer])
16976     {
16977       if (S_IS_DEFINED (symbolP))
16978         {
16979           as_bad (_("ignoring attempt to redefine symbol %s"),
16980                   S_GET_NAME (symbolP));
16981           ignore_rest_of_line ();
16982           return;
16983         }
16984
16985       if (*input_line_pointer == ',')
16986         {
16987           ++input_line_pointer;
16988           SKIP_WHITESPACE ();
16989         }
16990
16991       expression (&exp);
16992       if (exp.X_op != O_symbol)
16993         {
16994           as_bad (_("bad .weakext directive"));
16995           ignore_rest_of_line ();
16996           return;
16997         }
16998       symbol_set_value_expression (symbolP, &exp);
16999     }
17000
17001   demand_empty_rest_of_line ();
17002 }
17003
17004 /* Parse a register string into a number.  Called from the ECOFF code
17005    to parse .frame.  The argument is non-zero if this is the frame
17006    register, so that we can record it in mips_frame_reg.  */
17007
17008 int
17009 tc_get_register (int frame)
17010 {
17011   unsigned int reg;
17012
17013   SKIP_WHITESPACE ();
17014   if (! reg_lookup (&input_line_pointer, RWARN | RTYPE_NUM | RTYPE_GP, &reg))
17015     reg = 0;
17016   if (frame)
17017     {
17018       mips_frame_reg = reg != 0 ? reg : SP;
17019       mips_frame_reg_valid = 1;
17020       mips_cprestore_valid = 0;
17021     }
17022   return reg;
17023 }
17024
17025 valueT
17026 md_section_align (asection *seg, valueT addr)
17027 {
17028   int align = bfd_get_section_alignment (stdoutput, seg);
17029
17030   /* We don't need to align ELF sections to the full alignment.
17031      However, Irix 5 may prefer that we align them at least to a 16
17032      byte boundary.  We don't bother to align the sections if we
17033      are targeted for an embedded system.  */
17034   if (strncmp (TARGET_OS, "elf", 3) == 0)
17035     return addr;
17036   if (align > 4)
17037     align = 4;
17038
17039   return ((addr + (1 << align) - 1) & -(1 << align));
17040 }
17041
17042 /* Utility routine, called from above as well.  If called while the
17043    input file is still being read, it's only an approximation.  (For
17044    example, a symbol may later become defined which appeared to be
17045    undefined earlier.)  */
17046
17047 static int
17048 nopic_need_relax (symbolS *sym, int before_relaxing)
17049 {
17050   if (sym == 0)
17051     return 0;
17052
17053   if (g_switch_value > 0)
17054     {
17055       const char *symname;
17056       int change;
17057
17058       /* Find out whether this symbol can be referenced off the $gp
17059          register.  It can be if it is smaller than the -G size or if
17060          it is in the .sdata or .sbss section.  Certain symbols can
17061          not be referenced off the $gp, although it appears as though
17062          they can.  */
17063       symname = S_GET_NAME (sym);
17064       if (symname != (const char *) NULL
17065           && (strcmp (symname, "eprol") == 0
17066               || strcmp (symname, "etext") == 0
17067               || strcmp (symname, "_gp") == 0
17068               || strcmp (symname, "edata") == 0
17069               || strcmp (symname, "_fbss") == 0
17070               || strcmp (symname, "_fdata") == 0
17071               || strcmp (symname, "_ftext") == 0
17072               || strcmp (symname, "end") == 0
17073               || strcmp (symname, "_gp_disp") == 0))
17074         change = 1;
17075       else if ((! S_IS_DEFINED (sym) || S_IS_COMMON (sym))
17076                && (0
17077 #ifndef NO_ECOFF_DEBUGGING
17078                    || (symbol_get_obj (sym)->ecoff_extern_size != 0
17079                        && (symbol_get_obj (sym)->ecoff_extern_size
17080                            <= g_switch_value))
17081 #endif
17082                    /* We must defer this decision until after the whole
17083                       file has been read, since there might be a .extern
17084                       after the first use of this symbol.  */
17085                    || (before_relaxing
17086 #ifndef NO_ECOFF_DEBUGGING
17087                        && symbol_get_obj (sym)->ecoff_extern_size == 0
17088 #endif
17089                        && S_GET_VALUE (sym) == 0)
17090                    || (S_GET_VALUE (sym) != 0
17091                        && S_GET_VALUE (sym) <= g_switch_value)))
17092         change = 0;
17093       else
17094         {
17095           const char *segname;
17096
17097           segname = segment_name (S_GET_SEGMENT (sym));
17098           gas_assert (strcmp (segname, ".lit8") != 0
17099                   && strcmp (segname, ".lit4") != 0);
17100           change = (strcmp (segname, ".sdata") != 0
17101                     && strcmp (segname, ".sbss") != 0
17102                     && strncmp (segname, ".sdata.", 7) != 0
17103                     && strncmp (segname, ".sbss.", 6) != 0
17104                     && strncmp (segname, ".gnu.linkonce.sb.", 17) != 0
17105                     && strncmp (segname, ".gnu.linkonce.s.", 16) != 0);
17106         }
17107       return change;
17108     }
17109   else
17110     /* We are not optimizing for the $gp register.  */
17111     return 1;
17112 }
17113
17114
17115 /* Return true if the given symbol should be considered local for SVR4 PIC.  */
17116
17117 static bfd_boolean
17118 pic_need_relax (symbolS *sym, asection *segtype)
17119 {
17120   asection *symsec;
17121
17122   /* Handle the case of a symbol equated to another symbol.  */
17123   while (symbol_equated_reloc_p (sym))
17124     {
17125       symbolS *n;
17126
17127       /* It's possible to get a loop here in a badly written program.  */
17128       n = symbol_get_value_expression (sym)->X_add_symbol;
17129       if (n == sym)
17130         break;
17131       sym = n;
17132     }
17133
17134   if (symbol_section_p (sym))
17135     return TRUE;
17136
17137   symsec = S_GET_SEGMENT (sym);
17138
17139   /* This must duplicate the test in adjust_reloc_syms.  */
17140   return (!bfd_is_und_section (symsec)
17141           && !bfd_is_abs_section (symsec)
17142           && !bfd_is_com_section (symsec)
17143           && !s_is_linkonce (sym, segtype)
17144           /* A global or weak symbol is treated as external.  */
17145           && (!S_IS_WEAK (sym) && !S_IS_EXTERNAL (sym)));
17146 }
17147
17148
17149 /* Given a mips16 variant frag FRAGP, return non-zero if it needs an
17150    extended opcode.  SEC is the section the frag is in.  */
17151
17152 static int
17153 mips16_extended_frag (fragS *fragp, asection *sec, long stretch)
17154 {
17155   int type;
17156   const struct mips_int_operand *operand;
17157   offsetT val;
17158   segT symsec;
17159   fragS *sym_frag;
17160
17161   if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
17162     return 0;
17163   if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
17164     return 1;
17165
17166   symsec = S_GET_SEGMENT (fragp->fr_symbol);
17167   type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
17168   operand = mips16_immed_operand (type, FALSE);
17169   if (S_FORCE_RELOC (fragp->fr_symbol, TRUE)
17170       || (operand->root.type == OP_PCREL
17171           ? sec != symsec
17172           : !bfd_is_abs_section (symsec)))
17173     return 1;
17174
17175   sym_frag = symbol_get_frag (fragp->fr_symbol);
17176   val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
17177
17178   if (operand->root.type == OP_PCREL)
17179     {
17180       const struct mips_pcrel_operand *pcrel_op;
17181       addressT addr;
17182       offsetT maxtiny;
17183
17184       if (RELAX_MIPS16_LONG_BRANCH (fragp->fr_subtype))
17185         return 1;
17186
17187       pcrel_op = (const struct mips_pcrel_operand *) operand;
17188
17189       /* If the relax_marker of the symbol fragment differs from the
17190          relax_marker of this fragment, we have not yet adjusted the
17191          symbol fragment fr_address.  We want to add in STRETCH in
17192          order to get a better estimate of the address.  This
17193          particularly matters because of the shift bits.  */
17194       if (stretch != 0
17195           && sym_frag->relax_marker != fragp->relax_marker)
17196         {
17197           fragS *f;
17198
17199           /* Adjust stretch for any alignment frag.  Note that if have
17200              been expanding the earlier code, the symbol may be
17201              defined in what appears to be an earlier frag.  FIXME:
17202              This doesn't handle the fr_subtype field, which specifies
17203              a maximum number of bytes to skip when doing an
17204              alignment.  */
17205           for (f = fragp; f != NULL && f != sym_frag; f = f->fr_next)
17206             {
17207               if (f->fr_type == rs_align || f->fr_type == rs_align_code)
17208                 {
17209                   if (stretch < 0)
17210                     stretch = - ((- stretch)
17211                                  & ~ ((1 << (int) f->fr_offset) - 1));
17212                   else
17213                     stretch &= ~ ((1 << (int) f->fr_offset) - 1);
17214                   if (stretch == 0)
17215                     break;
17216                 }
17217             }
17218           if (f != NULL)
17219             val += stretch;
17220         }
17221
17222       addr = fragp->fr_address + fragp->fr_fix;
17223
17224       /* The base address rules are complicated.  The base address of
17225          a branch is the following instruction.  The base address of a
17226          PC relative load or add is the instruction itself, but if it
17227          is in a delay slot (in which case it can not be extended) use
17228          the address of the instruction whose delay slot it is in.  */
17229       if (pcrel_op->include_isa_bit)
17230         {
17231           addr += 2;
17232
17233           /* If we are currently assuming that this frag should be
17234              extended, then, the current address is two bytes
17235              higher.  */
17236           if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17237             addr += 2;
17238
17239           /* Ignore the low bit in the target, since it will be set
17240              for a text label.  */
17241           val &= -2;
17242         }
17243       else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
17244         addr -= 4;
17245       else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
17246         addr -= 2;
17247
17248       val -= addr & -(1 << pcrel_op->align_log2);
17249
17250       /* If any of the shifted bits are set, we must use an extended
17251          opcode.  If the address depends on the size of this
17252          instruction, this can lead to a loop, so we arrange to always
17253          use an extended opcode.  */
17254       if ((val & ((1 << operand->shift) - 1)) != 0)
17255         {
17256           fragp->fr_subtype =
17257             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
17258           return 1;
17259         }
17260
17261       /* If we are about to mark a frag as extended because the value
17262          is precisely the next value above maxtiny, then there is a
17263          chance of an infinite loop as in the following code:
17264              la $4,foo
17265              .skip      1020
17266              .align     2
17267            foo:
17268          In this case when the la is extended, foo is 0x3fc bytes
17269          away, so the la can be shrunk, but then foo is 0x400 away, so
17270          the la must be extended.  To avoid this loop, we mark the
17271          frag as extended if it was small, and is about to become
17272          extended with the next value above maxtiny.  */
17273       maxtiny = mips_int_operand_max (operand);
17274       if (val == maxtiny + (1 << operand->shift)
17275           && ! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17276         {
17277           fragp->fr_subtype =
17278             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
17279           return 1;
17280         }
17281     }
17282
17283   return !mips16_immed_in_range_p (operand, BFD_RELOC_UNUSED, val);
17284 }
17285
17286 /* Compute the length of a branch sequence, and adjust the
17287    RELAX_BRANCH_TOOFAR bit accordingly.  If FRAGP is NULL, the
17288    worst-case length is computed, with UPDATE being used to indicate
17289    whether an unconditional (-1), branch-likely (+1) or regular (0)
17290    branch is to be computed.  */
17291 static int
17292 relaxed_branch_length (fragS *fragp, asection *sec, int update)
17293 {
17294   bfd_boolean toofar;
17295   int length;
17296
17297   if (fragp
17298       && S_IS_DEFINED (fragp->fr_symbol)
17299       && !S_IS_WEAK (fragp->fr_symbol)
17300       && sec == S_GET_SEGMENT (fragp->fr_symbol))
17301     {
17302       addressT addr;
17303       offsetT val;
17304
17305       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
17306
17307       addr = fragp->fr_address + fragp->fr_fix + 4;
17308
17309       val -= addr;
17310
17311       toofar = val < - (0x8000 << 2) || val >= (0x8000 << 2);
17312     }
17313   else
17314     /* If the symbol is not defined or it's in a different segment,
17315        we emit the long sequence.  */
17316     toofar = TRUE;
17317
17318   if (fragp && update && toofar != RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
17319     fragp->fr_subtype
17320       = RELAX_BRANCH_ENCODE (RELAX_BRANCH_AT (fragp->fr_subtype),
17321                              RELAX_BRANCH_UNCOND (fragp->fr_subtype),
17322                              RELAX_BRANCH_LIKELY (fragp->fr_subtype),
17323                              RELAX_BRANCH_LINK (fragp->fr_subtype),
17324                              toofar);
17325
17326   length = 4;
17327   if (toofar)
17328     {
17329       if (fragp ? RELAX_BRANCH_LIKELY (fragp->fr_subtype) : (update > 0))
17330         length += 8;
17331
17332       if (mips_pic != NO_PIC)
17333         {
17334           /* Additional space for PIC loading of target address.  */
17335           length += 8;
17336           if (mips_opts.isa == ISA_MIPS1)
17337             /* Additional space for $at-stabilizing nop.  */
17338             length += 4;
17339         }
17340
17341       /* If branch is conditional.  */
17342       if (fragp ? !RELAX_BRANCH_UNCOND (fragp->fr_subtype) : (update >= 0))
17343         length += 8;
17344     }
17345
17346   return length;
17347 }
17348
17349 /* Get a FRAG's branch instruction delay slot size, either from the
17350    short-delay-slot bit of a branch-and-link instruction if AL is TRUE,
17351    or SHORT_INSN_SIZE otherwise.  */
17352
17353 static int
17354 frag_branch_delay_slot_size (fragS *fragp, bfd_boolean al, int short_insn_size)
17355 {
17356   char *buf = fragp->fr_literal + fragp->fr_fix;
17357
17358   if (al)
17359     return (read_compressed_insn (buf, 4) & 0x02000000) ? 2 : 4;
17360   else
17361     return short_insn_size;
17362 }
17363
17364 /* Compute the length of a branch sequence, and adjust the
17365    RELAX_MICROMIPS_TOOFAR32 bit accordingly.  If FRAGP is NULL, the
17366    worst-case length is computed, with UPDATE being used to indicate
17367    whether an unconditional (-1), or regular (0) branch is to be
17368    computed.  */
17369
17370 static int
17371 relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
17372 {
17373   bfd_boolean insn32 = TRUE;
17374   bfd_boolean nods = TRUE;
17375   bfd_boolean al = TRUE;
17376   int short_insn_size;
17377   bfd_boolean toofar;
17378   int length;
17379
17380   if (fragp)
17381     {
17382       insn32 = RELAX_MICROMIPS_INSN32 (fragp->fr_subtype);
17383       nods = RELAX_MICROMIPS_NODS (fragp->fr_subtype);
17384       al = RELAX_MICROMIPS_LINK (fragp->fr_subtype);
17385     }
17386   short_insn_size = insn32 ? 4 : 2;
17387
17388   if (fragp
17389       && S_IS_DEFINED (fragp->fr_symbol)
17390       && !S_IS_WEAK (fragp->fr_symbol)
17391       && sec == S_GET_SEGMENT (fragp->fr_symbol))
17392     {
17393       addressT addr;
17394       offsetT val;
17395
17396       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
17397       /* Ignore the low bit in the target, since it will be set
17398          for a text label.  */
17399       if ((val & 1) != 0)
17400         --val;
17401
17402       addr = fragp->fr_address + fragp->fr_fix + 4;
17403
17404       val -= addr;
17405
17406       toofar = val < - (0x8000 << 1) || val >= (0x8000 << 1);
17407     }
17408   else
17409     /* If the symbol is not defined or it's in a different segment,
17410        we emit the long sequence.  */
17411     toofar = TRUE;
17412
17413   if (fragp && update
17414       && toofar != RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
17415     fragp->fr_subtype = (toofar
17416                          ? RELAX_MICROMIPS_MARK_TOOFAR32 (fragp->fr_subtype)
17417                          : RELAX_MICROMIPS_CLEAR_TOOFAR32 (fragp->fr_subtype));
17418
17419   length = 4;
17420   if (toofar)
17421     {
17422       bfd_boolean compact_known = fragp != NULL;
17423       bfd_boolean compact = FALSE;
17424       bfd_boolean uncond;
17425
17426       if (fragp)
17427         {
17428           compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
17429           uncond = RELAX_MICROMIPS_UNCOND (fragp->fr_subtype);
17430         }
17431       else
17432         uncond = update < 0;
17433
17434       /* If label is out of range, we turn branch <br>:
17435
17436                 <br>    label                   # 4 bytes
17437             0:
17438
17439          into:
17440
17441                 j       label                   # 4 bytes
17442                 nop                             # 2/4 bytes if
17443                                                 #  compact && (!PIC || insn32)
17444             0:
17445        */
17446       if ((mips_pic == NO_PIC || insn32) && (!compact_known || compact))
17447         length += short_insn_size;
17448
17449       /* If assembling PIC code, we further turn:
17450
17451                         j       label                   # 4 bytes
17452
17453          into:
17454
17455                         lw/ld   at, %got(label)(gp)     # 4 bytes
17456                         d/addiu at, %lo(label)          # 4 bytes
17457                         jr/c    at                      # 2/4 bytes
17458        */
17459       if (mips_pic != NO_PIC)
17460         length += 4 + short_insn_size;
17461
17462       /* Add an extra nop if the jump has no compact form and we need
17463          to fill the delay slot.  */
17464       if ((mips_pic == NO_PIC || al) && nods)
17465         length += (fragp
17466                    ? frag_branch_delay_slot_size (fragp, al, short_insn_size)
17467                    : short_insn_size);
17468
17469       /* If branch <br> is conditional, we prepend negated branch <brneg>:
17470
17471                         <brneg> 0f                      # 4 bytes
17472                         nop                             # 2/4 bytes if !compact
17473        */
17474       if (!uncond)
17475         length += (compact_known && compact) ? 4 : 4 + short_insn_size;
17476     }
17477   else if (nods)
17478     {
17479       /* Add an extra nop to fill the delay slot.  */
17480       gas_assert (fragp);
17481       length += frag_branch_delay_slot_size (fragp, al, short_insn_size);
17482     }
17483
17484   return length;
17485 }
17486
17487 /* Compute the length of a branch, and adjust the RELAX_MICROMIPS_TOOFAR16
17488    bit accordingly.  */
17489
17490 static int
17491 relaxed_micromips_16bit_branch_length (fragS *fragp, asection *sec, int update)
17492 {
17493   bfd_boolean toofar;
17494
17495   if (fragp
17496       && S_IS_DEFINED (fragp->fr_symbol)
17497       && !S_IS_WEAK (fragp->fr_symbol)
17498       && sec == S_GET_SEGMENT (fragp->fr_symbol))
17499     {
17500       addressT addr;
17501       offsetT val;
17502       int type;
17503
17504       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
17505       /* Ignore the low bit in the target, since it will be set
17506          for a text label.  */
17507       if ((val & 1) != 0)
17508         --val;
17509
17510       /* Assume this is a 2-byte branch.  */
17511       addr = fragp->fr_address + fragp->fr_fix + 2;
17512
17513       /* We try to avoid the infinite loop by not adding 2 more bytes for
17514          long branches.  */
17515
17516       val -= addr;
17517
17518       type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
17519       if (type == 'D')
17520         toofar = val < - (0x200 << 1) || val >= (0x200 << 1);
17521       else if (type == 'E')
17522         toofar = val < - (0x40 << 1) || val >= (0x40 << 1);
17523       else
17524         abort ();
17525     }
17526   else
17527     /* If the symbol is not defined or it's in a different segment,
17528        we emit a normal 32-bit branch.  */
17529     toofar = TRUE;
17530
17531   if (fragp && update
17532       && toofar != RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
17533     fragp->fr_subtype
17534       = toofar ? RELAX_MICROMIPS_MARK_TOOFAR16 (fragp->fr_subtype)
17535                : RELAX_MICROMIPS_CLEAR_TOOFAR16 (fragp->fr_subtype);
17536
17537   if (toofar)
17538     return 4;
17539
17540   return 2;
17541 }
17542
17543 /* Estimate the size of a frag before relaxing.  Unless this is the
17544    mips16, we are not really relaxing here, and the final size is
17545    encoded in the subtype information.  For the mips16, we have to
17546    decide whether we are using an extended opcode or not.  */
17547
17548 int
17549 md_estimate_size_before_relax (fragS *fragp, asection *segtype)
17550 {
17551   int change;
17552
17553   if (RELAX_BRANCH_P (fragp->fr_subtype))
17554     {
17555
17556       fragp->fr_var = relaxed_branch_length (fragp, segtype, FALSE);
17557
17558       return fragp->fr_var;
17559     }
17560
17561   if (RELAX_MIPS16_P (fragp->fr_subtype))
17562     /* We don't want to modify the EXTENDED bit here; it might get us
17563        into infinite loops.  We change it only in mips_relax_frag().  */
17564     return (RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2);
17565
17566   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17567     {
17568       int length = 4;
17569
17570       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17571         length = relaxed_micromips_16bit_branch_length (fragp, segtype, FALSE);
17572       if (length == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17573         length = relaxed_micromips_32bit_branch_length (fragp, segtype, FALSE);
17574       fragp->fr_var = length;
17575
17576       return length;
17577     }
17578
17579   if (mips_pic == NO_PIC)
17580     change = nopic_need_relax (fragp->fr_symbol, 0);
17581   else if (mips_pic == SVR4_PIC)
17582     change = pic_need_relax (fragp->fr_symbol, segtype);
17583   else if (mips_pic == VXWORKS_PIC)
17584     /* For vxworks, GOT16 relocations never have a corresponding LO16.  */
17585     change = 0;
17586   else
17587     abort ();
17588
17589   if (change)
17590     {
17591       fragp->fr_subtype |= RELAX_USE_SECOND;
17592       return -RELAX_FIRST (fragp->fr_subtype);
17593     }
17594   else
17595     return -RELAX_SECOND (fragp->fr_subtype);
17596 }
17597
17598 /* This is called to see whether a reloc against a defined symbol
17599    should be converted into a reloc against a section.  */
17600
17601 int
17602 mips_fix_adjustable (fixS *fixp)
17603 {
17604   if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
17605       || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
17606     return 0;
17607
17608   if (fixp->fx_addsy == NULL)
17609     return 1;
17610
17611   /* Allow relocs used for EH tables.  */
17612   if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
17613     return 1;
17614
17615   /* If symbol SYM is in a mergeable section, relocations of the form
17616      SYM + 0 can usually be made section-relative.  The mergeable data
17617      is then identified by the section offset rather than by the symbol.
17618
17619      However, if we're generating REL LO16 relocations, the offset is split
17620      between the LO16 and parterning high part relocation.  The linker will
17621      need to recalculate the complete offset in order to correctly identify
17622      the merge data.
17623
17624      The linker has traditionally not looked for the parterning high part
17625      relocation, and has thus allowed orphaned R_MIPS_LO16 relocations to be
17626      placed anywhere.  Rather than break backwards compatibility by changing
17627      this, it seems better not to force the issue, and instead keep the
17628      original symbol.  This will work with either linker behavior.  */
17629   if ((lo16_reloc_p (fixp->fx_r_type)
17630        || reloc_needs_lo_p (fixp->fx_r_type))
17631       && HAVE_IN_PLACE_ADDENDS
17632       && (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
17633     return 0;
17634
17635   /* There is no place to store an in-place offset for JALR relocations.  */
17636   if (jalr_reloc_p (fixp->fx_r_type) && HAVE_IN_PLACE_ADDENDS)
17637     return 0;
17638
17639   /* Likewise an in-range offset of limited PC-relative relocations may
17640      overflow the in-place relocatable field if recalculated against the
17641      start address of the symbol's containing section.
17642
17643      Also, PC relative relocations for MIPS R6 need to be symbol rather than
17644      section relative to allow linker relaxations to be performed later on.  */
17645   if (limited_pcrel_reloc_p (fixp->fx_r_type)
17646       && (HAVE_IN_PLACE_ADDENDS || ISA_IS_R6 (file_mips_opts.isa)))
17647     return 0;
17648
17649   /* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
17650      to a floating-point stub.  The same is true for non-R_MIPS16_26
17651      relocations against MIPS16 functions; in this case, the stub becomes
17652      the function's canonical address.
17653
17654      Floating-point stubs are stored in unique .mips16.call.* or
17655      .mips16.fn.* sections.  If a stub T for function F is in section S,
17656      the first relocation in section S must be against F; this is how the
17657      linker determines the target function.  All relocations that might
17658      resolve to T must also be against F.  We therefore have the following
17659      restrictions, which are given in an intentionally-redundant way:
17660
17661        1. We cannot reduce R_MIPS16_26 relocations against non-MIPS16
17662           symbols.
17663
17664        2. We cannot reduce a stub's relocations against non-MIPS16 symbols
17665           if that stub might be used.
17666
17667        3. We cannot reduce non-R_MIPS16_26 relocations against MIPS16
17668           symbols.
17669
17670        4. We cannot reduce a stub's relocations against MIPS16 symbols if
17671           that stub might be used.
17672
17673      There is a further restriction:
17674
17675        5. We cannot reduce jump relocations (R_MIPS_26, R_MIPS16_26 or
17676           R_MICROMIPS_26_S1) or branch relocations (R_MIPS_PC26_S2,
17677           R_MIPS_PC21_S2, R_MIPS_PC16, R_MIPS16_PC16_S1,
17678           R_MICROMIPS_PC16_S1, R_MICROMIPS_PC10_S1 or R_MICROMIPS_PC7_S1)
17679           against MIPS16 or microMIPS symbols because we need to keep the
17680           MIPS16 or microMIPS symbol for the purpose of mode mismatch
17681           detection and JAL or BAL to JALX instruction conversion in the
17682           linker.
17683
17684      For simplicity, we deal with (3)-(4) by not reducing _any_ relocation
17685      against a MIPS16 symbol.  We deal with (5) by additionally leaving
17686      alone any jump and branch relocations against a microMIPS symbol.
17687
17688      We deal with (1)-(2) by saying that, if there's a R_MIPS16_26
17689      relocation against some symbol R, no relocation against R may be
17690      reduced.  (Note that this deals with (2) as well as (1) because
17691      relocations against global symbols will never be reduced on ELF
17692      targets.)  This approach is a little simpler than trying to detect
17693      stub sections, and gives the "all or nothing" per-symbol consistency
17694      that we have for MIPS16 symbols.  */
17695   if (fixp->fx_subsy == NULL
17696       && (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy))
17697           || (ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy))
17698               && (jmp_reloc_p (fixp->fx_r_type)
17699                   || b_reloc_p (fixp->fx_r_type)))
17700           || *symbol_get_tc (fixp->fx_addsy)))
17701     return 0;
17702
17703   return 1;
17704 }
17705
17706 /* Translate internal representation of relocation info to BFD target
17707    format.  */
17708
17709 arelent **
17710 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
17711 {
17712   static arelent *retval[4];
17713   arelent *reloc;
17714   bfd_reloc_code_real_type code;
17715
17716   memset (retval, 0, sizeof(retval));
17717   reloc = retval[0] = XCNEW (arelent);
17718   reloc->sym_ptr_ptr = XNEW (asymbol *);
17719   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
17720   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
17721
17722   if (fixp->fx_pcrel)
17723     {
17724       gas_assert (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
17725                   || fixp->fx_r_type == BFD_RELOC_MIPS16_16_PCREL_S1
17726                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
17727                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
17728                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1
17729                   || fixp->fx_r_type == BFD_RELOC_32_PCREL
17730                   || fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
17731                   || fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2
17732                   || fixp->fx_r_type == BFD_RELOC_MIPS_18_PCREL_S3
17733                   || fixp->fx_r_type == BFD_RELOC_MIPS_19_PCREL_S2
17734                   || fixp->fx_r_type == BFD_RELOC_HI16_S_PCREL
17735                   || fixp->fx_r_type == BFD_RELOC_LO16_PCREL);
17736
17737       /* At this point, fx_addnumber is "symbol offset - pcrel address".
17738          Relocations want only the symbol offset.  */
17739       switch (fixp->fx_r_type)
17740         {
17741         case BFD_RELOC_MIPS_18_PCREL_S3:
17742           reloc->addend = fixp->fx_addnumber + (reloc->address & ~7);
17743           break;
17744         default:
17745           reloc->addend = fixp->fx_addnumber + reloc->address;
17746           break;
17747         }
17748     }
17749   else if (HAVE_IN_PLACE_ADDENDS
17750            && fixp->fx_r_type == BFD_RELOC_MICROMIPS_JMP
17751            && (read_compressed_insn (fixp->fx_frag->fr_literal
17752                                      + fixp->fx_where, 4) >> 26) == 0x3c)
17753     {
17754       /* Shift is 2, unusually, for microMIPS JALX.  Adjust the in-place
17755          addend accordingly.  */
17756       reloc->addend = fixp->fx_addnumber >> 1;
17757     }
17758   else
17759     reloc->addend = fixp->fx_addnumber;
17760
17761   /* Since the old MIPS ELF ABI uses Rel instead of Rela, encode the vtable
17762      entry to be used in the relocation's section offset.  */
17763   if (! HAVE_NEWABI && fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
17764     {
17765       reloc->address = reloc->addend;
17766       reloc->addend = 0;
17767     }
17768
17769   code = fixp->fx_r_type;
17770
17771   reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
17772   if (reloc->howto == NULL)
17773     {
17774       as_bad_where (fixp->fx_file, fixp->fx_line,
17775                     _("cannot represent %s relocation in this object file"
17776                       " format"),
17777                     bfd_get_reloc_code_name (code));
17778       retval[0] = NULL;
17779     }
17780
17781   return retval;
17782 }
17783
17784 /* Relax a machine dependent frag.  This returns the amount by which
17785    the current size of the frag should change.  */
17786
17787 int
17788 mips_relax_frag (asection *sec, fragS *fragp, long stretch)
17789 {
17790   if (RELAX_BRANCH_P (fragp->fr_subtype))
17791     {
17792       offsetT old_var = fragp->fr_var;
17793
17794       fragp->fr_var = relaxed_branch_length (fragp, sec, TRUE);
17795
17796       return fragp->fr_var - old_var;
17797     }
17798
17799   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17800     {
17801       offsetT old_var = fragp->fr_var;
17802       offsetT new_var = 4;
17803
17804       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17805         new_var = relaxed_micromips_16bit_branch_length (fragp, sec, TRUE);
17806       if (new_var == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17807         new_var = relaxed_micromips_32bit_branch_length (fragp, sec, TRUE);
17808       fragp->fr_var = new_var;
17809
17810       return new_var - old_var;
17811     }
17812
17813   if (! RELAX_MIPS16_P (fragp->fr_subtype))
17814     return 0;
17815
17816   if (mips16_extended_frag (fragp, sec, stretch))
17817     {
17818       if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17819         return 0;
17820       fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
17821       return 2;
17822     }
17823   else
17824     {
17825       if (! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17826         return 0;
17827       fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
17828       return -2;
17829     }
17830
17831   return 0;
17832 }
17833
17834 /* Convert a machine dependent frag.  */
17835
17836 void
17837 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
17838 {
17839   if (RELAX_BRANCH_P (fragp->fr_subtype))
17840     {
17841       char *buf;
17842       unsigned long insn;
17843       expressionS exp;
17844       fixS *fixp;
17845
17846       buf = fragp->fr_literal + fragp->fr_fix;
17847       insn = read_insn (buf);
17848
17849       if (!RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
17850         {
17851           /* We generate a fixup instead of applying it right now
17852              because, if there are linker relaxations, we're going to
17853              need the relocations.  */
17854           exp.X_op = O_symbol;
17855           exp.X_add_symbol = fragp->fr_symbol;
17856           exp.X_add_number = fragp->fr_offset;
17857
17858           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
17859                               BFD_RELOC_16_PCREL_S2);
17860           fixp->fx_file = fragp->fr_file;
17861           fixp->fx_line = fragp->fr_line;
17862
17863           buf = write_insn (buf, insn);
17864         }
17865       else
17866         {
17867           int i;
17868
17869           as_warn_where (fragp->fr_file, fragp->fr_line,
17870                          _("relaxed out-of-range branch into a jump"));
17871
17872           if (RELAX_BRANCH_UNCOND (fragp->fr_subtype))
17873             goto uncond;
17874
17875           if (!RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17876             {
17877               /* Reverse the branch.  */
17878               switch ((insn >> 28) & 0xf)
17879                 {
17880                 case 4:
17881                   if ((insn & 0xff000000) == 0x47000000
17882                       || (insn & 0xff600000) == 0x45600000)
17883                     {
17884                       /* BZ.df/BNZ.df, BZ.V/BNZ.V can have the condition
17885                          reversed by tweaking bit 23.  */
17886                       insn ^= 0x00800000;
17887                     }
17888                   else
17889                     {
17890                       /* bc[0-3][tf]l? instructions can have the condition
17891                          reversed by tweaking a single TF bit, and their
17892                          opcodes all have 0x4???????.  */
17893                       gas_assert ((insn & 0xf3e00000) == 0x41000000);
17894                       insn ^= 0x00010000;
17895                     }
17896                   break;
17897
17898                 case 0:
17899                   /* bltz       0x04000000      bgez    0x04010000
17900                      bltzal     0x04100000      bgezal  0x04110000  */
17901                   gas_assert ((insn & 0xfc0e0000) == 0x04000000);
17902                   insn ^= 0x00010000;
17903                   break;
17904
17905                 case 1:
17906                   /* beq        0x10000000      bne     0x14000000
17907                      blez       0x18000000      bgtz    0x1c000000  */
17908                   insn ^= 0x04000000;
17909                   break;
17910
17911                 default:
17912                   abort ();
17913                 }
17914             }
17915
17916           if (RELAX_BRANCH_LINK (fragp->fr_subtype))
17917             {
17918               /* Clear the and-link bit.  */
17919               gas_assert ((insn & 0xfc1c0000) == 0x04100000);
17920
17921               /* bltzal         0x04100000      bgezal  0x04110000
17922                  bltzall        0x04120000      bgezall 0x04130000  */
17923               insn &= ~0x00100000;
17924             }
17925
17926           /* Branch over the branch (if the branch was likely) or the
17927              full jump (not likely case).  Compute the offset from the
17928              current instruction to branch to.  */
17929           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17930             i = 16;
17931           else
17932             {
17933               /* How many bytes in instructions we've already emitted?  */
17934               i = buf - fragp->fr_literal - fragp->fr_fix;
17935               /* How many bytes in instructions from here to the end?  */
17936               i = fragp->fr_var - i;
17937             }
17938           /* Convert to instruction count.  */
17939           i >>= 2;
17940           /* Branch counts from the next instruction.  */
17941           i--;
17942           insn |= i;
17943           /* Branch over the jump.  */
17944           buf = write_insn (buf, insn);
17945
17946           /* nop */
17947           buf = write_insn (buf, 0);
17948
17949           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17950             {
17951               /* beql $0, $0, 2f */
17952               insn = 0x50000000;
17953               /* Compute the PC offset from the current instruction to
17954                  the end of the variable frag.  */
17955               /* How many bytes in instructions we've already emitted?  */
17956               i = buf - fragp->fr_literal - fragp->fr_fix;
17957               /* How many bytes in instructions from here to the end?  */
17958               i = fragp->fr_var - i;
17959               /* Convert to instruction count.  */
17960               i >>= 2;
17961               /* Don't decrement i, because we want to branch over the
17962                  delay slot.  */
17963               insn |= i;
17964
17965               buf = write_insn (buf, insn);
17966               buf = write_insn (buf, 0);
17967             }
17968
17969         uncond:
17970           if (mips_pic == NO_PIC)
17971             {
17972               /* j or jal.  */
17973               insn = (RELAX_BRANCH_LINK (fragp->fr_subtype)
17974                       ? 0x0c000000 : 0x08000000);
17975               exp.X_op = O_symbol;
17976               exp.X_add_symbol = fragp->fr_symbol;
17977               exp.X_add_number = fragp->fr_offset;
17978
17979               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17980                                   FALSE, BFD_RELOC_MIPS_JMP);
17981               fixp->fx_file = fragp->fr_file;
17982               fixp->fx_line = fragp->fr_line;
17983
17984               buf = write_insn (buf, insn);
17985             }
17986           else
17987             {
17988               unsigned long at = RELAX_BRANCH_AT (fragp->fr_subtype);
17989
17990               /* lw/ld $at, <sym>($gp)  R_MIPS_GOT16 */
17991               insn = HAVE_64BIT_ADDRESSES ? 0xdf800000 : 0x8f800000;
17992               insn |= at << OP_SH_RT;
17993               exp.X_op = O_symbol;
17994               exp.X_add_symbol = fragp->fr_symbol;
17995               exp.X_add_number = fragp->fr_offset;
17996
17997               if (fragp->fr_offset)
17998                 {
17999                   exp.X_add_symbol = make_expr_symbol (&exp);
18000                   exp.X_add_number = 0;
18001                 }
18002
18003               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
18004                                   FALSE, BFD_RELOC_MIPS_GOT16);
18005               fixp->fx_file = fragp->fr_file;
18006               fixp->fx_line = fragp->fr_line;
18007
18008               buf = write_insn (buf, insn);
18009
18010               if (mips_opts.isa == ISA_MIPS1)
18011                 /* nop */
18012                 buf = write_insn (buf, 0);
18013
18014               /* d/addiu $at, $at, <sym>  R_MIPS_LO16 */
18015               insn = HAVE_64BIT_ADDRESSES ? 0x64000000 : 0x24000000;
18016               insn |= at << OP_SH_RS | at << OP_SH_RT;
18017
18018               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
18019                                   FALSE, BFD_RELOC_LO16);
18020               fixp->fx_file = fragp->fr_file;
18021               fixp->fx_line = fragp->fr_line;
18022
18023               buf = write_insn (buf, insn);
18024
18025               /* j(al)r $at.  */
18026               if (RELAX_BRANCH_LINK (fragp->fr_subtype))
18027                 insn = 0x0000f809;
18028               else
18029                 insn = 0x00000008;
18030               insn |= at << OP_SH_RS;
18031
18032               buf = write_insn (buf, insn);
18033             }
18034         }
18035
18036       fragp->fr_fix += fragp->fr_var;
18037       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
18038       return;
18039     }
18040
18041   /* Relax microMIPS branches.  */
18042   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
18043     {
18044       char *buf = fragp->fr_literal + fragp->fr_fix;
18045       bfd_boolean compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
18046       bfd_boolean insn32 = RELAX_MICROMIPS_INSN32 (fragp->fr_subtype);
18047       bfd_boolean nods = RELAX_MICROMIPS_NODS (fragp->fr_subtype);
18048       bfd_boolean al = RELAX_MICROMIPS_LINK (fragp->fr_subtype);
18049       int type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
18050       bfd_boolean short_ds;
18051       unsigned long insn;
18052       expressionS exp;
18053       fixS *fixp;
18054
18055       exp.X_op = O_symbol;
18056       exp.X_add_symbol = fragp->fr_symbol;
18057       exp.X_add_number = fragp->fr_offset;
18058
18059       fragp->fr_fix += fragp->fr_var;
18060
18061       /* Handle 16-bit branches that fit or are forced to fit.  */
18062       if (type != 0 && !RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
18063         {
18064           /* We generate a fixup instead of applying it right now,
18065              because if there is linker relaxation, we're going to
18066              need the relocations.  */
18067           if (type == 'D')
18068             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
18069                                 BFD_RELOC_MICROMIPS_10_PCREL_S1);
18070           else if (type == 'E')
18071             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
18072                                 BFD_RELOC_MICROMIPS_7_PCREL_S1);
18073           else
18074             abort ();
18075
18076           fixp->fx_file = fragp->fr_file;
18077           fixp->fx_line = fragp->fr_line;
18078
18079           /* These relocations can have an addend that won't fit in
18080              2 octets.  */
18081           fixp->fx_no_overflow = 1;
18082
18083           return;
18084         }
18085
18086       /* Handle 32-bit branches that fit or are forced to fit.  */
18087       if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
18088           || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
18089         {
18090           /* We generate a fixup instead of applying it right now,
18091              because if there is linker relaxation, we're going to
18092              need the relocations.  */
18093           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
18094                               BFD_RELOC_MICROMIPS_16_PCREL_S1);
18095           fixp->fx_file = fragp->fr_file;
18096           fixp->fx_line = fragp->fr_line;
18097
18098           if (type == 0)
18099             {
18100               insn = read_compressed_insn (buf, 4);
18101               buf += 4;
18102
18103               if (nods)
18104                 {
18105                   /* Check the short-delay-slot bit.  */
18106                   if (!al || (insn & 0x02000000) != 0)
18107                     buf = write_compressed_insn (buf, 0x0c00, 2);
18108                   else
18109                     buf = write_compressed_insn (buf, 0x00000000, 4);
18110                 }
18111
18112               gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
18113               return;
18114             }
18115         }
18116
18117       /* Relax 16-bit branches to 32-bit branches.  */
18118       if (type != 0)
18119         {
18120           insn = read_compressed_insn (buf, 2);
18121
18122           if ((insn & 0xfc00) == 0xcc00)                /* b16  */
18123             insn = 0x94000000;                          /* beq  */
18124           else if ((insn & 0xdc00) == 0x8c00)           /* beqz16/bnez16  */
18125             {
18126               unsigned long regno;
18127
18128               regno = (insn >> MICROMIPSOP_SH_MD) & MICROMIPSOP_MASK_MD;
18129               regno = micromips_to_32_reg_d_map [regno];
18130               insn = ((insn & 0x2000) << 16) | 0x94000000;      /* beq/bne  */
18131               insn |= regno << MICROMIPSOP_SH_RS;
18132             }
18133           else
18134             abort ();
18135
18136           /* Nothing else to do, just write it out.  */
18137           if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
18138               || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
18139             {
18140               buf = write_compressed_insn (buf, insn, 4);
18141               if (nods)
18142                 buf = write_compressed_insn (buf, 0x0c00, 2);
18143               gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
18144               return;
18145             }
18146         }
18147       else
18148         insn = read_compressed_insn (buf, 4);
18149
18150       /* Relax 32-bit branches to a sequence of instructions.  */
18151       as_warn_where (fragp->fr_file, fragp->fr_line,
18152                      _("relaxed out-of-range branch into a jump"));
18153
18154       /* Set the short-delay-slot bit.  */
18155       short_ds = !al || (insn & 0x02000000) != 0;
18156
18157       if (!RELAX_MICROMIPS_UNCOND (fragp->fr_subtype))
18158         {
18159           symbolS *l;
18160
18161           /* Reverse the branch.  */
18162           if ((insn & 0xfc000000) == 0x94000000                 /* beq  */
18163               || (insn & 0xfc000000) == 0xb4000000)             /* bne  */
18164             insn ^= 0x20000000;
18165           else if ((insn & 0xffe00000) == 0x40000000            /* bltz  */
18166                    || (insn & 0xffe00000) == 0x40400000         /* bgez  */
18167                    || (insn & 0xffe00000) == 0x40800000         /* blez  */
18168                    || (insn & 0xffe00000) == 0x40c00000         /* bgtz  */
18169                    || (insn & 0xffe00000) == 0x40a00000         /* bnezc  */
18170                    || (insn & 0xffe00000) == 0x40e00000         /* beqzc  */
18171                    || (insn & 0xffe00000) == 0x40200000         /* bltzal  */
18172                    || (insn & 0xffe00000) == 0x40600000         /* bgezal  */
18173                    || (insn & 0xffe00000) == 0x42200000         /* bltzals  */
18174                    || (insn & 0xffe00000) == 0x42600000)        /* bgezals  */
18175             insn ^= 0x00400000;
18176           else if ((insn & 0xffe30000) == 0x43800000            /* bc1f  */
18177                    || (insn & 0xffe30000) == 0x43a00000         /* bc1t  */
18178                    || (insn & 0xffe30000) == 0x42800000         /* bc2f  */
18179                    || (insn & 0xffe30000) == 0x42a00000)        /* bc2t  */
18180             insn ^= 0x00200000;
18181           else if ((insn & 0xff000000) == 0x83000000            /* BZ.df
18182                                                                    BNZ.df  */
18183                     || (insn & 0xff600000) == 0x81600000)       /* BZ.V
18184                                                                    BNZ.V */
18185             insn ^= 0x00800000;
18186           else
18187             abort ();
18188
18189           if (al)
18190             {
18191               /* Clear the and-link and short-delay-slot bits.  */
18192               gas_assert ((insn & 0xfda00000) == 0x40200000);
18193
18194               /* bltzal  0x40200000     bgezal  0x40600000  */
18195               /* bltzals 0x42200000     bgezals 0x42600000  */
18196               insn &= ~0x02200000;
18197             }
18198
18199           /* Make a label at the end for use with the branch.  */
18200           l = symbol_new (micromips_label_name (), asec, fragp->fr_fix, fragp);
18201           micromips_label_inc ();
18202           S_SET_OTHER (l, ELF_ST_SET_MICROMIPS (S_GET_OTHER (l)));
18203
18204           /* Refer to it.  */
18205           fixp = fix_new (fragp, buf - fragp->fr_literal, 4, l, 0, TRUE,
18206                           BFD_RELOC_MICROMIPS_16_PCREL_S1);
18207           fixp->fx_file = fragp->fr_file;
18208           fixp->fx_line = fragp->fr_line;
18209
18210           /* Branch over the jump.  */
18211           buf = write_compressed_insn (buf, insn, 4);
18212
18213           if (!compact)
18214             {
18215               /* nop  */
18216               if (insn32)
18217                 buf = write_compressed_insn (buf, 0x00000000, 4);
18218               else
18219                 buf = write_compressed_insn (buf, 0x0c00, 2);
18220             }
18221         }
18222
18223       if (mips_pic == NO_PIC)
18224         {
18225           unsigned long jal = (short_ds || nods
18226                                ? 0x74000000 : 0xf4000000);      /* jal/s  */
18227
18228           /* j/jal/jals <sym>  R_MICROMIPS_26_S1  */
18229           insn = al ? jal : 0xd4000000;
18230
18231           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
18232                               BFD_RELOC_MICROMIPS_JMP);
18233           fixp->fx_file = fragp->fr_file;
18234           fixp->fx_line = fragp->fr_line;
18235
18236           buf = write_compressed_insn (buf, insn, 4);
18237
18238           if (compact || nods)
18239             {
18240               /* nop  */
18241               if (insn32)
18242                 buf = write_compressed_insn (buf, 0x00000000, 4);
18243               else
18244                 buf = write_compressed_insn (buf, 0x0c00, 2);
18245             }
18246         }
18247       else
18248         {
18249           unsigned long at = RELAX_MICROMIPS_AT (fragp->fr_subtype);
18250
18251           /* lw/ld $at, <sym>($gp)  R_MICROMIPS_GOT16  */
18252           insn = HAVE_64BIT_ADDRESSES ? 0xdc1c0000 : 0xfc1c0000;
18253           insn |= at << MICROMIPSOP_SH_RT;
18254
18255           if (exp.X_add_number)
18256             {
18257               exp.X_add_symbol = make_expr_symbol (&exp);
18258               exp.X_add_number = 0;
18259             }
18260
18261           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
18262                               BFD_RELOC_MICROMIPS_GOT16);
18263           fixp->fx_file = fragp->fr_file;
18264           fixp->fx_line = fragp->fr_line;
18265
18266           buf = write_compressed_insn (buf, insn, 4);
18267
18268           /* d/addiu $at, $at, <sym>  R_MICROMIPS_LO16  */
18269           insn = HAVE_64BIT_ADDRESSES ? 0x5c000000 : 0x30000000;
18270           insn |= at << MICROMIPSOP_SH_RT | at << MICROMIPSOP_SH_RS;
18271
18272           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
18273                               BFD_RELOC_MICROMIPS_LO16);
18274           fixp->fx_file = fragp->fr_file;
18275           fixp->fx_line = fragp->fr_line;
18276
18277           buf = write_compressed_insn (buf, insn, 4);
18278
18279           if (insn32)
18280             {
18281               /* jr/jalr $at  */
18282               insn = 0x00000f3c | (al ? RA : ZERO) << MICROMIPSOP_SH_RT;
18283               insn |= at << MICROMIPSOP_SH_RS;
18284
18285               buf = write_compressed_insn (buf, insn, 4);
18286
18287               if (compact || nods)
18288                 /* nop  */
18289                 buf = write_compressed_insn (buf, 0x00000000, 4);
18290             }
18291           else
18292             {
18293               /* jr/jrc/jalr/jalrs $at  */
18294               unsigned long jalr = short_ds ? 0x45e0 : 0x45c0;  /* jalr/s  */
18295               unsigned long jr = compact || nods ? 0x45a0 : 0x4580; /* jr/c  */
18296
18297               insn = al ? jalr : jr;
18298               insn |= at << MICROMIPSOP_SH_MJ;
18299
18300               buf = write_compressed_insn (buf, insn, 2);
18301               if (al && nods)
18302                 {
18303                   /* nop  */
18304                   if (short_ds)
18305                     buf = write_compressed_insn (buf, 0x0c00, 2);
18306                   else
18307                     buf = write_compressed_insn (buf, 0x00000000, 4);
18308                 }
18309             }
18310         }
18311
18312       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
18313       return;
18314     }
18315
18316   if (RELAX_MIPS16_P (fragp->fr_subtype))
18317     {
18318       int type;
18319       const struct mips_int_operand *operand;
18320       offsetT val;
18321       char *buf;
18322       unsigned int user_length, length;
18323       bfd_boolean need_reloc;
18324       unsigned long insn;
18325       bfd_boolean ext;
18326       segT symsec;
18327
18328       type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
18329       operand = mips16_immed_operand (type, FALSE);
18330
18331       ext = RELAX_MIPS16_EXTENDED (fragp->fr_subtype);
18332       val = resolve_symbol_value (fragp->fr_symbol) + fragp->fr_offset;
18333
18334       symsec = S_GET_SEGMENT (fragp->fr_symbol);
18335       need_reloc = (S_FORCE_RELOC (fragp->fr_symbol, TRUE)
18336                     || (operand->root.type == OP_PCREL
18337                         ? asec != symsec
18338                         : !bfd_is_abs_section (symsec)));
18339
18340       if (operand->root.type == OP_PCREL)
18341         {
18342           const struct mips_pcrel_operand *pcrel_op;
18343           addressT addr;
18344
18345           pcrel_op = (const struct mips_pcrel_operand *) operand;
18346           addr = fragp->fr_address + fragp->fr_fix;
18347
18348           /* The rules for the base address of a PC relative reloc are
18349              complicated; see mips16_extended_frag.  */
18350           if (pcrel_op->include_isa_bit)
18351             {
18352               if (!need_reloc)
18353                 {
18354                   if (!ELF_ST_IS_MIPS16 (S_GET_OTHER (fragp->fr_symbol)))
18355                     as_bad_where (fragp->fr_file, fragp->fr_line,
18356                                   _("branch to a symbol in another ISA mode"));
18357                   else if ((fragp->fr_offset & 0x1) != 0)
18358                     as_bad_where (fragp->fr_file, fragp->fr_line,
18359                                   _("branch to misaligned address (0x%lx)"),
18360                                   (long) val);
18361                 }
18362               addr += 2;
18363               if (ext)
18364                 addr += 2;
18365               /* Ignore the low bit in the target, since it will be
18366                  set for a text label.  */
18367               val &= -2;
18368             }
18369           else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
18370             addr -= 4;
18371           else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
18372             addr -= 2;
18373
18374           addr &= -(1 << pcrel_op->align_log2);
18375           val -= addr;
18376
18377           /* Make sure the section winds up with the alignment we have
18378              assumed.  */
18379           if (operand->shift > 0)
18380             record_alignment (asec, operand->shift);
18381         }
18382
18383       if (ext
18384           && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
18385               || RELAX_MIPS16_DSLOT (fragp->fr_subtype)))
18386         as_warn_where (fragp->fr_file, fragp->fr_line,
18387                        _("extended instruction in delay slot"));
18388
18389       buf = fragp->fr_literal + fragp->fr_fix;
18390
18391       insn = read_compressed_insn (buf, 2);
18392       if (ext)
18393         insn |= MIPS16_EXTEND;
18394
18395       if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
18396         user_length = 4;
18397       else if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
18398         user_length = 2;
18399       else
18400         user_length = 0;
18401
18402       if (need_reloc)
18403         {
18404           bfd_reloc_code_real_type reloc = BFD_RELOC_NONE;
18405           expressionS exp;
18406           fixS *fixp;
18407
18408           switch (type)
18409             {
18410             case 'p':
18411             case 'q':
18412               reloc = BFD_RELOC_MIPS16_16_PCREL_S1;
18413               break;
18414             default:
18415               as_bad_where (fragp->fr_file, fragp->fr_line,
18416                             _("unsupported relocation"));
18417               break;
18418             }
18419           if (reloc == BFD_RELOC_NONE)
18420             ;
18421           else if (ext)
18422             {
18423               exp.X_op = O_symbol;
18424               exp.X_add_symbol = fragp->fr_symbol;
18425               exp.X_add_number = fragp->fr_offset;
18426
18427               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp,
18428                                   TRUE, reloc);
18429
18430               fixp->fx_file = fragp->fr_file;
18431               fixp->fx_line = fragp->fr_line;
18432
18433               /* These relocations can have an addend that won't fit
18434                  in 2 octets.  */
18435               fixp->fx_no_overflow = 1;
18436             }
18437           else
18438             as_bad_where (fragp->fr_file, fragp->fr_line,
18439                           _("invalid unextended operand value"));
18440         }
18441       else
18442         mips16_immed (fragp->fr_file, fragp->fr_line, type,
18443                       BFD_RELOC_UNUSED, val, user_length, &insn);
18444
18445       length = (ext ? 4 : 2);
18446       gas_assert (mips16_opcode_length (insn) == length);
18447       write_compressed_insn (buf, insn, length);
18448       fragp->fr_fix += length;
18449     }
18450   else
18451     {
18452       relax_substateT subtype = fragp->fr_subtype;
18453       bfd_boolean second_longer = (subtype & RELAX_SECOND_LONGER) != 0;
18454       bfd_boolean use_second = (subtype & RELAX_USE_SECOND) != 0;
18455       int first, second;
18456       fixS *fixp;
18457
18458       first = RELAX_FIRST (subtype);
18459       second = RELAX_SECOND (subtype);
18460       fixp = (fixS *) fragp->fr_opcode;
18461
18462       /* If the delay slot chosen does not match the size of the instruction,
18463          then emit a warning.  */
18464       if ((!use_second && (subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0)
18465            || (use_second && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0))
18466         {
18467           relax_substateT s;
18468           const char *msg;
18469
18470           s = subtype & (RELAX_DELAY_SLOT_16BIT
18471                          | RELAX_DELAY_SLOT_SIZE_FIRST
18472                          | RELAX_DELAY_SLOT_SIZE_SECOND);
18473           msg = macro_warning (s);
18474           if (msg != NULL)
18475             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
18476           subtype &= ~s;
18477         }
18478
18479       /* Possibly emit a warning if we've chosen the longer option.  */
18480       if (use_second == second_longer)
18481         {
18482           relax_substateT s;
18483           const char *msg;
18484
18485           s = (subtype
18486                & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT));
18487           msg = macro_warning (s);
18488           if (msg != NULL)
18489             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
18490           subtype &= ~s;
18491         }
18492
18493       /* Go through all the fixups for the first sequence.  Disable them
18494          (by marking them as done) if we're going to use the second
18495          sequence instead.  */
18496       while (fixp
18497              && fixp->fx_frag == fragp
18498              && fixp->fx_where < fragp->fr_fix - second)
18499         {
18500           if (subtype & RELAX_USE_SECOND)
18501             fixp->fx_done = 1;
18502           fixp = fixp->fx_next;
18503         }
18504
18505       /* Go through the fixups for the second sequence.  Disable them if
18506          we're going to use the first sequence, otherwise adjust their
18507          addresses to account for the relaxation.  */
18508       while (fixp && fixp->fx_frag == fragp)
18509         {
18510           if (subtype & RELAX_USE_SECOND)
18511             fixp->fx_where -= first;
18512           else
18513             fixp->fx_done = 1;
18514           fixp = fixp->fx_next;
18515         }
18516
18517       /* Now modify the frag contents.  */
18518       if (subtype & RELAX_USE_SECOND)
18519         {
18520           char *start;
18521
18522           start = fragp->fr_literal + fragp->fr_fix - first - second;
18523           memmove (start, start + first, second);
18524           fragp->fr_fix -= first;
18525         }
18526       else
18527         fragp->fr_fix -= second;
18528     }
18529 }
18530
18531 /* This function is called after the relocs have been generated.
18532    We've been storing mips16 text labels as odd.  Here we convert them
18533    back to even for the convenience of the debugger.  */
18534
18535 void
18536 mips_frob_file_after_relocs (void)
18537 {
18538   asymbol **syms;
18539   unsigned int count, i;
18540
18541   syms = bfd_get_outsymbols (stdoutput);
18542   count = bfd_get_symcount (stdoutput);
18543   for (i = 0; i < count; i++, syms++)
18544     if (ELF_ST_IS_COMPRESSED (elf_symbol (*syms)->internal_elf_sym.st_other)
18545         && ((*syms)->value & 1) != 0)
18546       {
18547         (*syms)->value &= ~1;
18548         /* If the symbol has an odd size, it was probably computed
18549            incorrectly, so adjust that as well.  */
18550         if ((elf_symbol (*syms)->internal_elf_sym.st_size & 1) != 0)
18551           ++elf_symbol (*syms)->internal_elf_sym.st_size;
18552       }
18553 }
18554
18555 /* This function is called whenever a label is defined, including fake
18556    labels instantiated off the dot special symbol.  It is used when
18557    handling branch delays; if a branch has a label, we assume we cannot
18558    move it.  This also bumps the value of the symbol by 1 in compressed
18559    code.  */
18560
18561 static void
18562 mips_record_label (symbolS *sym)
18563 {
18564   segment_info_type *si = seg_info (now_seg);
18565   struct insn_label_list *l;
18566
18567   if (free_insn_labels == NULL)
18568     l = XNEW (struct insn_label_list);
18569   else
18570     {
18571       l = free_insn_labels;
18572       free_insn_labels = l->next;
18573     }
18574
18575   l->label = sym;
18576   l->next = si->label_list;
18577   si->label_list = l;
18578 }
18579
18580 /* This function is called as tc_frob_label() whenever a label is defined
18581    and adds a DWARF-2 record we only want for true labels.  */
18582
18583 void
18584 mips_define_label (symbolS *sym)
18585 {
18586   mips_record_label (sym);
18587   dwarf2_emit_label (sym);
18588 }
18589
18590 /* This function is called by tc_new_dot_label whenever a new dot symbol
18591    is defined.  */
18592
18593 void
18594 mips_add_dot_label (symbolS *sym)
18595 {
18596   mips_record_label (sym);
18597   if (mips_assembling_insn && HAVE_CODE_COMPRESSION)
18598     mips_compressed_mark_label (sym);
18599 }
18600 \f
18601 /* Converting ASE flags from internal to .MIPS.abiflags values.  */
18602 static unsigned int
18603 mips_convert_ase_flags (int ase)
18604 {
18605   unsigned int ext_ases = 0;
18606
18607   if (ase & ASE_DSP)
18608     ext_ases |= AFL_ASE_DSP;
18609   if (ase & ASE_DSPR2)
18610     ext_ases |= AFL_ASE_DSPR2;
18611   if (ase & ASE_DSPR3)
18612     ext_ases |= AFL_ASE_DSPR3;
18613   if (ase & ASE_EVA)
18614     ext_ases |= AFL_ASE_EVA;
18615   if (ase & ASE_MCU)
18616     ext_ases |= AFL_ASE_MCU;
18617   if (ase & ASE_MDMX)
18618     ext_ases |= AFL_ASE_MDMX;
18619   if (ase & ASE_MIPS3D)
18620     ext_ases |= AFL_ASE_MIPS3D;
18621   if (ase & ASE_MT)
18622     ext_ases |= AFL_ASE_MT;
18623   if (ase & ASE_SMARTMIPS)
18624     ext_ases |= AFL_ASE_SMARTMIPS;
18625   if (ase & ASE_VIRT)
18626     ext_ases |= AFL_ASE_VIRT;
18627   if (ase & ASE_MSA)
18628     ext_ases |= AFL_ASE_MSA;
18629   if (ase & ASE_XPA)
18630     ext_ases |= AFL_ASE_XPA;
18631
18632   return ext_ases;
18633 }
18634 /* Some special processing for a MIPS ELF file.  */
18635
18636 void
18637 mips_elf_final_processing (void)
18638 {
18639   int fpabi;
18640   Elf_Internal_ABIFlags_v0 flags;
18641
18642   flags.version = 0;
18643   flags.isa_rev = 0;
18644   switch (file_mips_opts.isa)
18645     {
18646     case INSN_ISA1:
18647       flags.isa_level = 1;
18648       break;
18649     case INSN_ISA2:
18650       flags.isa_level = 2;
18651       break;
18652     case INSN_ISA3:
18653       flags.isa_level = 3;
18654       break;
18655     case INSN_ISA4:
18656       flags.isa_level = 4;
18657       break;
18658     case INSN_ISA5:
18659       flags.isa_level = 5;
18660       break;
18661     case INSN_ISA32:
18662       flags.isa_level = 32;
18663       flags.isa_rev = 1;
18664       break;
18665     case INSN_ISA32R2:
18666       flags.isa_level = 32;
18667       flags.isa_rev = 2;
18668       break;
18669     case INSN_ISA32R3:
18670       flags.isa_level = 32;
18671       flags.isa_rev = 3;
18672       break;
18673     case INSN_ISA32R5:
18674       flags.isa_level = 32;
18675       flags.isa_rev = 5;
18676       break;
18677     case INSN_ISA32R6:
18678       flags.isa_level = 32;
18679       flags.isa_rev = 6;
18680       break;
18681     case INSN_ISA64:
18682       flags.isa_level = 64;
18683       flags.isa_rev = 1;
18684       break;
18685     case INSN_ISA64R2:
18686       flags.isa_level = 64;
18687       flags.isa_rev = 2;
18688       break;
18689     case INSN_ISA64R3:
18690       flags.isa_level = 64;
18691       flags.isa_rev = 3;
18692       break;
18693     case INSN_ISA64R5:
18694       flags.isa_level = 64;
18695       flags.isa_rev = 5;
18696       break;
18697     case INSN_ISA64R6:
18698       flags.isa_level = 64;
18699       flags.isa_rev = 6;
18700       break;
18701     }
18702
18703   flags.gpr_size = file_mips_opts.gp == 32 ? AFL_REG_32 : AFL_REG_64;
18704   flags.cpr1_size = file_mips_opts.soft_float ? AFL_REG_NONE
18705                     : (file_mips_opts.ase & ASE_MSA) ? AFL_REG_128
18706                     : (file_mips_opts.fp == 64) ? AFL_REG_64
18707                     : AFL_REG_32;
18708   flags.cpr2_size = AFL_REG_NONE;
18709   flags.fp_abi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
18710                                            Tag_GNU_MIPS_ABI_FP);
18711   flags.isa_ext = bfd_mips_isa_ext (stdoutput);
18712   flags.ases = mips_convert_ase_flags (file_mips_opts.ase);
18713   if (file_ase_mips16)
18714     flags.ases |= AFL_ASE_MIPS16;
18715   if (file_ase_micromips)
18716     flags.ases |= AFL_ASE_MICROMIPS;
18717   flags.flags1 = 0;
18718   if ((ISA_HAS_ODD_SINGLE_FPR (file_mips_opts.isa, file_mips_opts.arch)
18719        || file_mips_opts.fp == 64)
18720       && file_mips_opts.oddspreg)
18721     flags.flags1 |= AFL_FLAGS1_ODDSPREG;
18722   flags.flags2 = 0;
18723
18724   bfd_mips_elf_swap_abiflags_v0_out (stdoutput, &flags,
18725                                      ((Elf_External_ABIFlags_v0 *)
18726                                      mips_flags_frag));
18727
18728   /* Write out the register information.  */
18729   if (mips_abi != N64_ABI)
18730     {
18731       Elf32_RegInfo s;
18732
18733       s.ri_gprmask = mips_gprmask;
18734       s.ri_cprmask[0] = mips_cprmask[0];
18735       s.ri_cprmask[1] = mips_cprmask[1];
18736       s.ri_cprmask[2] = mips_cprmask[2];
18737       s.ri_cprmask[3] = mips_cprmask[3];
18738       /* The gp_value field is set by the MIPS ELF backend.  */
18739
18740       bfd_mips_elf32_swap_reginfo_out (stdoutput, &s,
18741                                        ((Elf32_External_RegInfo *)
18742                                         mips_regmask_frag));
18743     }
18744   else
18745     {
18746       Elf64_Internal_RegInfo s;
18747
18748       s.ri_gprmask = mips_gprmask;
18749       s.ri_pad = 0;
18750       s.ri_cprmask[0] = mips_cprmask[0];
18751       s.ri_cprmask[1] = mips_cprmask[1];
18752       s.ri_cprmask[2] = mips_cprmask[2];
18753       s.ri_cprmask[3] = mips_cprmask[3];
18754       /* The gp_value field is set by the MIPS ELF backend.  */
18755
18756       bfd_mips_elf64_swap_reginfo_out (stdoutput, &s,
18757                                        ((Elf64_External_RegInfo *)
18758                                         mips_regmask_frag));
18759     }
18760
18761   /* Set the MIPS ELF flag bits.  FIXME: There should probably be some
18762      sort of BFD interface for this.  */
18763   if (mips_any_noreorder)
18764     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NOREORDER;
18765   if (mips_pic != NO_PIC)
18766     {
18767       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_PIC;
18768       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
18769     }
18770   if (mips_abicalls)
18771     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
18772
18773   /* Set MIPS ELF flags for ASEs.  Note that not all ASEs have flags
18774      defined at present; this might need to change in future.  */
18775   if (file_ase_mips16)
18776     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_M16;
18777   if (file_ase_micromips)
18778     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MICROMIPS;
18779   if (file_mips_opts.ase & ASE_MDMX)
18780     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MDMX;
18781
18782   /* Set the MIPS ELF ABI flags.  */
18783   if (mips_abi == O32_ABI && USE_E_MIPS_ABI_O32)
18784     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O32;
18785   else if (mips_abi == O64_ABI)
18786     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O64;
18787   else if (mips_abi == EABI_ABI)
18788     {
18789       if (file_mips_opts.gp == 64)
18790         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI64;
18791       else
18792         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI32;
18793     }
18794   else if (mips_abi == N32_ABI)
18795     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ABI2;
18796
18797   /* Nothing to do for N64_ABI.  */
18798
18799   if (mips_32bitmode)
18800     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_32BITMODE;
18801
18802   if (mips_nan2008 == 1)
18803     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NAN2008;
18804
18805   /* 32 bit code with 64 bit FP registers.  */
18806   fpabi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
18807                                     Tag_GNU_MIPS_ABI_FP);
18808   if (fpabi == Val_GNU_MIPS_ABI_FP_OLD_64)
18809     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_FP64;
18810 }
18811 \f
18812 typedef struct proc {
18813   symbolS *func_sym;
18814   symbolS *func_end_sym;
18815   unsigned long reg_mask;
18816   unsigned long reg_offset;
18817   unsigned long fpreg_mask;
18818   unsigned long fpreg_offset;
18819   unsigned long frame_offset;
18820   unsigned long frame_reg;
18821   unsigned long pc_reg;
18822 } procS;
18823
18824 static procS cur_proc;
18825 static procS *cur_proc_ptr;
18826 static int numprocs;
18827
18828 /* Implement NOP_OPCODE.  We encode a MIPS16 nop as "1", a microMIPS nop
18829    as "2", and a normal nop as "0".  */
18830
18831 #define NOP_OPCODE_MIPS         0
18832 #define NOP_OPCODE_MIPS16       1
18833 #define NOP_OPCODE_MICROMIPS    2
18834
18835 char
18836 mips_nop_opcode (void)
18837 {
18838   if (seg_info (now_seg)->tc_segment_info_data.micromips)
18839     return NOP_OPCODE_MICROMIPS;
18840   else if (seg_info (now_seg)->tc_segment_info_data.mips16)
18841     return NOP_OPCODE_MIPS16;
18842   else
18843     return NOP_OPCODE_MIPS;
18844 }
18845
18846 /* Fill in an rs_align_code fragment.  Unlike elsewhere we want to use
18847    32-bit microMIPS NOPs here (if applicable).  */
18848
18849 void
18850 mips_handle_align (fragS *fragp)
18851 {
18852   char nop_opcode;
18853   char *p;
18854   int bytes, size, excess;
18855   valueT opcode;
18856
18857   if (fragp->fr_type != rs_align_code)
18858     return;
18859
18860   p = fragp->fr_literal + fragp->fr_fix;
18861   nop_opcode = *p;
18862   switch (nop_opcode)
18863     {
18864     case NOP_OPCODE_MICROMIPS:
18865       opcode = micromips_nop32_insn.insn_opcode;
18866       size = 4;
18867       break;
18868     case NOP_OPCODE_MIPS16:
18869       opcode = mips16_nop_insn.insn_opcode;
18870       size = 2;
18871       break;
18872     case NOP_OPCODE_MIPS:
18873     default:
18874       opcode = nop_insn.insn_opcode;
18875       size = 4;
18876       break;
18877     }
18878
18879   bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
18880   excess = bytes % size;
18881
18882   /* Handle the leading part if we're not inserting a whole number of
18883      instructions, and make it the end of the fixed part of the frag.
18884      Try to fit in a short microMIPS NOP if applicable and possible,
18885      and use zeroes otherwise.  */
18886   gas_assert (excess < 4);
18887   fragp->fr_fix += excess;
18888   switch (excess)
18889     {
18890     case 3:
18891       *p++ = '\0';
18892       /* Fall through.  */
18893     case 2:
18894       if (nop_opcode == NOP_OPCODE_MICROMIPS && !mips_opts.insn32)
18895         {
18896           p = write_compressed_insn (p, micromips_nop16_insn.insn_opcode, 2);
18897           break;
18898         }
18899       *p++ = '\0';
18900       /* Fall through.  */
18901     case 1:
18902       *p++ = '\0';
18903       /* Fall through.  */
18904     case 0:
18905       break;
18906     }
18907
18908   md_number_to_chars (p, opcode, size);
18909   fragp->fr_var = size;
18910 }
18911
18912 static long
18913 get_number (void)
18914 {
18915   int negative = 0;
18916   long val = 0;
18917
18918   if (*input_line_pointer == '-')
18919     {
18920       ++input_line_pointer;
18921       negative = 1;
18922     }
18923   if (!ISDIGIT (*input_line_pointer))
18924     as_bad (_("expected simple number"));
18925   if (input_line_pointer[0] == '0')
18926     {
18927       if (input_line_pointer[1] == 'x')
18928         {
18929           input_line_pointer += 2;
18930           while (ISXDIGIT (*input_line_pointer))
18931             {
18932               val <<= 4;
18933               val |= hex_value (*input_line_pointer++);
18934             }
18935           return negative ? -val : val;
18936         }
18937       else
18938         {
18939           ++input_line_pointer;
18940           while (ISDIGIT (*input_line_pointer))
18941             {
18942               val <<= 3;
18943               val |= *input_line_pointer++ - '0';
18944             }
18945           return negative ? -val : val;
18946         }
18947     }
18948   if (!ISDIGIT (*input_line_pointer))
18949     {
18950       printf (_(" *input_line_pointer == '%c' 0x%02x\n"),
18951               *input_line_pointer, *input_line_pointer);
18952       as_warn (_("invalid number"));
18953       return -1;
18954     }
18955   while (ISDIGIT (*input_line_pointer))
18956     {
18957       val *= 10;
18958       val += *input_line_pointer++ - '0';
18959     }
18960   return negative ? -val : val;
18961 }
18962
18963 /* The .file directive; just like the usual .file directive, but there
18964    is an initial number which is the ECOFF file index.  In the non-ECOFF
18965    case .file implies DWARF-2.  */
18966
18967 static void
18968 s_mips_file (int x ATTRIBUTE_UNUSED)
18969 {
18970   static int first_file_directive = 0;
18971
18972   if (ECOFF_DEBUGGING)
18973     {
18974       get_number ();
18975       s_app_file (0);
18976     }
18977   else
18978     {
18979       char *filename;
18980
18981       filename = dwarf2_directive_file (0);
18982
18983       /* Versions of GCC up to 3.1 start files with a ".file"
18984          directive even for stabs output.  Make sure that this
18985          ".file" is handled.  Note that you need a version of GCC
18986          after 3.1 in order to support DWARF-2 on MIPS.  */
18987       if (filename != NULL && ! first_file_directive)
18988         {
18989           (void) new_logical_line (filename, -1);
18990           s_app_file_string (filename, 0);
18991         }
18992       first_file_directive = 1;
18993     }
18994 }
18995
18996 /* The .loc directive, implying DWARF-2.  */
18997
18998 static void
18999 s_mips_loc (int x ATTRIBUTE_UNUSED)
19000 {
19001   if (!ECOFF_DEBUGGING)
19002     dwarf2_directive_loc (0);
19003 }
19004
19005 /* The .end directive.  */
19006
19007 static void
19008 s_mips_end (int x ATTRIBUTE_UNUSED)
19009 {
19010   symbolS *p;
19011
19012   /* Following functions need their own .frame and .cprestore directives.  */
19013   mips_frame_reg_valid = 0;
19014   mips_cprestore_valid = 0;
19015
19016   if (!is_end_of_line[(unsigned char) *input_line_pointer])
19017     {
19018       p = get_symbol ();
19019       demand_empty_rest_of_line ();
19020     }
19021   else
19022     p = NULL;
19023
19024   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
19025     as_warn (_(".end not in text section"));
19026
19027   if (!cur_proc_ptr)
19028     {
19029       as_warn (_(".end directive without a preceding .ent directive"));
19030       demand_empty_rest_of_line ();
19031       return;
19032     }
19033
19034   if (p != NULL)
19035     {
19036       gas_assert (S_GET_NAME (p));
19037       if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->func_sym)))
19038         as_warn (_(".end symbol does not match .ent symbol"));
19039
19040       if (debug_type == DEBUG_STABS)
19041         stabs_generate_asm_endfunc (S_GET_NAME (p),
19042                                     S_GET_NAME (p));
19043     }
19044   else
19045     as_warn (_(".end directive missing or unknown symbol"));
19046
19047   /* Create an expression to calculate the size of the function.  */
19048   if (p && cur_proc_ptr)
19049     {
19050       OBJ_SYMFIELD_TYPE *obj = symbol_get_obj (p);
19051       expressionS *exp = XNEW (expressionS);
19052
19053       obj->size = exp;
19054       exp->X_op = O_subtract;
19055       exp->X_add_symbol = symbol_temp_new_now ();
19056       exp->X_op_symbol = p;
19057       exp->X_add_number = 0;
19058
19059       cur_proc_ptr->func_end_sym = exp->X_add_symbol;
19060     }
19061
19062   /* Generate a .pdr section.  */
19063   if (!ECOFF_DEBUGGING && mips_flag_pdr)
19064     {
19065       segT saved_seg = now_seg;
19066       subsegT saved_subseg = now_subseg;
19067       expressionS exp;
19068       char *fragp;
19069
19070 #ifdef md_flush_pending_output
19071       md_flush_pending_output ();
19072 #endif
19073
19074       gas_assert (pdr_seg);
19075       subseg_set (pdr_seg, 0);
19076
19077       /* Write the symbol.  */
19078       exp.X_op = O_symbol;
19079       exp.X_add_symbol = p;
19080       exp.X_add_number = 0;
19081       emit_expr (&exp, 4);
19082
19083       fragp = frag_more (7 * 4);
19084
19085       md_number_to_chars (fragp, cur_proc_ptr->reg_mask, 4);
19086       md_number_to_chars (fragp + 4, cur_proc_ptr->reg_offset, 4);
19087       md_number_to_chars (fragp + 8, cur_proc_ptr->fpreg_mask, 4);
19088       md_number_to_chars (fragp + 12, cur_proc_ptr->fpreg_offset, 4);
19089       md_number_to_chars (fragp + 16, cur_proc_ptr->frame_offset, 4);
19090       md_number_to_chars (fragp + 20, cur_proc_ptr->frame_reg, 4);
19091       md_number_to_chars (fragp + 24, cur_proc_ptr->pc_reg, 4);
19092
19093       subseg_set (saved_seg, saved_subseg);
19094     }
19095
19096   cur_proc_ptr = NULL;
19097 }
19098
19099 /* The .aent and .ent directives.  */
19100
19101 static void
19102 s_mips_ent (int aent)
19103 {
19104   symbolS *symbolP;
19105
19106   symbolP = get_symbol ();
19107   if (*input_line_pointer == ',')
19108     ++input_line_pointer;
19109   SKIP_WHITESPACE ();
19110   if (ISDIGIT (*input_line_pointer)
19111       || *input_line_pointer == '-')
19112     get_number ();
19113
19114   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
19115     as_warn (_(".ent or .aent not in text section"));
19116
19117   if (!aent && cur_proc_ptr)
19118     as_warn (_("missing .end"));
19119
19120   if (!aent)
19121     {
19122       /* This function needs its own .frame and .cprestore directives.  */
19123       mips_frame_reg_valid = 0;
19124       mips_cprestore_valid = 0;
19125
19126       cur_proc_ptr = &cur_proc;
19127       memset (cur_proc_ptr, '\0', sizeof (procS));
19128
19129       cur_proc_ptr->func_sym = symbolP;
19130
19131       ++numprocs;
19132
19133       if (debug_type == DEBUG_STABS)
19134         stabs_generate_asm_func (S_GET_NAME (symbolP),
19135                                  S_GET_NAME (symbolP));
19136     }
19137
19138   symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
19139
19140   demand_empty_rest_of_line ();
19141 }
19142
19143 /* The .frame directive. If the mdebug section is present (IRIX 5 native)
19144    then ecoff.c (ecoff_directive_frame) is used. For embedded targets,
19145    s_mips_frame is used so that we can set the PDR information correctly.
19146    We can't use the ecoff routines because they make reference to the ecoff
19147    symbol table (in the mdebug section).  */
19148
19149 static void
19150 s_mips_frame (int ignore ATTRIBUTE_UNUSED)
19151 {
19152   if (ECOFF_DEBUGGING)
19153     s_ignore (ignore);
19154   else
19155     {
19156       long val;
19157
19158       if (cur_proc_ptr == (procS *) NULL)
19159         {
19160           as_warn (_(".frame outside of .ent"));
19161           demand_empty_rest_of_line ();
19162           return;
19163         }
19164
19165       cur_proc_ptr->frame_reg = tc_get_register (1);
19166
19167       SKIP_WHITESPACE ();
19168       if (*input_line_pointer++ != ','
19169           || get_absolute_expression_and_terminator (&val) != ',')
19170         {
19171           as_warn (_("bad .frame directive"));
19172           --input_line_pointer;
19173           demand_empty_rest_of_line ();
19174           return;
19175         }
19176
19177       cur_proc_ptr->frame_offset = val;
19178       cur_proc_ptr->pc_reg = tc_get_register (0);
19179
19180       demand_empty_rest_of_line ();
19181     }
19182 }
19183
19184 /* The .fmask and .mask directives. If the mdebug section is present
19185    (IRIX 5 native) then ecoff.c (ecoff_directive_mask) is used. For
19186    embedded targets, s_mips_mask is used so that we can set the PDR
19187    information correctly. We can't use the ecoff routines because they
19188    make reference to the ecoff symbol table (in the mdebug section).  */
19189
19190 static void
19191 s_mips_mask (int reg_type)
19192 {
19193   if (ECOFF_DEBUGGING)
19194     s_ignore (reg_type);
19195   else
19196     {
19197       long mask, off;
19198
19199       if (cur_proc_ptr == (procS *) NULL)
19200         {
19201           as_warn (_(".mask/.fmask outside of .ent"));
19202           demand_empty_rest_of_line ();
19203           return;
19204         }
19205
19206       if (get_absolute_expression_and_terminator (&mask) != ',')
19207         {
19208           as_warn (_("bad .mask/.fmask directive"));
19209           --input_line_pointer;
19210           demand_empty_rest_of_line ();
19211           return;
19212         }
19213
19214       off = get_absolute_expression ();
19215
19216       if (reg_type == 'F')
19217         {
19218           cur_proc_ptr->fpreg_mask = mask;
19219           cur_proc_ptr->fpreg_offset = off;
19220         }
19221       else
19222         {
19223           cur_proc_ptr->reg_mask = mask;
19224           cur_proc_ptr->reg_offset = off;
19225         }
19226
19227       demand_empty_rest_of_line ();
19228     }
19229 }
19230
19231 /* A table describing all the processors gas knows about.  Names are
19232    matched in the order listed.
19233
19234    To ease comparison, please keep this table in the same order as
19235    gcc's mips_cpu_info_table[].  */
19236 static const struct mips_cpu_info mips_cpu_info_table[] =
19237 {
19238   /* Entries for generic ISAs */
19239   { "mips1",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS1,    CPU_R3000 },
19240   { "mips2",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS2,    CPU_R6000 },
19241   { "mips3",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS3,    CPU_R4000 },
19242   { "mips4",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS4,    CPU_R8000 },
19243   { "mips5",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS5,    CPU_MIPS5 },
19244   { "mips32",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS32,   CPU_MIPS32 },
19245   { "mips32r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R2, CPU_MIPS32R2 },
19246   { "mips32r3",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R3, CPU_MIPS32R3 },
19247   { "mips32r5",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R5, CPU_MIPS32R5 },
19248   { "mips32r6",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R6, CPU_MIPS32R6 },
19249   { "mips64",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS64,   CPU_MIPS64 },
19250   { "mips64r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R2, CPU_MIPS64R2 },
19251   { "mips64r3",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R3, CPU_MIPS64R3 },
19252   { "mips64r5",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R5, CPU_MIPS64R5 },
19253   { "mips64r6",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R6, CPU_MIPS64R6 },
19254
19255   /* MIPS I */
19256   { "r3000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
19257   { "r2000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
19258   { "r3900",          0, 0,                     ISA_MIPS1,    CPU_R3900 },
19259
19260   /* MIPS II */
19261   { "r6000",          0, 0,                     ISA_MIPS2,    CPU_R6000 },
19262
19263   /* MIPS III */
19264   { "r4000",          0, 0,                     ISA_MIPS3,    CPU_R4000 },
19265   { "r4010",          0, 0,                     ISA_MIPS2,    CPU_R4010 },
19266   { "vr4100",         0, 0,                     ISA_MIPS3,    CPU_VR4100 },
19267   { "vr4111",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
19268   { "vr4120",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
19269   { "vr4130",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
19270   { "vr4181",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
19271   { "vr4300",         0, 0,                     ISA_MIPS3,    CPU_R4300 },
19272   { "r4400",          0, 0,                     ISA_MIPS3,    CPU_R4400 },
19273   { "r4600",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
19274   { "orion",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
19275   { "r4650",          0, 0,                     ISA_MIPS3,    CPU_R4650 },
19276   { "r5900",          0, 0,                     ISA_MIPS3,    CPU_R5900 },
19277   /* ST Microelectronics Loongson 2E and 2F cores */
19278   { "loongson2e",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2E },
19279   { "loongson2f",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2F },
19280
19281   /* MIPS IV */
19282   { "r8000",          0, 0,                     ISA_MIPS4,    CPU_R8000 },
19283   { "r10000",         0, 0,                     ISA_MIPS4,    CPU_R10000 },
19284   { "r12000",         0, 0,                     ISA_MIPS4,    CPU_R12000 },
19285   { "r14000",         0, 0,                     ISA_MIPS4,    CPU_R14000 },
19286   { "r16000",         0, 0,                     ISA_MIPS4,    CPU_R16000 },
19287   { "vr5000",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
19288   { "vr5400",         0, 0,                     ISA_MIPS4,    CPU_VR5400 },
19289   { "vr5500",         0, 0,                     ISA_MIPS4,    CPU_VR5500 },
19290   { "rm5200",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
19291   { "rm5230",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
19292   { "rm5231",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
19293   { "rm5261",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
19294   { "rm5721",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
19295   { "rm7000",         0, 0,                     ISA_MIPS4,    CPU_RM7000 },
19296   { "rm9000",         0, 0,                     ISA_MIPS4,    CPU_RM9000 },
19297
19298   /* MIPS 32 */
19299   { "4kc",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
19300   { "4km",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
19301   { "4kp",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
19302   { "4ksc",           0, ASE_SMARTMIPS,         ISA_MIPS32,   CPU_MIPS32 },
19303
19304   /* MIPS 32 Release 2 */
19305   { "4kec",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19306   { "4kem",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19307   { "4kep",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19308   { "4ksd",           0, ASE_SMARTMIPS,         ISA_MIPS32R2, CPU_MIPS32R2 },
19309   { "m4k",            0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19310   { "m4kp",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19311   { "m14k",           0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
19312   { "m14kc",          0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
19313   { "m14ke",          0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
19314                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
19315   { "m14kec",         0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
19316                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
19317   { "24kc",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19318   { "24kf2_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19319   { "24kf",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19320   { "24kf1_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19321   /* Deprecated forms of the above.  */
19322   { "24kfx",          0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19323   { "24kx",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
19324   /* 24KE is a 24K with DSP ASE, other ASEs are optional.  */
19325   { "24kec",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
19326   { "24kef2_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
19327   { "24kef",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
19328   { "24kef1_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
19329   /* Deprecated forms of the above.  */
19330   { "24kefx",         0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
19331   { "24kex",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
19332   /* 34K is a 24K with DSP and MT ASE, other ASEs are optional.  */
19333   { "34kc",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19334   { "34kf2_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19335   { "34kf",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19336   { "34kf1_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19337   /* Deprecated forms of the above.  */
19338   { "34kfx",          0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19339   { "34kx",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19340   /* 34Kn is a 34kc without DSP.  */
19341   { "34kn",           0, ASE_MT,                ISA_MIPS32R2, CPU_MIPS32R2 },
19342   /* 74K with DSP and DSPR2 ASE, other ASEs are optional.  */
19343   { "74kc",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
19344   { "74kf2_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
19345   { "74kf",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
19346   { "74kf1_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
19347   { "74kf3_2",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
19348   /* Deprecated forms of the above.  */
19349   { "74kfx",          0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
19350   { "74kx",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
19351   /* 1004K cores are multiprocessor versions of the 34K.  */
19352   { "1004kc",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19353   { "1004kf2_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19354   { "1004kf",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19355   { "1004kf1_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19356   /* interaptiv is the new name for 1004kf */
19357   { "interaptiv",     0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
19358   /* M5100 family */
19359   { "m5100",          0, ASE_MCU,               ISA_MIPS32R5, CPU_MIPS32R5 },
19360   { "m5101",          0, ASE_MCU,               ISA_MIPS32R5, CPU_MIPS32R5 },
19361   /* P5600 with EVA and Virtualization ASEs, other ASEs are optional.  */
19362   { "p5600",          0, ASE_VIRT | ASE_EVA | ASE_XPA,  ISA_MIPS32R5, CPU_MIPS32R5 },
19363
19364   /* MIPS 64 */
19365   { "5kc",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
19366   { "5kf",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
19367   { "20kc",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
19368   { "25kf",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
19369
19370   /* Broadcom SB-1 CPU core */
19371   { "sb1",            0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
19372   /* Broadcom SB-1A CPU core */
19373   { "sb1a",           0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
19374
19375   { "loongson3a",     0, 0,                     ISA_MIPS64R2, CPU_LOONGSON_3A },
19376
19377   /* MIPS 64 Release 2 */
19378
19379   /* Cavium Networks Octeon CPU core */
19380   { "octeon",         0, 0,                     ISA_MIPS64R2, CPU_OCTEON },
19381   { "octeon+",        0, 0,                     ISA_MIPS64R2, CPU_OCTEONP },
19382   { "octeon2",        0, 0,                     ISA_MIPS64R2, CPU_OCTEON2 },
19383   { "octeon3",        0, ASE_VIRT | ASE_VIRT64, ISA_MIPS64R5, CPU_OCTEON3 },
19384
19385   /* RMI Xlr */
19386   { "xlr",            0, 0,                     ISA_MIPS64,   CPU_XLR },
19387
19388   /* Broadcom XLP.
19389      XLP is mostly like XLR, with the prominent exception that it is
19390      MIPS64R2 rather than MIPS64.  */
19391   { "xlp",            0, 0,                     ISA_MIPS64R2, CPU_XLR },
19392
19393   /* MIPS 64 Release 6 */
19394   { "i6400",          0, ASE_MSA,               ISA_MIPS64R6, CPU_MIPS64R6},
19395   { "p6600",          0, ASE_VIRT | ASE_MSA,    ISA_MIPS64R6, CPU_MIPS64R6},
19396
19397   /* End marker */
19398   { NULL, 0, 0, 0, 0 }
19399 };
19400
19401
19402 /* Return true if GIVEN is the same as CANONICAL, or if it is CANONICAL
19403    with a final "000" replaced by "k".  Ignore case.
19404
19405    Note: this function is shared between GCC and GAS.  */
19406
19407 static bfd_boolean
19408 mips_strict_matching_cpu_name_p (const char *canonical, const char *given)
19409 {
19410   while (*given != 0 && TOLOWER (*given) == TOLOWER (*canonical))
19411     given++, canonical++;
19412
19413   return ((*given == 0 && *canonical == 0)
19414           || (strcmp (canonical, "000") == 0 && strcasecmp (given, "k") == 0));
19415 }
19416
19417
19418 /* Return true if GIVEN matches CANONICAL, where GIVEN is a user-supplied
19419    CPU name.  We've traditionally allowed a lot of variation here.
19420
19421    Note: this function is shared between GCC and GAS.  */
19422
19423 static bfd_boolean
19424 mips_matching_cpu_name_p (const char *canonical, const char *given)
19425 {
19426   /* First see if the name matches exactly, or with a final "000"
19427      turned into "k".  */
19428   if (mips_strict_matching_cpu_name_p (canonical, given))
19429     return TRUE;
19430
19431   /* If not, try comparing based on numerical designation alone.
19432      See if GIVEN is an unadorned number, or 'r' followed by a number.  */
19433   if (TOLOWER (*given) == 'r')
19434     given++;
19435   if (!ISDIGIT (*given))
19436     return FALSE;
19437
19438   /* Skip over some well-known prefixes in the canonical name,
19439      hoping to find a number there too.  */
19440   if (TOLOWER (canonical[0]) == 'v' && TOLOWER (canonical[1]) == 'r')
19441     canonical += 2;
19442   else if (TOLOWER (canonical[0]) == 'r' && TOLOWER (canonical[1]) == 'm')
19443     canonical += 2;
19444   else if (TOLOWER (canonical[0]) == 'r')
19445     canonical += 1;
19446
19447   return mips_strict_matching_cpu_name_p (canonical, given);
19448 }
19449
19450
19451 /* Parse an option that takes the name of a processor as its argument.
19452    OPTION is the name of the option and CPU_STRING is the argument.
19453    Return the corresponding processor enumeration if the CPU_STRING is
19454    recognized, otherwise report an error and return null.
19455
19456    A similar function exists in GCC.  */
19457
19458 static const struct mips_cpu_info *
19459 mips_parse_cpu (const char *option, const char *cpu_string)
19460 {
19461   const struct mips_cpu_info *p;
19462
19463   /* 'from-abi' selects the most compatible architecture for the given
19464      ABI: MIPS I for 32-bit ABIs and MIPS III for 64-bit ABIs.  For the
19465      EABIs, we have to decide whether we're using the 32-bit or 64-bit
19466      version.  Look first at the -mgp options, if given, otherwise base
19467      the choice on MIPS_DEFAULT_64BIT.
19468
19469      Treat NO_ABI like the EABIs.  One reason to do this is that the
19470      plain 'mips' and 'mips64' configs have 'from-abi' as their default
19471      architecture.  This code picks MIPS I for 'mips' and MIPS III for
19472      'mips64', just as we did in the days before 'from-abi'.  */
19473   if (strcasecmp (cpu_string, "from-abi") == 0)
19474     {
19475       if (ABI_NEEDS_32BIT_REGS (mips_abi))
19476         return mips_cpu_info_from_isa (ISA_MIPS1);
19477
19478       if (ABI_NEEDS_64BIT_REGS (mips_abi))
19479         return mips_cpu_info_from_isa (ISA_MIPS3);
19480
19481       if (file_mips_opts.gp >= 0)
19482         return mips_cpu_info_from_isa (file_mips_opts.gp == 32
19483                                        ? ISA_MIPS1 : ISA_MIPS3);
19484
19485       return mips_cpu_info_from_isa (MIPS_DEFAULT_64BIT
19486                                      ? ISA_MIPS3
19487                                      : ISA_MIPS1);
19488     }
19489
19490   /* 'default' has traditionally been a no-op.  Probably not very useful.  */
19491   if (strcasecmp (cpu_string, "default") == 0)
19492     return 0;
19493
19494   for (p = mips_cpu_info_table; p->name != 0; p++)
19495     if (mips_matching_cpu_name_p (p->name, cpu_string))
19496       return p;
19497
19498   as_bad (_("bad value (%s) for %s"), cpu_string, option);
19499   return 0;
19500 }
19501
19502 /* Return the canonical processor information for ISA (a member of the
19503    ISA_MIPS* enumeration).  */
19504
19505 static const struct mips_cpu_info *
19506 mips_cpu_info_from_isa (int isa)
19507 {
19508   int i;
19509
19510   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
19511     if ((mips_cpu_info_table[i].flags & MIPS_CPU_IS_ISA)
19512         && isa == mips_cpu_info_table[i].isa)
19513       return (&mips_cpu_info_table[i]);
19514
19515   return NULL;
19516 }
19517
19518 static const struct mips_cpu_info *
19519 mips_cpu_info_from_arch (int arch)
19520 {
19521   int i;
19522
19523   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
19524     if (arch == mips_cpu_info_table[i].cpu)
19525       return (&mips_cpu_info_table[i]);
19526
19527   return NULL;
19528 }
19529 \f
19530 static void
19531 show (FILE *stream, const char *string, int *col_p, int *first_p)
19532 {
19533   if (*first_p)
19534     {
19535       fprintf (stream, "%24s", "");
19536       *col_p = 24;
19537     }
19538   else
19539     {
19540       fprintf (stream, ", ");
19541       *col_p += 2;
19542     }
19543
19544   if (*col_p + strlen (string) > 72)
19545     {
19546       fprintf (stream, "\n%24s", "");
19547       *col_p = 24;
19548     }
19549
19550   fprintf (stream, "%s", string);
19551   *col_p += strlen (string);
19552
19553   *first_p = 0;
19554 }
19555
19556 void
19557 md_show_usage (FILE *stream)
19558 {
19559   int column, first;
19560   size_t i;
19561
19562   fprintf (stream, _("\
19563 MIPS options:\n\
19564 -EB                     generate big endian output\n\
19565 -EL                     generate little endian output\n\
19566 -g, -g2                 do not remove unneeded NOPs or swap branches\n\
19567 -G NUM                  allow referencing objects up to NUM bytes\n\
19568                         implicitly with the gp register [default 8]\n"));
19569   fprintf (stream, _("\
19570 -mips1                  generate MIPS ISA I instructions\n\
19571 -mips2                  generate MIPS ISA II instructions\n\
19572 -mips3                  generate MIPS ISA III instructions\n\
19573 -mips4                  generate MIPS ISA IV instructions\n\
19574 -mips5                  generate MIPS ISA V instructions\n\
19575 -mips32                 generate MIPS32 ISA instructions\n\
19576 -mips32r2               generate MIPS32 release 2 ISA instructions\n\
19577 -mips32r3               generate MIPS32 release 3 ISA instructions\n\
19578 -mips32r5               generate MIPS32 release 5 ISA instructions\n\
19579 -mips32r6               generate MIPS32 release 6 ISA instructions\n\
19580 -mips64                 generate MIPS64 ISA instructions\n\
19581 -mips64r2               generate MIPS64 release 2 ISA instructions\n\
19582 -mips64r3               generate MIPS64 release 3 ISA instructions\n\
19583 -mips64r5               generate MIPS64 release 5 ISA instructions\n\
19584 -mips64r6               generate MIPS64 release 6 ISA instructions\n\
19585 -march=CPU/-mtune=CPU   generate code/schedule for CPU, where CPU is one of:\n"));
19586
19587   first = 1;
19588
19589   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
19590     show (stream, mips_cpu_info_table[i].name, &column, &first);
19591   show (stream, "from-abi", &column, &first);
19592   fputc ('\n', stream);
19593
19594   fprintf (stream, _("\
19595 -mCPU                   equivalent to -march=CPU -mtune=CPU. Deprecated.\n\
19596 -no-mCPU                don't generate code specific to CPU.\n\
19597                         For -mCPU and -no-mCPU, CPU must be one of:\n"));
19598
19599   first = 1;
19600
19601   show (stream, "3900", &column, &first);
19602   show (stream, "4010", &column, &first);
19603   show (stream, "4100", &column, &first);
19604   show (stream, "4650", &column, &first);
19605   fputc ('\n', stream);
19606
19607   fprintf (stream, _("\
19608 -mips16                 generate mips16 instructions\n\
19609 -no-mips16              do not generate mips16 instructions\n"));
19610   fprintf (stream, _("\
19611 -mmicromips             generate microMIPS instructions\n\
19612 -mno-micromips          do not generate microMIPS instructions\n"));
19613   fprintf (stream, _("\
19614 -msmartmips             generate smartmips instructions\n\
19615 -mno-smartmips          do not generate smartmips instructions\n"));
19616   fprintf (stream, _("\
19617 -mdsp                   generate DSP instructions\n\
19618 -mno-dsp                do not generate DSP instructions\n"));
19619   fprintf (stream, _("\
19620 -mdspr2                 generate DSP R2 instructions\n\
19621 -mno-dspr2              do not generate DSP R2 instructions\n"));
19622   fprintf (stream, _("\
19623 -mdspr3                 generate DSP R3 instructions\n\
19624 -mno-dspr3              do not generate DSP R3 instructions\n"));
19625   fprintf (stream, _("\
19626 -mmt                    generate MT instructions\n\
19627 -mno-mt                 do not generate MT instructions\n"));
19628   fprintf (stream, _("\
19629 -mmcu                   generate MCU instructions\n\
19630 -mno-mcu                do not generate MCU instructions\n"));
19631   fprintf (stream, _("\
19632 -mmsa                   generate MSA instructions\n\
19633 -mno-msa                do not generate MSA instructions\n"));
19634   fprintf (stream, _("\
19635 -mxpa                   generate eXtended Physical Address (XPA) instructions\n\
19636 -mno-xpa                do not generate eXtended Physical Address (XPA) instructions\n"));
19637   fprintf (stream, _("\
19638 -mvirt                  generate Virtualization instructions\n\
19639 -mno-virt               do not generate Virtualization instructions\n"));
19640   fprintf (stream, _("\
19641 -minsn32                only generate 32-bit microMIPS instructions\n\
19642 -mno-insn32             generate all microMIPS instructions\n"));
19643   fprintf (stream, _("\
19644 -mfix-loongson2f-jump   work around Loongson2F JUMP instructions\n\
19645 -mfix-loongson2f-nop    work around Loongson2F NOP errata\n\
19646 -mfix-vr4120            work around certain VR4120 errata\n\
19647 -mfix-vr4130            work around VR4130 mflo/mfhi errata\n\
19648 -mfix-24k               insert a nop after ERET and DERET instructions\n\
19649 -mfix-cn63xxp1          work around CN63XXP1 PREF errata\n\
19650 -mgp32                  use 32-bit GPRs, regardless of the chosen ISA\n\
19651 -mfp32                  use 32-bit FPRs, regardless of the chosen ISA\n\
19652 -msym32                 assume all symbols have 32-bit values\n\
19653 -O0                     remove unneeded NOPs, do not swap branches\n\
19654 -O                      remove unneeded NOPs and swap branches\n\
19655 --trap, --no-break      trap exception on div by 0 and mult overflow\n\
19656 --break, --no-trap      break exception on div by 0 and mult overflow\n"));
19657   fprintf (stream, _("\
19658 -mhard-float            allow floating-point instructions\n\
19659 -msoft-float            do not allow floating-point instructions\n\
19660 -msingle-float          only allow 32-bit floating-point operations\n\
19661 -mdouble-float          allow 32-bit and 64-bit floating-point operations\n\
19662 --[no-]construct-floats [dis]allow floating point values to be constructed\n\
19663 --[no-]relax-branch     [dis]allow out-of-range branches to be relaxed\n\
19664 -mnan=ENCODING          select an IEEE 754 NaN encoding convention, either of:\n"));
19665
19666   first = 1;
19667
19668   show (stream, "legacy", &column, &first);
19669   show (stream, "2008", &column, &first);
19670
19671   fputc ('\n', stream);
19672
19673   fprintf (stream, _("\
19674 -KPIC, -call_shared     generate SVR4 position independent code\n\
19675 -call_nonpic            generate non-PIC code that can operate with DSOs\n\
19676 -mvxworks-pic           generate VxWorks position independent code\n\
19677 -non_shared             do not generate code that can operate with DSOs\n\
19678 -xgot                   assume a 32 bit GOT\n\
19679 -mpdr, -mno-pdr         enable/disable creation of .pdr sections\n\
19680 -mshared, -mno-shared   disable/enable .cpload optimization for\n\
19681                         position dependent (non shared) code\n\
19682 -mabi=ABI               create ABI conformant object file for:\n"));
19683
19684   first = 1;
19685
19686   show (stream, "32", &column, &first);
19687   show (stream, "o64", &column, &first);
19688   show (stream, "n32", &column, &first);
19689   show (stream, "64", &column, &first);
19690   show (stream, "eabi", &column, &first);
19691
19692   fputc ('\n', stream);
19693
19694   fprintf (stream, _("\
19695 -32                     create o32 ABI object file (default)\n\
19696 -n32                    create n32 ABI object file\n\
19697 -64                     create 64 ABI object file\n"));
19698 }
19699
19700 #ifdef TE_IRIX
19701 enum dwarf2_format
19702 mips_dwarf2_format (asection *sec ATTRIBUTE_UNUSED)
19703 {
19704   if (HAVE_64BIT_SYMBOLS)
19705     return dwarf2_format_64bit_irix;
19706   else
19707     return dwarf2_format_32bit;
19708 }
19709 #endif
19710
19711 int
19712 mips_dwarf2_addr_size (void)
19713 {
19714   if (HAVE_64BIT_OBJECTS)
19715     return 8;
19716   else
19717     return 4;
19718 }
19719
19720 /* Standard calling conventions leave the CFA at SP on entry.  */
19721 void
19722 mips_cfi_frame_initial_instructions (void)
19723 {
19724   cfi_add_CFA_def_cfa_register (SP);
19725 }
19726
19727 int
19728 tc_mips_regname_to_dw2regnum (char *regname)
19729 {
19730   unsigned int regnum = -1;
19731   unsigned int reg;
19732
19733   if (reg_lookup (&regname, RTYPE_GP | RTYPE_NUM, &reg))
19734     regnum = reg;
19735
19736   return regnum;
19737 }
19738
19739 /* Implement CONVERT_SYMBOLIC_ATTRIBUTE.
19740    Given a symbolic attribute NAME, return the proper integer value.
19741    Returns -1 if the attribute is not known.  */
19742
19743 int
19744 mips_convert_symbolic_attribute (const char *name)
19745 {
19746   static const struct
19747   {
19748     const char * name;
19749     const int    tag;
19750   }
19751   attribute_table[] =
19752     {
19753 #define T(tag) {#tag, tag}
19754       T (Tag_GNU_MIPS_ABI_FP),
19755       T (Tag_GNU_MIPS_ABI_MSA),
19756 #undef T
19757     };
19758   unsigned int i;
19759
19760   if (name == NULL)
19761     return -1;
19762
19763   for (i = 0; i < ARRAY_SIZE (attribute_table); i++)
19764     if (streq (name, attribute_table[i].name))
19765       return attribute_table[i].tag;
19766
19767   return -1;
19768 }
19769
19770 void
19771 md_mips_end (void)
19772 {
19773   int fpabi = Val_GNU_MIPS_ABI_FP_ANY;
19774
19775   mips_emit_delays ();
19776   if (cur_proc_ptr)
19777     as_warn (_("missing .end at end of assembly"));
19778
19779   /* Just in case no code was emitted, do the consistency check.  */
19780   file_mips_check_options ();
19781
19782   /* Set a floating-point ABI if the user did not.  */
19783   if (obj_elf_seen_attribute (OBJ_ATTR_GNU, Tag_GNU_MIPS_ABI_FP))
19784     {
19785       /* Perform consistency checks on the floating-point ABI.  */
19786       fpabi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
19787                                         Tag_GNU_MIPS_ABI_FP);
19788       if (fpabi != Val_GNU_MIPS_ABI_FP_ANY)
19789         check_fpabi (fpabi);
19790     }
19791   else
19792     {
19793       /* Soft-float gets precedence over single-float, the two options should
19794          not be used together so this should not matter.  */
19795       if (file_mips_opts.soft_float == 1)
19796         fpabi = Val_GNU_MIPS_ABI_FP_SOFT;
19797       /* Single-float gets precedence over all double_float cases.  */
19798       else if (file_mips_opts.single_float == 1)
19799         fpabi = Val_GNU_MIPS_ABI_FP_SINGLE;
19800       else
19801         {
19802           switch (file_mips_opts.fp)
19803             {
19804             case 32:
19805               if (file_mips_opts.gp == 32)
19806                 fpabi = Val_GNU_MIPS_ABI_FP_DOUBLE;
19807               break;
19808             case 0:
19809               fpabi = Val_GNU_MIPS_ABI_FP_XX;
19810               break;
19811             case 64:
19812               if (file_mips_opts.gp == 32 && !file_mips_opts.oddspreg)
19813                 fpabi = Val_GNU_MIPS_ABI_FP_64A;
19814               else if (file_mips_opts.gp == 32)
19815                 fpabi = Val_GNU_MIPS_ABI_FP_64;
19816               else
19817                 fpabi = Val_GNU_MIPS_ABI_FP_DOUBLE;
19818               break;
19819             }
19820         }
19821
19822       bfd_elf_add_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
19823                                 Tag_GNU_MIPS_ABI_FP, fpabi);
19824     }
19825 }
19826
19827 /*  Returns the relocation type required for a particular CFI encoding.  */
19828
19829 bfd_reloc_code_real_type
19830 mips_cfi_reloc_for_encoding (int encoding)
19831 {
19832   if (encoding == (DW_EH_PE_sdata4 | DW_EH_PE_pcrel))
19833     return BFD_RELOC_32_PCREL;
19834   else return BFD_RELOC_NONE;
19835 }