MIPS16/GAS: Fix delay slot filling across frags
[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 the branch is
1155    unconditional, whether it is compact, whether it stores the link
1156    address implicitly in $ra, whether relaxation of out-of-range 32-bit
1157    branches to a sequence of instructions is enabled, and whether the
1158    displacement of a branch is too large to fit as an immediate argument
1159    of a 16-bit and a 32-bit branch, respectively.  */
1160 #define RELAX_MICROMIPS_ENCODE(type, at, uncond, compact, link, \
1161                                relax32, toofar16, toofar32)     \
1162   (0x40000000                                                   \
1163    | ((type) & 0xff)                                            \
1164    | (((at) & 0x1f) << 8)                                       \
1165    | ((uncond) ? 0x2000 : 0)                                    \
1166    | ((compact) ? 0x4000 : 0)                                   \
1167    | ((link) ? 0x8000 : 0)                                      \
1168    | ((relax32) ? 0x10000 : 0)                                  \
1169    | ((toofar16) ? 0x20000 : 0)                                 \
1170    | ((toofar32) ? 0x40000 : 0))
1171 #define RELAX_MICROMIPS_P(i) (((i) & 0xc0000000) == 0x40000000)
1172 #define RELAX_MICROMIPS_TYPE(i) ((i) & 0xff)
1173 #define RELAX_MICROMIPS_AT(i) (((i) >> 8) & 0x1f)
1174 #define RELAX_MICROMIPS_UNCOND(i) (((i) & 0x2000) != 0)
1175 #define RELAX_MICROMIPS_COMPACT(i) (((i) & 0x4000) != 0)
1176 #define RELAX_MICROMIPS_LINK(i) (((i) & 0x8000) != 0)
1177 #define RELAX_MICROMIPS_RELAX32(i) (((i) & 0x10000) != 0)
1178
1179 #define RELAX_MICROMIPS_TOOFAR16(i) (((i) & 0x20000) != 0)
1180 #define RELAX_MICROMIPS_MARK_TOOFAR16(i) ((i) | 0x20000)
1181 #define RELAX_MICROMIPS_CLEAR_TOOFAR16(i) ((i) & ~0x20000)
1182 #define RELAX_MICROMIPS_TOOFAR32(i) (((i) & 0x40000) != 0)
1183 #define RELAX_MICROMIPS_MARK_TOOFAR32(i) ((i) | 0x40000)
1184 #define RELAX_MICROMIPS_CLEAR_TOOFAR32(i) ((i) & ~0x40000)
1185
1186 /* Sign-extend 16-bit value X.  */
1187 #define SEXT_16BIT(X) ((((X) + 0x8000) & 0xffff) - 0x8000)
1188
1189 /* Is the given value a sign-extended 32-bit value?  */
1190 #define IS_SEXT_32BIT_NUM(x)                                            \
1191   (((x) &~ (offsetT) 0x7fffffff) == 0                                   \
1192    || (((x) &~ (offsetT) 0x7fffffff) == ~ (offsetT) 0x7fffffff))
1193
1194 /* Is the given value a sign-extended 16-bit value?  */
1195 #define IS_SEXT_16BIT_NUM(x)                                            \
1196   (((x) &~ (offsetT) 0x7fff) == 0                                       \
1197    || (((x) &~ (offsetT) 0x7fff) == ~ (offsetT) 0x7fff))
1198
1199 /* Is the given value a sign-extended 12-bit value?  */
1200 #define IS_SEXT_12BIT_NUM(x)                                            \
1201   (((((x) & 0xfff) ^ 0x800LL) - 0x800LL) == (x))
1202
1203 /* Is the given value a sign-extended 9-bit value?  */
1204 #define IS_SEXT_9BIT_NUM(x)                                             \
1205   (((((x) & 0x1ff) ^ 0x100LL) - 0x100LL) == (x))
1206
1207 /* Is the given value a zero-extended 32-bit value?  Or a negated one?  */
1208 #define IS_ZEXT_32BIT_NUM(x)                                            \
1209   (((x) &~ (offsetT) 0xffffffff) == 0                                   \
1210    || (((x) &~ (offsetT) 0xffffffff) == ~ (offsetT) 0xffffffff))
1211
1212 /* Extract bits MASK << SHIFT from STRUCT and shift them right
1213    SHIFT places.  */
1214 #define EXTRACT_BITS(STRUCT, MASK, SHIFT) \
1215   (((STRUCT) >> (SHIFT)) & (MASK))
1216
1217 /* Extract the operand given by FIELD from mips_cl_insn INSN.  */
1218 #define EXTRACT_OPERAND(MICROMIPS, FIELD, INSN) \
1219   (!(MICROMIPS) \
1220    ? EXTRACT_BITS ((INSN).insn_opcode, OP_MASK_##FIELD, OP_SH_##FIELD) \
1221    : EXTRACT_BITS ((INSN).insn_opcode, \
1222                    MICROMIPSOP_MASK_##FIELD, MICROMIPSOP_SH_##FIELD))
1223 #define MIPS16_EXTRACT_OPERAND(FIELD, INSN) \
1224   EXTRACT_BITS ((INSN).insn_opcode, \
1225                 MIPS16OP_MASK_##FIELD, \
1226                 MIPS16OP_SH_##FIELD)
1227
1228 /* The MIPS16 EXTEND opcode, shifted left 16 places.  */
1229 #define MIPS16_EXTEND (0xf000U << 16)
1230 \f
1231 /* Whether or not we are emitting a branch-likely macro.  */
1232 static bfd_boolean emit_branch_likely_macro = FALSE;
1233
1234 /* Global variables used when generating relaxable macros.  See the
1235    comment above RELAX_ENCODE for more details about how relaxation
1236    is used.  */
1237 static struct {
1238   /* 0 if we're not emitting a relaxable macro.
1239      1 if we're emitting the first of the two relaxation alternatives.
1240      2 if we're emitting the second alternative.  */
1241   int sequence;
1242
1243   /* The first relaxable fixup in the current frag.  (In other words,
1244      the first fixup that refers to relaxable code.)  */
1245   fixS *first_fixup;
1246
1247   /* sizes[0] says how many bytes of the first alternative are stored in
1248      the current frag.  Likewise sizes[1] for the second alternative.  */
1249   unsigned int sizes[2];
1250
1251   /* The symbol on which the choice of sequence depends.  */
1252   symbolS *symbol;
1253 } mips_relax;
1254 \f
1255 /* Global variables used to decide whether a macro needs a warning.  */
1256 static struct {
1257   /* True if the macro is in a branch delay slot.  */
1258   bfd_boolean delay_slot_p;
1259
1260   /* Set to the length in bytes required if the macro is in a delay slot
1261      that requires a specific length of instruction, otherwise zero.  */
1262   unsigned int delay_slot_length;
1263
1264   /* For relaxable macros, sizes[0] is the length of the first alternative
1265      in bytes and sizes[1] is the length of the second alternative.
1266      For non-relaxable macros, both elements give the length of the
1267      macro in bytes.  */
1268   unsigned int sizes[2];
1269
1270   /* For relaxable macros, first_insn_sizes[0] is the length of the first
1271      instruction of the first alternative in bytes and first_insn_sizes[1]
1272      is the length of the first instruction of the second alternative.
1273      For non-relaxable macros, both elements give the length of the first
1274      instruction in bytes.
1275
1276      Set to zero if we haven't yet seen the first instruction.  */
1277   unsigned int first_insn_sizes[2];
1278
1279   /* For relaxable macros, insns[0] is the number of instructions for the
1280      first alternative and insns[1] is the number of instructions for the
1281      second alternative.
1282
1283      For non-relaxable macros, both elements give the number of
1284      instructions for the macro.  */
1285   unsigned int insns[2];
1286
1287   /* The first variant frag for this macro.  */
1288   fragS *first_frag;
1289 } mips_macro_warning;
1290 \f
1291 /* Prototypes for static functions.  */
1292
1293 enum mips_regclass { MIPS_GR_REG, MIPS_FP_REG, MIPS16_REG };
1294
1295 static void append_insn
1296   (struct mips_cl_insn *, expressionS *, bfd_reloc_code_real_type *,
1297    bfd_boolean expansionp);
1298 static void mips_no_prev_insn (void);
1299 static void macro_build (expressionS *, const char *, const char *, ...);
1300 static void mips16_macro_build
1301   (expressionS *, const char *, const char *, va_list *);
1302 static void load_register (int, expressionS *, int);
1303 static void macro_start (void);
1304 static void macro_end (void);
1305 static void macro (struct mips_cl_insn *ip, char *str);
1306 static void mips16_macro (struct mips_cl_insn * ip);
1307 static void mips_ip (char *str, struct mips_cl_insn * ip);
1308 static void mips16_ip (char *str, struct mips_cl_insn * ip);
1309 static void mips16_immed
1310   (const char *, unsigned int, int, bfd_reloc_code_real_type, offsetT,
1311    unsigned int, unsigned long *);
1312 static size_t my_getSmallExpression
1313   (expressionS *, bfd_reloc_code_real_type *, char *);
1314 static void my_getExpression (expressionS *, char *);
1315 static void s_align (int);
1316 static void s_change_sec (int);
1317 static void s_change_section (int);
1318 static void s_cons (int);
1319 static void s_float_cons (int);
1320 static void s_mips_globl (int);
1321 static void s_option (int);
1322 static void s_mipsset (int);
1323 static void s_abicalls (int);
1324 static void s_cpload (int);
1325 static void s_cpsetup (int);
1326 static void s_cplocal (int);
1327 static void s_cprestore (int);
1328 static void s_cpreturn (int);
1329 static void s_dtprelword (int);
1330 static void s_dtpreldword (int);
1331 static void s_tprelword (int);
1332 static void s_tpreldword (int);
1333 static void s_gpvalue (int);
1334 static void s_gpword (int);
1335 static void s_gpdword (int);
1336 static void s_ehword (int);
1337 static void s_cpadd (int);
1338 static void s_insn (int);
1339 static void s_nan (int);
1340 static void s_module (int);
1341 static void s_mips_ent (int);
1342 static void s_mips_end (int);
1343 static void s_mips_frame (int);
1344 static void s_mips_mask (int reg_type);
1345 static void s_mips_stab (int);
1346 static void s_mips_weakext (int);
1347 static void s_mips_file (int);
1348 static void s_mips_loc (int);
1349 static bfd_boolean pic_need_relax (symbolS *, asection *);
1350 static int relaxed_branch_length (fragS *, asection *, int);
1351 static int relaxed_micromips_16bit_branch_length (fragS *, asection *, int);
1352 static int relaxed_micromips_32bit_branch_length (fragS *, asection *, int);
1353 static void file_mips_check_options (void);
1354
1355 /* Table and functions used to map between CPU/ISA names, and
1356    ISA levels, and CPU numbers.  */
1357
1358 struct mips_cpu_info
1359 {
1360   const char *name;           /* CPU or ISA name.  */
1361   int flags;                  /* MIPS_CPU_* flags.  */
1362   int ase;                    /* Set of ASEs implemented by the CPU.  */
1363   int isa;                    /* ISA level.  */
1364   int cpu;                    /* CPU number (default CPU if ISA).  */
1365 };
1366
1367 #define MIPS_CPU_IS_ISA         0x0001  /* Is this an ISA?  (If 0, a CPU.) */
1368
1369 static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *);
1370 static const struct mips_cpu_info *mips_cpu_info_from_isa (int);
1371 static const struct mips_cpu_info *mips_cpu_info_from_arch (int);
1372 \f
1373 /* Command-line options.  */
1374 const char *md_shortopts = "O::g::G:";
1375
1376 enum options
1377   {
1378     OPTION_MARCH = OPTION_MD_BASE,
1379     OPTION_MTUNE,
1380     OPTION_MIPS1,
1381     OPTION_MIPS2,
1382     OPTION_MIPS3,
1383     OPTION_MIPS4,
1384     OPTION_MIPS5,
1385     OPTION_MIPS32,
1386     OPTION_MIPS64,
1387     OPTION_MIPS32R2,
1388     OPTION_MIPS32R3,
1389     OPTION_MIPS32R5,
1390     OPTION_MIPS32R6,
1391     OPTION_MIPS64R2,
1392     OPTION_MIPS64R3,
1393     OPTION_MIPS64R5,
1394     OPTION_MIPS64R6,
1395     OPTION_MIPS16,
1396     OPTION_NO_MIPS16,
1397     OPTION_MIPS3D,
1398     OPTION_NO_MIPS3D,
1399     OPTION_MDMX,
1400     OPTION_NO_MDMX,
1401     OPTION_DSP,
1402     OPTION_NO_DSP,
1403     OPTION_MT,
1404     OPTION_NO_MT,
1405     OPTION_VIRT,
1406     OPTION_NO_VIRT,
1407     OPTION_MSA,
1408     OPTION_NO_MSA,
1409     OPTION_SMARTMIPS,
1410     OPTION_NO_SMARTMIPS,
1411     OPTION_DSPR2,
1412     OPTION_NO_DSPR2,
1413     OPTION_DSPR3,
1414     OPTION_NO_DSPR3,
1415     OPTION_EVA,
1416     OPTION_NO_EVA,
1417     OPTION_XPA,
1418     OPTION_NO_XPA,
1419     OPTION_MICROMIPS,
1420     OPTION_NO_MICROMIPS,
1421     OPTION_MCU,
1422     OPTION_NO_MCU,
1423     OPTION_COMPAT_ARCH_BASE,
1424     OPTION_M4650,
1425     OPTION_NO_M4650,
1426     OPTION_M4010,
1427     OPTION_NO_M4010,
1428     OPTION_M4100,
1429     OPTION_NO_M4100,
1430     OPTION_M3900,
1431     OPTION_NO_M3900,
1432     OPTION_M7000_HILO_FIX,
1433     OPTION_MNO_7000_HILO_FIX,
1434     OPTION_FIX_24K,
1435     OPTION_NO_FIX_24K,
1436     OPTION_FIX_RM7000,
1437     OPTION_NO_FIX_RM7000,
1438     OPTION_FIX_LOONGSON2F_JUMP,
1439     OPTION_NO_FIX_LOONGSON2F_JUMP,
1440     OPTION_FIX_LOONGSON2F_NOP,
1441     OPTION_NO_FIX_LOONGSON2F_NOP,
1442     OPTION_FIX_VR4120,
1443     OPTION_NO_FIX_VR4120,
1444     OPTION_FIX_VR4130,
1445     OPTION_NO_FIX_VR4130,
1446     OPTION_FIX_CN63XXP1,
1447     OPTION_NO_FIX_CN63XXP1,
1448     OPTION_TRAP,
1449     OPTION_BREAK,
1450     OPTION_EB,
1451     OPTION_EL,
1452     OPTION_FP32,
1453     OPTION_GP32,
1454     OPTION_CONSTRUCT_FLOATS,
1455     OPTION_NO_CONSTRUCT_FLOATS,
1456     OPTION_FP64,
1457     OPTION_FPXX,
1458     OPTION_GP64,
1459     OPTION_RELAX_BRANCH,
1460     OPTION_NO_RELAX_BRANCH,
1461     OPTION_INSN32,
1462     OPTION_NO_INSN32,
1463     OPTION_MSHARED,
1464     OPTION_MNO_SHARED,
1465     OPTION_MSYM32,
1466     OPTION_MNO_SYM32,
1467     OPTION_SOFT_FLOAT,
1468     OPTION_HARD_FLOAT,
1469     OPTION_SINGLE_FLOAT,
1470     OPTION_DOUBLE_FLOAT,
1471     OPTION_32,
1472     OPTION_CALL_SHARED,
1473     OPTION_CALL_NONPIC,
1474     OPTION_NON_SHARED,
1475     OPTION_XGOT,
1476     OPTION_MABI,
1477     OPTION_N32,
1478     OPTION_64,
1479     OPTION_MDEBUG,
1480     OPTION_NO_MDEBUG,
1481     OPTION_PDR,
1482     OPTION_NO_PDR,
1483     OPTION_MVXWORKS_PIC,
1484     OPTION_NAN,
1485     OPTION_ODD_SPREG,
1486     OPTION_NO_ODD_SPREG,
1487     OPTION_END_OF_ENUM
1488   };
1489
1490 struct option md_longopts[] =
1491 {
1492   /* Options which specify architecture.  */
1493   {"march", required_argument, NULL, OPTION_MARCH},
1494   {"mtune", required_argument, NULL, OPTION_MTUNE},
1495   {"mips0", no_argument, NULL, OPTION_MIPS1},
1496   {"mips1", no_argument, NULL, OPTION_MIPS1},
1497   {"mips2", no_argument, NULL, OPTION_MIPS2},
1498   {"mips3", no_argument, NULL, OPTION_MIPS3},
1499   {"mips4", no_argument, NULL, OPTION_MIPS4},
1500   {"mips5", no_argument, NULL, OPTION_MIPS5},
1501   {"mips32", no_argument, NULL, OPTION_MIPS32},
1502   {"mips64", no_argument, NULL, OPTION_MIPS64},
1503   {"mips32r2", no_argument, NULL, OPTION_MIPS32R2},
1504   {"mips32r3", no_argument, NULL, OPTION_MIPS32R3},
1505   {"mips32r5", no_argument, NULL, OPTION_MIPS32R5},
1506   {"mips32r6", no_argument, NULL, OPTION_MIPS32R6},
1507   {"mips64r2", no_argument, NULL, OPTION_MIPS64R2},
1508   {"mips64r3", no_argument, NULL, OPTION_MIPS64R3},
1509   {"mips64r5", no_argument, NULL, OPTION_MIPS64R5},
1510   {"mips64r6", no_argument, NULL, OPTION_MIPS64R6},
1511
1512   /* Options which specify Application Specific Extensions (ASEs).  */
1513   {"mips16", no_argument, NULL, OPTION_MIPS16},
1514   {"no-mips16", no_argument, NULL, OPTION_NO_MIPS16},
1515   {"mips3d", no_argument, NULL, OPTION_MIPS3D},
1516   {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D},
1517   {"mdmx", no_argument, NULL, OPTION_MDMX},
1518   {"no-mdmx", no_argument, NULL, OPTION_NO_MDMX},
1519   {"mdsp", no_argument, NULL, OPTION_DSP},
1520   {"mno-dsp", no_argument, NULL, OPTION_NO_DSP},
1521   {"mmt", no_argument, NULL, OPTION_MT},
1522   {"mno-mt", no_argument, NULL, OPTION_NO_MT},
1523   {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS},
1524   {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS},
1525   {"mdspr2", no_argument, NULL, OPTION_DSPR2},
1526   {"mno-dspr2", no_argument, NULL, OPTION_NO_DSPR2},
1527   {"mdspr3", no_argument, NULL, OPTION_DSPR3},
1528   {"mno-dspr3", no_argument, NULL, OPTION_NO_DSPR3},
1529   {"meva", no_argument, NULL, OPTION_EVA},
1530   {"mno-eva", no_argument, NULL, OPTION_NO_EVA},
1531   {"mmicromips", no_argument, NULL, OPTION_MICROMIPS},
1532   {"mno-micromips", no_argument, NULL, OPTION_NO_MICROMIPS},
1533   {"mmcu", no_argument, NULL, OPTION_MCU},
1534   {"mno-mcu", no_argument, NULL, OPTION_NO_MCU},
1535   {"mvirt", no_argument, NULL, OPTION_VIRT},
1536   {"mno-virt", no_argument, NULL, OPTION_NO_VIRT},
1537   {"mmsa", no_argument, NULL, OPTION_MSA},
1538   {"mno-msa", no_argument, NULL, OPTION_NO_MSA},
1539   {"mxpa", no_argument, NULL, OPTION_XPA},
1540   {"mno-xpa", no_argument, NULL, OPTION_NO_XPA},
1541
1542   /* Old-style architecture options.  Don't add more of these.  */
1543   {"m4650", no_argument, NULL, OPTION_M4650},
1544   {"no-m4650", no_argument, NULL, OPTION_NO_M4650},
1545   {"m4010", no_argument, NULL, OPTION_M4010},
1546   {"no-m4010", no_argument, NULL, OPTION_NO_M4010},
1547   {"m4100", no_argument, NULL, OPTION_M4100},
1548   {"no-m4100", no_argument, NULL, OPTION_NO_M4100},
1549   {"m3900", no_argument, NULL, OPTION_M3900},
1550   {"no-m3900", no_argument, NULL, OPTION_NO_M3900},
1551
1552   /* Options which enable bug fixes.  */
1553   {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX},
1554   {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1555   {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1556   {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP},
1557   {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP},
1558   {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP},
1559   {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP},
1560   {"mfix-vr4120",    no_argument, NULL, OPTION_FIX_VR4120},
1561   {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120},
1562   {"mfix-vr4130",    no_argument, NULL, OPTION_FIX_VR4130},
1563   {"mno-fix-vr4130", no_argument, NULL, OPTION_NO_FIX_VR4130},
1564   {"mfix-24k",    no_argument, NULL, OPTION_FIX_24K},
1565   {"mno-fix-24k", no_argument, NULL, OPTION_NO_FIX_24K},
1566   {"mfix-rm7000",    no_argument, NULL, OPTION_FIX_RM7000},
1567   {"mno-fix-rm7000", no_argument, NULL, OPTION_NO_FIX_RM7000},
1568   {"mfix-cn63xxp1", no_argument, NULL, OPTION_FIX_CN63XXP1},
1569   {"mno-fix-cn63xxp1", no_argument, NULL, OPTION_NO_FIX_CN63XXP1},
1570
1571   /* Miscellaneous options.  */
1572   {"trap", no_argument, NULL, OPTION_TRAP},
1573   {"no-break", no_argument, NULL, OPTION_TRAP},
1574   {"break", no_argument, NULL, OPTION_BREAK},
1575   {"no-trap", no_argument, NULL, OPTION_BREAK},
1576   {"EB", no_argument, NULL, OPTION_EB},
1577   {"EL", no_argument, NULL, OPTION_EL},
1578   {"mfp32", no_argument, NULL, OPTION_FP32},
1579   {"mgp32", no_argument, NULL, OPTION_GP32},
1580   {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS},
1581   {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
1582   {"mfp64", no_argument, NULL, OPTION_FP64},
1583   {"mfpxx", no_argument, NULL, OPTION_FPXX},
1584   {"mgp64", no_argument, NULL, OPTION_GP64},
1585   {"relax-branch", no_argument, NULL, OPTION_RELAX_BRANCH},
1586   {"no-relax-branch", no_argument, NULL, OPTION_NO_RELAX_BRANCH},
1587   {"minsn32", no_argument, NULL, OPTION_INSN32},
1588   {"mno-insn32", no_argument, NULL, OPTION_NO_INSN32},
1589   {"mshared", no_argument, NULL, OPTION_MSHARED},
1590   {"mno-shared", no_argument, NULL, OPTION_MNO_SHARED},
1591   {"msym32", no_argument, NULL, OPTION_MSYM32},
1592   {"mno-sym32", no_argument, NULL, OPTION_MNO_SYM32},
1593   {"msoft-float", no_argument, NULL, OPTION_SOFT_FLOAT},
1594   {"mhard-float", no_argument, NULL, OPTION_HARD_FLOAT},
1595   {"msingle-float", no_argument, NULL, OPTION_SINGLE_FLOAT},
1596   {"mdouble-float", no_argument, NULL, OPTION_DOUBLE_FLOAT},
1597   {"modd-spreg", no_argument, NULL, OPTION_ODD_SPREG},
1598   {"mno-odd-spreg", no_argument, NULL, OPTION_NO_ODD_SPREG},
1599
1600   /* Strictly speaking this next option is ELF specific,
1601      but we allow it for other ports as well in order to
1602      make testing easier.  */
1603   {"32", no_argument, NULL, OPTION_32},
1604
1605   /* ELF-specific options.  */
1606   {"KPIC", no_argument, NULL, OPTION_CALL_SHARED},
1607   {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
1608   {"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC},
1609   {"non_shared",  no_argument, NULL, OPTION_NON_SHARED},
1610   {"xgot", no_argument, NULL, OPTION_XGOT},
1611   {"mabi", required_argument, NULL, OPTION_MABI},
1612   {"n32", no_argument, NULL, OPTION_N32},
1613   {"64", no_argument, NULL, OPTION_64},
1614   {"mdebug", no_argument, NULL, OPTION_MDEBUG},
1615   {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG},
1616   {"mpdr", no_argument, NULL, OPTION_PDR},
1617   {"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
1618   {"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC},
1619   {"mnan", required_argument, NULL, OPTION_NAN},
1620
1621   {NULL, no_argument, NULL, 0}
1622 };
1623 size_t md_longopts_size = sizeof (md_longopts);
1624 \f
1625 /* Information about either an Application Specific Extension or an
1626    optional architecture feature that, for simplicity, we treat in the
1627    same way as an ASE.  */
1628 struct mips_ase
1629 {
1630   /* The name of the ASE, used in both the command-line and .set options.  */
1631   const char *name;
1632
1633   /* The associated ASE_* flags.  If the ASE is available on both 32-bit
1634      and 64-bit architectures, the flags here refer to the subset that
1635      is available on both.  */
1636   unsigned int flags;
1637
1638   /* The ASE_* flag used for instructions that are available on 64-bit
1639      architectures but that are not included in FLAGS.  */
1640   unsigned int flags64;
1641
1642   /* The command-line options that turn the ASE on and off.  */
1643   int option_on;
1644   int option_off;
1645
1646   /* The minimum required architecture revisions for MIPS32, MIPS64,
1647      microMIPS32 and microMIPS64, or -1 if the extension isn't supported.  */
1648   int mips32_rev;
1649   int mips64_rev;
1650   int micromips32_rev;
1651   int micromips64_rev;
1652
1653   /* The architecture where the ASE was removed or -1 if the extension has not
1654      been removed.  */
1655   int rem_rev;
1656 };
1657
1658 /* A table of all supported ASEs.  */
1659 static const struct mips_ase mips_ases[] = {
1660   { "dsp", ASE_DSP, ASE_DSP64,
1661     OPTION_DSP, OPTION_NO_DSP,
1662     2, 2, 2, 2,
1663     -1 },
1664
1665   { "dspr2", ASE_DSP | ASE_DSPR2, 0,
1666     OPTION_DSPR2, OPTION_NO_DSPR2,
1667     2, 2, 2, 2,
1668     -1 },
1669
1670   { "dspr3", ASE_DSP | ASE_DSPR2 | ASE_DSPR3, 0,
1671     OPTION_DSPR3, OPTION_NO_DSPR3,
1672     6, 6, -1, -1,
1673     -1 },
1674
1675   { "eva", ASE_EVA, 0,
1676     OPTION_EVA, OPTION_NO_EVA,
1677      2,  2,  2,  2,
1678     -1 },
1679
1680   { "mcu", ASE_MCU, 0,
1681     OPTION_MCU, OPTION_NO_MCU,
1682      2,  2,  2,  2,
1683     -1 },
1684
1685   /* Deprecated in MIPS64r5, but we don't implement that yet.  */
1686   { "mdmx", ASE_MDMX, 0,
1687     OPTION_MDMX, OPTION_NO_MDMX,
1688     -1, 1, -1, -1,
1689      6 },
1690
1691   /* Requires 64-bit FPRs, so the minimum MIPS32 revision is 2.  */
1692   { "mips3d", ASE_MIPS3D, 0,
1693     OPTION_MIPS3D, OPTION_NO_MIPS3D,
1694     2, 1, -1, -1,
1695     6 },
1696
1697   { "mt", ASE_MT, 0,
1698     OPTION_MT, OPTION_NO_MT,
1699      2,  2, -1, -1,
1700     -1 },
1701
1702   { "smartmips", ASE_SMARTMIPS, 0,
1703     OPTION_SMARTMIPS, OPTION_NO_SMARTMIPS,
1704     1, -1, -1, -1,
1705     6 },
1706
1707   { "virt", ASE_VIRT, ASE_VIRT64,
1708     OPTION_VIRT, OPTION_NO_VIRT,
1709      2,  2,  2,  2,
1710     -1 },
1711
1712   { "msa", ASE_MSA, ASE_MSA64,
1713     OPTION_MSA, OPTION_NO_MSA,
1714      2,  2,  2,  2,
1715     -1 },
1716
1717   { "xpa", ASE_XPA, 0,
1718     OPTION_XPA, OPTION_NO_XPA,
1719      2,  2, -1, -1,
1720     -1 },
1721 };
1722
1723 /* The set of ASEs that require -mfp64.  */
1724 #define FP64_ASES (ASE_MIPS3D | ASE_MDMX | ASE_MSA)
1725
1726 /* Groups of ASE_* flags that represent different revisions of an ASE.  */
1727 static const unsigned int mips_ase_groups[] = {
1728   ASE_DSP | ASE_DSPR2 | ASE_DSPR3
1729 };
1730 \f
1731 /* Pseudo-op table.
1732
1733    The following pseudo-ops from the Kane and Heinrich MIPS book
1734    should be defined here, but are currently unsupported: .alias,
1735    .galive, .gjaldef, .gjrlive, .livereg, .noalias.
1736
1737    The following pseudo-ops from the Kane and Heinrich MIPS book are
1738    specific to the type of debugging information being generated, and
1739    should be defined by the object format: .aent, .begin, .bend,
1740    .bgnb, .end, .endb, .ent, .fmask, .frame, .loc, .mask, .verstamp,
1741    .vreg.
1742
1743    The following pseudo-ops from the Kane and Heinrich MIPS book are
1744    not MIPS CPU specific, but are also not specific to the object file
1745    format.  This file is probably the best place to define them, but
1746    they are not currently supported: .asm0, .endr, .lab, .struct.  */
1747
1748 static const pseudo_typeS mips_pseudo_table[] =
1749 {
1750   /* MIPS specific pseudo-ops.  */
1751   {"option", s_option, 0},
1752   {"set", s_mipsset, 0},
1753   {"rdata", s_change_sec, 'r'},
1754   {"sdata", s_change_sec, 's'},
1755   {"livereg", s_ignore, 0},
1756   {"abicalls", s_abicalls, 0},
1757   {"cpload", s_cpload, 0},
1758   {"cpsetup", s_cpsetup, 0},
1759   {"cplocal", s_cplocal, 0},
1760   {"cprestore", s_cprestore, 0},
1761   {"cpreturn", s_cpreturn, 0},
1762   {"dtprelword", s_dtprelword, 0},
1763   {"dtpreldword", s_dtpreldword, 0},
1764   {"tprelword", s_tprelword, 0},
1765   {"tpreldword", s_tpreldword, 0},
1766   {"gpvalue", s_gpvalue, 0},
1767   {"gpword", s_gpword, 0},
1768   {"gpdword", s_gpdword, 0},
1769   {"ehword", s_ehword, 0},
1770   {"cpadd", s_cpadd, 0},
1771   {"insn", s_insn, 0},
1772   {"nan", s_nan, 0},
1773   {"module", s_module, 0},
1774
1775   /* Relatively generic pseudo-ops that happen to be used on MIPS
1776      chips.  */
1777   {"asciiz", stringer, 8 + 1},
1778   {"bss", s_change_sec, 'b'},
1779   {"err", s_err, 0},
1780   {"half", s_cons, 1},
1781   {"dword", s_cons, 3},
1782   {"weakext", s_mips_weakext, 0},
1783   {"origin", s_org, 0},
1784   {"repeat", s_rept, 0},
1785
1786   /* For MIPS this is non-standard, but we define it for consistency.  */
1787   {"sbss", s_change_sec, 'B'},
1788
1789   /* These pseudo-ops are defined in read.c, but must be overridden
1790      here for one reason or another.  */
1791   {"align", s_align, 0},
1792   {"byte", s_cons, 0},
1793   {"data", s_change_sec, 'd'},
1794   {"double", s_float_cons, 'd'},
1795   {"float", s_float_cons, 'f'},
1796   {"globl", s_mips_globl, 0},
1797   {"global", s_mips_globl, 0},
1798   {"hword", s_cons, 1},
1799   {"int", s_cons, 2},
1800   {"long", s_cons, 2},
1801   {"octa", s_cons, 4},
1802   {"quad", s_cons, 3},
1803   {"section", s_change_section, 0},
1804   {"short", s_cons, 1},
1805   {"single", s_float_cons, 'f'},
1806   {"stabd", s_mips_stab, 'd'},
1807   {"stabn", s_mips_stab, 'n'},
1808   {"stabs", s_mips_stab, 's'},
1809   {"text", s_change_sec, 't'},
1810   {"word", s_cons, 2},
1811
1812   { "extern", ecoff_directive_extern, 0},
1813
1814   { NULL, NULL, 0 },
1815 };
1816
1817 static const pseudo_typeS mips_nonecoff_pseudo_table[] =
1818 {
1819   /* These pseudo-ops should be defined by the object file format.
1820      However, a.out doesn't support them, so we have versions here.  */
1821   {"aent", s_mips_ent, 1},
1822   {"bgnb", s_ignore, 0},
1823   {"end", s_mips_end, 0},
1824   {"endb", s_ignore, 0},
1825   {"ent", s_mips_ent, 0},
1826   {"file", s_mips_file, 0},
1827   {"fmask", s_mips_mask, 'F'},
1828   {"frame", s_mips_frame, 0},
1829   {"loc", s_mips_loc, 0},
1830   {"mask", s_mips_mask, 'R'},
1831   {"verstamp", s_ignore, 0},
1832   { NULL, NULL, 0 },
1833 };
1834
1835 /* Export the ABI address size for use by TC_ADDRESS_BYTES for the
1836    purpose of the `.dc.a' internal pseudo-op.  */
1837
1838 int
1839 mips_address_bytes (void)
1840 {
1841   file_mips_check_options ();
1842   return HAVE_64BIT_ADDRESSES ? 8 : 4;
1843 }
1844
1845 extern void pop_insert (const pseudo_typeS *);
1846
1847 void
1848 mips_pop_insert (void)
1849 {
1850   pop_insert (mips_pseudo_table);
1851   if (! ECOFF_DEBUGGING)
1852     pop_insert (mips_nonecoff_pseudo_table);
1853 }
1854 \f
1855 /* Symbols labelling the current insn.  */
1856
1857 struct insn_label_list
1858 {
1859   struct insn_label_list *next;
1860   symbolS *label;
1861 };
1862
1863 static struct insn_label_list *free_insn_labels;
1864 #define label_list tc_segment_info_data.labels
1865
1866 static void mips_clear_insn_labels (void);
1867 static void mips_mark_labels (void);
1868 static void mips_compressed_mark_labels (void);
1869
1870 static inline void
1871 mips_clear_insn_labels (void)
1872 {
1873   struct insn_label_list **pl;
1874   segment_info_type *si;
1875
1876   if (now_seg)
1877     {
1878       for (pl = &free_insn_labels; *pl != NULL; pl = &(*pl)->next)
1879         ;
1880
1881       si = seg_info (now_seg);
1882       *pl = si->label_list;
1883       si->label_list = NULL;
1884     }
1885 }
1886
1887 /* Mark instruction labels in MIPS16/microMIPS mode.  */
1888
1889 static inline void
1890 mips_mark_labels (void)
1891 {
1892   if (HAVE_CODE_COMPRESSION)
1893     mips_compressed_mark_labels ();
1894 }
1895 \f
1896 static char *expr_end;
1897
1898 /* An expression in a macro instruction.  This is set by mips_ip and
1899    mips16_ip and when populated is always an O_constant.  */
1900
1901 static expressionS imm_expr;
1902
1903 /* The relocatable field in an instruction and the relocs associated
1904    with it.  These variables are used for instructions like LUI and
1905    JAL as well as true offsets.  They are also used for address
1906    operands in macros.  */
1907
1908 static expressionS offset_expr;
1909 static bfd_reloc_code_real_type offset_reloc[3]
1910   = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
1911
1912 /* This is set to the resulting size of the instruction to be produced
1913    by mips16_ip if an explicit extension is used or by mips_ip if an
1914    explicit size is supplied.  */
1915
1916 static unsigned int forced_insn_length;
1917
1918 /* True if we are assembling an instruction.  All dot symbols defined during
1919    this time should be treated as code labels.  */
1920
1921 static bfd_boolean mips_assembling_insn;
1922
1923 /* The pdr segment for per procedure frame/regmask info.  Not used for
1924    ECOFF debugging.  */
1925
1926 static segT pdr_seg;
1927
1928 /* The default target format to use.  */
1929
1930 #if defined (TE_FreeBSD)
1931 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips-freebsd"
1932 #elif defined (TE_TMIPS)
1933 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips"
1934 #else
1935 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX ENDIAN "mips"
1936 #endif
1937
1938 const char *
1939 mips_target_format (void)
1940 {
1941   switch (OUTPUT_FLAVOR)
1942     {
1943     case bfd_target_elf_flavour:
1944 #ifdef TE_VXWORKS
1945       if (!HAVE_64BIT_OBJECTS && !HAVE_NEWABI)
1946         return (target_big_endian
1947                 ? "elf32-bigmips-vxworks"
1948                 : "elf32-littlemips-vxworks");
1949 #endif
1950       return (target_big_endian
1951               ? (HAVE_64BIT_OBJECTS
1952                  ? ELF_TARGET ("elf64-", "big")
1953                  : (HAVE_NEWABI
1954                     ? ELF_TARGET ("elf32-n", "big")
1955                     : ELF_TARGET ("elf32-", "big")))
1956               : (HAVE_64BIT_OBJECTS
1957                  ? ELF_TARGET ("elf64-", "little")
1958                  : (HAVE_NEWABI
1959                     ? ELF_TARGET ("elf32-n", "little")
1960                     : ELF_TARGET ("elf32-", "little"))));
1961     default:
1962       abort ();
1963       return NULL;
1964     }
1965 }
1966
1967 /* Return the ISA revision that is currently in use, or 0 if we are
1968    generating code for MIPS V or below.  */
1969
1970 static int
1971 mips_isa_rev (void)
1972 {
1973   if (mips_opts.isa == ISA_MIPS32R2 || mips_opts.isa == ISA_MIPS64R2)
1974     return 2;
1975
1976   if (mips_opts.isa == ISA_MIPS32R3 || mips_opts.isa == ISA_MIPS64R3)
1977     return 3;
1978
1979   if (mips_opts.isa == ISA_MIPS32R5 || mips_opts.isa == ISA_MIPS64R5)
1980     return 5;
1981
1982   if (mips_opts.isa == ISA_MIPS32R6 || mips_opts.isa == ISA_MIPS64R6)
1983     return 6;
1984
1985   /* microMIPS implies revision 2 or above.  */
1986   if (mips_opts.micromips)
1987     return 2;
1988
1989   if (mips_opts.isa == ISA_MIPS32 || mips_opts.isa == ISA_MIPS64)
1990     return 1;
1991
1992   return 0;
1993 }
1994
1995 /* Return the mask of all ASEs that are revisions of those in FLAGS.  */
1996
1997 static unsigned int
1998 mips_ase_mask (unsigned int flags)
1999 {
2000   unsigned int i;
2001
2002   for (i = 0; i < ARRAY_SIZE (mips_ase_groups); i++)
2003     if (flags & mips_ase_groups[i])
2004       flags |= mips_ase_groups[i];
2005   return flags;
2006 }
2007
2008 /* Check whether the current ISA supports ASE.  Issue a warning if
2009    appropriate.  */
2010
2011 static void
2012 mips_check_isa_supports_ase (const struct mips_ase *ase)
2013 {
2014   const char *base;
2015   int min_rev, size;
2016   static unsigned int warned_isa;
2017   static unsigned int warned_fp32;
2018
2019   if (ISA_HAS_64BIT_REGS (mips_opts.isa))
2020     min_rev = mips_opts.micromips ? ase->micromips64_rev : ase->mips64_rev;
2021   else
2022     min_rev = mips_opts.micromips ? ase->micromips32_rev : ase->mips32_rev;
2023   if ((min_rev < 0 || mips_isa_rev () < min_rev)
2024       && (warned_isa & ase->flags) != ase->flags)
2025     {
2026       warned_isa |= ase->flags;
2027       base = mips_opts.micromips ? "microMIPS" : "MIPS";
2028       size = ISA_HAS_64BIT_REGS (mips_opts.isa) ? 64 : 32;
2029       if (min_rev < 0)
2030         as_warn (_("the %d-bit %s architecture does not support the"
2031                    " `%s' extension"), size, base, ase->name);
2032       else
2033         as_warn (_("the `%s' extension requires %s%d revision %d or greater"),
2034                  ase->name, base, size, min_rev);
2035     }
2036   else if ((ase->rem_rev > 0 && mips_isa_rev () >= ase->rem_rev)
2037            && (warned_isa & ase->flags) != ase->flags)
2038     {
2039       warned_isa |= ase->flags;
2040       base = mips_opts.micromips ? "microMIPS" : "MIPS";
2041       size = ISA_HAS_64BIT_REGS (mips_opts.isa) ? 64 : 32;
2042       as_warn (_("the `%s' extension was removed in %s%d revision %d"),
2043                ase->name, base, size, ase->rem_rev);
2044     }
2045
2046   if ((ase->flags & FP64_ASES)
2047       && mips_opts.fp != 64
2048       && (warned_fp32 & ase->flags) != ase->flags)
2049     {
2050       warned_fp32 |= ase->flags;
2051       as_warn (_("the `%s' extension requires 64-bit FPRs"), ase->name);
2052     }
2053 }
2054
2055 /* Check all enabled ASEs to see whether they are supported by the
2056    chosen architecture.  */
2057
2058 static void
2059 mips_check_isa_supports_ases (void)
2060 {
2061   unsigned int i, mask;
2062
2063   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
2064     {
2065       mask = mips_ase_mask (mips_ases[i].flags);
2066       if ((mips_opts.ase & mask) == mips_ases[i].flags)
2067         mips_check_isa_supports_ase (&mips_ases[i]);
2068     }
2069 }
2070
2071 /* Set the state of ASE to ENABLED_P.  Return the mask of ASE_* flags
2072    that were affected.  */
2073
2074 static unsigned int
2075 mips_set_ase (const struct mips_ase *ase, struct mips_set_options *opts,
2076               bfd_boolean enabled_p)
2077 {
2078   unsigned int mask;
2079
2080   mask = mips_ase_mask (ase->flags);
2081   opts->ase &= ~mask;
2082   if (enabled_p)
2083     opts->ase |= ase->flags;
2084   return mask;
2085 }
2086
2087 /* Return the ASE called NAME, or null if none.  */
2088
2089 static const struct mips_ase *
2090 mips_lookup_ase (const char *name)
2091 {
2092   unsigned int i;
2093
2094   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
2095     if (strcmp (name, mips_ases[i].name) == 0)
2096       return &mips_ases[i];
2097   return NULL;
2098 }
2099
2100 /* Return the length of a microMIPS instruction in bytes.  If bits of
2101    the mask beyond the low 16 are 0, then it is a 16-bit instruction,
2102    otherwise it is a 32-bit instruction.  */
2103
2104 static inline unsigned int
2105 micromips_insn_length (const struct mips_opcode *mo)
2106 {
2107   return (mo->mask >> 16) == 0 ? 2 : 4;
2108 }
2109
2110 /* Return the length of MIPS16 instruction OPCODE.  */
2111
2112 static inline unsigned int
2113 mips16_opcode_length (unsigned long opcode)
2114 {
2115   return (opcode >> 16) == 0 ? 2 : 4;
2116 }
2117
2118 /* Return the length of instruction INSN.  */
2119
2120 static inline unsigned int
2121 insn_length (const struct mips_cl_insn *insn)
2122 {
2123   if (mips_opts.micromips)
2124     return micromips_insn_length (insn->insn_mo);
2125   else if (mips_opts.mips16)
2126     return mips16_opcode_length (insn->insn_opcode);
2127   else
2128     return 4;
2129 }
2130
2131 /* Initialise INSN from opcode entry MO.  Leave its position unspecified.  */
2132
2133 static void
2134 create_insn (struct mips_cl_insn *insn, const struct mips_opcode *mo)
2135 {
2136   size_t i;
2137
2138   insn->insn_mo = mo;
2139   insn->insn_opcode = mo->match;
2140   insn->frag = NULL;
2141   insn->where = 0;
2142   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
2143     insn->fixp[i] = NULL;
2144   insn->fixed_p = (mips_opts.noreorder > 0);
2145   insn->noreorder_p = (mips_opts.noreorder > 0);
2146   insn->mips16_absolute_jump_p = 0;
2147   insn->complete_p = 0;
2148   insn->cleared_p = 0;
2149 }
2150
2151 /* Get a list of all the operands in INSN.  */
2152
2153 static const struct mips_operand_array *
2154 insn_operands (const struct mips_cl_insn *insn)
2155 {
2156   if (insn->insn_mo >= &mips_opcodes[0]
2157       && insn->insn_mo < &mips_opcodes[NUMOPCODES])
2158     return &mips_operands[insn->insn_mo - &mips_opcodes[0]];
2159
2160   if (insn->insn_mo >= &mips16_opcodes[0]
2161       && insn->insn_mo < &mips16_opcodes[bfd_mips16_num_opcodes])
2162     return &mips16_operands[insn->insn_mo - &mips16_opcodes[0]];
2163
2164   if (insn->insn_mo >= &micromips_opcodes[0]
2165       && insn->insn_mo < &micromips_opcodes[bfd_micromips_num_opcodes])
2166     return &micromips_operands[insn->insn_mo - &micromips_opcodes[0]];
2167
2168   abort ();
2169 }
2170
2171 /* Get a description of operand OPNO of INSN.  */
2172
2173 static const struct mips_operand *
2174 insn_opno (const struct mips_cl_insn *insn, unsigned opno)
2175 {
2176   const struct mips_operand_array *operands;
2177
2178   operands = insn_operands (insn);
2179   if (opno >= MAX_OPERANDS || !operands->operand[opno])
2180     abort ();
2181   return operands->operand[opno];
2182 }
2183
2184 /* Install UVAL as the value of OPERAND in INSN.  */
2185
2186 static inline void
2187 insn_insert_operand (struct mips_cl_insn *insn,
2188                      const struct mips_operand *operand, unsigned int uval)
2189 {
2190   insn->insn_opcode = mips_insert_operand (operand, insn->insn_opcode, uval);
2191 }
2192
2193 /* Extract the value of OPERAND from INSN.  */
2194
2195 static inline unsigned
2196 insn_extract_operand (const struct mips_cl_insn *insn,
2197                       const struct mips_operand *operand)
2198 {
2199   return mips_extract_operand (operand, insn->insn_opcode);
2200 }
2201
2202 /* Record the current MIPS16/microMIPS mode in now_seg.  */
2203
2204 static void
2205 mips_record_compressed_mode (void)
2206 {
2207   segment_info_type *si;
2208
2209   si = seg_info (now_seg);
2210   if (si->tc_segment_info_data.mips16 != mips_opts.mips16)
2211     si->tc_segment_info_data.mips16 = mips_opts.mips16;
2212   if (si->tc_segment_info_data.micromips != mips_opts.micromips)
2213     si->tc_segment_info_data.micromips = mips_opts.micromips;
2214 }
2215
2216 /* Read a standard MIPS instruction from BUF.  */
2217
2218 static unsigned long
2219 read_insn (char *buf)
2220 {
2221   if (target_big_endian)
2222     return bfd_getb32 ((bfd_byte *) buf);
2223   else
2224     return bfd_getl32 ((bfd_byte *) buf);
2225 }
2226
2227 /* Write standard MIPS instruction INSN to BUF.  Return a pointer to
2228    the next byte.  */
2229
2230 static char *
2231 write_insn (char *buf, unsigned int insn)
2232 {
2233   md_number_to_chars (buf, insn, 4);
2234   return buf + 4;
2235 }
2236
2237 /* Read a microMIPS or MIPS16 opcode from BUF, given that it
2238    has length LENGTH.  */
2239
2240 static unsigned long
2241 read_compressed_insn (char *buf, unsigned int length)
2242 {
2243   unsigned long insn;
2244   unsigned int i;
2245
2246   insn = 0;
2247   for (i = 0; i < length; i += 2)
2248     {
2249       insn <<= 16;
2250       if (target_big_endian)
2251         insn |= bfd_getb16 ((char *) buf);
2252       else
2253         insn |= bfd_getl16 ((char *) buf);
2254       buf += 2;
2255     }
2256   return insn;
2257 }
2258
2259 /* Write microMIPS or MIPS16 instruction INSN to BUF, given that the
2260    instruction is LENGTH bytes long.  Return a pointer to the next byte.  */
2261
2262 static char *
2263 write_compressed_insn (char *buf, unsigned int insn, unsigned int length)
2264 {
2265   unsigned int i;
2266
2267   for (i = 0; i < length; i += 2)
2268     md_number_to_chars (buf + i, insn >> ((length - i - 2) * 8), 2);
2269   return buf + length;
2270 }
2271
2272 /* Install INSN at the location specified by its "frag" and "where" fields.  */
2273
2274 static void
2275 install_insn (const struct mips_cl_insn *insn)
2276 {
2277   char *f = insn->frag->fr_literal + insn->where;
2278   if (HAVE_CODE_COMPRESSION)
2279     write_compressed_insn (f, insn->insn_opcode, insn_length (insn));
2280   else
2281     write_insn (f, insn->insn_opcode);
2282   mips_record_compressed_mode ();
2283 }
2284
2285 /* Move INSN to offset WHERE in FRAG.  Adjust the fixups accordingly
2286    and install the opcode in the new location.  */
2287
2288 static void
2289 move_insn (struct mips_cl_insn *insn, fragS *frag, long where)
2290 {
2291   size_t i;
2292
2293   insn->frag = frag;
2294   insn->where = where;
2295   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
2296     if (insn->fixp[i] != NULL)
2297       {
2298         insn->fixp[i]->fx_frag = frag;
2299         insn->fixp[i]->fx_where = where;
2300       }
2301   install_insn (insn);
2302 }
2303
2304 /* Add INSN to the end of the output.  */
2305
2306 static void
2307 add_fixed_insn (struct mips_cl_insn *insn)
2308 {
2309   char *f = frag_more (insn_length (insn));
2310   move_insn (insn, frag_now, f - frag_now->fr_literal);
2311 }
2312
2313 /* Start a variant frag and move INSN to the start of the variant part,
2314    marking it as fixed.  The other arguments are as for frag_var.  */
2315
2316 static void
2317 add_relaxed_insn (struct mips_cl_insn *insn, int max_chars, int var,
2318                   relax_substateT subtype, symbolS *symbol, offsetT offset)
2319 {
2320   frag_grow (max_chars);
2321   move_insn (insn, frag_now, frag_more (0) - frag_now->fr_literal);
2322   insn->fixed_p = 1;
2323   frag_var (rs_machine_dependent, max_chars, var,
2324             subtype, symbol, offset, NULL);
2325 }
2326
2327 /* Insert N copies of INSN into the history buffer, starting at
2328    position FIRST.  Neither FIRST nor N need to be clipped.  */
2329
2330 static void
2331 insert_into_history (unsigned int first, unsigned int n,
2332                      const struct mips_cl_insn *insn)
2333 {
2334   if (mips_relax.sequence != 2)
2335     {
2336       unsigned int i;
2337
2338       for (i = ARRAY_SIZE (history); i-- > first;)
2339         if (i >= first + n)
2340           history[i] = history[i - n];
2341         else
2342           history[i] = *insn;
2343     }
2344 }
2345
2346 /* Clear the error in insn_error.  */
2347
2348 static void
2349 clear_insn_error (void)
2350 {
2351   memset (&insn_error, 0, sizeof (insn_error));
2352 }
2353
2354 /* Possibly record error message MSG for the current instruction.
2355    If the error is about a particular argument, ARGNUM is the 1-based
2356    number of that argument, otherwise it is 0.  FORMAT is the format
2357    of MSG.  Return true if MSG was used, false if the current message
2358    was kept.  */
2359
2360 static bfd_boolean
2361 set_insn_error_format (int argnum, enum mips_insn_error_format format,
2362                        const char *msg)
2363 {
2364   if (argnum == 0)
2365     {
2366       /* Give priority to errors against specific arguments, and to
2367          the first whole-instruction message.  */
2368       if (insn_error.msg)
2369         return FALSE;
2370     }
2371   else
2372     {
2373       /* Keep insn_error if it is against a later argument.  */
2374       if (argnum < insn_error.min_argnum)
2375         return FALSE;
2376
2377       /* If both errors are against the same argument but are different,
2378          give up on reporting a specific error for this argument.
2379          See the comment about mips_insn_error for details.  */
2380       if (argnum == insn_error.min_argnum
2381           && insn_error.msg
2382           && strcmp (insn_error.msg, msg) != 0)
2383         {
2384           insn_error.msg = 0;
2385           insn_error.min_argnum += 1;
2386           return FALSE;
2387         }
2388     }
2389   insn_error.min_argnum = argnum;
2390   insn_error.format = format;
2391   insn_error.msg = msg;
2392   return TRUE;
2393 }
2394
2395 /* Record an instruction error with no % format fields.  ARGNUM and MSG are
2396    as for set_insn_error_format.  */
2397
2398 static void
2399 set_insn_error (int argnum, const char *msg)
2400 {
2401   set_insn_error_format (argnum, ERR_FMT_PLAIN, msg);
2402 }
2403
2404 /* Record an instruction error with one %d field I.  ARGNUM and MSG are
2405    as for set_insn_error_format.  */
2406
2407 static void
2408 set_insn_error_i (int argnum, const char *msg, int i)
2409 {
2410   if (set_insn_error_format (argnum, ERR_FMT_I, msg))
2411     insn_error.u.i = i;
2412 }
2413
2414 /* Record an instruction error with two %s fields S1 and S2.  ARGNUM and MSG
2415    are as for set_insn_error_format.  */
2416
2417 static void
2418 set_insn_error_ss (int argnum, const char *msg, const char *s1, const char *s2)
2419 {
2420   if (set_insn_error_format (argnum, ERR_FMT_SS, msg))
2421     {
2422       insn_error.u.ss[0] = s1;
2423       insn_error.u.ss[1] = s2;
2424     }
2425 }
2426
2427 /* Report the error in insn_error, which is against assembly code STR.  */
2428
2429 static void
2430 report_insn_error (const char *str)
2431 {
2432   const char *msg = concat (insn_error.msg, " `%s'", NULL);
2433
2434   switch (insn_error.format)
2435     {
2436     case ERR_FMT_PLAIN:
2437       as_bad (msg, str);
2438       break;
2439
2440     case ERR_FMT_I:
2441       as_bad (msg, insn_error.u.i, str);
2442       break;
2443
2444     case ERR_FMT_SS:
2445       as_bad (msg, insn_error.u.ss[0], insn_error.u.ss[1], str);
2446       break;
2447     }
2448
2449   free ((char *) msg);
2450 }
2451
2452 /* Initialize vr4120_conflicts.  There is a bit of duplication here:
2453    the idea is to make it obvious at a glance that each errata is
2454    included.  */
2455
2456 static void
2457 init_vr4120_conflicts (void)
2458 {
2459 #define CONFLICT(FIRST, SECOND) \
2460     vr4120_conflicts[FIX_VR4120_##FIRST] |= 1 << FIX_VR4120_##SECOND
2461
2462   /* Errata 21 - [D]DIV[U] after [D]MACC */
2463   CONFLICT (MACC, DIV);
2464   CONFLICT (DMACC, DIV);
2465
2466   /* Errata 23 - Continuous DMULT[U]/DMACC instructions.  */
2467   CONFLICT (DMULT, DMULT);
2468   CONFLICT (DMULT, DMACC);
2469   CONFLICT (DMACC, DMULT);
2470   CONFLICT (DMACC, DMACC);
2471
2472   /* Errata 24 - MT{LO,HI} after [D]MACC */
2473   CONFLICT (MACC, MTHILO);
2474   CONFLICT (DMACC, MTHILO);
2475
2476   /* VR4181A errata MD(1): "If a MULT, MULTU, DMULT or DMULTU
2477      instruction is executed immediately after a MACC or DMACC
2478      instruction, the result of [either instruction] is incorrect."  */
2479   CONFLICT (MACC, MULT);
2480   CONFLICT (MACC, DMULT);
2481   CONFLICT (DMACC, MULT);
2482   CONFLICT (DMACC, DMULT);
2483
2484   /* VR4181A errata MD(4): "If a MACC or DMACC instruction is
2485      executed immediately after a DMULT, DMULTU, DIV, DIVU,
2486      DDIV or DDIVU instruction, the result of the MACC or
2487      DMACC instruction is incorrect.".  */
2488   CONFLICT (DMULT, MACC);
2489   CONFLICT (DMULT, DMACC);
2490   CONFLICT (DIV, MACC);
2491   CONFLICT (DIV, DMACC);
2492
2493 #undef CONFLICT
2494 }
2495
2496 struct regname {
2497   const char *name;
2498   unsigned int num;
2499 };
2500
2501 #define RNUM_MASK       0x00000ff
2502 #define RTYPE_MASK      0x0ffff00
2503 #define RTYPE_NUM       0x0000100
2504 #define RTYPE_FPU       0x0000200
2505 #define RTYPE_FCC       0x0000400
2506 #define RTYPE_VEC       0x0000800
2507 #define RTYPE_GP        0x0001000
2508 #define RTYPE_CP0       0x0002000
2509 #define RTYPE_PC        0x0004000
2510 #define RTYPE_ACC       0x0008000
2511 #define RTYPE_CCC       0x0010000
2512 #define RTYPE_VI        0x0020000
2513 #define RTYPE_VF        0x0040000
2514 #define RTYPE_R5900_I   0x0080000
2515 #define RTYPE_R5900_Q   0x0100000
2516 #define RTYPE_R5900_R   0x0200000
2517 #define RTYPE_R5900_ACC 0x0400000
2518 #define RTYPE_MSA       0x0800000
2519 #define RWARN           0x8000000
2520
2521 #define GENERIC_REGISTER_NUMBERS \
2522     {"$0",      RTYPE_NUM | 0},  \
2523     {"$1",      RTYPE_NUM | 1},  \
2524     {"$2",      RTYPE_NUM | 2},  \
2525     {"$3",      RTYPE_NUM | 3},  \
2526     {"$4",      RTYPE_NUM | 4},  \
2527     {"$5",      RTYPE_NUM | 5},  \
2528     {"$6",      RTYPE_NUM | 6},  \
2529     {"$7",      RTYPE_NUM | 7},  \
2530     {"$8",      RTYPE_NUM | 8},  \
2531     {"$9",      RTYPE_NUM | 9},  \
2532     {"$10",     RTYPE_NUM | 10}, \
2533     {"$11",     RTYPE_NUM | 11}, \
2534     {"$12",     RTYPE_NUM | 12}, \
2535     {"$13",     RTYPE_NUM | 13}, \
2536     {"$14",     RTYPE_NUM | 14}, \
2537     {"$15",     RTYPE_NUM | 15}, \
2538     {"$16",     RTYPE_NUM | 16}, \
2539     {"$17",     RTYPE_NUM | 17}, \
2540     {"$18",     RTYPE_NUM | 18}, \
2541     {"$19",     RTYPE_NUM | 19}, \
2542     {"$20",     RTYPE_NUM | 20}, \
2543     {"$21",     RTYPE_NUM | 21}, \
2544     {"$22",     RTYPE_NUM | 22}, \
2545     {"$23",     RTYPE_NUM | 23}, \
2546     {"$24",     RTYPE_NUM | 24}, \
2547     {"$25",     RTYPE_NUM | 25}, \
2548     {"$26",     RTYPE_NUM | 26}, \
2549     {"$27",     RTYPE_NUM | 27}, \
2550     {"$28",     RTYPE_NUM | 28}, \
2551     {"$29",     RTYPE_NUM | 29}, \
2552     {"$30",     RTYPE_NUM | 30}, \
2553     {"$31",     RTYPE_NUM | 31}
2554
2555 #define FPU_REGISTER_NAMES       \
2556     {"$f0",     RTYPE_FPU | 0},  \
2557     {"$f1",     RTYPE_FPU | 1},  \
2558     {"$f2",     RTYPE_FPU | 2},  \
2559     {"$f3",     RTYPE_FPU | 3},  \
2560     {"$f4",     RTYPE_FPU | 4},  \
2561     {"$f5",     RTYPE_FPU | 5},  \
2562     {"$f6",     RTYPE_FPU | 6},  \
2563     {"$f7",     RTYPE_FPU | 7},  \
2564     {"$f8",     RTYPE_FPU | 8},  \
2565     {"$f9",     RTYPE_FPU | 9},  \
2566     {"$f10",    RTYPE_FPU | 10}, \
2567     {"$f11",    RTYPE_FPU | 11}, \
2568     {"$f12",    RTYPE_FPU | 12}, \
2569     {"$f13",    RTYPE_FPU | 13}, \
2570     {"$f14",    RTYPE_FPU | 14}, \
2571     {"$f15",    RTYPE_FPU | 15}, \
2572     {"$f16",    RTYPE_FPU | 16}, \
2573     {"$f17",    RTYPE_FPU | 17}, \
2574     {"$f18",    RTYPE_FPU | 18}, \
2575     {"$f19",    RTYPE_FPU | 19}, \
2576     {"$f20",    RTYPE_FPU | 20}, \
2577     {"$f21",    RTYPE_FPU | 21}, \
2578     {"$f22",    RTYPE_FPU | 22}, \
2579     {"$f23",    RTYPE_FPU | 23}, \
2580     {"$f24",    RTYPE_FPU | 24}, \
2581     {"$f25",    RTYPE_FPU | 25}, \
2582     {"$f26",    RTYPE_FPU | 26}, \
2583     {"$f27",    RTYPE_FPU | 27}, \
2584     {"$f28",    RTYPE_FPU | 28}, \
2585     {"$f29",    RTYPE_FPU | 29}, \
2586     {"$f30",    RTYPE_FPU | 30}, \
2587     {"$f31",    RTYPE_FPU | 31}
2588
2589 #define FPU_CONDITION_CODE_NAMES \
2590     {"$fcc0",   RTYPE_FCC | 0},  \
2591     {"$fcc1",   RTYPE_FCC | 1},  \
2592     {"$fcc2",   RTYPE_FCC | 2},  \
2593     {"$fcc3",   RTYPE_FCC | 3},  \
2594     {"$fcc4",   RTYPE_FCC | 4},  \
2595     {"$fcc5",   RTYPE_FCC | 5},  \
2596     {"$fcc6",   RTYPE_FCC | 6},  \
2597     {"$fcc7",   RTYPE_FCC | 7}
2598
2599 #define COPROC_CONDITION_CODE_NAMES         \
2600     {"$cc0",    RTYPE_FCC | RTYPE_CCC | 0}, \
2601     {"$cc1",    RTYPE_FCC | RTYPE_CCC | 1}, \
2602     {"$cc2",    RTYPE_FCC | RTYPE_CCC | 2}, \
2603     {"$cc3",    RTYPE_FCC | RTYPE_CCC | 3}, \
2604     {"$cc4",    RTYPE_FCC | RTYPE_CCC | 4}, \
2605     {"$cc5",    RTYPE_FCC | RTYPE_CCC | 5}, \
2606     {"$cc6",    RTYPE_FCC | RTYPE_CCC | 6}, \
2607     {"$cc7",    RTYPE_FCC | RTYPE_CCC | 7}
2608
2609 #define N32N64_SYMBOLIC_REGISTER_NAMES \
2610     {"$a4",     RTYPE_GP | 8},  \
2611     {"$a5",     RTYPE_GP | 9},  \
2612     {"$a6",     RTYPE_GP | 10}, \
2613     {"$a7",     RTYPE_GP | 11}, \
2614     {"$ta0",    RTYPE_GP | 8},  /* alias for $a4 */ \
2615     {"$ta1",    RTYPE_GP | 9},  /* alias for $a5 */ \
2616     {"$ta2",    RTYPE_GP | 10}, /* alias for $a6 */ \
2617     {"$ta3",    RTYPE_GP | 11}, /* alias for $a7 */ \
2618     {"$t0",     RTYPE_GP | 12}, \
2619     {"$t1",     RTYPE_GP | 13}, \
2620     {"$t2",     RTYPE_GP | 14}, \
2621     {"$t3",     RTYPE_GP | 15}
2622
2623 #define O32_SYMBOLIC_REGISTER_NAMES \
2624     {"$t0",     RTYPE_GP | 8},  \
2625     {"$t1",     RTYPE_GP | 9},  \
2626     {"$t2",     RTYPE_GP | 10}, \
2627     {"$t3",     RTYPE_GP | 11}, \
2628     {"$t4",     RTYPE_GP | 12}, \
2629     {"$t5",     RTYPE_GP | 13}, \
2630     {"$t6",     RTYPE_GP | 14}, \
2631     {"$t7",     RTYPE_GP | 15}, \
2632     {"$ta0",    RTYPE_GP | 12}, /* alias for $t4 */ \
2633     {"$ta1",    RTYPE_GP | 13}, /* alias for $t5 */ \
2634     {"$ta2",    RTYPE_GP | 14}, /* alias for $t6 */ \
2635     {"$ta3",    RTYPE_GP | 15}  /* alias for $t7 */
2636
2637 /* Remaining symbolic register names */
2638 #define SYMBOLIC_REGISTER_NAMES \
2639     {"$zero",   RTYPE_GP | 0},  \
2640     {"$at",     RTYPE_GP | 1},  \
2641     {"$AT",     RTYPE_GP | 1},  \
2642     {"$v0",     RTYPE_GP | 2},  \
2643     {"$v1",     RTYPE_GP | 3},  \
2644     {"$a0",     RTYPE_GP | 4},  \
2645     {"$a1",     RTYPE_GP | 5},  \
2646     {"$a2",     RTYPE_GP | 6},  \
2647     {"$a3",     RTYPE_GP | 7},  \
2648     {"$s0",     RTYPE_GP | 16}, \
2649     {"$s1",     RTYPE_GP | 17}, \
2650     {"$s2",     RTYPE_GP | 18}, \
2651     {"$s3",     RTYPE_GP | 19}, \
2652     {"$s4",     RTYPE_GP | 20}, \
2653     {"$s5",     RTYPE_GP | 21}, \
2654     {"$s6",     RTYPE_GP | 22}, \
2655     {"$s7",     RTYPE_GP | 23}, \
2656     {"$t8",     RTYPE_GP | 24}, \
2657     {"$t9",     RTYPE_GP | 25}, \
2658     {"$k0",     RTYPE_GP | 26}, \
2659     {"$kt0",    RTYPE_GP | 26}, \
2660     {"$k1",     RTYPE_GP | 27}, \
2661     {"$kt1",    RTYPE_GP | 27}, \
2662     {"$gp",     RTYPE_GP | 28}, \
2663     {"$sp",     RTYPE_GP | 29}, \
2664     {"$s8",     RTYPE_GP | 30}, \
2665     {"$fp",     RTYPE_GP | 30}, \
2666     {"$ra",     RTYPE_GP | 31}
2667
2668 #define MIPS16_SPECIAL_REGISTER_NAMES \
2669     {"$pc",     RTYPE_PC | 0}
2670
2671 #define MDMX_VECTOR_REGISTER_NAMES \
2672     /* {"$v0",  RTYPE_VEC | 0},  clash with REG 2 above */ \
2673     /* {"$v1",  RTYPE_VEC | 1},  clash with REG 3 above */ \
2674     {"$v2",     RTYPE_VEC | 2},  \
2675     {"$v3",     RTYPE_VEC | 3},  \
2676     {"$v4",     RTYPE_VEC | 4},  \
2677     {"$v5",     RTYPE_VEC | 5},  \
2678     {"$v6",     RTYPE_VEC | 6},  \
2679     {"$v7",     RTYPE_VEC | 7},  \
2680     {"$v8",     RTYPE_VEC | 8},  \
2681     {"$v9",     RTYPE_VEC | 9},  \
2682     {"$v10",    RTYPE_VEC | 10}, \
2683     {"$v11",    RTYPE_VEC | 11}, \
2684     {"$v12",    RTYPE_VEC | 12}, \
2685     {"$v13",    RTYPE_VEC | 13}, \
2686     {"$v14",    RTYPE_VEC | 14}, \
2687     {"$v15",    RTYPE_VEC | 15}, \
2688     {"$v16",    RTYPE_VEC | 16}, \
2689     {"$v17",    RTYPE_VEC | 17}, \
2690     {"$v18",    RTYPE_VEC | 18}, \
2691     {"$v19",    RTYPE_VEC | 19}, \
2692     {"$v20",    RTYPE_VEC | 20}, \
2693     {"$v21",    RTYPE_VEC | 21}, \
2694     {"$v22",    RTYPE_VEC | 22}, \
2695     {"$v23",    RTYPE_VEC | 23}, \
2696     {"$v24",    RTYPE_VEC | 24}, \
2697     {"$v25",    RTYPE_VEC | 25}, \
2698     {"$v26",    RTYPE_VEC | 26}, \
2699     {"$v27",    RTYPE_VEC | 27}, \
2700     {"$v28",    RTYPE_VEC | 28}, \
2701     {"$v29",    RTYPE_VEC | 29}, \
2702     {"$v30",    RTYPE_VEC | 30}, \
2703     {"$v31",    RTYPE_VEC | 31}
2704
2705 #define R5900_I_NAMES \
2706     {"$I",      RTYPE_R5900_I | 0}
2707
2708 #define R5900_Q_NAMES \
2709     {"$Q",      RTYPE_R5900_Q | 0}
2710
2711 #define R5900_R_NAMES \
2712     {"$R",      RTYPE_R5900_R | 0}
2713
2714 #define R5900_ACC_NAMES \
2715     {"$ACC",    RTYPE_R5900_ACC | 0 }
2716
2717 #define MIPS_DSP_ACCUMULATOR_NAMES \
2718     {"$ac0",    RTYPE_ACC | 0}, \
2719     {"$ac1",    RTYPE_ACC | 1}, \
2720     {"$ac2",    RTYPE_ACC | 2}, \
2721     {"$ac3",    RTYPE_ACC | 3}
2722
2723 static const struct regname reg_names[] = {
2724   GENERIC_REGISTER_NUMBERS,
2725   FPU_REGISTER_NAMES,
2726   FPU_CONDITION_CODE_NAMES,
2727   COPROC_CONDITION_CODE_NAMES,
2728
2729   /* The $txx registers depends on the abi,
2730      these will be added later into the symbol table from
2731      one of the tables below once mips_abi is set after
2732      parsing of arguments from the command line. */
2733   SYMBOLIC_REGISTER_NAMES,
2734
2735   MIPS16_SPECIAL_REGISTER_NAMES,
2736   MDMX_VECTOR_REGISTER_NAMES,
2737   R5900_I_NAMES,
2738   R5900_Q_NAMES,
2739   R5900_R_NAMES,
2740   R5900_ACC_NAMES,
2741   MIPS_DSP_ACCUMULATOR_NAMES,
2742   {0, 0}
2743 };
2744
2745 static const struct regname reg_names_o32[] = {
2746   O32_SYMBOLIC_REGISTER_NAMES,
2747   {0, 0}
2748 };
2749
2750 static const struct regname reg_names_n32n64[] = {
2751   N32N64_SYMBOLIC_REGISTER_NAMES,
2752   {0, 0}
2753 };
2754
2755 /* Register symbols $v0 and $v1 map to GPRs 2 and 3, but they can also be
2756    interpreted as vector registers 0 and 1.  If SYMVAL is the value of one
2757    of these register symbols, return the associated vector register,
2758    otherwise return SYMVAL itself.  */
2759
2760 static unsigned int
2761 mips_prefer_vec_regno (unsigned int symval)
2762 {
2763   if ((symval & -2) == (RTYPE_GP | 2))
2764     return RTYPE_VEC | (symval & 1);
2765   return symval;
2766 }
2767
2768 /* Return true if string [S, E) is a valid register name, storing its
2769    symbol value in *SYMVAL_PTR if so.  */
2770
2771 static bfd_boolean
2772 mips_parse_register_1 (char *s, char *e, unsigned int *symval_ptr)
2773 {
2774   char save_c;
2775   symbolS *symbol;
2776
2777   /* Terminate name.  */
2778   save_c = *e;
2779   *e = '\0';
2780
2781   /* Look up the name.  */
2782   symbol = symbol_find (s);
2783   *e = save_c;
2784
2785   if (!symbol || S_GET_SEGMENT (symbol) != reg_section)
2786     return FALSE;
2787
2788   *symval_ptr = S_GET_VALUE (symbol);
2789   return TRUE;
2790 }
2791
2792 /* Return true if the string at *SPTR is a valid register name.  Allow it
2793    to have a VU0-style channel suffix of the form x?y?z?w? if CHANNELS_PTR
2794    is nonnull.
2795
2796    When returning true, move *SPTR past the register, store the
2797    register's symbol value in *SYMVAL_PTR and the channel mask in
2798    *CHANNELS_PTR (if nonnull).  The symbol value includes the register
2799    number (RNUM_MASK) and register type (RTYPE_MASK).  The channel mask
2800    is a 4-bit value of the form XYZW and is 0 if no suffix was given.  */
2801
2802 static bfd_boolean
2803 mips_parse_register (char **sptr, unsigned int *symval_ptr,
2804                      unsigned int *channels_ptr)
2805 {
2806   char *s, *e, *m;
2807   const char *q;
2808   unsigned int channels, symval, bit;
2809
2810   /* Find end of name.  */
2811   s = e = *sptr;
2812   if (is_name_beginner (*e))
2813     ++e;
2814   while (is_part_of_name (*e))
2815     ++e;
2816
2817   channels = 0;
2818   if (!mips_parse_register_1 (s, e, &symval))
2819     {
2820       if (!channels_ptr)
2821         return FALSE;
2822
2823       /* Eat characters from the end of the string that are valid
2824          channel suffixes.  The preceding register must be $ACC or
2825          end with a digit, so there is no ambiguity.  */
2826       bit = 1;
2827       m = e;
2828       for (q = "wzyx"; *q; q++, bit <<= 1)
2829         if (m > s && m[-1] == *q)
2830           {
2831             --m;
2832             channels |= bit;
2833           }
2834
2835       if (channels == 0
2836           || !mips_parse_register_1 (s, m, &symval)
2837           || (symval & (RTYPE_VI | RTYPE_VF | RTYPE_R5900_ACC)) == 0)
2838         return FALSE;
2839     }
2840
2841   *sptr = e;
2842   *symval_ptr = symval;
2843   if (channels_ptr)
2844     *channels_ptr = channels;
2845   return TRUE;
2846 }
2847
2848 /* Check if SPTR points at a valid register specifier according to TYPES.
2849    If so, then return 1, advance S to consume the specifier and store
2850    the register's number in REGNOP, otherwise return 0.  */
2851
2852 static int
2853 reg_lookup (char **s, unsigned int types, unsigned int *regnop)
2854 {
2855   unsigned int regno;
2856
2857   if (mips_parse_register (s, &regno, NULL))
2858     {
2859       if (types & RTYPE_VEC)
2860         regno = mips_prefer_vec_regno (regno);
2861       if (regno & types)
2862         regno &= RNUM_MASK;
2863       else
2864         regno = ~0;
2865     }
2866   else
2867     {
2868       if (types & RWARN)
2869         as_warn (_("unrecognized register name `%s'"), *s);
2870       regno = ~0;
2871     }
2872   if (regnop)
2873     *regnop = regno;
2874   return regno <= RNUM_MASK;
2875 }
2876
2877 /* Parse a VU0 "x?y?z?w?" channel mask at S and store the associated
2878    mask in *CHANNELS.  Return a pointer to the first unconsumed character.  */
2879
2880 static char *
2881 mips_parse_vu0_channels (char *s, unsigned int *channels)
2882 {
2883   unsigned int i;
2884
2885   *channels = 0;
2886   for (i = 0; i < 4; i++)
2887     if (*s == "xyzw"[i])
2888       {
2889         *channels |= 1 << (3 - i);
2890         ++s;
2891       }
2892   return s;
2893 }
2894
2895 /* Token types for parsed operand lists.  */
2896 enum mips_operand_token_type {
2897   /* A plain register, e.g. $f2.  */
2898   OT_REG,
2899
2900   /* A 4-bit XYZW channel mask.  */
2901   OT_CHANNELS,
2902
2903   /* A constant vector index, e.g. [1].  */
2904   OT_INTEGER_INDEX,
2905
2906   /* A register vector index, e.g. [$2].  */
2907   OT_REG_INDEX,
2908
2909   /* A continuous range of registers, e.g. $s0-$s4.  */
2910   OT_REG_RANGE,
2911
2912   /* A (possibly relocated) expression.  */
2913   OT_INTEGER,
2914
2915   /* A floating-point value.  */
2916   OT_FLOAT,
2917
2918   /* A single character.  This can be '(', ')' or ',', but '(' only appears
2919      before OT_REGs.  */
2920   OT_CHAR,
2921
2922   /* A doubled character, either "--" or "++".  */
2923   OT_DOUBLE_CHAR,
2924
2925   /* The end of the operand list.  */
2926   OT_END
2927 };
2928
2929 /* A parsed operand token.  */
2930 struct mips_operand_token
2931 {
2932   /* The type of token.  */
2933   enum mips_operand_token_type type;
2934   union
2935   {
2936     /* The register symbol value for an OT_REG or OT_REG_INDEX.  */
2937     unsigned int regno;
2938
2939     /* The 4-bit channel mask for an OT_CHANNEL_SUFFIX.  */
2940     unsigned int channels;
2941
2942     /* The integer value of an OT_INTEGER_INDEX.  */
2943     addressT index;
2944
2945     /* The two register symbol values involved in an OT_REG_RANGE.  */
2946     struct {
2947       unsigned int regno1;
2948       unsigned int regno2;
2949     } reg_range;
2950
2951     /* The value of an OT_INTEGER.  The value is represented as an
2952        expression and the relocation operators that were applied to
2953        that expression.  The reloc entries are BFD_RELOC_UNUSED if no
2954        relocation operators were used.  */
2955     struct {
2956       expressionS value;
2957       bfd_reloc_code_real_type relocs[3];
2958     } integer;
2959
2960     /* The binary data for an OT_FLOAT constant, and the number of bytes
2961        in the constant.  */
2962     struct {
2963       unsigned char data[8];
2964       int length;
2965     } flt;
2966
2967     /* The character represented by an OT_CHAR or OT_DOUBLE_CHAR.  */
2968     char ch;
2969   } u;
2970 };
2971
2972 /* An obstack used to construct lists of mips_operand_tokens.  */
2973 static struct obstack mips_operand_tokens;
2974
2975 /* Give TOKEN type TYPE and add it to mips_operand_tokens.  */
2976
2977 static void
2978 mips_add_token (struct mips_operand_token *token,
2979                 enum mips_operand_token_type type)
2980 {
2981   token->type = type;
2982   obstack_grow (&mips_operand_tokens, token, sizeof (*token));
2983 }
2984
2985 /* Check whether S is '(' followed by a register name.  Add OT_CHAR
2986    and OT_REG tokens for them if so, and return a pointer to the first
2987    unconsumed character.  Return null otherwise.  */
2988
2989 static char *
2990 mips_parse_base_start (char *s)
2991 {
2992   struct mips_operand_token token;
2993   unsigned int regno, channels;
2994   bfd_boolean decrement_p;
2995
2996   if (*s != '(')
2997     return 0;
2998
2999   ++s;
3000   SKIP_SPACE_TABS (s);
3001
3002   /* Only match "--" as part of a base expression.  In other contexts "--X"
3003      is a double negative.  */
3004   decrement_p = (s[0] == '-' && s[1] == '-');
3005   if (decrement_p)
3006     {
3007       s += 2;
3008       SKIP_SPACE_TABS (s);
3009     }
3010
3011   /* Allow a channel specifier because that leads to better error messages
3012      than treating something like "$vf0x++" as an expression.  */
3013   if (!mips_parse_register (&s, &regno, &channels))
3014     return 0;
3015
3016   token.u.ch = '(';
3017   mips_add_token (&token, OT_CHAR);
3018
3019   if (decrement_p)
3020     {
3021       token.u.ch = '-';
3022       mips_add_token (&token, OT_DOUBLE_CHAR);
3023     }
3024
3025   token.u.regno = regno;
3026   mips_add_token (&token, OT_REG);
3027
3028   if (channels)
3029     {
3030       token.u.channels = channels;
3031       mips_add_token (&token, OT_CHANNELS);
3032     }
3033
3034   /* For consistency, only match "++" as part of base expressions too.  */
3035   SKIP_SPACE_TABS (s);
3036   if (s[0] == '+' && s[1] == '+')
3037     {
3038       s += 2;
3039       token.u.ch = '+';
3040       mips_add_token (&token, OT_DOUBLE_CHAR);
3041     }
3042
3043   return s;
3044 }
3045
3046 /* Parse one or more tokens from S.  Return a pointer to the first
3047    unconsumed character on success.  Return null if an error was found
3048    and store the error text in insn_error.  FLOAT_FORMAT is as for
3049    mips_parse_arguments.  */
3050
3051 static char *
3052 mips_parse_argument_token (char *s, char float_format)
3053 {
3054   char *end, *save_in;
3055   const char *err;
3056   unsigned int regno1, regno2, channels;
3057   struct mips_operand_token token;
3058
3059   /* First look for "($reg", since we want to treat that as an
3060      OT_CHAR and OT_REG rather than an expression.  */
3061   end = mips_parse_base_start (s);
3062   if (end)
3063     return end;
3064
3065   /* Handle other characters that end up as OT_CHARs.  */
3066   if (*s == ')' || *s == ',')
3067     {
3068       token.u.ch = *s;
3069       mips_add_token (&token, OT_CHAR);
3070       ++s;
3071       return s;
3072     }
3073
3074   /* Handle tokens that start with a register.  */
3075   if (mips_parse_register (&s, &regno1, &channels))
3076     {
3077       if (channels)
3078         {
3079           /* A register and a VU0 channel suffix.  */
3080           token.u.regno = regno1;
3081           mips_add_token (&token, OT_REG);
3082
3083           token.u.channels = channels;
3084           mips_add_token (&token, OT_CHANNELS);
3085           return s;
3086         }
3087
3088       SKIP_SPACE_TABS (s);
3089       if (*s == '-')
3090         {
3091           /* A register range.  */
3092           ++s;
3093           SKIP_SPACE_TABS (s);
3094           if (!mips_parse_register (&s, &regno2, NULL))
3095             {
3096               set_insn_error (0, _("invalid register range"));
3097               return 0;
3098             }
3099
3100           token.u.reg_range.regno1 = regno1;
3101           token.u.reg_range.regno2 = regno2;
3102           mips_add_token (&token, OT_REG_RANGE);
3103           return s;
3104         }
3105
3106       /* Add the register itself.  */
3107       token.u.regno = regno1;
3108       mips_add_token (&token, OT_REG);
3109
3110       /* Check for a vector index.  */
3111       if (*s == '[')
3112         {
3113           ++s;
3114           SKIP_SPACE_TABS (s);
3115           if (mips_parse_register (&s, &token.u.regno, NULL))
3116             mips_add_token (&token, OT_REG_INDEX);
3117           else
3118             {
3119               expressionS element;
3120
3121               my_getExpression (&element, s);
3122               if (element.X_op != O_constant)
3123                 {
3124                   set_insn_error (0, _("vector element must be constant"));
3125                   return 0;
3126                 }
3127               s = expr_end;
3128               token.u.index = element.X_add_number;
3129               mips_add_token (&token, OT_INTEGER_INDEX);
3130             }
3131           SKIP_SPACE_TABS (s);
3132           if (*s != ']')
3133             {
3134               set_insn_error (0, _("missing `]'"));
3135               return 0;
3136             }
3137           ++s;
3138         }
3139       return s;
3140     }
3141
3142   if (float_format)
3143     {
3144       /* First try to treat expressions as floats.  */
3145       save_in = input_line_pointer;
3146       input_line_pointer = s;
3147       err = md_atof (float_format, (char *) token.u.flt.data,
3148                      &token.u.flt.length);
3149       end = input_line_pointer;
3150       input_line_pointer = save_in;
3151       if (err && *err)
3152         {
3153           set_insn_error (0, err);
3154           return 0;
3155         }
3156       if (s != end)
3157         {
3158           mips_add_token (&token, OT_FLOAT);
3159           return end;
3160         }
3161     }
3162
3163   /* Treat everything else as an integer expression.  */
3164   token.u.integer.relocs[0] = BFD_RELOC_UNUSED;
3165   token.u.integer.relocs[1] = BFD_RELOC_UNUSED;
3166   token.u.integer.relocs[2] = BFD_RELOC_UNUSED;
3167   my_getSmallExpression (&token.u.integer.value, token.u.integer.relocs, s);
3168   s = expr_end;
3169   mips_add_token (&token, OT_INTEGER);
3170   return s;
3171 }
3172
3173 /* S points to the operand list for an instruction.  FLOAT_FORMAT is 'f'
3174    if expressions should be treated as 32-bit floating-point constants,
3175    'd' if they should be treated as 64-bit floating-point constants,
3176    or 0 if they should be treated as integer expressions (the usual case).
3177
3178    Return a list of tokens on success, otherwise return 0.  The caller
3179    must obstack_free the list after use.  */
3180
3181 static struct mips_operand_token *
3182 mips_parse_arguments (char *s, char float_format)
3183 {
3184   struct mips_operand_token token;
3185
3186   SKIP_SPACE_TABS (s);
3187   while (*s)
3188     {
3189       s = mips_parse_argument_token (s, float_format);
3190       if (!s)
3191         {
3192           obstack_free (&mips_operand_tokens,
3193                         obstack_finish (&mips_operand_tokens));
3194           return 0;
3195         }
3196       SKIP_SPACE_TABS (s);
3197     }
3198   mips_add_token (&token, OT_END);
3199   return (struct mips_operand_token *) obstack_finish (&mips_operand_tokens);
3200 }
3201
3202 /* Return TRUE if opcode MO is valid on the currently selected ISA, ASE
3203    and architecture.  Use is_opcode_valid_16 for MIPS16 opcodes.  */
3204
3205 static bfd_boolean
3206 is_opcode_valid (const struct mips_opcode *mo)
3207 {
3208   int isa = mips_opts.isa;
3209   int ase = mips_opts.ase;
3210   int fp_s, fp_d;
3211   unsigned int i;
3212
3213   if (ISA_HAS_64BIT_REGS (mips_opts.isa))
3214     for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
3215       if ((ase & mips_ases[i].flags) == mips_ases[i].flags)
3216         ase |= mips_ases[i].flags64;
3217
3218   if (!opcode_is_member (mo, isa, ase, mips_opts.arch))
3219     return FALSE;
3220
3221   /* Check whether the instruction or macro requires single-precision or
3222      double-precision floating-point support.  Note that this information is
3223      stored differently in the opcode table for insns and macros.  */
3224   if (mo->pinfo == INSN_MACRO)
3225     {
3226       fp_s = mo->pinfo2 & INSN2_M_FP_S;
3227       fp_d = mo->pinfo2 & INSN2_M_FP_D;
3228     }
3229   else
3230     {
3231       fp_s = mo->pinfo & FP_S;
3232       fp_d = mo->pinfo & FP_D;
3233     }
3234
3235   if (fp_d && (mips_opts.soft_float || mips_opts.single_float))
3236     return FALSE;
3237
3238   if (fp_s && mips_opts.soft_float)
3239     return FALSE;
3240
3241   return TRUE;
3242 }
3243
3244 /* Return TRUE if the MIPS16 opcode MO is valid on the currently
3245    selected ISA and architecture.  */
3246
3247 static bfd_boolean
3248 is_opcode_valid_16 (const struct mips_opcode *mo)
3249 {
3250   return opcode_is_member (mo, mips_opts.isa, 0, mips_opts.arch);
3251 }
3252
3253 /* Return TRUE if the size of the microMIPS opcode MO matches one
3254    explicitly requested.  Always TRUE in the standard MIPS mode.  */
3255
3256 static bfd_boolean
3257 is_size_valid (const struct mips_opcode *mo)
3258 {
3259   if (!mips_opts.micromips)
3260     return TRUE;
3261
3262   if (mips_opts.insn32)
3263     {
3264       if (mo->pinfo != INSN_MACRO && micromips_insn_length (mo) != 4)
3265         return FALSE;
3266       if ((mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0)
3267         return FALSE;
3268     }
3269   if (!forced_insn_length)
3270     return TRUE;
3271   if (mo->pinfo == INSN_MACRO)
3272     return FALSE;
3273   return forced_insn_length == micromips_insn_length (mo);
3274 }
3275
3276 /* Return TRUE if the microMIPS opcode MO is valid for the delay slot
3277    of the preceding instruction.  Always TRUE in the standard MIPS mode.
3278
3279    We don't accept macros in 16-bit delay slots to avoid a case where
3280    a macro expansion fails because it relies on a preceding 32-bit real
3281    instruction to have matched and does not handle the operands correctly.
3282    The only macros that may expand to 16-bit instructions are JAL that
3283    cannot be placed in a delay slot anyway, and corner cases of BALIGN
3284    and BGT (that likewise cannot be placed in a delay slot) that decay to
3285    a NOP.  In all these cases the macros precede any corresponding real
3286    instruction definitions in the opcode table, so they will match in the
3287    second pass where the size of the delay slot is ignored and therefore
3288    produce correct code.  */
3289
3290 static bfd_boolean
3291 is_delay_slot_valid (const struct mips_opcode *mo)
3292 {
3293   if (!mips_opts.micromips)
3294     return TRUE;
3295
3296   if (mo->pinfo == INSN_MACRO)
3297     return (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) == 0;
3298   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
3299       && micromips_insn_length (mo) != 4)
3300     return FALSE;
3301   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
3302       && micromips_insn_length (mo) != 2)
3303     return FALSE;
3304
3305   return TRUE;
3306 }
3307
3308 /* For consistency checking, verify that all bits of OPCODE are specified
3309    either by the match/mask part of the instruction definition, or by the
3310    operand list.  Also build up a list of operands in OPERANDS.
3311
3312    INSN_BITS says which bits of the instruction are significant.
3313    If OPCODE is a standard or microMIPS instruction, DECODE_OPERAND
3314    provides the mips_operand description of each operand.  DECODE_OPERAND
3315    is null for MIPS16 instructions.  */
3316
3317 static int
3318 validate_mips_insn (const struct mips_opcode *opcode,
3319                     unsigned long insn_bits,
3320                     const struct mips_operand *(*decode_operand) (const char *),
3321                     struct mips_operand_array *operands)
3322 {
3323   const char *s;
3324   unsigned long used_bits, doubled, undefined, opno, mask;
3325   const struct mips_operand *operand;
3326
3327   mask = (opcode->pinfo == INSN_MACRO ? 0 : opcode->mask);
3328   if ((mask & opcode->match) != opcode->match)
3329     {
3330       as_bad (_("internal: bad mips opcode (mask error): %s %s"),
3331               opcode->name, opcode->args);
3332       return 0;
3333     }
3334   used_bits = 0;
3335   opno = 0;
3336   if (opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX)
3337     used_bits = mips_insert_operand (&mips_vu0_channel_mask, used_bits, -1);
3338   for (s = opcode->args; *s; ++s)
3339     switch (*s)
3340       {
3341       case ',':
3342       case '(':
3343       case ')':
3344         break;
3345
3346       case '#':
3347         s++;
3348         break;
3349
3350       default:
3351         if (!decode_operand)
3352           operand = decode_mips16_operand (*s, FALSE);
3353         else
3354           operand = decode_operand (s);
3355         if (!operand && opcode->pinfo != INSN_MACRO)
3356           {
3357             as_bad (_("internal: unknown operand type: %s %s"),
3358                     opcode->name, opcode->args);
3359             return 0;
3360           }
3361         gas_assert (opno < MAX_OPERANDS);
3362         operands->operand[opno] = operand;
3363         if (operand && operand->type != OP_VU0_MATCH_SUFFIX)
3364           {
3365             used_bits = mips_insert_operand (operand, used_bits, -1);
3366             if (operand->type == OP_MDMX_IMM_REG)
3367               /* Bit 5 is the format selector (OB vs QH).  The opcode table
3368                  has separate entries for each format.  */
3369               used_bits &= ~(1 << (operand->lsb + 5));
3370             if (operand->type == OP_ENTRY_EXIT_LIST)
3371               used_bits &= ~(mask & 0x700);
3372           }
3373         /* Skip prefix characters.  */
3374         if (decode_operand && (*s == '+' || *s == 'm' || *s == '-'))
3375           ++s;
3376         opno += 1;
3377         break;
3378       }
3379   doubled = used_bits & mask & insn_bits;
3380   if (doubled)
3381     {
3382       as_bad (_("internal: bad mips opcode (bits 0x%08lx doubly defined):"
3383                 " %s %s"), doubled, opcode->name, opcode->args);
3384       return 0;
3385     }
3386   used_bits |= mask;
3387   undefined = ~used_bits & insn_bits;
3388   if (opcode->pinfo != INSN_MACRO && undefined)
3389     {
3390       as_bad (_("internal: bad mips opcode (bits 0x%08lx undefined): %s %s"),
3391               undefined, opcode->name, opcode->args);
3392       return 0;
3393     }
3394   used_bits &= ~insn_bits;
3395   if (used_bits)
3396     {
3397       as_bad (_("internal: bad mips opcode (bits 0x%08lx defined): %s %s"),
3398               used_bits, opcode->name, opcode->args);
3399       return 0;
3400     }
3401   return 1;
3402 }
3403
3404 /* The MIPS16 version of validate_mips_insn.  */
3405
3406 static int
3407 validate_mips16_insn (const struct mips_opcode *opcode,
3408                       struct mips_operand_array *operands)
3409 {
3410   if (opcode->args[0] == 'a' || opcode->args[0] == 'i')
3411     {
3412       /* In this case OPCODE defines the first 16 bits in a 32-bit jump
3413          instruction.  Use TMP to describe the full instruction.  */
3414       struct mips_opcode tmp;
3415
3416       tmp = *opcode;
3417       tmp.match <<= 16;
3418       tmp.mask <<= 16;
3419       return validate_mips_insn (&tmp, 0xffffffff, 0, operands);
3420     }
3421   return validate_mips_insn (opcode, 0xffff, 0, operands);
3422 }
3423
3424 /* The microMIPS version of validate_mips_insn.  */
3425
3426 static int
3427 validate_micromips_insn (const struct mips_opcode *opc,
3428                          struct mips_operand_array *operands)
3429 {
3430   unsigned long insn_bits;
3431   unsigned long major;
3432   unsigned int length;
3433
3434   if (opc->pinfo == INSN_MACRO)
3435     return validate_mips_insn (opc, 0xffffffff, decode_micromips_operand,
3436                                operands);
3437
3438   length = micromips_insn_length (opc);
3439   if (length != 2 && length != 4)
3440     {
3441       as_bad (_("internal error: bad microMIPS opcode (incorrect length: %u): "
3442                 "%s %s"), length, opc->name, opc->args);
3443       return 0;
3444     }
3445   major = opc->match >> (10 + 8 * (length - 2));
3446   if ((length == 2 && (major & 7) != 1 && (major & 6) != 2)
3447       || (length == 4 && (major & 7) != 0 && (major & 4) != 4))
3448     {
3449       as_bad (_("internal error: bad microMIPS opcode "
3450                 "(opcode/length mismatch): %s %s"), opc->name, opc->args);
3451       return 0;
3452     }
3453
3454   /* Shift piecewise to avoid an overflow where unsigned long is 32-bit.  */
3455   insn_bits = 1 << 4 * length;
3456   insn_bits <<= 4 * length;
3457   insn_bits -= 1;
3458   return validate_mips_insn (opc, insn_bits, decode_micromips_operand,
3459                              operands);
3460 }
3461
3462 /* This function is called once, at assembler startup time.  It should set up
3463    all the tables, etc. that the MD part of the assembler will need.  */
3464
3465 void
3466 md_begin (void)
3467 {
3468   const char *retval = NULL;
3469   int i = 0;
3470   int broken = 0;
3471
3472   if (mips_pic != NO_PIC)
3473     {
3474       if (g_switch_seen && g_switch_value != 0)
3475         as_bad (_("-G may not be used in position-independent code"));
3476       g_switch_value = 0;
3477     }
3478   else if (mips_abicalls)
3479     {
3480       if (g_switch_seen && g_switch_value != 0)
3481         as_bad (_("-G may not be used with abicalls"));
3482       g_switch_value = 0;
3483     }
3484
3485   if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_opts.arch))
3486     as_warn (_("could not set architecture and machine"));
3487
3488   op_hash = hash_new ();
3489
3490   mips_operands = XCNEWVEC (struct mips_operand_array, NUMOPCODES);
3491   for (i = 0; i < NUMOPCODES;)
3492     {
3493       const char *name = mips_opcodes[i].name;
3494
3495       retval = hash_insert (op_hash, name, (void *) &mips_opcodes[i]);
3496       if (retval != NULL)
3497         {
3498           fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
3499                    mips_opcodes[i].name, retval);
3500           /* Probably a memory allocation problem?  Give up now.  */
3501           as_fatal (_("broken assembler, no assembly attempted"));
3502         }
3503       do
3504         {
3505           if (!validate_mips_insn (&mips_opcodes[i], 0xffffffff,
3506                                    decode_mips_operand, &mips_operands[i]))
3507             broken = 1;
3508           if (nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3509             {
3510               create_insn (&nop_insn, mips_opcodes + i);
3511               if (mips_fix_loongson2f_nop)
3512                 nop_insn.insn_opcode = LOONGSON2F_NOP_INSN;
3513               nop_insn.fixed_p = 1;
3514             }
3515           ++i;
3516         }
3517       while ((i < NUMOPCODES) && !strcmp (mips_opcodes[i].name, name));
3518     }
3519
3520   mips16_op_hash = hash_new ();
3521   mips16_operands = XCNEWVEC (struct mips_operand_array,
3522                               bfd_mips16_num_opcodes);
3523
3524   i = 0;
3525   while (i < bfd_mips16_num_opcodes)
3526     {
3527       const char *name = mips16_opcodes[i].name;
3528
3529       retval = hash_insert (mips16_op_hash, name, (void *) &mips16_opcodes[i]);
3530       if (retval != NULL)
3531         as_fatal (_("internal: can't hash `%s': %s"),
3532                   mips16_opcodes[i].name, retval);
3533       do
3534         {
3535           if (!validate_mips16_insn (&mips16_opcodes[i], &mips16_operands[i]))
3536             broken = 1;
3537           if (mips16_nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3538             {
3539               create_insn (&mips16_nop_insn, mips16_opcodes + i);
3540               mips16_nop_insn.fixed_p = 1;
3541             }
3542           ++i;
3543         }
3544       while (i < bfd_mips16_num_opcodes
3545              && strcmp (mips16_opcodes[i].name, name) == 0);
3546     }
3547
3548   micromips_op_hash = hash_new ();
3549   micromips_operands = XCNEWVEC (struct mips_operand_array,
3550                                  bfd_micromips_num_opcodes);
3551
3552   i = 0;
3553   while (i < bfd_micromips_num_opcodes)
3554     {
3555       const char *name = micromips_opcodes[i].name;
3556
3557       retval = hash_insert (micromips_op_hash, name,
3558                             (void *) &micromips_opcodes[i]);
3559       if (retval != NULL)
3560         as_fatal (_("internal: can't hash `%s': %s"),
3561                   micromips_opcodes[i].name, retval);
3562       do
3563         {
3564           struct mips_cl_insn *micromips_nop_insn;
3565
3566           if (!validate_micromips_insn (&micromips_opcodes[i],
3567                                         &micromips_operands[i]))
3568             broken = 1;
3569
3570           if (micromips_opcodes[i].pinfo != INSN_MACRO)
3571             {
3572               if (micromips_insn_length (micromips_opcodes + i) == 2)
3573                 micromips_nop_insn = &micromips_nop16_insn;
3574               else if (micromips_insn_length (micromips_opcodes + i) == 4)
3575                 micromips_nop_insn = &micromips_nop32_insn;
3576               else
3577                 continue;
3578
3579               if (micromips_nop_insn->insn_mo == NULL
3580                   && strcmp (name, "nop") == 0)
3581                 {
3582                   create_insn (micromips_nop_insn, micromips_opcodes + i);
3583                   micromips_nop_insn->fixed_p = 1;
3584                 }
3585             }
3586         }
3587       while (++i < bfd_micromips_num_opcodes
3588              && strcmp (micromips_opcodes[i].name, name) == 0);
3589     }
3590
3591   if (broken)
3592     as_fatal (_("broken assembler, no assembly attempted"));
3593
3594   /* We add all the general register names to the symbol table.  This
3595      helps us detect invalid uses of them.  */
3596   for (i = 0; reg_names[i].name; i++)
3597     symbol_table_insert (symbol_new (reg_names[i].name, reg_section,
3598                                      reg_names[i].num, /* & RNUM_MASK, */
3599                                      &zero_address_frag));
3600   if (HAVE_NEWABI)
3601     for (i = 0; reg_names_n32n64[i].name; i++)
3602       symbol_table_insert (symbol_new (reg_names_n32n64[i].name, reg_section,
3603                                        reg_names_n32n64[i].num, /* & RNUM_MASK, */
3604                                        &zero_address_frag));
3605   else
3606     for (i = 0; reg_names_o32[i].name; i++)
3607       symbol_table_insert (symbol_new (reg_names_o32[i].name, reg_section,
3608                                        reg_names_o32[i].num, /* & RNUM_MASK, */
3609                                        &zero_address_frag));
3610
3611   for (i = 0; i < 32; i++)
3612     {
3613       char regname[6];
3614
3615       /* R5900 VU0 floating-point register.  */
3616       sprintf (regname, "$vf%d", i);
3617       symbol_table_insert (symbol_new (regname, reg_section,
3618                                        RTYPE_VF | i, &zero_address_frag));
3619
3620       /* R5900 VU0 integer register.  */
3621       sprintf (regname, "$vi%d", i);
3622       symbol_table_insert (symbol_new (regname, reg_section,
3623                                        RTYPE_VI | i, &zero_address_frag));
3624
3625       /* MSA register.  */
3626       sprintf (regname, "$w%d", i);
3627       symbol_table_insert (symbol_new (regname, reg_section,
3628                                        RTYPE_MSA | i, &zero_address_frag));
3629     }
3630
3631   obstack_init (&mips_operand_tokens);
3632
3633   mips_no_prev_insn ();
3634
3635   mips_gprmask = 0;
3636   mips_cprmask[0] = 0;
3637   mips_cprmask[1] = 0;
3638   mips_cprmask[2] = 0;
3639   mips_cprmask[3] = 0;
3640
3641   /* set the default alignment for the text section (2**2) */
3642   record_alignment (text_section, 2);
3643
3644   bfd_set_gp_size (stdoutput, g_switch_value);
3645
3646   /* On a native system other than VxWorks, sections must be aligned
3647      to 16 byte boundaries.  When configured for an embedded ELF
3648      target, we don't bother.  */
3649   if (strncmp (TARGET_OS, "elf", 3) != 0
3650       && strncmp (TARGET_OS, "vxworks", 7) != 0)
3651     {
3652       (void) bfd_set_section_alignment (stdoutput, text_section, 4);
3653       (void) bfd_set_section_alignment (stdoutput, data_section, 4);
3654       (void) bfd_set_section_alignment (stdoutput, bss_section, 4);
3655     }
3656
3657   /* Create a .reginfo section for register masks and a .mdebug
3658      section for debugging information.  */
3659   {
3660     segT seg;
3661     subsegT subseg;
3662     flagword flags;
3663     segT sec;
3664
3665     seg = now_seg;
3666     subseg = now_subseg;
3667
3668     /* The ABI says this section should be loaded so that the
3669        running program can access it.  However, we don't load it
3670        if we are configured for an embedded target */
3671     flags = SEC_READONLY | SEC_DATA;
3672     if (strncmp (TARGET_OS, "elf", 3) != 0)
3673       flags |= SEC_ALLOC | SEC_LOAD;
3674
3675     if (mips_abi != N64_ABI)
3676       {
3677         sec = subseg_new (".reginfo", (subsegT) 0);
3678
3679         bfd_set_section_flags (stdoutput, sec, flags);
3680         bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
3681
3682         mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
3683       }
3684     else
3685       {
3686         /* The 64-bit ABI uses a .MIPS.options section rather than
3687            .reginfo section.  */
3688         sec = subseg_new (".MIPS.options", (subsegT) 0);
3689         bfd_set_section_flags (stdoutput, sec, flags);
3690         bfd_set_section_alignment (stdoutput, sec, 3);
3691
3692         /* Set up the option header.  */
3693         {
3694           Elf_Internal_Options opthdr;
3695           char *f;
3696
3697           opthdr.kind = ODK_REGINFO;
3698           opthdr.size = (sizeof (Elf_External_Options)
3699                          + sizeof (Elf64_External_RegInfo));
3700           opthdr.section = 0;
3701           opthdr.info = 0;
3702           f = frag_more (sizeof (Elf_External_Options));
3703           bfd_mips_elf_swap_options_out (stdoutput, &opthdr,
3704                                          (Elf_External_Options *) f);
3705
3706           mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
3707         }
3708       }
3709
3710     sec = subseg_new (".MIPS.abiflags", (subsegT) 0);
3711     bfd_set_section_flags (stdoutput, sec,
3712                            SEC_READONLY | SEC_DATA | SEC_ALLOC | SEC_LOAD);
3713     bfd_set_section_alignment (stdoutput, sec, 3);
3714     mips_flags_frag = frag_more (sizeof (Elf_External_ABIFlags_v0));
3715
3716     if (ECOFF_DEBUGGING)
3717       {
3718         sec = subseg_new (".mdebug", (subsegT) 0);
3719         (void) bfd_set_section_flags (stdoutput, sec,
3720                                       SEC_HAS_CONTENTS | SEC_READONLY);
3721         (void) bfd_set_section_alignment (stdoutput, sec, 2);
3722       }
3723     else if (mips_flag_pdr)
3724       {
3725         pdr_seg = subseg_new (".pdr", (subsegT) 0);
3726         (void) bfd_set_section_flags (stdoutput, pdr_seg,
3727                                       SEC_READONLY | SEC_RELOC
3728                                       | SEC_DEBUGGING);
3729         (void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
3730       }
3731
3732     subseg_set (seg, subseg);
3733   }
3734
3735   if (mips_fix_vr4120)
3736     init_vr4120_conflicts ();
3737 }
3738
3739 static inline void
3740 fpabi_incompatible_with (int fpabi, const char *what)
3741 {
3742   as_warn (_(".gnu_attribute %d,%d is incompatible with `%s'"),
3743            Tag_GNU_MIPS_ABI_FP, fpabi, what);
3744 }
3745
3746 static inline void
3747 fpabi_requires (int fpabi, const char *what)
3748 {
3749   as_warn (_(".gnu_attribute %d,%d requires `%s'"),
3750            Tag_GNU_MIPS_ABI_FP, fpabi, what);
3751 }
3752
3753 /* Check -mabi and register sizes against the specified FP ABI.  */
3754 static void
3755 check_fpabi (int fpabi)
3756 {
3757   switch (fpabi)
3758     {
3759     case Val_GNU_MIPS_ABI_FP_DOUBLE:
3760       if (file_mips_opts.soft_float)
3761         fpabi_incompatible_with (fpabi, "softfloat");
3762       else if (file_mips_opts.single_float)
3763         fpabi_incompatible_with (fpabi, "singlefloat");
3764       if (file_mips_opts.gp == 64 && file_mips_opts.fp == 32)
3765         fpabi_incompatible_with (fpabi, "gp=64 fp=32");
3766       else if (file_mips_opts.gp == 32 && file_mips_opts.fp == 64)
3767         fpabi_incompatible_with (fpabi, "gp=32 fp=64");
3768       break;
3769
3770     case Val_GNU_MIPS_ABI_FP_XX:
3771       if (mips_abi != O32_ABI)
3772         fpabi_requires (fpabi, "-mabi=32");
3773       else if (file_mips_opts.soft_float)
3774         fpabi_incompatible_with (fpabi, "softfloat");
3775       else if (file_mips_opts.single_float)
3776         fpabi_incompatible_with (fpabi, "singlefloat");
3777       else if (file_mips_opts.fp != 0)
3778         fpabi_requires (fpabi, "fp=xx");
3779       break;
3780
3781     case Val_GNU_MIPS_ABI_FP_64A:
3782     case Val_GNU_MIPS_ABI_FP_64:
3783       if (mips_abi != O32_ABI)
3784         fpabi_requires (fpabi, "-mabi=32");
3785       else if (file_mips_opts.soft_float)
3786         fpabi_incompatible_with (fpabi, "softfloat");
3787       else if (file_mips_opts.single_float)
3788         fpabi_incompatible_with (fpabi, "singlefloat");
3789       else if (file_mips_opts.fp != 64)
3790         fpabi_requires (fpabi, "fp=64");
3791       else if (fpabi == Val_GNU_MIPS_ABI_FP_64 && !file_mips_opts.oddspreg)
3792         fpabi_incompatible_with (fpabi, "nooddspreg");
3793       else if (fpabi == Val_GNU_MIPS_ABI_FP_64A && file_mips_opts.oddspreg)
3794         fpabi_requires (fpabi, "nooddspreg");
3795       break;
3796
3797     case Val_GNU_MIPS_ABI_FP_SINGLE:
3798       if (file_mips_opts.soft_float)
3799         fpabi_incompatible_with (fpabi, "softfloat");
3800       else if (!file_mips_opts.single_float)
3801         fpabi_requires (fpabi, "singlefloat");
3802       break;
3803
3804     case Val_GNU_MIPS_ABI_FP_SOFT:
3805       if (!file_mips_opts.soft_float)
3806         fpabi_requires (fpabi, "softfloat");
3807       break;
3808
3809     case Val_GNU_MIPS_ABI_FP_OLD_64:
3810       as_warn (_(".gnu_attribute %d,%d is no longer supported"),
3811                Tag_GNU_MIPS_ABI_FP, fpabi);
3812       break;
3813
3814     case Val_GNU_MIPS_ABI_FP_NAN2008:
3815       /* Silently ignore compatibility value.  */
3816       break;
3817
3818     default:
3819       as_warn (_(".gnu_attribute %d,%d is not a recognized"
3820                  " floating-point ABI"), Tag_GNU_MIPS_ABI_FP, fpabi);
3821       break;
3822     }
3823 }
3824
3825 /* Perform consistency checks on the current options.  */
3826
3827 static void
3828 mips_check_options (struct mips_set_options *opts, bfd_boolean abi_checks)
3829 {
3830   /* Check the size of integer registers agrees with the ABI and ISA.  */
3831   if (opts->gp == 64 && !ISA_HAS_64BIT_REGS (opts->isa))
3832     as_bad (_("`gp=64' used with a 32-bit processor"));
3833   else if (abi_checks
3834            && opts->gp == 32 && ABI_NEEDS_64BIT_REGS (mips_abi))
3835     as_bad (_("`gp=32' used with a 64-bit ABI"));
3836   else if (abi_checks
3837            && opts->gp == 64 && ABI_NEEDS_32BIT_REGS (mips_abi))
3838     as_bad (_("`gp=64' used with a 32-bit ABI"));
3839
3840   /* Check the size of the float registers agrees with the ABI and ISA.  */
3841   switch (opts->fp)
3842     {
3843     case 0:
3844       if (!CPU_HAS_LDC1_SDC1 (opts->arch))
3845         as_bad (_("`fp=xx' used with a cpu lacking ldc1/sdc1 instructions"));
3846       else if (opts->single_float == 1)
3847         as_bad (_("`fp=xx' cannot be used with `singlefloat'"));
3848       break;
3849     case 64:
3850       if (!ISA_HAS_64BIT_FPRS (opts->isa))
3851         as_bad (_("`fp=64' used with a 32-bit fpu"));
3852       else if (abi_checks
3853                && ABI_NEEDS_32BIT_REGS (mips_abi)
3854                && !ISA_HAS_MXHC1 (opts->isa))
3855         as_warn (_("`fp=64' used with a 32-bit ABI"));
3856       break;
3857     case 32:
3858       if (abi_checks
3859           && ABI_NEEDS_64BIT_REGS (mips_abi))
3860         as_warn (_("`fp=32' used with a 64-bit ABI"));
3861       if (ISA_IS_R6 (opts->isa) && opts->single_float == 0)
3862         as_bad (_("`fp=32' used with a MIPS R6 cpu"));
3863       break;
3864     default:
3865       as_bad (_("Unknown size of floating point registers"));
3866       break;
3867     }
3868
3869   if (ABI_NEEDS_64BIT_REGS (mips_abi) && !opts->oddspreg)
3870     as_bad (_("`nooddspreg` cannot be used with a 64-bit ABI"));
3871
3872   if (opts->micromips == 1 && opts->mips16 == 1)
3873     as_bad (_("`%s' cannot be used with `%s'"), "mips16", "micromips");
3874   else if (ISA_IS_R6 (opts->isa)
3875            && (opts->micromips == 1
3876                || opts->mips16 == 1))
3877     as_fatal (_("`%s' cannot be used with `%s'"),
3878               opts->micromips ? "micromips" : "mips16",
3879               mips_cpu_info_from_isa (opts->isa)->name);
3880
3881   if (ISA_IS_R6 (opts->isa) && mips_relax_branch)
3882     as_fatal (_("branch relaxation is not supported in `%s'"),
3883               mips_cpu_info_from_isa (opts->isa)->name);
3884 }
3885
3886 /* Perform consistency checks on the module level options exactly once.
3887    This is a deferred check that happens:
3888      at the first .set directive
3889      or, at the first pseudo op that generates code (inc .dc.a)
3890      or, at the first instruction
3891      or, at the end.  */
3892
3893 static void
3894 file_mips_check_options (void)
3895 {
3896   const struct mips_cpu_info *arch_info = 0;
3897
3898   if (file_mips_opts_checked)
3899     return;
3900
3901   /* The following code determines the register size.
3902      Similar code was added to GCC 3.3 (see override_options() in
3903      config/mips/mips.c).  The GAS and GCC code should be kept in sync
3904      as much as possible.  */
3905
3906   if (file_mips_opts.gp < 0)
3907     {
3908       /* Infer the integer register size from the ABI and processor.
3909          Restrict ourselves to 32-bit registers if that's all the
3910          processor has, or if the ABI cannot handle 64-bit registers.  */
3911       file_mips_opts.gp = (ABI_NEEDS_32BIT_REGS (mips_abi)
3912                            || !ISA_HAS_64BIT_REGS (file_mips_opts.isa))
3913                           ? 32 : 64;
3914     }
3915
3916   if (file_mips_opts.fp < 0)
3917     {
3918       /* No user specified float register size.
3919          ??? GAS treats single-float processors as though they had 64-bit
3920          float registers (although it complains when double-precision
3921          instructions are used).  As things stand, saying they have 32-bit
3922          registers would lead to spurious "register must be even" messages.
3923          So here we assume float registers are never smaller than the
3924          integer ones.  */
3925       if (file_mips_opts.gp == 64)
3926         /* 64-bit integer registers implies 64-bit float registers.  */
3927         file_mips_opts.fp = 64;
3928       else if ((file_mips_opts.ase & FP64_ASES)
3929                && ISA_HAS_64BIT_FPRS (file_mips_opts.isa))
3930         /* Handle ASEs that require 64-bit float registers, if possible.  */
3931         file_mips_opts.fp = 64;
3932       else if (ISA_IS_R6 (mips_opts.isa))
3933         /* R6 implies 64-bit float registers.  */
3934         file_mips_opts.fp = 64;
3935       else
3936         /* 32-bit float registers.  */
3937         file_mips_opts.fp = 32;
3938     }
3939
3940   arch_info = mips_cpu_info_from_arch (file_mips_opts.arch);
3941
3942   /* Disable operations on odd-numbered floating-point registers by default
3943      when using the FPXX ABI.  */
3944   if (file_mips_opts.oddspreg < 0)
3945     {
3946       if (file_mips_opts.fp == 0)
3947         file_mips_opts.oddspreg = 0;
3948       else
3949         file_mips_opts.oddspreg = 1;
3950     }
3951
3952   /* End of GCC-shared inference code.  */
3953
3954   /* This flag is set when we have a 64-bit capable CPU but use only
3955      32-bit wide registers.  Note that EABI does not use it.  */
3956   if (ISA_HAS_64BIT_REGS (file_mips_opts.isa)
3957       && ((mips_abi == NO_ABI && file_mips_opts.gp == 32)
3958           || mips_abi == O32_ABI))
3959     mips_32bitmode = 1;
3960
3961   if (file_mips_opts.isa == ISA_MIPS1 && mips_trap)
3962     as_bad (_("trap exception not supported at ISA 1"));
3963
3964   /* If the selected architecture includes support for ASEs, enable
3965      generation of code for them.  */
3966   if (file_mips_opts.mips16 == -1)
3967     file_mips_opts.mips16 = (CPU_HAS_MIPS16 (file_mips_opts.arch)) ? 1 : 0;
3968   if (file_mips_opts.micromips == -1)
3969     file_mips_opts.micromips = (CPU_HAS_MICROMIPS (file_mips_opts.arch))
3970                                 ? 1 : 0;
3971
3972   if (mips_nan2008 == -1)
3973     mips_nan2008 = (ISA_HAS_LEGACY_NAN (file_mips_opts.isa)) ? 0 : 1;
3974   else if (!ISA_HAS_LEGACY_NAN (file_mips_opts.isa) && mips_nan2008 == 0)
3975     as_fatal (_("`%s' does not support legacy NaN"),
3976               mips_cpu_info_from_arch (file_mips_opts.arch)->name);
3977
3978   /* Some ASEs require 64-bit FPRs, so -mfp32 should stop those ASEs from
3979      being selected implicitly.  */
3980   if (file_mips_opts.fp != 64)
3981     file_ase_explicit |= ASE_MIPS3D | ASE_MDMX | ASE_MSA;
3982
3983   /* If the user didn't explicitly select or deselect a particular ASE,
3984      use the default setting for the CPU.  */
3985   file_mips_opts.ase |= (arch_info->ase & ~file_ase_explicit);
3986
3987   /* Set up the current options.  These may change throughout assembly.  */
3988   mips_opts = file_mips_opts;
3989
3990   mips_check_isa_supports_ases ();
3991   mips_check_options (&file_mips_opts, TRUE);
3992   file_mips_opts_checked = TRUE;
3993
3994   if (!bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_opts.arch))
3995     as_warn (_("could not set architecture and machine"));
3996 }
3997
3998 void
3999 md_assemble (char *str)
4000 {
4001   struct mips_cl_insn insn;
4002   bfd_reloc_code_real_type unused_reloc[3]
4003     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
4004
4005   file_mips_check_options ();
4006
4007   imm_expr.X_op = O_absent;
4008   offset_expr.X_op = O_absent;
4009   offset_reloc[0] = BFD_RELOC_UNUSED;
4010   offset_reloc[1] = BFD_RELOC_UNUSED;
4011   offset_reloc[2] = BFD_RELOC_UNUSED;
4012
4013   mips_mark_labels ();
4014   mips_assembling_insn = TRUE;
4015   clear_insn_error ();
4016
4017   if (mips_opts.mips16)
4018     mips16_ip (str, &insn);
4019   else
4020     {
4021       mips_ip (str, &insn);
4022       DBG ((_("returned from mips_ip(%s) insn_opcode = 0x%x\n"),
4023             str, insn.insn_opcode));
4024     }
4025
4026   if (insn_error.msg)
4027     report_insn_error (str);
4028   else if (insn.insn_mo->pinfo == INSN_MACRO)
4029     {
4030       macro_start ();
4031       if (mips_opts.mips16)
4032         mips16_macro (&insn);
4033       else
4034         macro (&insn, str);
4035       macro_end ();
4036     }
4037   else
4038     {
4039       if (offset_expr.X_op != O_absent)
4040         append_insn (&insn, &offset_expr, offset_reloc, FALSE);
4041       else
4042         append_insn (&insn, NULL, unused_reloc, FALSE);
4043     }
4044
4045   mips_assembling_insn = FALSE;
4046 }
4047
4048 /* Convenience functions for abstracting away the differences between
4049    MIPS16 and non-MIPS16 relocations.  */
4050
4051 static inline bfd_boolean
4052 mips16_reloc_p (bfd_reloc_code_real_type reloc)
4053 {
4054   switch (reloc)
4055     {
4056     case BFD_RELOC_MIPS16_JMP:
4057     case BFD_RELOC_MIPS16_GPREL:
4058     case BFD_RELOC_MIPS16_GOT16:
4059     case BFD_RELOC_MIPS16_CALL16:
4060     case BFD_RELOC_MIPS16_HI16_S:
4061     case BFD_RELOC_MIPS16_HI16:
4062     case BFD_RELOC_MIPS16_LO16:
4063     case BFD_RELOC_MIPS16_16_PCREL_S1:
4064       return TRUE;
4065
4066     default:
4067       return FALSE;
4068     }
4069 }
4070
4071 static inline bfd_boolean
4072 micromips_reloc_p (bfd_reloc_code_real_type reloc)
4073 {
4074   switch (reloc)
4075     {
4076     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
4077     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
4078     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
4079     case BFD_RELOC_MICROMIPS_GPREL16:
4080     case BFD_RELOC_MICROMIPS_JMP:
4081     case BFD_RELOC_MICROMIPS_HI16:
4082     case BFD_RELOC_MICROMIPS_HI16_S:
4083     case BFD_RELOC_MICROMIPS_LO16:
4084     case BFD_RELOC_MICROMIPS_LITERAL:
4085     case BFD_RELOC_MICROMIPS_GOT16:
4086     case BFD_RELOC_MICROMIPS_CALL16:
4087     case BFD_RELOC_MICROMIPS_GOT_HI16:
4088     case BFD_RELOC_MICROMIPS_GOT_LO16:
4089     case BFD_RELOC_MICROMIPS_CALL_HI16:
4090     case BFD_RELOC_MICROMIPS_CALL_LO16:
4091     case BFD_RELOC_MICROMIPS_SUB:
4092     case BFD_RELOC_MICROMIPS_GOT_PAGE:
4093     case BFD_RELOC_MICROMIPS_GOT_OFST:
4094     case BFD_RELOC_MICROMIPS_GOT_DISP:
4095     case BFD_RELOC_MICROMIPS_HIGHEST:
4096     case BFD_RELOC_MICROMIPS_HIGHER:
4097     case BFD_RELOC_MICROMIPS_SCN_DISP:
4098     case BFD_RELOC_MICROMIPS_JALR:
4099       return TRUE;
4100
4101     default:
4102       return FALSE;
4103     }
4104 }
4105
4106 static inline bfd_boolean
4107 jmp_reloc_p (bfd_reloc_code_real_type reloc)
4108 {
4109   return reloc == BFD_RELOC_MIPS_JMP || reloc == BFD_RELOC_MICROMIPS_JMP;
4110 }
4111
4112 static inline bfd_boolean
4113 b_reloc_p (bfd_reloc_code_real_type reloc)
4114 {
4115   return (reloc == BFD_RELOC_MIPS_26_PCREL_S2
4116           || reloc == BFD_RELOC_MIPS_21_PCREL_S2
4117           || reloc == BFD_RELOC_16_PCREL_S2
4118           || reloc == BFD_RELOC_MIPS16_16_PCREL_S1
4119           || reloc == BFD_RELOC_MICROMIPS_16_PCREL_S1
4120           || reloc == BFD_RELOC_MICROMIPS_10_PCREL_S1
4121           || reloc == BFD_RELOC_MICROMIPS_7_PCREL_S1);
4122 }
4123
4124 static inline bfd_boolean
4125 got16_reloc_p (bfd_reloc_code_real_type reloc)
4126 {
4127   return (reloc == BFD_RELOC_MIPS_GOT16 || reloc == BFD_RELOC_MIPS16_GOT16
4128           || reloc == BFD_RELOC_MICROMIPS_GOT16);
4129 }
4130
4131 static inline bfd_boolean
4132 hi16_reloc_p (bfd_reloc_code_real_type reloc)
4133 {
4134   return (reloc == BFD_RELOC_HI16_S || reloc == BFD_RELOC_MIPS16_HI16_S
4135           || reloc == BFD_RELOC_MICROMIPS_HI16_S);
4136 }
4137
4138 static inline bfd_boolean
4139 lo16_reloc_p (bfd_reloc_code_real_type reloc)
4140 {
4141   return (reloc == BFD_RELOC_LO16 || reloc == BFD_RELOC_MIPS16_LO16
4142           || reloc == BFD_RELOC_MICROMIPS_LO16);
4143 }
4144
4145 static inline bfd_boolean
4146 jalr_reloc_p (bfd_reloc_code_real_type reloc)
4147 {
4148   return reloc == BFD_RELOC_MIPS_JALR || reloc == BFD_RELOC_MICROMIPS_JALR;
4149 }
4150
4151 static inline bfd_boolean
4152 gprel16_reloc_p (bfd_reloc_code_real_type reloc)
4153 {
4154   return (reloc == BFD_RELOC_GPREL16 || reloc == BFD_RELOC_MIPS16_GPREL
4155           || reloc == BFD_RELOC_MICROMIPS_GPREL16);
4156 }
4157
4158 /* Return true if RELOC is a PC-relative relocation that does not have
4159    full address range.  */
4160
4161 static inline bfd_boolean
4162 limited_pcrel_reloc_p (bfd_reloc_code_real_type reloc)
4163 {
4164   switch (reloc)
4165     {
4166     case BFD_RELOC_16_PCREL_S2:
4167     case BFD_RELOC_MIPS16_16_PCREL_S1:
4168     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
4169     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
4170     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
4171     case BFD_RELOC_MIPS_21_PCREL_S2:
4172     case BFD_RELOC_MIPS_26_PCREL_S2:
4173     case BFD_RELOC_MIPS_18_PCREL_S3:
4174     case BFD_RELOC_MIPS_19_PCREL_S2:
4175       return TRUE;
4176
4177     case BFD_RELOC_32_PCREL:
4178     case BFD_RELOC_HI16_S_PCREL:
4179     case BFD_RELOC_LO16_PCREL:
4180       return HAVE_64BIT_ADDRESSES;
4181
4182     default:
4183       return FALSE;
4184     }
4185 }
4186
4187 /* Return true if the given relocation might need a matching %lo().
4188    This is only "might" because SVR4 R_MIPS_GOT16 relocations only
4189    need a matching %lo() when applied to local symbols.  */
4190
4191 static inline bfd_boolean
4192 reloc_needs_lo_p (bfd_reloc_code_real_type reloc)
4193 {
4194   return (HAVE_IN_PLACE_ADDENDS
4195           && (hi16_reloc_p (reloc)
4196               /* VxWorks R_MIPS_GOT16 relocs never need a matching %lo();
4197                  all GOT16 relocations evaluate to "G".  */
4198               || (got16_reloc_p (reloc) && mips_pic != VXWORKS_PIC)));
4199 }
4200
4201 /* Return the type of %lo() reloc needed by RELOC, given that
4202    reloc_needs_lo_p.  */
4203
4204 static inline bfd_reloc_code_real_type
4205 matching_lo_reloc (bfd_reloc_code_real_type reloc)
4206 {
4207   return (mips16_reloc_p (reloc) ? BFD_RELOC_MIPS16_LO16
4208           : (micromips_reloc_p (reloc) ? BFD_RELOC_MICROMIPS_LO16
4209              : BFD_RELOC_LO16));
4210 }
4211
4212 /* Return true if the given fixup is followed by a matching R_MIPS_LO16
4213    relocation.  */
4214
4215 static inline bfd_boolean
4216 fixup_has_matching_lo_p (fixS *fixp)
4217 {
4218   return (fixp->fx_next != NULL
4219           && fixp->fx_next->fx_r_type == matching_lo_reloc (fixp->fx_r_type)
4220           && fixp->fx_addsy == fixp->fx_next->fx_addsy
4221           && fixp->fx_offset == fixp->fx_next->fx_offset);
4222 }
4223
4224 /* Move all labels in LABELS to the current insertion point.  TEXT_P
4225    says whether the labels refer to text or data.  */
4226
4227 static void
4228 mips_move_labels (struct insn_label_list *labels, bfd_boolean text_p)
4229 {
4230   struct insn_label_list *l;
4231   valueT val;
4232
4233   for (l = labels; l != NULL; l = l->next)
4234     {
4235       gas_assert (S_GET_SEGMENT (l->label) == now_seg);
4236       symbol_set_frag (l->label, frag_now);
4237       val = (valueT) frag_now_fix ();
4238       /* MIPS16/microMIPS text labels are stored as odd.  */
4239       if (text_p && HAVE_CODE_COMPRESSION)
4240         ++val;
4241       S_SET_VALUE (l->label, val);
4242     }
4243 }
4244
4245 /* Move all labels in insn_labels to the current insertion point
4246    and treat them as text labels.  */
4247
4248 static void
4249 mips_move_text_labels (void)
4250 {
4251   mips_move_labels (seg_info (now_seg)->label_list, TRUE);
4252 }
4253
4254 static bfd_boolean
4255 s_is_linkonce (symbolS *sym, segT from_seg)
4256 {
4257   bfd_boolean linkonce = FALSE;
4258   segT symseg = S_GET_SEGMENT (sym);
4259
4260   if (symseg != from_seg && !S_IS_LOCAL (sym))
4261     {
4262       if ((bfd_get_section_flags (stdoutput, symseg) & SEC_LINK_ONCE))
4263         linkonce = TRUE;
4264       /* The GNU toolchain uses an extension for ELF: a section
4265          beginning with the magic string .gnu.linkonce is a
4266          linkonce section.  */
4267       if (strncmp (segment_name (symseg), ".gnu.linkonce",
4268                    sizeof ".gnu.linkonce" - 1) == 0)
4269         linkonce = TRUE;
4270     }
4271   return linkonce;
4272 }
4273
4274 /* Mark MIPS16 or microMIPS instruction label LABEL.  This permits the
4275    linker to handle them specially, such as generating jalx instructions
4276    when needed.  We also make them odd for the duration of the assembly,
4277    in order to generate the right sort of code.  We will make them even
4278    in the adjust_symtab routine, while leaving them marked.  This is
4279    convenient for the debugger and the disassembler.  The linker knows
4280    to make them odd again.  */
4281
4282 static void
4283 mips_compressed_mark_label (symbolS *label)
4284 {
4285   gas_assert (HAVE_CODE_COMPRESSION);
4286
4287   if (mips_opts.mips16)
4288     S_SET_OTHER (label, ELF_ST_SET_MIPS16 (S_GET_OTHER (label)));
4289   else
4290     S_SET_OTHER (label, ELF_ST_SET_MICROMIPS (S_GET_OTHER (label)));
4291   if ((S_GET_VALUE (label) & 1) == 0
4292       /* Don't adjust the address if the label is global or weak, or
4293          in a link-once section, since we'll be emitting symbol reloc
4294          references to it which will be patched up by the linker, and
4295          the final value of the symbol may or may not be MIPS16/microMIPS.  */
4296       && !S_IS_WEAK (label)
4297       && !S_IS_EXTERNAL (label)
4298       && !s_is_linkonce (label, now_seg))
4299     S_SET_VALUE (label, S_GET_VALUE (label) | 1);
4300 }
4301
4302 /* Mark preceding MIPS16 or microMIPS instruction labels.  */
4303
4304 static void
4305 mips_compressed_mark_labels (void)
4306 {
4307   struct insn_label_list *l;
4308
4309   for (l = seg_info (now_seg)->label_list; l != NULL; l = l->next)
4310     mips_compressed_mark_label (l->label);
4311 }
4312
4313 /* End the current frag.  Make it a variant frag and record the
4314    relaxation info.  */
4315
4316 static void
4317 relax_close_frag (void)
4318 {
4319   mips_macro_warning.first_frag = frag_now;
4320   frag_var (rs_machine_dependent, 0, 0,
4321             RELAX_ENCODE (mips_relax.sizes[0], mips_relax.sizes[1]),
4322             mips_relax.symbol, 0, (char *) mips_relax.first_fixup);
4323
4324   memset (&mips_relax.sizes, 0, sizeof (mips_relax.sizes));
4325   mips_relax.first_fixup = 0;
4326 }
4327
4328 /* Start a new relaxation sequence whose expansion depends on SYMBOL.
4329    See the comment above RELAX_ENCODE for more details.  */
4330
4331 static void
4332 relax_start (symbolS *symbol)
4333 {
4334   gas_assert (mips_relax.sequence == 0);
4335   mips_relax.sequence = 1;
4336   mips_relax.symbol = symbol;
4337 }
4338
4339 /* Start generating the second version of a relaxable sequence.
4340    See the comment above RELAX_ENCODE for more details.  */
4341
4342 static void
4343 relax_switch (void)
4344 {
4345   gas_assert (mips_relax.sequence == 1);
4346   mips_relax.sequence = 2;
4347 }
4348
4349 /* End the current relaxable sequence.  */
4350
4351 static void
4352 relax_end (void)
4353 {
4354   gas_assert (mips_relax.sequence == 2);
4355   relax_close_frag ();
4356   mips_relax.sequence = 0;
4357 }
4358
4359 /* Return true if IP is a delayed branch or jump.  */
4360
4361 static inline bfd_boolean
4362 delayed_branch_p (const struct mips_cl_insn *ip)
4363 {
4364   return (ip->insn_mo->pinfo & (INSN_UNCOND_BRANCH_DELAY
4365                                 | INSN_COND_BRANCH_DELAY
4366                                 | INSN_COND_BRANCH_LIKELY)) != 0;
4367 }
4368
4369 /* Return true if IP is a compact branch or jump.  */
4370
4371 static inline bfd_boolean
4372 compact_branch_p (const struct mips_cl_insn *ip)
4373 {
4374   return (ip->insn_mo->pinfo2 & (INSN2_UNCOND_BRANCH
4375                                  | INSN2_COND_BRANCH)) != 0;
4376 }
4377
4378 /* Return true if IP is an unconditional branch or jump.  */
4379
4380 static inline bfd_boolean
4381 uncond_branch_p (const struct mips_cl_insn *ip)
4382 {
4383   return ((ip->insn_mo->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0
4384           || (ip->insn_mo->pinfo2 & INSN2_UNCOND_BRANCH) != 0);
4385 }
4386
4387 /* Return true if IP is a branch-likely instruction.  */
4388
4389 static inline bfd_boolean
4390 branch_likely_p (const struct mips_cl_insn *ip)
4391 {
4392   return (ip->insn_mo->pinfo & INSN_COND_BRANCH_LIKELY) != 0;
4393 }
4394
4395 /* Return the type of nop that should be used to fill the delay slot
4396    of delayed branch IP.  */
4397
4398 static struct mips_cl_insn *
4399 get_delay_slot_nop (const struct mips_cl_insn *ip)
4400 {
4401   if (mips_opts.micromips
4402       && (ip->insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
4403     return &micromips_nop32_insn;
4404   return NOP_INSN;
4405 }
4406
4407 /* Return a mask that has bit N set if OPCODE reads the register(s)
4408    in operand N.  */
4409
4410 static unsigned int
4411 insn_read_mask (const struct mips_opcode *opcode)
4412 {
4413   return (opcode->pinfo & INSN_READ_ALL) >> INSN_READ_SHIFT;
4414 }
4415
4416 /* Return a mask that has bit N set if OPCODE writes to the register(s)
4417    in operand N.  */
4418
4419 static unsigned int
4420 insn_write_mask (const struct mips_opcode *opcode)
4421 {
4422   return (opcode->pinfo & INSN_WRITE_ALL) >> INSN_WRITE_SHIFT;
4423 }
4424
4425 /* Return a mask of the registers specified by operand OPERAND of INSN.
4426    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
4427    is set.  */
4428
4429 static unsigned int
4430 operand_reg_mask (const struct mips_cl_insn *insn,
4431                   const struct mips_operand *operand,
4432                   unsigned int type_mask)
4433 {
4434   unsigned int uval, vsel;
4435
4436   switch (operand->type)
4437     {
4438     case OP_INT:
4439     case OP_MAPPED_INT:
4440     case OP_MSB:
4441     case OP_PCREL:
4442     case OP_PERF_REG:
4443     case OP_ADDIUSP_INT:
4444     case OP_ENTRY_EXIT_LIST:
4445     case OP_REPEAT_DEST_REG:
4446     case OP_REPEAT_PREV_REG:
4447     case OP_PC:
4448     case OP_VU0_SUFFIX:
4449     case OP_VU0_MATCH_SUFFIX:
4450     case OP_IMM_INDEX:
4451       abort ();
4452
4453     case OP_REG:
4454     case OP_OPTIONAL_REG:
4455       {
4456         const struct mips_reg_operand *reg_op;
4457
4458         reg_op = (const struct mips_reg_operand *) operand;
4459         if (!(type_mask & (1 << reg_op->reg_type)))
4460           return 0;
4461         uval = insn_extract_operand (insn, operand);
4462         return 1 << mips_decode_reg_operand (reg_op, uval);
4463       }
4464
4465     case OP_REG_PAIR:
4466       {
4467         const struct mips_reg_pair_operand *pair_op;
4468
4469         pair_op = (const struct mips_reg_pair_operand *) operand;
4470         if (!(type_mask & (1 << pair_op->reg_type)))
4471           return 0;
4472         uval = insn_extract_operand (insn, operand);
4473         return (1 << pair_op->reg1_map[uval]) | (1 << pair_op->reg2_map[uval]);
4474       }
4475
4476     case OP_CLO_CLZ_DEST:
4477       if (!(type_mask & (1 << OP_REG_GP)))
4478         return 0;
4479       uval = insn_extract_operand (insn, operand);
4480       return (1 << (uval & 31)) | (1 << (uval >> 5));
4481
4482     case OP_SAME_RS_RT:
4483       if (!(type_mask & (1 << OP_REG_GP)))
4484         return 0;
4485       uval = insn_extract_operand (insn, operand);
4486       gas_assert ((uval & 31) == (uval >> 5));
4487       return 1 << (uval & 31);
4488
4489     case OP_CHECK_PREV:
4490     case OP_NON_ZERO_REG:
4491       if (!(type_mask & (1 << OP_REG_GP)))
4492         return 0;
4493       uval = insn_extract_operand (insn, operand);
4494       return 1 << (uval & 31);
4495
4496     case OP_LWM_SWM_LIST:
4497       abort ();
4498
4499     case OP_SAVE_RESTORE_LIST:
4500       abort ();
4501
4502     case OP_MDMX_IMM_REG:
4503       if (!(type_mask & (1 << OP_REG_VEC)))
4504         return 0;
4505       uval = insn_extract_operand (insn, operand);
4506       vsel = uval >> 5;
4507       if ((vsel & 0x18) == 0x18)
4508         return 0;
4509       return 1 << (uval & 31);
4510
4511     case OP_REG_INDEX:
4512       if (!(type_mask & (1 << OP_REG_GP)))
4513         return 0;
4514       return 1 << insn_extract_operand (insn, operand);
4515     }
4516   abort ();
4517 }
4518
4519 /* Return a mask of the registers specified by operands OPNO_MASK of INSN,
4520    where bit N of OPNO_MASK is set if operand N should be included.
4521    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
4522    is set.  */
4523
4524 static unsigned int
4525 insn_reg_mask (const struct mips_cl_insn *insn,
4526                unsigned int type_mask, unsigned int opno_mask)
4527 {
4528   unsigned int opno, reg_mask;
4529
4530   opno = 0;
4531   reg_mask = 0;
4532   while (opno_mask != 0)
4533     {
4534       if (opno_mask & 1)
4535         reg_mask |= operand_reg_mask (insn, insn_opno (insn, opno), type_mask);
4536       opno_mask >>= 1;
4537       opno += 1;
4538     }
4539   return reg_mask;
4540 }
4541
4542 /* Return the mask of core registers that IP reads.  */
4543
4544 static unsigned int
4545 gpr_read_mask (const struct mips_cl_insn *ip)
4546 {
4547   unsigned long pinfo, pinfo2;
4548   unsigned int mask;
4549
4550   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_read_mask (ip->insn_mo));
4551   pinfo = ip->insn_mo->pinfo;
4552   pinfo2 = ip->insn_mo->pinfo2;
4553   if (pinfo & INSN_UDI)
4554     {
4555       /* UDI instructions have traditionally been assumed to read RS
4556          and RT.  */
4557       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RT, *ip);
4558       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RS, *ip);
4559     }
4560   if (pinfo & INSN_READ_GPR_24)
4561     mask |= 1 << 24;
4562   if (pinfo2 & INSN2_READ_GPR_16)
4563     mask |= 1 << 16;
4564   if (pinfo2 & INSN2_READ_SP)
4565     mask |= 1 << SP;
4566   if (pinfo2 & INSN2_READ_GPR_31)
4567     mask |= 1 << 31;
4568   /* Don't include register 0.  */
4569   return mask & ~1;
4570 }
4571
4572 /* Return the mask of core registers that IP writes.  */
4573
4574 static unsigned int
4575 gpr_write_mask (const struct mips_cl_insn *ip)
4576 {
4577   unsigned long pinfo, pinfo2;
4578   unsigned int mask;
4579
4580   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_write_mask (ip->insn_mo));
4581   pinfo = ip->insn_mo->pinfo;
4582   pinfo2 = ip->insn_mo->pinfo2;
4583   if (pinfo & INSN_WRITE_GPR_24)
4584     mask |= 1 << 24;
4585   if (pinfo & INSN_WRITE_GPR_31)
4586     mask |= 1 << 31;
4587   if (pinfo & INSN_UDI)
4588     /* UDI instructions have traditionally been assumed to write to RD.  */
4589     mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RD, *ip);
4590   if (pinfo2 & INSN2_WRITE_SP)
4591     mask |= 1 << SP;
4592   /* Don't include register 0.  */
4593   return mask & ~1;
4594 }
4595
4596 /* Return the mask of floating-point registers that IP reads.  */
4597
4598 static unsigned int
4599 fpr_read_mask (const struct mips_cl_insn *ip)
4600 {
4601   unsigned long pinfo;
4602   unsigned int mask;
4603
4604   mask = insn_reg_mask (ip, ((1 << OP_REG_FP) | (1 << OP_REG_VEC)
4605                              | (1 << OP_REG_MSA)),
4606                         insn_read_mask (ip->insn_mo));
4607   pinfo = ip->insn_mo->pinfo;
4608   /* Conservatively treat all operands to an FP_D instruction are doubles.
4609      (This is overly pessimistic for things like cvt.d.s.)  */
4610   if (FPR_SIZE != 64 && (pinfo & FP_D))
4611     mask |= mask << 1;
4612   return mask;
4613 }
4614
4615 /* Return the mask of floating-point registers that IP writes.  */
4616
4617 static unsigned int
4618 fpr_write_mask (const struct mips_cl_insn *ip)
4619 {
4620   unsigned long pinfo;
4621   unsigned int mask;
4622
4623   mask = insn_reg_mask (ip, ((1 << OP_REG_FP) | (1 << OP_REG_VEC)
4624                              | (1 << OP_REG_MSA)),
4625                         insn_write_mask (ip->insn_mo));
4626   pinfo = ip->insn_mo->pinfo;
4627   /* Conservatively treat all operands to an FP_D instruction are doubles.
4628      (This is overly pessimistic for things like cvt.s.d.)  */
4629   if (FPR_SIZE != 64 && (pinfo & FP_D))
4630     mask |= mask << 1;
4631   return mask;
4632 }
4633
4634 /* Operand OPNUM of INSN is an odd-numbered floating-point register.
4635    Check whether that is allowed.  */
4636
4637 static bfd_boolean
4638 mips_oddfpreg_ok (const struct mips_opcode *insn, int opnum)
4639 {
4640   const char *s = insn->name;
4641   bfd_boolean oddspreg = (ISA_HAS_ODD_SINGLE_FPR (mips_opts.isa, mips_opts.arch)
4642                           || FPR_SIZE == 64)
4643                          && mips_opts.oddspreg;
4644
4645   if (insn->pinfo == INSN_MACRO)
4646     /* Let a macro pass, we'll catch it later when it is expanded.  */
4647     return TRUE;
4648
4649   /* Single-precision coprocessor loads and moves are OK for 32-bit registers,
4650      otherwise it depends on oddspreg.  */
4651   if ((insn->pinfo & FP_S)
4652       && (insn->pinfo & (INSN_LOAD_MEMORY | INSN_STORE_MEMORY
4653                          | INSN_LOAD_COPROC | INSN_COPROC_MOVE)))
4654     return FPR_SIZE == 32 || oddspreg;
4655
4656   /* Allow odd registers for single-precision ops and double-precision if the
4657      floating-point registers are 64-bit wide.  */
4658   switch (insn->pinfo & (FP_S | FP_D))
4659     {
4660     case FP_S:
4661     case 0:
4662       return oddspreg;
4663     case FP_D:
4664       return FPR_SIZE == 64;
4665     default:
4666       break;
4667     }
4668
4669   /* Cvt.w.x and cvt.x.w allow an odd register for a 'w' or 's' operand.  */
4670   s = strchr (insn->name, '.');
4671   if (s != NULL && opnum == 2)
4672     s = strchr (s + 1, '.');
4673   if (s != NULL && (s[1] == 'w' || s[1] == 's'))
4674     return oddspreg;
4675
4676   return FPR_SIZE == 64;
4677 }
4678
4679 /* Information about an instruction argument that we're trying to match.  */
4680 struct mips_arg_info
4681 {
4682   /* The instruction so far.  */
4683   struct mips_cl_insn *insn;
4684
4685   /* The first unconsumed operand token.  */
4686   struct mips_operand_token *token;
4687
4688   /* The 1-based operand number, in terms of insn->insn_mo->args.  */
4689   int opnum;
4690
4691   /* The 1-based argument number, for error reporting.  This does not
4692      count elided optional registers, etc..  */
4693   int argnum;
4694
4695   /* The last OP_REG operand seen, or ILLEGAL_REG if none.  */
4696   unsigned int last_regno;
4697
4698   /* If the first operand was an OP_REG, this is the register that it
4699      specified, otherwise it is ILLEGAL_REG.  */
4700   unsigned int dest_regno;
4701
4702   /* The value of the last OP_INT operand.  Only used for OP_MSB,
4703      where it gives the lsb position.  */
4704   unsigned int last_op_int;
4705
4706   /* If true, match routines should assume that no later instruction
4707      alternative matches and should therefore be as accomodating as
4708      possible.  Match routines should not report errors if something
4709      is only invalid for !LAX_MATCH.  */
4710   bfd_boolean lax_match;
4711
4712   /* True if a reference to the current AT register was seen.  */
4713   bfd_boolean seen_at;
4714 };
4715
4716 /* Record that the argument is out of range.  */
4717
4718 static void
4719 match_out_of_range (struct mips_arg_info *arg)
4720 {
4721   set_insn_error_i (arg->argnum, _("operand %d out of range"), arg->argnum);
4722 }
4723
4724 /* Record that the argument isn't constant but needs to be.  */
4725
4726 static void
4727 match_not_constant (struct mips_arg_info *arg)
4728 {
4729   set_insn_error_i (arg->argnum, _("operand %d must be constant"),
4730                     arg->argnum);
4731 }
4732
4733 /* Try to match an OT_CHAR token for character CH.  Consume the token
4734    and return true on success, otherwise return false.  */
4735
4736 static bfd_boolean
4737 match_char (struct mips_arg_info *arg, char ch)
4738 {
4739   if (arg->token->type == OT_CHAR && arg->token->u.ch == ch)
4740     {
4741       ++arg->token;
4742       if (ch == ',')
4743         arg->argnum += 1;
4744       return TRUE;
4745     }
4746   return FALSE;
4747 }
4748
4749 /* Try to get an expression from the next tokens in ARG.  Consume the
4750    tokens and return true on success, storing the expression value in
4751    VALUE and relocation types in R.  */
4752
4753 static bfd_boolean
4754 match_expression (struct mips_arg_info *arg, expressionS *value,
4755                   bfd_reloc_code_real_type *r)
4756 {
4757   /* If the next token is a '(' that was parsed as being part of a base
4758      expression, assume we have an elided offset.  The later match will fail
4759      if this turns out to be wrong.  */
4760   if (arg->token->type == OT_CHAR && arg->token->u.ch == '(')
4761     {
4762       value->X_op = O_constant;
4763       value->X_add_number = 0;
4764       r[0] = r[1] = r[2] = BFD_RELOC_UNUSED;
4765       return TRUE;
4766     }
4767
4768   /* Reject register-based expressions such as "0+$2" and "(($2))".
4769      For plain registers the default error seems more appropriate.  */
4770   if (arg->token->type == OT_INTEGER
4771       && arg->token->u.integer.value.X_op == O_register)
4772     {
4773       set_insn_error (arg->argnum, _("register value used as expression"));
4774       return FALSE;
4775     }
4776
4777   if (arg->token->type == OT_INTEGER)
4778     {
4779       *value = arg->token->u.integer.value;
4780       memcpy (r, arg->token->u.integer.relocs, 3 * sizeof (*r));
4781       ++arg->token;
4782       return TRUE;
4783     }
4784
4785   set_insn_error_i
4786     (arg->argnum, _("operand %d must be an immediate expression"),
4787      arg->argnum);
4788   return FALSE;
4789 }
4790
4791 /* Try to get a constant expression from the next tokens in ARG.  Consume
4792    the tokens and return return true on success, storing the constant value
4793    in *VALUE.  Use FALLBACK as the value if the match succeeded with an
4794    error.  */
4795
4796 static bfd_boolean
4797 match_const_int (struct mips_arg_info *arg, offsetT *value)
4798 {
4799   expressionS ex;
4800   bfd_reloc_code_real_type r[3];
4801
4802   if (!match_expression (arg, &ex, r))
4803     return FALSE;
4804
4805   if (r[0] == BFD_RELOC_UNUSED && ex.X_op == O_constant)
4806     *value = ex.X_add_number;
4807   else
4808     {
4809       match_not_constant (arg);
4810       return FALSE;
4811     }
4812   return TRUE;
4813 }
4814
4815 /* Return the RTYPE_* flags for a register operand of type TYPE that
4816    appears in instruction OPCODE.  */
4817
4818 static unsigned int
4819 convert_reg_type (const struct mips_opcode *opcode,
4820                   enum mips_reg_operand_type type)
4821 {
4822   switch (type)
4823     {
4824     case OP_REG_GP:
4825       return RTYPE_NUM | RTYPE_GP;
4826
4827     case OP_REG_FP:
4828       /* Allow vector register names for MDMX if the instruction is a 64-bit
4829          FPR load, store or move (including moves to and from GPRs).  */
4830       if ((mips_opts.ase & ASE_MDMX)
4831           && (opcode->pinfo & FP_D)
4832           && (opcode->pinfo & (INSN_COPROC_MOVE
4833                                | INSN_COPROC_MEMORY_DELAY
4834                                | INSN_LOAD_COPROC
4835                                | INSN_LOAD_MEMORY
4836                                | INSN_STORE_MEMORY)))
4837         return RTYPE_FPU | RTYPE_VEC;
4838       return RTYPE_FPU;
4839
4840     case OP_REG_CCC:
4841       if (opcode->pinfo & (FP_D | FP_S))
4842         return RTYPE_CCC | RTYPE_FCC;
4843       return RTYPE_CCC;
4844
4845     case OP_REG_VEC:
4846       if (opcode->membership & INSN_5400)
4847         return RTYPE_FPU;
4848       return RTYPE_FPU | RTYPE_VEC;
4849
4850     case OP_REG_ACC:
4851       return RTYPE_ACC;
4852
4853     case OP_REG_COPRO:
4854       if (opcode->name[strlen (opcode->name) - 1] == '0')
4855         return RTYPE_NUM | RTYPE_CP0;
4856       return RTYPE_NUM;
4857
4858     case OP_REG_HW:
4859       return RTYPE_NUM;
4860
4861     case OP_REG_VI:
4862       return RTYPE_NUM | RTYPE_VI;
4863
4864     case OP_REG_VF:
4865       return RTYPE_NUM | RTYPE_VF;
4866
4867     case OP_REG_R5900_I:
4868       return RTYPE_R5900_I;
4869
4870     case OP_REG_R5900_Q:
4871       return RTYPE_R5900_Q;
4872
4873     case OP_REG_R5900_R:
4874       return RTYPE_R5900_R;
4875
4876     case OP_REG_R5900_ACC:
4877       return RTYPE_R5900_ACC;
4878
4879     case OP_REG_MSA:
4880       return RTYPE_MSA;
4881
4882     case OP_REG_MSA_CTRL:
4883       return RTYPE_NUM;
4884     }
4885   abort ();
4886 }
4887
4888 /* ARG is register REGNO, of type TYPE.  Warn about any dubious registers.  */
4889
4890 static void
4891 check_regno (struct mips_arg_info *arg,
4892              enum mips_reg_operand_type type, unsigned int regno)
4893 {
4894   if (AT && type == OP_REG_GP && regno == AT)
4895     arg->seen_at = TRUE;
4896
4897   if (type == OP_REG_FP
4898       && (regno & 1) != 0
4899       && !mips_oddfpreg_ok (arg->insn->insn_mo, arg->opnum))
4900     {
4901       /* This was a warning prior to introducing O32 FPXX and FP64 support
4902          so maintain a warning for FP32 but raise an error for the new
4903          cases.  */
4904       if (FPR_SIZE == 32)
4905         as_warn (_("float register should be even, was %d"), regno);
4906       else
4907         as_bad (_("float register should be even, was %d"), regno);
4908     }
4909
4910   if (type == OP_REG_CCC)
4911     {
4912       const char *name;
4913       size_t length;
4914
4915       name = arg->insn->insn_mo->name;
4916       length = strlen (name);
4917       if ((regno & 1) != 0
4918           && ((length >= 3 && strcmp (name + length - 3, ".ps") == 0)
4919               || (length >= 5 && strncmp (name + length - 5, "any2", 4) == 0)))
4920         as_warn (_("condition code register should be even for %s, was %d"),
4921                  name, regno);
4922
4923       if ((regno & 3) != 0
4924           && (length >= 5 && strncmp (name + length - 5, "any4", 4) == 0))
4925         as_warn (_("condition code register should be 0 or 4 for %s, was %d"),
4926                  name, regno);
4927     }
4928 }
4929
4930 /* ARG is a register with symbol value SYMVAL.  Try to interpret it as
4931    a register of type TYPE.  Return true on success, storing the register
4932    number in *REGNO and warning about any dubious uses.  */
4933
4934 static bfd_boolean
4935 match_regno (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4936              unsigned int symval, unsigned int *regno)
4937 {
4938   if (type == OP_REG_VEC)
4939     symval = mips_prefer_vec_regno (symval);
4940   if (!(symval & convert_reg_type (arg->insn->insn_mo, type)))
4941     return FALSE;
4942
4943   *regno = symval & RNUM_MASK;
4944   check_regno (arg, type, *regno);
4945   return TRUE;
4946 }
4947
4948 /* Try to interpret the next token in ARG as a register of type TYPE.
4949    Consume the token and return true on success, storing the register
4950    number in *REGNO.  Return false on failure.  */
4951
4952 static bfd_boolean
4953 match_reg (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4954            unsigned int *regno)
4955 {
4956   if (arg->token->type == OT_REG
4957       && match_regno (arg, type, arg->token->u.regno, regno))
4958     {
4959       ++arg->token;
4960       return TRUE;
4961     }
4962   return FALSE;
4963 }
4964
4965 /* Try to interpret the next token in ARG as a range of registers of type TYPE.
4966    Consume the token and return true on success, storing the register numbers
4967    in *REGNO1 and *REGNO2.  Return false on failure.  */
4968
4969 static bfd_boolean
4970 match_reg_range (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4971                  unsigned int *regno1, unsigned int *regno2)
4972 {
4973   if (match_reg (arg, type, regno1))
4974     {
4975       *regno2 = *regno1;
4976       return TRUE;
4977     }
4978   if (arg->token->type == OT_REG_RANGE
4979       && match_regno (arg, type, arg->token->u.reg_range.regno1, regno1)
4980       && match_regno (arg, type, arg->token->u.reg_range.regno2, regno2)
4981       && *regno1 <= *regno2)
4982     {
4983       ++arg->token;
4984       return TRUE;
4985     }
4986   return FALSE;
4987 }
4988
4989 /* OP_INT matcher.  */
4990
4991 static bfd_boolean
4992 match_int_operand (struct mips_arg_info *arg,
4993                    const struct mips_operand *operand_base)
4994 {
4995   const struct mips_int_operand *operand;
4996   unsigned int uval;
4997   int min_val, max_val, factor;
4998   offsetT sval;
4999
5000   operand = (const struct mips_int_operand *) operand_base;
5001   factor = 1 << operand->shift;
5002   min_val = mips_int_operand_min (operand);
5003   max_val = mips_int_operand_max (operand);
5004
5005   if (operand_base->lsb == 0
5006       && operand_base->size == 16
5007       && operand->shift == 0
5008       && operand->bias == 0
5009       && (operand->max_val == 32767 || operand->max_val == 65535))
5010     {
5011       /* The operand can be relocated.  */
5012       if (!match_expression (arg, &offset_expr, offset_reloc))
5013         return FALSE;
5014
5015       if (offset_reloc[0] != BFD_RELOC_UNUSED)
5016         /* Relocation operators were used.  Accept the arguent and
5017            leave the relocation value in offset_expr and offset_relocs
5018            for the caller to process.  */
5019         return TRUE;
5020
5021       if (offset_expr.X_op != O_constant)
5022         {
5023           /* Accept non-constant operands if no later alternative matches,
5024              leaving it for the caller to process.  */
5025           if (!arg->lax_match)
5026             return FALSE;
5027           offset_reloc[0] = BFD_RELOC_LO16;
5028           return TRUE;
5029         }
5030
5031       /* Clear the global state; we're going to install the operand
5032          ourselves.  */
5033       sval = offset_expr.X_add_number;
5034       offset_expr.X_op = O_absent;
5035
5036       /* For compatibility with older assemblers, we accept
5037          0x8000-0xffff as signed 16-bit numbers when only
5038          signed numbers are allowed.  */
5039       if (sval > max_val)
5040         {
5041           max_val = ((1 << operand_base->size) - 1) << operand->shift;
5042           if (!arg->lax_match && sval <= max_val)
5043             return FALSE;
5044         }
5045     }
5046   else
5047     {
5048       if (!match_const_int (arg, &sval))
5049         return FALSE;
5050     }
5051
5052   arg->last_op_int = sval;
5053
5054   if (sval < min_val || sval > max_val || sval % factor)
5055     {
5056       match_out_of_range (arg);
5057       return FALSE;
5058     }
5059
5060   uval = (unsigned int) sval >> operand->shift;
5061   uval -= operand->bias;
5062
5063   /* Handle -mfix-cn63xxp1.  */
5064   if (arg->opnum == 1
5065       && mips_fix_cn63xxp1
5066       && !mips_opts.micromips
5067       && strcmp ("pref", arg->insn->insn_mo->name) == 0)
5068     switch (uval)
5069       {
5070       case 5:
5071       case 25:
5072       case 26:
5073       case 27:
5074       case 28:
5075       case 29:
5076       case 30:
5077       case 31:
5078         /* These are ok.  */
5079         break;
5080
5081       default:
5082         /* The rest must be changed to 28.  */
5083         uval = 28;
5084         break;
5085       }
5086
5087   insn_insert_operand (arg->insn, operand_base, uval);
5088   return TRUE;
5089 }
5090
5091 /* OP_MAPPED_INT matcher.  */
5092
5093 static bfd_boolean
5094 match_mapped_int_operand (struct mips_arg_info *arg,
5095                           const struct mips_operand *operand_base)
5096 {
5097   const struct mips_mapped_int_operand *operand;
5098   unsigned int uval, num_vals;
5099   offsetT sval;
5100
5101   operand = (const struct mips_mapped_int_operand *) operand_base;
5102   if (!match_const_int (arg, &sval))
5103     return FALSE;
5104
5105   num_vals = 1 << operand_base->size;
5106   for (uval = 0; uval < num_vals; uval++)
5107     if (operand->int_map[uval] == sval)
5108       break;
5109   if (uval == num_vals)
5110     {
5111       match_out_of_range (arg);
5112       return FALSE;
5113     }
5114
5115   insn_insert_operand (arg->insn, operand_base, uval);
5116   return TRUE;
5117 }
5118
5119 /* OP_MSB matcher.  */
5120
5121 static bfd_boolean
5122 match_msb_operand (struct mips_arg_info *arg,
5123                    const struct mips_operand *operand_base)
5124 {
5125   const struct mips_msb_operand *operand;
5126   int min_val, max_val, max_high;
5127   offsetT size, sval, high;
5128
5129   operand = (const struct mips_msb_operand *) operand_base;
5130   min_val = operand->bias;
5131   max_val = min_val + (1 << operand_base->size) - 1;
5132   max_high = operand->opsize;
5133
5134   if (!match_const_int (arg, &size))
5135     return FALSE;
5136
5137   high = size + arg->last_op_int;
5138   sval = operand->add_lsb ? high : size;
5139
5140   if (size < 0 || high > max_high || sval < min_val || sval > max_val)
5141     {
5142       match_out_of_range (arg);
5143       return FALSE;
5144     }
5145   insn_insert_operand (arg->insn, operand_base, sval - min_val);
5146   return TRUE;
5147 }
5148
5149 /* OP_REG matcher.  */
5150
5151 static bfd_boolean
5152 match_reg_operand (struct mips_arg_info *arg,
5153                    const struct mips_operand *operand_base)
5154 {
5155   const struct mips_reg_operand *operand;
5156   unsigned int regno, uval, num_vals;
5157
5158   operand = (const struct mips_reg_operand *) operand_base;
5159   if (!match_reg (arg, operand->reg_type, &regno))
5160     return FALSE;
5161
5162   if (operand->reg_map)
5163     {
5164       num_vals = 1 << operand->root.size;
5165       for (uval = 0; uval < num_vals; uval++)
5166         if (operand->reg_map[uval] == regno)
5167           break;
5168       if (num_vals == uval)
5169         return FALSE;
5170     }
5171   else
5172     uval = regno;
5173
5174   arg->last_regno = regno;
5175   if (arg->opnum == 1)
5176     arg->dest_regno = regno;
5177   insn_insert_operand (arg->insn, operand_base, uval);
5178   return TRUE;
5179 }
5180
5181 /* OP_REG_PAIR matcher.  */
5182
5183 static bfd_boolean
5184 match_reg_pair_operand (struct mips_arg_info *arg,
5185                         const struct mips_operand *operand_base)
5186 {
5187   const struct mips_reg_pair_operand *operand;
5188   unsigned int regno1, regno2, uval, num_vals;
5189
5190   operand = (const struct mips_reg_pair_operand *) operand_base;
5191   if (!match_reg (arg, operand->reg_type, &regno1)
5192       || !match_char (arg, ',')
5193       || !match_reg (arg, operand->reg_type, &regno2))
5194     return FALSE;
5195
5196   num_vals = 1 << operand_base->size;
5197   for (uval = 0; uval < num_vals; uval++)
5198     if (operand->reg1_map[uval] == regno1 && operand->reg2_map[uval] == regno2)
5199       break;
5200   if (uval == num_vals)
5201     return FALSE;
5202
5203   insn_insert_operand (arg->insn, operand_base, uval);
5204   return TRUE;
5205 }
5206
5207 /* OP_PCREL matcher.  The caller chooses the relocation type.  */
5208
5209 static bfd_boolean
5210 match_pcrel_operand (struct mips_arg_info *arg)
5211 {
5212   bfd_reloc_code_real_type r[3];
5213
5214   return match_expression (arg, &offset_expr, r) && r[0] == BFD_RELOC_UNUSED;
5215 }
5216
5217 /* OP_PERF_REG matcher.  */
5218
5219 static bfd_boolean
5220 match_perf_reg_operand (struct mips_arg_info *arg,
5221                         const struct mips_operand *operand)
5222 {
5223   offsetT sval;
5224
5225   if (!match_const_int (arg, &sval))
5226     return FALSE;
5227
5228   if (sval != 0
5229       && (sval != 1
5230           || (mips_opts.arch == CPU_R5900
5231               && (strcmp (arg->insn->insn_mo->name, "mfps") == 0
5232                   || strcmp (arg->insn->insn_mo->name, "mtps") == 0))))
5233     {
5234       set_insn_error (arg->argnum, _("invalid performance register"));
5235       return FALSE;
5236     }
5237
5238   insn_insert_operand (arg->insn, operand, sval);
5239   return TRUE;
5240 }
5241
5242 /* OP_ADDIUSP matcher.  */
5243
5244 static bfd_boolean
5245 match_addiusp_operand (struct mips_arg_info *arg,
5246                        const struct mips_operand *operand)
5247 {
5248   offsetT sval;
5249   unsigned int uval;
5250
5251   if (!match_const_int (arg, &sval))
5252     return FALSE;
5253
5254   if (sval % 4)
5255     {
5256       match_out_of_range (arg);
5257       return FALSE;
5258     }
5259
5260   sval /= 4;
5261   if (!(sval >= -258 && sval <= 257) || (sval >= -2 && sval <= 1))
5262     {
5263       match_out_of_range (arg);
5264       return FALSE;
5265     }
5266
5267   uval = (unsigned int) sval;
5268   uval = ((uval >> 1) & ~0xff) | (uval & 0xff);
5269   insn_insert_operand (arg->insn, operand, uval);
5270   return TRUE;
5271 }
5272
5273 /* OP_CLO_CLZ_DEST matcher.  */
5274
5275 static bfd_boolean
5276 match_clo_clz_dest_operand (struct mips_arg_info *arg,
5277                             const struct mips_operand *operand)
5278 {
5279   unsigned int regno;
5280
5281   if (!match_reg (arg, OP_REG_GP, &regno))
5282     return FALSE;
5283
5284   insn_insert_operand (arg->insn, operand, regno | (regno << 5));
5285   return TRUE;
5286 }
5287
5288 /* OP_CHECK_PREV matcher.  */
5289
5290 static bfd_boolean
5291 match_check_prev_operand (struct mips_arg_info *arg,
5292                           const struct mips_operand *operand_base)
5293 {
5294   const struct mips_check_prev_operand *operand;
5295   unsigned int regno;
5296
5297   operand = (const struct mips_check_prev_operand *) operand_base;
5298
5299   if (!match_reg (arg, OP_REG_GP, &regno))
5300     return FALSE;
5301
5302   if (!operand->zero_ok && regno == 0)
5303     return FALSE;
5304
5305   if ((operand->less_than_ok && regno < arg->last_regno)
5306       || (operand->greater_than_ok && regno > arg->last_regno)
5307       || (operand->equal_ok && regno == arg->last_regno))
5308     {
5309       arg->last_regno = regno;
5310       insn_insert_operand (arg->insn, operand_base, regno);
5311       return TRUE;
5312     }
5313
5314   return FALSE;
5315 }
5316
5317 /* OP_SAME_RS_RT matcher.  */
5318
5319 static bfd_boolean
5320 match_same_rs_rt_operand (struct mips_arg_info *arg,
5321                           const struct mips_operand *operand)
5322 {
5323   unsigned int regno;
5324
5325   if (!match_reg (arg, OP_REG_GP, &regno))
5326     return FALSE;
5327
5328   if (regno == 0)
5329     {
5330       set_insn_error (arg->argnum, _("the source register must not be $0"));
5331       return FALSE;
5332     }
5333
5334   arg->last_regno = regno;
5335
5336   insn_insert_operand (arg->insn, operand, regno | (regno << 5));
5337   return TRUE;
5338 }
5339
5340 /* OP_LWM_SWM_LIST matcher.  */
5341
5342 static bfd_boolean
5343 match_lwm_swm_list_operand (struct mips_arg_info *arg,
5344                             const struct mips_operand *operand)
5345 {
5346   unsigned int reglist, sregs, ra, regno1, regno2;
5347   struct mips_arg_info reset;
5348
5349   reglist = 0;
5350   if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5351     return FALSE;
5352   do
5353     {
5354       if (regno2 == FP && regno1 >= S0 && regno1 <= S7)
5355         {
5356           reglist |= 1 << FP;
5357           regno2 = S7;
5358         }
5359       reglist |= ((1U << regno2 << 1) - 1) & -(1U << regno1);
5360       reset = *arg;
5361     }
5362   while (match_char (arg, ',')
5363          && match_reg_range (arg, OP_REG_GP, &regno1, &regno2));
5364   *arg = reset;
5365
5366   if (operand->size == 2)
5367     {
5368       /* The list must include both ra and s0-sN, for 0 <= N <= 3.  E.g.:
5369
5370          s0, ra
5371          s0, s1, ra, s2, s3
5372          s0-s2, ra
5373
5374          and any permutations of these.  */
5375       if ((reglist & 0xfff1ffff) != 0x80010000)
5376         return FALSE;
5377
5378       sregs = (reglist >> 17) & 7;
5379       ra = 0;
5380     }
5381   else
5382     {
5383       /* The list must include at least one of ra and s0-sN,
5384          for 0 <= N <= 8.  (Note that there is a gap between s7 and s8,
5385          which are $23 and $30 respectively.)  E.g.:
5386
5387          ra
5388          s0
5389          ra, s0, s1, s2
5390          s0-s8
5391          s0-s5, ra
5392
5393          and any permutations of these.  */
5394       if ((reglist & 0x3f00ffff) != 0)
5395         return FALSE;
5396
5397       ra = (reglist >> 27) & 0x10;
5398       sregs = ((reglist >> 22) & 0x100) | ((reglist >> 16) & 0xff);
5399     }
5400   sregs += 1;
5401   if ((sregs & -sregs) != sregs)
5402     return FALSE;
5403
5404   insn_insert_operand (arg->insn, operand, (ffs (sregs) - 1) | ra);
5405   return TRUE;
5406 }
5407
5408 /* OP_ENTRY_EXIT_LIST matcher.  */
5409
5410 static unsigned int
5411 match_entry_exit_operand (struct mips_arg_info *arg,
5412                           const struct mips_operand *operand)
5413 {
5414   unsigned int mask;
5415   bfd_boolean is_exit;
5416
5417   /* The format is the same for both ENTRY and EXIT, but the constraints
5418      are different.  */
5419   is_exit = strcmp (arg->insn->insn_mo->name, "exit") == 0;
5420   mask = (is_exit ? 7 << 3 : 0);
5421   do
5422     {
5423       unsigned int regno1, regno2;
5424       bfd_boolean is_freg;
5425
5426       if (match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5427         is_freg = FALSE;
5428       else if (match_reg_range (arg, OP_REG_FP, &regno1, &regno2))
5429         is_freg = TRUE;
5430       else
5431         return FALSE;
5432
5433       if (is_exit && is_freg && regno1 == 0 && regno2 < 2)
5434         {
5435           mask &= ~(7 << 3);
5436           mask |= (5 + regno2) << 3;
5437         }
5438       else if (!is_exit && regno1 == 4 && regno2 >= 4 && regno2 <= 7)
5439         mask |= (regno2 - 3) << 3;
5440       else if (regno1 == 16 && regno2 >= 16 && regno2 <= 17)
5441         mask |= (regno2 - 15) << 1;
5442       else if (regno1 == RA && regno2 == RA)
5443         mask |= 1;
5444       else
5445         return FALSE;
5446     }
5447   while (match_char (arg, ','));
5448
5449   insn_insert_operand (arg->insn, operand, mask);
5450   return TRUE;
5451 }
5452
5453 /* OP_SAVE_RESTORE_LIST matcher.  */
5454
5455 static bfd_boolean
5456 match_save_restore_list_operand (struct mips_arg_info *arg)
5457 {
5458   unsigned int opcode, args, statics, sregs;
5459   unsigned int num_frame_sizes, num_args, num_statics, num_sregs;
5460   offsetT frame_size;
5461
5462   opcode = arg->insn->insn_opcode;
5463   frame_size = 0;
5464   num_frame_sizes = 0;
5465   args = 0;
5466   statics = 0;
5467   sregs = 0;
5468   do
5469     {
5470       unsigned int regno1, regno2;
5471
5472       if (arg->token->type == OT_INTEGER)
5473         {
5474           /* Handle the frame size.  */
5475           if (!match_const_int (arg, &frame_size))
5476             return FALSE;
5477           num_frame_sizes += 1;
5478         }
5479       else
5480         {
5481           if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5482             return FALSE;
5483
5484           while (regno1 <= regno2)
5485             {
5486               if (regno1 >= 4 && regno1 <= 7)
5487                 {
5488                   if (num_frame_sizes == 0)
5489                     /* args $a0-$a3 */
5490                     args |= 1 << (regno1 - 4);
5491                   else
5492                     /* statics $a0-$a3 */
5493                     statics |= 1 << (regno1 - 4);
5494                 }
5495               else if (regno1 >= 16 && regno1 <= 23)
5496                 /* $s0-$s7 */
5497                 sregs |= 1 << (regno1 - 16);
5498               else if (regno1 == 30)
5499                 /* $s8 */
5500                 sregs |= 1 << 8;
5501               else if (regno1 == 31)
5502                 /* Add $ra to insn.  */
5503                 opcode |= 0x40;
5504               else
5505                 return FALSE;
5506               regno1 += 1;
5507               if (regno1 == 24)
5508                 regno1 = 30;
5509             }
5510         }
5511     }
5512   while (match_char (arg, ','));
5513
5514   /* Encode args/statics combination.  */
5515   if (args & statics)
5516     return FALSE;
5517   else if (args == 0xf)
5518     /* All $a0-$a3 are args.  */
5519     opcode |= MIPS16_ALL_ARGS << 16;
5520   else if (statics == 0xf)
5521     /* All $a0-$a3 are statics.  */
5522     opcode |= MIPS16_ALL_STATICS << 16;
5523   else
5524     {
5525       /* Count arg registers.  */
5526       num_args = 0;
5527       while (args & 0x1)
5528         {
5529           args >>= 1;
5530           num_args += 1;
5531         }
5532       if (args != 0)
5533         return FALSE;
5534
5535       /* Count static registers.  */
5536       num_statics = 0;
5537       while (statics & 0x8)
5538         {
5539           statics = (statics << 1) & 0xf;
5540           num_statics += 1;
5541         }
5542       if (statics != 0)
5543         return FALSE;
5544
5545       /* Encode args/statics.  */
5546       opcode |= ((num_args << 2) | num_statics) << 16;
5547     }
5548
5549   /* Encode $s0/$s1.  */
5550   if (sregs & (1 << 0))         /* $s0 */
5551     opcode |= 0x20;
5552   if (sregs & (1 << 1))         /* $s1 */
5553     opcode |= 0x10;
5554   sregs >>= 2;
5555
5556   /* Encode $s2-$s8. */
5557   num_sregs = 0;
5558   while (sregs & 1)
5559     {
5560       sregs >>= 1;
5561       num_sregs += 1;
5562     }
5563   if (sregs != 0)
5564     return FALSE;
5565   opcode |= num_sregs << 24;
5566
5567   /* Encode frame size.  */
5568   if (num_frame_sizes == 0)
5569     {
5570       set_insn_error (arg->argnum, _("missing frame size"));
5571       return FALSE;
5572     }
5573   if (num_frame_sizes > 1)
5574     {
5575       set_insn_error (arg->argnum, _("frame size specified twice"));
5576       return FALSE;
5577     }
5578   if ((frame_size & 7) != 0 || frame_size < 0 || frame_size > 0xff * 8)
5579     {
5580       set_insn_error (arg->argnum, _("invalid frame size"));
5581       return FALSE;
5582     }
5583   if (frame_size != 128 || (opcode >> 16) != 0)
5584     {
5585       frame_size /= 8;
5586       opcode |= (((frame_size & 0xf0) << 16)
5587                  | (frame_size & 0x0f));
5588     }
5589
5590   /* Finally build the instruction.  */
5591   if ((opcode >> 16) != 0 || frame_size == 0)
5592     opcode |= MIPS16_EXTEND;
5593   arg->insn->insn_opcode = opcode;
5594   return TRUE;
5595 }
5596
5597 /* OP_MDMX_IMM_REG matcher.  */
5598
5599 static bfd_boolean
5600 match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
5601                             const struct mips_operand *operand)
5602 {
5603   unsigned int regno, uval;
5604   bfd_boolean is_qh;
5605   const struct mips_opcode *opcode;
5606
5607   /* The mips_opcode records whether this is an octobyte or quadhalf
5608      instruction.  Start out with that bit in place.  */
5609   opcode = arg->insn->insn_mo;
5610   uval = mips_extract_operand (operand, opcode->match);
5611   is_qh = (uval != 0);
5612
5613   if (arg->token->type == OT_REG)
5614     {
5615       if ((opcode->membership & INSN_5400)
5616           && strcmp (opcode->name, "rzu.ob") == 0)
5617         {
5618           set_insn_error_i (arg->argnum, _("operand %d must be an immediate"),
5619                             arg->argnum);
5620           return FALSE;
5621         }
5622
5623       if (!match_regno (arg, OP_REG_VEC, arg->token->u.regno, &regno))
5624         return FALSE;
5625       ++arg->token;
5626
5627       /* Check whether this is a vector register or a broadcast of
5628          a single element.  */
5629       if (arg->token->type == OT_INTEGER_INDEX)
5630         {
5631           if (arg->token->u.index > (is_qh ? 3 : 7))
5632             {
5633               set_insn_error (arg->argnum, _("invalid element selector"));
5634               return FALSE;
5635             }
5636           uval |= arg->token->u.index << (is_qh ? 2 : 1) << 5;
5637           ++arg->token;
5638         }
5639       else
5640         {
5641           /* A full vector.  */
5642           if ((opcode->membership & INSN_5400)
5643               && (strcmp (opcode->name, "sll.ob") == 0
5644                   || strcmp (opcode->name, "srl.ob") == 0))
5645             {
5646               set_insn_error_i (arg->argnum, _("operand %d must be scalar"),
5647                                 arg->argnum);
5648               return FALSE;
5649             }
5650
5651           if (is_qh)
5652             uval |= MDMX_FMTSEL_VEC_QH << 5;
5653           else
5654             uval |= MDMX_FMTSEL_VEC_OB << 5;
5655         }
5656       uval |= regno;
5657     }
5658   else
5659     {
5660       offsetT sval;
5661
5662       if (!match_const_int (arg, &sval))
5663         return FALSE;
5664       if (sval < 0 || sval > 31)
5665         {
5666           match_out_of_range (arg);
5667           return FALSE;
5668         }
5669       uval |= (sval & 31);
5670       if (is_qh)
5671         uval |= MDMX_FMTSEL_IMM_QH << 5;
5672       else
5673         uval |= MDMX_FMTSEL_IMM_OB << 5;
5674     }
5675   insn_insert_operand (arg->insn, operand, uval);
5676   return TRUE;
5677 }
5678
5679 /* OP_IMM_INDEX matcher.  */
5680
5681 static bfd_boolean
5682 match_imm_index_operand (struct mips_arg_info *arg,
5683                          const struct mips_operand *operand)
5684 {
5685   unsigned int max_val;
5686
5687   if (arg->token->type != OT_INTEGER_INDEX)
5688     return FALSE;
5689
5690   max_val = (1 << operand->size) - 1;
5691   if (arg->token->u.index > max_val)
5692     {
5693       match_out_of_range (arg);
5694       return FALSE;
5695     }
5696   insn_insert_operand (arg->insn, operand, arg->token->u.index);
5697   ++arg->token;
5698   return TRUE;
5699 }
5700
5701 /* OP_REG_INDEX matcher.  */
5702
5703 static bfd_boolean
5704 match_reg_index_operand (struct mips_arg_info *arg,
5705                          const struct mips_operand *operand)
5706 {
5707   unsigned int regno;
5708
5709   if (arg->token->type != OT_REG_INDEX)
5710     return FALSE;
5711
5712   if (!match_regno (arg, OP_REG_GP, arg->token->u.regno, &regno))
5713     return FALSE;
5714
5715   insn_insert_operand (arg->insn, operand, regno);
5716   ++arg->token;
5717   return TRUE;
5718 }
5719
5720 /* OP_PC matcher.  */
5721
5722 static bfd_boolean
5723 match_pc_operand (struct mips_arg_info *arg)
5724 {
5725   if (arg->token->type == OT_REG && (arg->token->u.regno & RTYPE_PC))
5726     {
5727       ++arg->token;
5728       return TRUE;
5729     }
5730   return FALSE;
5731 }
5732
5733 /* OP_NON_ZERO_REG matcher.  */
5734
5735 static bfd_boolean
5736 match_non_zero_reg_operand (struct mips_arg_info *arg,
5737                             const struct mips_operand *operand)
5738 {
5739   unsigned int regno;
5740
5741   if (!match_reg (arg, OP_REG_GP, &regno))
5742     return FALSE;
5743
5744   if (regno == 0)
5745     return FALSE;
5746
5747   arg->last_regno = regno;
5748   insn_insert_operand (arg->insn, operand, regno);
5749   return TRUE;
5750 }
5751
5752 /* OP_REPEAT_DEST_REG and OP_REPEAT_PREV_REG matcher.  OTHER_REGNO is the
5753    register that we need to match.  */
5754
5755 static bfd_boolean
5756 match_tied_reg_operand (struct mips_arg_info *arg, unsigned int other_regno)
5757 {
5758   unsigned int regno;
5759
5760   return match_reg (arg, OP_REG_GP, &regno) && regno == other_regno;
5761 }
5762
5763 /* Read a floating-point constant from S for LI.S or LI.D.  LENGTH is
5764    the length of the value in bytes (4 for float, 8 for double) and
5765    USING_GPRS says whether the destination is a GPR rather than an FPR.
5766
5767    Return the constant in IMM and OFFSET as follows:
5768
5769    - If the constant should be loaded via memory, set IMM to O_absent and
5770      OFFSET to the memory address.
5771
5772    - Otherwise, if the constant should be loaded into two 32-bit registers,
5773      set IMM to the O_constant to load into the high register and OFFSET
5774      to the corresponding value for the low register.
5775
5776    - Otherwise, set IMM to the full O_constant and set OFFSET to O_absent.
5777
5778    These constants only appear as the last operand in an instruction,
5779    and every instruction that accepts them in any variant accepts them
5780    in all variants.  This means we don't have to worry about backing out
5781    any changes if the instruction does not match.  We just match
5782    unconditionally and report an error if the constant is invalid.  */
5783
5784 static bfd_boolean
5785 match_float_constant (struct mips_arg_info *arg, expressionS *imm,
5786                       expressionS *offset, int length, bfd_boolean using_gprs)
5787 {
5788   char *p;
5789   segT seg, new_seg;
5790   subsegT subseg;
5791   const char *newname;
5792   unsigned char *data;
5793
5794   /* Where the constant is placed is based on how the MIPS assembler
5795      does things:
5796
5797      length == 4 && using_gprs  -- immediate value only
5798      length == 8 && using_gprs  -- .rdata or immediate value
5799      length == 4 && !using_gprs -- .lit4 or immediate value
5800      length == 8 && !using_gprs -- .lit8 or immediate value
5801
5802      The .lit4 and .lit8 sections are only used if permitted by the
5803      -G argument.  */
5804   if (arg->token->type != OT_FLOAT)
5805     {
5806       set_insn_error (arg->argnum, _("floating-point expression required"));
5807       return FALSE;
5808     }
5809
5810   gas_assert (arg->token->u.flt.length == length);
5811   data = arg->token->u.flt.data;
5812   ++arg->token;
5813
5814   /* Handle 32-bit constants for which an immediate value is best.  */
5815   if (length == 4
5816       && (using_gprs
5817           || g_switch_value < 4
5818           || (data[0] == 0 && data[1] == 0)
5819           || (data[2] == 0 && data[3] == 0)))
5820     {
5821       imm->X_op = O_constant;
5822       if (!target_big_endian)
5823         imm->X_add_number = bfd_getl32 (data);
5824       else
5825         imm->X_add_number = bfd_getb32 (data);
5826       offset->X_op = O_absent;
5827       return TRUE;
5828     }
5829
5830   /* Handle 64-bit constants for which an immediate value is best.  */
5831   if (length == 8
5832       && !mips_disable_float_construction
5833       /* Constants can only be constructed in GPRs and copied to FPRs if the
5834          GPRs are at least as wide as the FPRs or MTHC1 is available.
5835          Unlike most tests for 32-bit floating-point registers this check
5836          specifically looks for GPR_SIZE == 32 as the FPXX ABI does not
5837          permit 64-bit moves without MXHC1.
5838          Force the constant into memory otherwise.  */
5839       && (using_gprs
5840           || GPR_SIZE == 64
5841           || ISA_HAS_MXHC1 (mips_opts.isa)
5842           || FPR_SIZE == 32)
5843       && ((data[0] == 0 && data[1] == 0)
5844           || (data[2] == 0 && data[3] == 0))
5845       && ((data[4] == 0 && data[5] == 0)
5846           || (data[6] == 0 && data[7] == 0)))
5847     {
5848       /* The value is simple enough to load with a couple of instructions.
5849          If using 32-bit registers, set IMM to the high order 32 bits and
5850          OFFSET to the low order 32 bits.  Otherwise, set IMM to the entire
5851          64 bit constant.  */
5852       if (GPR_SIZE == 32 || (!using_gprs && FPR_SIZE != 64))
5853         {
5854           imm->X_op = O_constant;
5855           offset->X_op = O_constant;
5856           if (!target_big_endian)
5857             {
5858               imm->X_add_number = bfd_getl32 (data + 4);
5859               offset->X_add_number = bfd_getl32 (data);
5860             }
5861           else
5862             {
5863               imm->X_add_number = bfd_getb32 (data);
5864               offset->X_add_number = bfd_getb32 (data + 4);
5865             }
5866           if (offset->X_add_number == 0)
5867             offset->X_op = O_absent;
5868         }
5869       else
5870         {
5871           imm->X_op = O_constant;
5872           if (!target_big_endian)
5873             imm->X_add_number = bfd_getl64 (data);
5874           else
5875             imm->X_add_number = bfd_getb64 (data);
5876           offset->X_op = O_absent;
5877         }
5878       return TRUE;
5879     }
5880
5881   /* Switch to the right section.  */
5882   seg = now_seg;
5883   subseg = now_subseg;
5884   if (length == 4)
5885     {
5886       gas_assert (!using_gprs && g_switch_value >= 4);
5887       newname = ".lit4";
5888     }
5889   else
5890     {
5891       if (using_gprs || g_switch_value < 8)
5892         newname = RDATA_SECTION_NAME;
5893       else
5894         newname = ".lit8";
5895     }
5896
5897   new_seg = subseg_new (newname, (subsegT) 0);
5898   bfd_set_section_flags (stdoutput, new_seg,
5899                          SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA);
5900   frag_align (length == 4 ? 2 : 3, 0, 0);
5901   if (strncmp (TARGET_OS, "elf", 3) != 0)
5902     record_alignment (new_seg, 4);
5903   else
5904     record_alignment (new_seg, length == 4 ? 2 : 3);
5905   if (seg == now_seg)
5906     as_bad (_("cannot use `%s' in this section"), arg->insn->insn_mo->name);
5907
5908   /* Set the argument to the current address in the section.  */
5909   imm->X_op = O_absent;
5910   offset->X_op = O_symbol;
5911   offset->X_add_symbol = symbol_temp_new_now ();
5912   offset->X_add_number = 0;
5913
5914   /* Put the floating point number into the section.  */
5915   p = frag_more (length);
5916   memcpy (p, data, length);
5917
5918   /* Switch back to the original section.  */
5919   subseg_set (seg, subseg);
5920   return TRUE;
5921 }
5922
5923 /* OP_VU0_SUFFIX and OP_VU0_MATCH_SUFFIX matcher; MATCH_P selects between
5924    them.  */
5925
5926 static bfd_boolean
5927 match_vu0_suffix_operand (struct mips_arg_info *arg,
5928                           const struct mips_operand *operand,
5929                           bfd_boolean match_p)
5930 {
5931   unsigned int uval;
5932
5933   /* The operand can be an XYZW mask or a single 2-bit channel index
5934      (with X being 0).  */
5935   gas_assert (operand->size == 2 || operand->size == 4);
5936
5937   /* The suffix can be omitted when it is already part of the opcode.  */
5938   if (arg->token->type != OT_CHANNELS)
5939     return match_p;
5940
5941   uval = arg->token->u.channels;
5942   if (operand->size == 2)
5943     {
5944       /* Check that a single bit is set and convert it into a 2-bit index.  */
5945       if ((uval & -uval) != uval)
5946         return FALSE;
5947       uval = 4 - ffs (uval);
5948     }
5949
5950   if (match_p && insn_extract_operand (arg->insn, operand) != uval)
5951     return FALSE;
5952
5953   ++arg->token;
5954   if (!match_p)
5955     insn_insert_operand (arg->insn, operand, uval);
5956   return TRUE;
5957 }
5958
5959 /* S is the text seen for ARG.  Match it against OPERAND.  Return the end
5960    of the argument text if the match is successful, otherwise return null.  */
5961
5962 static bfd_boolean
5963 match_operand (struct mips_arg_info *arg,
5964                const struct mips_operand *operand)
5965 {
5966   switch (operand->type)
5967     {
5968     case OP_INT:
5969       return match_int_operand (arg, operand);
5970
5971     case OP_MAPPED_INT:
5972       return match_mapped_int_operand (arg, operand);
5973
5974     case OP_MSB:
5975       return match_msb_operand (arg, operand);
5976
5977     case OP_REG:
5978     case OP_OPTIONAL_REG:
5979       return match_reg_operand (arg, operand);
5980
5981     case OP_REG_PAIR:
5982       return match_reg_pair_operand (arg, operand);
5983
5984     case OP_PCREL:
5985       return match_pcrel_operand (arg);
5986
5987     case OP_PERF_REG:
5988       return match_perf_reg_operand (arg, operand);
5989
5990     case OP_ADDIUSP_INT:
5991       return match_addiusp_operand (arg, operand);
5992
5993     case OP_CLO_CLZ_DEST:
5994       return match_clo_clz_dest_operand (arg, operand);
5995
5996     case OP_LWM_SWM_LIST:
5997       return match_lwm_swm_list_operand (arg, operand);
5998
5999     case OP_ENTRY_EXIT_LIST:
6000       return match_entry_exit_operand (arg, operand);
6001
6002     case OP_SAVE_RESTORE_LIST:
6003       return match_save_restore_list_operand (arg);
6004
6005     case OP_MDMX_IMM_REG:
6006       return match_mdmx_imm_reg_operand (arg, operand);
6007
6008     case OP_REPEAT_DEST_REG:
6009       return match_tied_reg_operand (arg, arg->dest_regno);
6010
6011     case OP_REPEAT_PREV_REG:
6012       return match_tied_reg_operand (arg, arg->last_regno);
6013
6014     case OP_PC:
6015       return match_pc_operand (arg);
6016
6017     case OP_VU0_SUFFIX:
6018       return match_vu0_suffix_operand (arg, operand, FALSE);
6019
6020     case OP_VU0_MATCH_SUFFIX:
6021       return match_vu0_suffix_operand (arg, operand, TRUE);
6022
6023     case OP_IMM_INDEX:
6024       return match_imm_index_operand (arg, operand);
6025
6026     case OP_REG_INDEX:
6027       return match_reg_index_operand (arg, operand);
6028
6029     case OP_SAME_RS_RT:
6030       return match_same_rs_rt_operand (arg, operand);
6031
6032     case OP_CHECK_PREV:
6033       return match_check_prev_operand (arg, operand);
6034
6035     case OP_NON_ZERO_REG:
6036       return match_non_zero_reg_operand (arg, operand);
6037     }
6038   abort ();
6039 }
6040
6041 /* ARG is the state after successfully matching an instruction.
6042    Issue any queued-up warnings.  */
6043
6044 static void
6045 check_completed_insn (struct mips_arg_info *arg)
6046 {
6047   if (arg->seen_at)
6048     {
6049       if (AT == ATREG)
6050         as_warn (_("used $at without \".set noat\""));
6051       else
6052         as_warn (_("used $%u with \".set at=$%u\""), AT, AT);
6053     }
6054 }
6055
6056 /* Return true if modifying general-purpose register REG needs a delay.  */
6057
6058 static bfd_boolean
6059 reg_needs_delay (unsigned int reg)
6060 {
6061   unsigned long prev_pinfo;
6062
6063   prev_pinfo = history[0].insn_mo->pinfo;
6064   if (!mips_opts.noreorder
6065       && (((prev_pinfo & INSN_LOAD_MEMORY) && !gpr_interlocks)
6066           || ((prev_pinfo & INSN_LOAD_COPROC) && !cop_interlocks))
6067       && (gpr_write_mask (&history[0]) & (1 << reg)))
6068     return TRUE;
6069
6070   return FALSE;
6071 }
6072
6073 /* Classify an instruction according to the FIX_VR4120_* enumeration.
6074    Return NUM_FIX_VR4120_CLASSES if the instruction isn't affected
6075    by VR4120 errata.  */
6076
6077 static unsigned int
6078 classify_vr4120_insn (const char *name)
6079 {
6080   if (strncmp (name, "macc", 4) == 0)
6081     return FIX_VR4120_MACC;
6082   if (strncmp (name, "dmacc", 5) == 0)
6083     return FIX_VR4120_DMACC;
6084   if (strncmp (name, "mult", 4) == 0)
6085     return FIX_VR4120_MULT;
6086   if (strncmp (name, "dmult", 5) == 0)
6087     return FIX_VR4120_DMULT;
6088   if (strstr (name, "div"))
6089     return FIX_VR4120_DIV;
6090   if (strcmp (name, "mtlo") == 0 || strcmp (name, "mthi") == 0)
6091     return FIX_VR4120_MTHILO;
6092   return NUM_FIX_VR4120_CLASSES;
6093 }
6094
6095 #define INSN_ERET       0x42000018
6096 #define INSN_DERET      0x4200001f
6097 #define INSN_DMULT      0x1c
6098 #define INSN_DMULTU     0x1d
6099
6100 /* Return the number of instructions that must separate INSN1 and INSN2,
6101    where INSN1 is the earlier instruction.  Return the worst-case value
6102    for any INSN2 if INSN2 is null.  */
6103
6104 static unsigned int
6105 insns_between (const struct mips_cl_insn *insn1,
6106                const struct mips_cl_insn *insn2)
6107 {
6108   unsigned long pinfo1, pinfo2;
6109   unsigned int mask;
6110
6111   /* If INFO2 is null, pessimistically assume that all flags are set for
6112      the second instruction.  */
6113   pinfo1 = insn1->insn_mo->pinfo;
6114   pinfo2 = insn2 ? insn2->insn_mo->pinfo : ~0U;
6115
6116   /* For most targets, write-after-read dependencies on the HI and LO
6117      registers must be separated by at least two instructions.  */
6118   if (!hilo_interlocks)
6119     {
6120       if ((pinfo1 & INSN_READ_LO) && (pinfo2 & INSN_WRITE_LO))
6121         return 2;
6122       if ((pinfo1 & INSN_READ_HI) && (pinfo2 & INSN_WRITE_HI))
6123         return 2;
6124     }
6125
6126   /* If we're working around r7000 errata, there must be two instructions
6127      between an mfhi or mflo and any instruction that uses the result.  */
6128   if (mips_7000_hilo_fix
6129       && !mips_opts.micromips
6130       && MF_HILO_INSN (pinfo1)
6131       && (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1))))
6132     return 2;
6133
6134   /* If we're working around 24K errata, one instruction is required
6135      if an ERET or DERET is followed by a branch instruction.  */
6136   if (mips_fix_24k && !mips_opts.micromips)
6137     {
6138       if (insn1->insn_opcode == INSN_ERET
6139           || insn1->insn_opcode == INSN_DERET)
6140         {
6141           if (insn2 == NULL
6142               || insn2->insn_opcode == INSN_ERET
6143               || insn2->insn_opcode == INSN_DERET
6144               || delayed_branch_p (insn2))
6145             return 1;
6146         }
6147     }
6148
6149   /* If we're working around PMC RM7000 errata, there must be three
6150      nops between a dmult and a load instruction.  */
6151   if (mips_fix_rm7000 && !mips_opts.micromips)
6152     {
6153       if ((insn1->insn_opcode & insn1->insn_mo->mask) == INSN_DMULT
6154           || (insn1->insn_opcode & insn1->insn_mo->mask) == INSN_DMULTU)
6155         {
6156           if (pinfo2 & INSN_LOAD_MEMORY)
6157            return 3;
6158         }
6159     }
6160
6161   /* If working around VR4120 errata, check for combinations that need
6162      a single intervening instruction.  */
6163   if (mips_fix_vr4120 && !mips_opts.micromips)
6164     {
6165       unsigned int class1, class2;
6166
6167       class1 = classify_vr4120_insn (insn1->insn_mo->name);
6168       if (class1 != NUM_FIX_VR4120_CLASSES && vr4120_conflicts[class1] != 0)
6169         {
6170           if (insn2 == NULL)
6171             return 1;
6172           class2 = classify_vr4120_insn (insn2->insn_mo->name);
6173           if (vr4120_conflicts[class1] & (1 << class2))
6174             return 1;
6175         }
6176     }
6177
6178   if (!HAVE_CODE_COMPRESSION)
6179     {
6180       /* Check for GPR or coprocessor load delays.  All such delays
6181          are on the RT register.  */
6182       /* Itbl support may require additional care here.  */
6183       if ((!gpr_interlocks && (pinfo1 & INSN_LOAD_MEMORY))
6184           || (!cop_interlocks && (pinfo1 & INSN_LOAD_COPROC)))
6185         {
6186           if (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1)))
6187             return 1;
6188         }
6189
6190       /* Check for generic coprocessor hazards.
6191
6192          This case is not handled very well.  There is no special
6193          knowledge of CP0 handling, and the coprocessors other than
6194          the floating point unit are not distinguished at all.  */
6195       /* Itbl support may require additional care here. FIXME!
6196          Need to modify this to include knowledge about
6197          user specified delays!  */
6198       else if ((!cop_interlocks && (pinfo1 & INSN_COPROC_MOVE))
6199                || (!cop_mem_interlocks && (pinfo1 & INSN_COPROC_MEMORY_DELAY)))
6200         {
6201           /* Handle cases where INSN1 writes to a known general coprocessor
6202              register.  There must be a one instruction delay before INSN2
6203              if INSN2 reads that register, otherwise no delay is needed.  */
6204           mask = fpr_write_mask (insn1);
6205           if (mask != 0)
6206             {
6207               if (!insn2 || (mask & fpr_read_mask (insn2)) != 0)
6208                 return 1;
6209             }
6210           else
6211             {
6212               /* Read-after-write dependencies on the control registers
6213                  require a two-instruction gap.  */
6214               if ((pinfo1 & INSN_WRITE_COND_CODE)
6215                   && (pinfo2 & INSN_READ_COND_CODE))
6216                 return 2;
6217
6218               /* We don't know exactly what INSN1 does.  If INSN2 is
6219                  also a coprocessor instruction, assume there must be
6220                  a one instruction gap.  */
6221               if (pinfo2 & INSN_COP)
6222                 return 1;
6223             }
6224         }
6225
6226       /* Check for read-after-write dependencies on the coprocessor
6227          control registers in cases where INSN1 does not need a general
6228          coprocessor delay.  This means that INSN1 is a floating point
6229          comparison instruction.  */
6230       /* Itbl support may require additional care here.  */
6231       else if (!cop_interlocks
6232                && (pinfo1 & INSN_WRITE_COND_CODE)
6233                && (pinfo2 & INSN_READ_COND_CODE))
6234         return 1;
6235     }
6236
6237   /* Forbidden slots can not contain Control Transfer Instructions (CTIs)
6238      CTIs include all branches and jumps, nal, eret, eretnc, deret, wait
6239      and pause.  */
6240   if ((insn1->insn_mo->pinfo2 & INSN2_FORBIDDEN_SLOT)
6241       && ((pinfo2 & INSN_NO_DELAY_SLOT)
6242           || (insn2 && delayed_branch_p (insn2))))
6243     return 1;
6244
6245   return 0;
6246 }
6247
6248 /* Return the number of nops that would be needed to work around the
6249    VR4130 mflo/mfhi errata if instruction INSN immediately followed
6250    the MAX_VR4130_NOPS instructions described by HIST.  Ignore hazards
6251    that are contained within the first IGNORE instructions of HIST.  */
6252
6253 static int
6254 nops_for_vr4130 (int ignore, const struct mips_cl_insn *hist,
6255                  const struct mips_cl_insn *insn)
6256 {
6257   int i, j;
6258   unsigned int mask;
6259
6260   /* Check if the instruction writes to HI or LO.  MTHI and MTLO
6261      are not affected by the errata.  */
6262   if (insn != 0
6263       && ((insn->insn_mo->pinfo & (INSN_WRITE_HI | INSN_WRITE_LO)) == 0
6264           || strcmp (insn->insn_mo->name, "mtlo") == 0
6265           || strcmp (insn->insn_mo->name, "mthi") == 0))
6266     return 0;
6267
6268   /* Search for the first MFLO or MFHI.  */
6269   for (i = 0; i < MAX_VR4130_NOPS; i++)
6270     if (MF_HILO_INSN (hist[i].insn_mo->pinfo))
6271       {
6272         /* Extract the destination register.  */
6273         mask = gpr_write_mask (&hist[i]);
6274
6275         /* No nops are needed if INSN reads that register.  */
6276         if (insn != NULL && (gpr_read_mask (insn) & mask) != 0)
6277           return 0;
6278
6279         /* ...or if any of the intervening instructions do.  */
6280         for (j = 0; j < i; j++)
6281           if (gpr_read_mask (&hist[j]) & mask)
6282             return 0;
6283
6284         if (i >= ignore)
6285           return MAX_VR4130_NOPS - i;
6286       }
6287   return 0;
6288 }
6289
6290 #define BASE_REG_EQ(INSN1, INSN2)       \
6291   ((((INSN1) >> OP_SH_RS) & OP_MASK_RS) \
6292       == (((INSN2) >> OP_SH_RS) & OP_MASK_RS))
6293
6294 /* Return the minimum alignment for this store instruction.  */
6295
6296 static int
6297 fix_24k_align_to (const struct mips_opcode *mo)
6298 {
6299   if (strcmp (mo->name, "sh") == 0)
6300     return 2;
6301
6302   if (strcmp (mo->name, "swc1") == 0
6303       || strcmp (mo->name, "swc2") == 0
6304       || strcmp (mo->name, "sw") == 0
6305       || strcmp (mo->name, "sc") == 0
6306       || strcmp (mo->name, "s.s") == 0)
6307     return 4;
6308
6309   if (strcmp (mo->name, "sdc1") == 0
6310       || strcmp (mo->name, "sdc2") == 0
6311       || strcmp (mo->name, "s.d") == 0)
6312     return 8;
6313
6314   /* sb, swl, swr */
6315   return 1;
6316 }
6317
6318 struct fix_24k_store_info
6319   {
6320     /* Immediate offset, if any, for this store instruction.  */
6321     short off;
6322     /* Alignment required by this store instruction.  */
6323     int align_to;
6324     /* True for register offsets.  */
6325     int register_offset;
6326   };
6327
6328 /* Comparison function used by qsort.  */
6329
6330 static int
6331 fix_24k_sort (const void *a, const void *b)
6332 {
6333   const struct fix_24k_store_info *pos1 = a;
6334   const struct fix_24k_store_info *pos2 = b;
6335
6336   return (pos1->off - pos2->off);
6337 }
6338
6339 /* INSN is a store instruction.  Try to record the store information
6340    in STINFO.  Return false if the information isn't known.  */
6341
6342 static bfd_boolean
6343 fix_24k_record_store_info (struct fix_24k_store_info *stinfo,
6344                            const struct mips_cl_insn *insn)
6345 {
6346   /* The instruction must have a known offset.  */
6347   if (!insn->complete_p || !strstr (insn->insn_mo->args, "o("))
6348     return FALSE;
6349
6350   stinfo->off = (insn->insn_opcode >> OP_SH_IMMEDIATE) & OP_MASK_IMMEDIATE;
6351   stinfo->align_to = fix_24k_align_to (insn->insn_mo);
6352   return TRUE;
6353 }
6354
6355 /* Return the number of nops that would be needed to work around the 24k
6356    "lost data on stores during refill" errata if instruction INSN
6357    immediately followed the 2 instructions described by HIST.
6358    Ignore hazards that are contained within the first IGNORE
6359    instructions of HIST.
6360
6361    Problem: The FSB (fetch store buffer) acts as an intermediate buffer
6362    for the data cache refills and store data. The following describes
6363    the scenario where the store data could be lost.
6364
6365    * A data cache miss, due to either a load or a store, causing fill
6366      data to be supplied by the memory subsystem
6367    * The first three doublewords of fill data are returned and written
6368      into the cache
6369    * A sequence of four stores occurs in consecutive cycles around the
6370      final doubleword of the fill:
6371    * Store A
6372    * Store B
6373    * Store C
6374    * Zero, One or more instructions
6375    * Store D
6376
6377    The four stores A-D must be to different doublewords of the line that
6378    is being filled. The fourth instruction in the sequence above permits
6379    the fill of the final doubleword to be transferred from the FSB into
6380    the cache. In the sequence above, the stores may be either integer
6381    (sb, sh, sw, swr, swl, sc) or coprocessor (swc1/swc2, sdc1/sdc2,
6382    swxc1, sdxc1, suxc1) stores, as long as the four stores are to
6383    different doublewords on the line. If the floating point unit is
6384    running in 1:2 mode, it is not possible to create the sequence above
6385    using only floating point store instructions.
6386
6387    In this case, the cache line being filled is incorrectly marked
6388    invalid, thereby losing the data from any store to the line that
6389    occurs between the original miss and the completion of the five
6390    cycle sequence shown above.
6391
6392    The workarounds are:
6393
6394    * Run the data cache in write-through mode.
6395    * Insert a non-store instruction between
6396      Store A and Store B or Store B and Store C.  */
6397
6398 static int
6399 nops_for_24k (int ignore, const struct mips_cl_insn *hist,
6400               const struct mips_cl_insn *insn)
6401 {
6402   struct fix_24k_store_info pos[3];
6403   int align, i, base_offset;
6404
6405   if (ignore >= 2)
6406     return 0;
6407
6408   /* If the previous instruction wasn't a store, there's nothing to
6409      worry about.  */
6410   if ((hist[0].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
6411     return 0;
6412
6413   /* If the instructions after the previous one are unknown, we have
6414      to assume the worst.  */
6415   if (!insn)
6416     return 1;
6417
6418   /* Check whether we are dealing with three consecutive stores.  */
6419   if ((insn->insn_mo->pinfo & INSN_STORE_MEMORY) == 0
6420       || (hist[1].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
6421     return 0;
6422
6423   /* If we don't know the relationship between the store addresses,
6424      assume the worst.  */
6425   if (!BASE_REG_EQ (insn->insn_opcode, hist[0].insn_opcode)
6426       || !BASE_REG_EQ (insn->insn_opcode, hist[1].insn_opcode))
6427     return 1;
6428
6429   if (!fix_24k_record_store_info (&pos[0], insn)
6430       || !fix_24k_record_store_info (&pos[1], &hist[0])
6431       || !fix_24k_record_store_info (&pos[2], &hist[1]))
6432     return 1;
6433
6434   qsort (&pos, 3, sizeof (struct fix_24k_store_info), fix_24k_sort);
6435
6436   /* Pick a value of ALIGN and X such that all offsets are adjusted by
6437      X bytes and such that the base register + X is known to be aligned
6438      to align bytes.  */
6439
6440   if (((insn->insn_opcode >> OP_SH_RS) & OP_MASK_RS) == SP)
6441     align = 8;
6442   else
6443     {
6444       align = pos[0].align_to;
6445       base_offset = pos[0].off;
6446       for (i = 1; i < 3; i++)
6447         if (align < pos[i].align_to)
6448           {
6449             align = pos[i].align_to;
6450             base_offset = pos[i].off;
6451           }
6452       for (i = 0; i < 3; i++)
6453         pos[i].off -= base_offset;
6454     }
6455
6456   pos[0].off &= ~align + 1;
6457   pos[1].off &= ~align + 1;
6458   pos[2].off &= ~align + 1;
6459
6460   /* If any two stores write to the same chunk, they also write to the
6461      same doubleword.  The offsets are still sorted at this point.  */
6462   if (pos[0].off == pos[1].off || pos[1].off == pos[2].off)
6463     return 0;
6464
6465   /* A range of at least 9 bytes is needed for the stores to be in
6466      non-overlapping doublewords.  */
6467   if (pos[2].off - pos[0].off <= 8)
6468     return 0;
6469
6470   if (pos[2].off - pos[1].off >= 24
6471       || pos[1].off - pos[0].off >= 24
6472       || pos[2].off - pos[0].off >= 32)
6473     return 0;
6474
6475   return 1;
6476 }
6477
6478 /* Return the number of nops that would be needed if instruction INSN
6479    immediately followed the MAX_NOPS instructions given by HIST,
6480    where HIST[0] is the most recent instruction.  Ignore hazards
6481    between INSN and the first IGNORE instructions in HIST.
6482
6483    If INSN is null, return the worse-case number of nops for any
6484    instruction.  */
6485
6486 static int
6487 nops_for_insn (int ignore, const struct mips_cl_insn *hist,
6488                const struct mips_cl_insn *insn)
6489 {
6490   int i, nops, tmp_nops;
6491
6492   nops = 0;
6493   for (i = ignore; i < MAX_DELAY_NOPS; i++)
6494     {
6495       tmp_nops = insns_between (hist + i, insn) - i;
6496       if (tmp_nops > nops)
6497         nops = tmp_nops;
6498     }
6499
6500   if (mips_fix_vr4130 && !mips_opts.micromips)
6501     {
6502       tmp_nops = nops_for_vr4130 (ignore, hist, insn);
6503       if (tmp_nops > nops)
6504         nops = tmp_nops;
6505     }
6506
6507   if (mips_fix_24k && !mips_opts.micromips)
6508     {
6509       tmp_nops = nops_for_24k (ignore, hist, insn);
6510       if (tmp_nops > nops)
6511         nops = tmp_nops;
6512     }
6513
6514   return nops;
6515 }
6516
6517 /* The variable arguments provide NUM_INSNS extra instructions that
6518    might be added to HIST.  Return the largest number of nops that
6519    would be needed after the extended sequence, ignoring hazards
6520    in the first IGNORE instructions.  */
6521
6522 static int
6523 nops_for_sequence (int num_insns, int ignore,
6524                    const struct mips_cl_insn *hist, ...)
6525 {
6526   va_list args;
6527   struct mips_cl_insn buffer[MAX_NOPS];
6528   struct mips_cl_insn *cursor;
6529   int nops;
6530
6531   va_start (args, hist);
6532   cursor = buffer + num_insns;
6533   memcpy (cursor, hist, (MAX_NOPS - num_insns) * sizeof (*cursor));
6534   while (cursor > buffer)
6535     *--cursor = *va_arg (args, const struct mips_cl_insn *);
6536
6537   nops = nops_for_insn (ignore, buffer, NULL);
6538   va_end (args);
6539   return nops;
6540 }
6541
6542 /* Like nops_for_insn, but if INSN is a branch, take into account the
6543    worst-case delay for the branch target.  */
6544
6545 static int
6546 nops_for_insn_or_target (int ignore, const struct mips_cl_insn *hist,
6547                          const struct mips_cl_insn *insn)
6548 {
6549   int nops, tmp_nops;
6550
6551   nops = nops_for_insn (ignore, hist, insn);
6552   if (delayed_branch_p (insn))
6553     {
6554       tmp_nops = nops_for_sequence (2, ignore ? ignore + 2 : 0,
6555                                     hist, insn, get_delay_slot_nop (insn));
6556       if (tmp_nops > nops)
6557         nops = tmp_nops;
6558     }
6559   else if (compact_branch_p (insn))
6560     {
6561       tmp_nops = nops_for_sequence (1, ignore ? ignore + 1 : 0, hist, insn);
6562       if (tmp_nops > nops)
6563         nops = tmp_nops;
6564     }
6565   return nops;
6566 }
6567
6568 /* Fix NOP issue: Replace nops by "or at,at,zero".  */
6569
6570 static void
6571 fix_loongson2f_nop (struct mips_cl_insn * ip)
6572 {
6573   gas_assert (!HAVE_CODE_COMPRESSION);
6574   if (strcmp (ip->insn_mo->name, "nop") == 0)
6575     ip->insn_opcode = LOONGSON2F_NOP_INSN;
6576 }
6577
6578 /* Fix Jump Issue: Eliminate instruction fetch from outside 256M region
6579                    jr target pc &= 'hffff_ffff_cfff_ffff.  */
6580
6581 static void
6582 fix_loongson2f_jump (struct mips_cl_insn * ip)
6583 {
6584   gas_assert (!HAVE_CODE_COMPRESSION);
6585   if (strcmp (ip->insn_mo->name, "j") == 0
6586       || strcmp (ip->insn_mo->name, "jr") == 0
6587       || strcmp (ip->insn_mo->name, "jalr") == 0)
6588     {
6589       int sreg;
6590       expressionS ep;
6591
6592       if (! mips_opts.at)
6593         return;
6594
6595       sreg = EXTRACT_OPERAND (0, RS, *ip);
6596       if (sreg == ZERO || sreg == KT0 || sreg == KT1 || sreg == ATREG)
6597         return;
6598
6599       ep.X_op = O_constant;
6600       ep.X_add_number = 0xcfff0000;
6601       macro_build (&ep, "lui", "t,u", ATREG, BFD_RELOC_HI16);
6602       ep.X_add_number = 0xffff;
6603       macro_build (&ep, "ori", "t,r,i", ATREG, ATREG, BFD_RELOC_LO16);
6604       macro_build (NULL, "and", "d,v,t", sreg, sreg, ATREG);
6605     }
6606 }
6607
6608 static void
6609 fix_loongson2f (struct mips_cl_insn * ip)
6610 {
6611   if (mips_fix_loongson2f_nop)
6612     fix_loongson2f_nop (ip);
6613
6614   if (mips_fix_loongson2f_jump)
6615     fix_loongson2f_jump (ip);
6616 }
6617
6618 /* IP is a branch that has a delay slot, and we need to fill it
6619    automatically.   Return true if we can do that by swapping IP
6620    with the previous instruction.
6621    ADDRESS_EXPR is an operand of the instruction to be used with
6622    RELOC_TYPE.  */
6623
6624 static bfd_boolean
6625 can_swap_branch_p (struct mips_cl_insn *ip, expressionS *address_expr,
6626                    bfd_reloc_code_real_type *reloc_type)
6627 {
6628   unsigned long pinfo, pinfo2, prev_pinfo, prev_pinfo2;
6629   unsigned int gpr_read, gpr_write, prev_gpr_read, prev_gpr_write;
6630   unsigned int fpr_read, prev_fpr_write;
6631
6632   /* -O2 and above is required for this optimization.  */
6633   if (mips_optimize < 2)
6634     return FALSE;
6635
6636   /* If we have seen .set volatile or .set nomove, don't optimize.  */
6637   if (mips_opts.nomove)
6638     return FALSE;
6639
6640   /* We can't swap if the previous instruction's position is fixed.  */
6641   if (history[0].fixed_p)
6642     return FALSE;
6643
6644   /* If the previous previous insn was in a .set noreorder, we can't
6645      swap.  Actually, the MIPS assembler will swap in this situation.
6646      However, gcc configured -with-gnu-as will generate code like
6647
6648         .set    noreorder
6649         lw      $4,XXX
6650         .set    reorder
6651         INSN
6652         bne     $4,$0,foo
6653
6654      in which we can not swap the bne and INSN.  If gcc is not configured
6655      -with-gnu-as, it does not output the .set pseudo-ops.  */
6656   if (history[1].noreorder_p)
6657     return FALSE;
6658
6659   /* If the previous instruction had a fixup in mips16 mode, we can not swap.
6660      This means that the previous instruction was a 4-byte one anyhow.  */
6661   if (mips_opts.mips16 && history[0].fixp[0])
6662     return FALSE;
6663
6664   /* If the branch is itself the target of a branch, we can not swap.
6665      We cheat on this; all we check for is whether there is a label on
6666      this instruction.  If there are any branches to anything other than
6667      a label, users must use .set noreorder.  */
6668   if (seg_info (now_seg)->label_list)
6669     return FALSE;
6670
6671   /* If the previous instruction is in a variant frag other than this
6672      branch's one, we cannot do the swap.  This does not apply to
6673      MIPS16 code, which uses variant frags for different purposes.  */
6674   if (!mips_opts.mips16
6675       && history[0].frag
6676       && history[0].frag->fr_type == rs_machine_dependent)
6677     return FALSE;
6678
6679   /* We do not swap with instructions that cannot architecturally
6680      be placed in a branch delay slot, such as SYNC or ERET.  We
6681      also refrain from swapping with a trap instruction, since it
6682      complicates trap handlers to have the trap instruction be in
6683      a delay slot.  */
6684   prev_pinfo = history[0].insn_mo->pinfo;
6685   if (prev_pinfo & INSN_NO_DELAY_SLOT)
6686     return FALSE;
6687
6688   /* Check for conflicts between the branch and the instructions
6689      before the candidate delay slot.  */
6690   if (nops_for_insn (0, history + 1, ip) > 0)
6691     return FALSE;
6692
6693   /* Check for conflicts between the swapped sequence and the
6694      target of the branch.  */
6695   if (nops_for_sequence (2, 0, history + 1, ip, history) > 0)
6696     return FALSE;
6697
6698   /* If the branch reads a register that the previous
6699      instruction sets, we can not swap.  */
6700   gpr_read = gpr_read_mask (ip);
6701   prev_gpr_write = gpr_write_mask (&history[0]);
6702   if (gpr_read & prev_gpr_write)
6703     return FALSE;
6704
6705   fpr_read = fpr_read_mask (ip);
6706   prev_fpr_write = fpr_write_mask (&history[0]);
6707   if (fpr_read & prev_fpr_write)
6708     return FALSE;
6709
6710   /* If the branch writes a register that the previous
6711      instruction sets, we can not swap.  */
6712   gpr_write = gpr_write_mask (ip);
6713   if (gpr_write & prev_gpr_write)
6714     return FALSE;
6715
6716   /* If the branch writes a register that the previous
6717      instruction reads, we can not swap.  */
6718   prev_gpr_read = gpr_read_mask (&history[0]);
6719   if (gpr_write & prev_gpr_read)
6720     return FALSE;
6721
6722   /* If one instruction sets a condition code and the
6723      other one uses a condition code, we can not swap.  */
6724   pinfo = ip->insn_mo->pinfo;
6725   if ((pinfo & INSN_READ_COND_CODE)
6726       && (prev_pinfo & INSN_WRITE_COND_CODE))
6727     return FALSE;
6728   if ((pinfo & INSN_WRITE_COND_CODE)
6729       && (prev_pinfo & INSN_READ_COND_CODE))
6730     return FALSE;
6731
6732   /* If the previous instruction uses the PC, we can not swap.  */
6733   prev_pinfo2 = history[0].insn_mo->pinfo2;
6734   if (prev_pinfo2 & INSN2_READ_PC)
6735     return FALSE;
6736
6737   /* If the previous instruction has an incorrect size for a fixed
6738      branch delay slot in microMIPS mode, we cannot swap.  */
6739   pinfo2 = ip->insn_mo->pinfo2;
6740   if (mips_opts.micromips
6741       && (pinfo2 & INSN2_BRANCH_DELAY_16BIT)
6742       && insn_length (history) != 2)
6743     return FALSE;
6744   if (mips_opts.micromips
6745       && (pinfo2 & INSN2_BRANCH_DELAY_32BIT)
6746       && insn_length (history) != 4)
6747     return FALSE;
6748
6749   /* On R5900 short loops need to be fixed by inserting a nop in
6750      the branch delay slots.
6751      A short loop can be terminated too early.  */
6752   if (mips_opts.arch == CPU_R5900
6753       /* Check if instruction has a parameter, ignore "j $31". */
6754       && (address_expr != NULL)
6755       /* Parameter must be 16 bit. */
6756       && (*reloc_type == BFD_RELOC_16_PCREL_S2)
6757       /* Branch to same segment. */
6758       && (S_GET_SEGMENT (address_expr->X_add_symbol) == now_seg)
6759       /* Branch to same code fragment. */
6760       && (symbol_get_frag (address_expr->X_add_symbol) == frag_now)
6761       /* Can only calculate branch offset if value is known. */
6762       && symbol_constant_p (address_expr->X_add_symbol)
6763       /* Check if branch is really conditional. */
6764       && !((ip->insn_opcode & 0xffff0000) == 0x10000000   /* beq $0,$0 */
6765         || (ip->insn_opcode & 0xffff0000) == 0x04010000   /* bgez $0 */
6766         || (ip->insn_opcode & 0xffff0000) == 0x04110000)) /* bgezal $0 */
6767     {
6768       int distance;
6769       /* Check if loop is shorter than 6 instructions including
6770          branch and delay slot.  */
6771       distance = frag_now_fix () - S_GET_VALUE (address_expr->X_add_symbol);
6772       if (distance <= 20)
6773         {
6774           int i;
6775           int rv;
6776
6777           rv = FALSE;
6778           /* When the loop includes branches or jumps,
6779              it is not a short loop. */
6780           for (i = 0; i < (distance / 4); i++)
6781             {
6782               if ((history[i].cleared_p)
6783                   || delayed_branch_p (&history[i]))
6784                 {
6785                   rv = TRUE;
6786                   break;
6787                 }
6788             }
6789           if (rv == FALSE)
6790             {
6791               /* Insert nop after branch to fix short loop. */
6792               return FALSE;
6793             }
6794         }
6795     }
6796
6797   return TRUE;
6798 }
6799
6800 /* Decide how we should add IP to the instruction stream.
6801    ADDRESS_EXPR is an operand of the instruction to be used with
6802    RELOC_TYPE.  */
6803
6804 static enum append_method
6805 get_append_method (struct mips_cl_insn *ip, expressionS *address_expr,
6806                    bfd_reloc_code_real_type *reloc_type)
6807 {
6808   /* The relaxed version of a macro sequence must be inherently
6809      hazard-free.  */
6810   if (mips_relax.sequence == 2)
6811     return APPEND_ADD;
6812
6813   /* We must not dabble with instructions in a ".set norerorder" block.  */
6814   if (mips_opts.noreorder)
6815     return APPEND_ADD;
6816
6817   /* Otherwise, it's our responsibility to fill branch delay slots.  */
6818   if (delayed_branch_p (ip))
6819     {
6820       if (!branch_likely_p (ip)
6821           && can_swap_branch_p (ip, address_expr, reloc_type))
6822         return APPEND_SWAP;
6823
6824       if (mips_opts.mips16
6825           && ISA_SUPPORTS_MIPS16E
6826           && gpr_read_mask (ip) != 0)
6827         return APPEND_ADD_COMPACT;
6828
6829       return APPEND_ADD_WITH_NOP;
6830     }
6831
6832   return APPEND_ADD;
6833 }
6834
6835 /* IP is a MIPS16 instruction whose opcode we have just changed.
6836    Point IP->insn_mo to the new opcode's definition.  */
6837
6838 static void
6839 find_altered_mips16_opcode (struct mips_cl_insn *ip)
6840 {
6841   const struct mips_opcode *mo, *end;
6842
6843   end = &mips16_opcodes[bfd_mips16_num_opcodes];
6844   for (mo = ip->insn_mo; mo < end; mo++)
6845     if ((ip->insn_opcode & mo->mask) == mo->match)
6846       {
6847         ip->insn_mo = mo;
6848         return;
6849       }
6850   abort ();
6851 }
6852
6853 /* For microMIPS macros, we need to generate a local number label
6854    as the target of branches.  */
6855 #define MICROMIPS_LABEL_CHAR            '\037'
6856 static unsigned long micromips_target_label;
6857 static char micromips_target_name[32];
6858
6859 static char *
6860 micromips_label_name (void)
6861 {
6862   char *p = micromips_target_name;
6863   char symbol_name_temporary[24];
6864   unsigned long l;
6865   int i;
6866
6867   if (*p)
6868     return p;
6869
6870   i = 0;
6871   l = micromips_target_label;
6872 #ifdef LOCAL_LABEL_PREFIX
6873   *p++ = LOCAL_LABEL_PREFIX;
6874 #endif
6875   *p++ = 'L';
6876   *p++ = MICROMIPS_LABEL_CHAR;
6877   do
6878     {
6879       symbol_name_temporary[i++] = l % 10 + '0';
6880       l /= 10;
6881     }
6882   while (l != 0);
6883   while (i > 0)
6884     *p++ = symbol_name_temporary[--i];
6885   *p = '\0';
6886
6887   return micromips_target_name;
6888 }
6889
6890 static void
6891 micromips_label_expr (expressionS *label_expr)
6892 {
6893   label_expr->X_op = O_symbol;
6894   label_expr->X_add_symbol = symbol_find_or_make (micromips_label_name ());
6895   label_expr->X_add_number = 0;
6896 }
6897
6898 static void
6899 micromips_label_inc (void)
6900 {
6901   micromips_target_label++;
6902   *micromips_target_name = '\0';
6903 }
6904
6905 static void
6906 micromips_add_label (void)
6907 {
6908   symbolS *s;
6909
6910   s = colon (micromips_label_name ());
6911   micromips_label_inc ();
6912   S_SET_OTHER (s, ELF_ST_SET_MICROMIPS (S_GET_OTHER (s)));
6913 }
6914
6915 /* If assembling microMIPS code, then return the microMIPS reloc
6916    corresponding to the requested one if any.  Otherwise return
6917    the reloc unchanged.  */
6918
6919 static bfd_reloc_code_real_type
6920 micromips_map_reloc (bfd_reloc_code_real_type reloc)
6921 {
6922   static const bfd_reloc_code_real_type relocs[][2] =
6923     {
6924       /* Keep sorted incrementally by the left-hand key.  */
6925       { BFD_RELOC_16_PCREL_S2, BFD_RELOC_MICROMIPS_16_PCREL_S1 },
6926       { BFD_RELOC_GPREL16, BFD_RELOC_MICROMIPS_GPREL16 },
6927       { BFD_RELOC_MIPS_JMP, BFD_RELOC_MICROMIPS_JMP },
6928       { BFD_RELOC_HI16, BFD_RELOC_MICROMIPS_HI16 },
6929       { BFD_RELOC_HI16_S, BFD_RELOC_MICROMIPS_HI16_S },
6930       { BFD_RELOC_LO16, BFD_RELOC_MICROMIPS_LO16 },
6931       { BFD_RELOC_MIPS_LITERAL, BFD_RELOC_MICROMIPS_LITERAL },
6932       { BFD_RELOC_MIPS_GOT16, BFD_RELOC_MICROMIPS_GOT16 },
6933       { BFD_RELOC_MIPS_CALL16, BFD_RELOC_MICROMIPS_CALL16 },
6934       { BFD_RELOC_MIPS_GOT_HI16, BFD_RELOC_MICROMIPS_GOT_HI16 },
6935       { BFD_RELOC_MIPS_GOT_LO16, BFD_RELOC_MICROMIPS_GOT_LO16 },
6936       { BFD_RELOC_MIPS_CALL_HI16, BFD_RELOC_MICROMIPS_CALL_HI16 },
6937       { BFD_RELOC_MIPS_CALL_LO16, BFD_RELOC_MICROMIPS_CALL_LO16 },
6938       { BFD_RELOC_MIPS_SUB, BFD_RELOC_MICROMIPS_SUB },
6939       { BFD_RELOC_MIPS_GOT_PAGE, BFD_RELOC_MICROMIPS_GOT_PAGE },
6940       { BFD_RELOC_MIPS_GOT_OFST, BFD_RELOC_MICROMIPS_GOT_OFST },
6941       { BFD_RELOC_MIPS_GOT_DISP, BFD_RELOC_MICROMIPS_GOT_DISP },
6942       { BFD_RELOC_MIPS_HIGHEST, BFD_RELOC_MICROMIPS_HIGHEST },
6943       { BFD_RELOC_MIPS_HIGHER, BFD_RELOC_MICROMIPS_HIGHER },
6944       { BFD_RELOC_MIPS_SCN_DISP, BFD_RELOC_MICROMIPS_SCN_DISP },
6945       { BFD_RELOC_MIPS_TLS_GD, BFD_RELOC_MICROMIPS_TLS_GD },
6946       { BFD_RELOC_MIPS_TLS_LDM, BFD_RELOC_MICROMIPS_TLS_LDM },
6947       { BFD_RELOC_MIPS_TLS_DTPREL_HI16, BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16 },
6948       { BFD_RELOC_MIPS_TLS_DTPREL_LO16, BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16 },
6949       { BFD_RELOC_MIPS_TLS_GOTTPREL, BFD_RELOC_MICROMIPS_TLS_GOTTPREL },
6950       { BFD_RELOC_MIPS_TLS_TPREL_HI16, BFD_RELOC_MICROMIPS_TLS_TPREL_HI16 },
6951       { BFD_RELOC_MIPS_TLS_TPREL_LO16, BFD_RELOC_MICROMIPS_TLS_TPREL_LO16 }
6952     };
6953   bfd_reloc_code_real_type r;
6954   size_t i;
6955
6956   if (!mips_opts.micromips)
6957     return reloc;
6958   for (i = 0; i < ARRAY_SIZE (relocs); i++)
6959     {
6960       r = relocs[i][0];
6961       if (r > reloc)
6962         return reloc;
6963       if (r == reloc)
6964         return relocs[i][1];
6965     }
6966   return reloc;
6967 }
6968
6969 /* Try to resolve relocation RELOC against constant OPERAND at assembly time.
6970    Return true on success, storing the resolved value in RESULT.  */
6971
6972 static bfd_boolean
6973 calculate_reloc (bfd_reloc_code_real_type reloc, offsetT operand,
6974                  offsetT *result)
6975 {
6976   switch (reloc)
6977     {
6978     case BFD_RELOC_MIPS_HIGHEST:
6979     case BFD_RELOC_MICROMIPS_HIGHEST:
6980       *result = ((operand + 0x800080008000ull) >> 48) & 0xffff;
6981       return TRUE;
6982
6983     case BFD_RELOC_MIPS_HIGHER:
6984     case BFD_RELOC_MICROMIPS_HIGHER:
6985       *result = ((operand + 0x80008000ull) >> 32) & 0xffff;
6986       return TRUE;
6987
6988     case BFD_RELOC_HI16_S:
6989     case BFD_RELOC_HI16_S_PCREL:
6990     case BFD_RELOC_MICROMIPS_HI16_S:
6991     case BFD_RELOC_MIPS16_HI16_S:
6992       *result = ((operand + 0x8000) >> 16) & 0xffff;
6993       return TRUE;
6994
6995     case BFD_RELOC_HI16:
6996     case BFD_RELOC_MICROMIPS_HI16:
6997     case BFD_RELOC_MIPS16_HI16:
6998       *result = (operand >> 16) & 0xffff;
6999       return TRUE;
7000
7001     case BFD_RELOC_LO16:
7002     case BFD_RELOC_LO16_PCREL:
7003     case BFD_RELOC_MICROMIPS_LO16:
7004     case BFD_RELOC_MIPS16_LO16:
7005       *result = operand & 0xffff;
7006       return TRUE;
7007
7008     case BFD_RELOC_UNUSED:
7009       *result = operand;
7010       return TRUE;
7011
7012     default:
7013       return FALSE;
7014     }
7015 }
7016
7017 /* Output an instruction.  IP is the instruction information.
7018    ADDRESS_EXPR is an operand of the instruction to be used with
7019    RELOC_TYPE.  EXPANSIONP is true if the instruction is part of
7020    a macro expansion.  */
7021
7022 static void
7023 append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
7024              bfd_reloc_code_real_type *reloc_type, bfd_boolean expansionp)
7025 {
7026   unsigned long prev_pinfo2, pinfo;
7027   bfd_boolean relaxed_branch = FALSE;
7028   enum append_method method;
7029   bfd_boolean relax32;
7030   int branch_disp;
7031
7032   if (mips_fix_loongson2f && !HAVE_CODE_COMPRESSION)
7033     fix_loongson2f (ip);
7034
7035   file_ase_mips16 |= mips_opts.mips16;
7036   file_ase_micromips |= mips_opts.micromips;
7037
7038   prev_pinfo2 = history[0].insn_mo->pinfo2;
7039   pinfo = ip->insn_mo->pinfo;
7040
7041   if (mips_opts.micromips
7042       && !expansionp
7043       && (((prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
7044            && micromips_insn_length (ip->insn_mo) != 2)
7045           || ((prev_pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
7046               && micromips_insn_length (ip->insn_mo) != 4)))
7047     as_warn (_("wrong size instruction in a %u-bit branch delay slot"),
7048              (prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0 ? 16 : 32);
7049
7050   if (address_expr == NULL)
7051     ip->complete_p = 1;
7052   else if (reloc_type[0] <= BFD_RELOC_UNUSED
7053            && reloc_type[1] == BFD_RELOC_UNUSED
7054            && reloc_type[2] == BFD_RELOC_UNUSED
7055            && address_expr->X_op == O_constant)
7056     {
7057       switch (*reloc_type)
7058         {
7059         case BFD_RELOC_MIPS_JMP:
7060           {
7061             int shift;
7062
7063             /* Shift is 2, unusually, for microMIPS JALX.  */
7064             shift = (mips_opts.micromips
7065                      && strcmp (ip->insn_mo->name, "jalx") != 0) ? 1 : 2;
7066             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7067               as_bad (_("jump to misaligned address (0x%lx)"),
7068                       (unsigned long) address_expr->X_add_number);
7069             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7070                                 & 0x3ffffff);
7071             ip->complete_p = 1;
7072           }
7073           break;
7074
7075         case BFD_RELOC_MIPS16_JMP:
7076           if ((address_expr->X_add_number & 3) != 0)
7077             as_bad (_("jump to misaligned address (0x%lx)"),
7078                     (unsigned long) address_expr->X_add_number);
7079           ip->insn_opcode |=
7080             (((address_expr->X_add_number & 0x7c0000) << 3)
7081                | ((address_expr->X_add_number & 0xf800000) >> 7)
7082                | ((address_expr->X_add_number & 0x3fffc) >> 2));
7083           ip->complete_p = 1;
7084           break;
7085
7086         case BFD_RELOC_16_PCREL_S2:
7087           {
7088             int shift;
7089
7090             shift = mips_opts.micromips ? 1 : 2;
7091             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7092               as_bad (_("branch to misaligned address (0x%lx)"),
7093                       (unsigned long) address_expr->X_add_number);
7094             if (!mips_relax_branch)
7095               {
7096                 if ((address_expr->X_add_number + (1 << (shift + 15)))
7097                     & ~((1 << (shift + 16)) - 1))
7098                   as_bad (_("branch address range overflow (0x%lx)"),
7099                           (unsigned long) address_expr->X_add_number);
7100                 ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7101                                     & 0xffff);
7102               }
7103           }
7104           break;
7105
7106         case BFD_RELOC_MIPS_21_PCREL_S2:
7107           {
7108             int shift;
7109
7110             shift = 2;
7111             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7112               as_bad (_("branch to misaligned address (0x%lx)"),
7113                       (unsigned long) address_expr->X_add_number);
7114             if ((address_expr->X_add_number + (1 << (shift + 20)))
7115                 & ~((1 << (shift + 21)) - 1))
7116               as_bad (_("branch address range overflow (0x%lx)"),
7117                       (unsigned long) address_expr->X_add_number);
7118             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7119                                 & 0x1fffff);
7120           }
7121           break;
7122
7123         case BFD_RELOC_MIPS_26_PCREL_S2:
7124           {
7125             int shift;
7126
7127             shift = 2;
7128             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7129               as_bad (_("branch to misaligned address (0x%lx)"),
7130                       (unsigned long) address_expr->X_add_number);
7131             if ((address_expr->X_add_number + (1 << (shift + 25)))
7132                 & ~((1 << (shift + 26)) - 1))
7133               as_bad (_("branch address range overflow (0x%lx)"),
7134                       (unsigned long) address_expr->X_add_number);
7135             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7136                                 & 0x3ffffff);
7137           }
7138           break;
7139
7140         default:
7141           {
7142             offsetT value;
7143
7144             if (calculate_reloc (*reloc_type, address_expr->X_add_number,
7145                                  &value))
7146               {
7147                 ip->insn_opcode |= value & 0xffff;
7148                 ip->complete_p = 1;
7149               }
7150           }
7151           break;
7152         }
7153     }
7154
7155   if (mips_relax.sequence != 2 && !mips_opts.noreorder)
7156     {
7157       /* There are a lot of optimizations we could do that we don't.
7158          In particular, we do not, in general, reorder instructions.
7159          If you use gcc with optimization, it will reorder
7160          instructions and generally do much more optimization then we
7161          do here; repeating all that work in the assembler would only
7162          benefit hand written assembly code, and does not seem worth
7163          it.  */
7164       int nops = (mips_optimize == 0
7165                   ? nops_for_insn (0, history, NULL)
7166                   : nops_for_insn_or_target (0, history, ip));
7167       if (nops > 0)
7168         {
7169           fragS *old_frag;
7170           unsigned long old_frag_offset;
7171           int i;
7172
7173           old_frag = frag_now;
7174           old_frag_offset = frag_now_fix ();
7175
7176           for (i = 0; i < nops; i++)
7177             add_fixed_insn (NOP_INSN);
7178           insert_into_history (0, nops, NOP_INSN);
7179
7180           if (listing)
7181             {
7182               listing_prev_line ();
7183               /* We may be at the start of a variant frag.  In case we
7184                  are, make sure there is enough space for the frag
7185                  after the frags created by listing_prev_line.  The
7186                  argument to frag_grow here must be at least as large
7187                  as the argument to all other calls to frag_grow in
7188                  this file.  We don't have to worry about being in the
7189                  middle of a variant frag, because the variants insert
7190                  all needed nop instructions themselves.  */
7191               frag_grow (40);
7192             }
7193
7194           mips_move_text_labels ();
7195
7196 #ifndef NO_ECOFF_DEBUGGING
7197           if (ECOFF_DEBUGGING)
7198             ecoff_fix_loc (old_frag, old_frag_offset);
7199 #endif
7200         }
7201     }
7202   else if (mips_relax.sequence != 2 && prev_nop_frag != NULL)
7203     {
7204       int nops;
7205
7206       /* Work out how many nops in prev_nop_frag are needed by IP,
7207          ignoring hazards generated by the first prev_nop_frag_since
7208          instructions.  */
7209       nops = nops_for_insn_or_target (prev_nop_frag_since, history, ip);
7210       gas_assert (nops <= prev_nop_frag_holds);
7211
7212       /* Enforce NOPS as a minimum.  */
7213       if (nops > prev_nop_frag_required)
7214         prev_nop_frag_required = nops;
7215
7216       if (prev_nop_frag_holds == prev_nop_frag_required)
7217         {
7218           /* Settle for the current number of nops.  Update the history
7219              accordingly (for the benefit of any future .set reorder code).  */
7220           prev_nop_frag = NULL;
7221           insert_into_history (prev_nop_frag_since,
7222                                prev_nop_frag_holds, NOP_INSN);
7223         }
7224       else
7225         {
7226           /* Allow this instruction to replace one of the nops that was
7227              tentatively added to prev_nop_frag.  */
7228           prev_nop_frag->fr_fix -= NOP_INSN_SIZE;
7229           prev_nop_frag_holds--;
7230           prev_nop_frag_since++;
7231         }
7232     }
7233
7234   method = get_append_method (ip, address_expr, reloc_type);
7235   branch_disp = method == APPEND_SWAP ? insn_length (history) : 0;
7236
7237   dwarf2_emit_insn (0);
7238   /* We want MIPS16 and microMIPS debug info to use ISA-encoded addresses,
7239      so "move" the instruction address accordingly.
7240
7241      Also, it doesn't seem appropriate for the assembler to reorder .loc
7242      entries.  If this instruction is a branch that we are going to swap
7243      with the previous instruction, the two instructions should be
7244      treated as a unit, and the debug information for both instructions
7245      should refer to the start of the branch sequence.  Using the
7246      current position is certainly wrong when swapping a 32-bit branch
7247      and a 16-bit delay slot, since the current position would then be
7248      in the middle of a branch.  */
7249   dwarf2_move_insn ((HAVE_CODE_COMPRESSION ? 1 : 0) - branch_disp);
7250
7251   relax32 = (mips_relax_branch
7252              /* Don't try branch relaxation within .set nomacro, or within
7253                 .set noat if we use $at for PIC computations.  If it turns
7254                 out that the branch was out-of-range, we'll get an error.  */
7255              && !mips_opts.warn_about_macros
7256              && (mips_opts.at || mips_pic == NO_PIC)
7257              /* Don't relax BPOSGE32/64 or BC1ANY2T/F and BC1ANY4T/F
7258                 as they have no complementing branches.  */
7259              && !(ip->insn_mo->ase & (ASE_MIPS3D | ASE_DSP64 | ASE_DSP)));
7260
7261   if (!HAVE_CODE_COMPRESSION
7262       && address_expr
7263       && relax32
7264       && *reloc_type == BFD_RELOC_16_PCREL_S2
7265       && delayed_branch_p (ip))
7266     {
7267       relaxed_branch = TRUE;
7268       add_relaxed_insn (ip, (relaxed_branch_length
7269                              (NULL, NULL,
7270                               uncond_branch_p (ip) ? -1
7271                               : branch_likely_p (ip) ? 1
7272                               : 0)), 4,
7273                         RELAX_BRANCH_ENCODE
7274                         (AT,
7275                          uncond_branch_p (ip),
7276                          branch_likely_p (ip),
7277                          pinfo & INSN_WRITE_GPR_31,
7278                          0),
7279                         address_expr->X_add_symbol,
7280                         address_expr->X_add_number);
7281       *reloc_type = BFD_RELOC_UNUSED;
7282     }
7283   else if (mips_opts.micromips
7284            && address_expr
7285            && ((relax32 && *reloc_type == BFD_RELOC_16_PCREL_S2)
7286                || *reloc_type > BFD_RELOC_UNUSED)
7287            && (delayed_branch_p (ip) || compact_branch_p (ip))
7288            /* Don't try branch relaxation when users specify
7289               16-bit/32-bit instructions.  */
7290            && !forced_insn_length)
7291     {
7292       bfd_boolean relax16 = *reloc_type > BFD_RELOC_UNUSED;
7293       int type = relax16 ? *reloc_type - BFD_RELOC_UNUSED : 0;
7294       int uncond = uncond_branch_p (ip) ? -1 : 0;
7295       int compact = compact_branch_p (ip);
7296       int al = pinfo & INSN_WRITE_GPR_31;
7297       int length32;
7298
7299       gas_assert (address_expr != NULL);
7300       gas_assert (!mips_relax.sequence);
7301
7302       relaxed_branch = TRUE;
7303       length32 = relaxed_micromips_32bit_branch_length (NULL, NULL, uncond);
7304       add_relaxed_insn (ip, relax32 ? length32 : 4, relax16 ? 2 : 4,
7305                         RELAX_MICROMIPS_ENCODE (type, AT, uncond, compact, al,
7306                                                 relax32, 0, 0),
7307                         address_expr->X_add_symbol,
7308                         address_expr->X_add_number);
7309       *reloc_type = BFD_RELOC_UNUSED;
7310     }
7311   else if (mips_opts.mips16 && *reloc_type > BFD_RELOC_UNUSED)
7312     {
7313       symbolS *symbol;
7314       offsetT offset;
7315
7316       /* We need to set up a variant frag.  */
7317       gas_assert (address_expr != NULL);
7318       /* Pass any `O_symbol' expression unchanged as an `expr_section'
7319          symbol created by `make_expr_symbol' may not get a necessary
7320          external relocation produced.  */
7321       if (address_expr->X_op == O_symbol)
7322         {
7323           symbol = address_expr->X_add_symbol;
7324           offset = address_expr->X_add_number;
7325         }
7326       else
7327         {
7328           symbol = make_expr_symbol (address_expr);
7329           offset = 0;
7330         }
7331       add_relaxed_insn (ip, 4, 0,
7332                         RELAX_MIPS16_ENCODE
7333                         (*reloc_type - BFD_RELOC_UNUSED,
7334                          forced_insn_length == 2, forced_insn_length == 4,
7335                          delayed_branch_p (&history[0]),
7336                          history[0].mips16_absolute_jump_p),
7337                         symbol, offset);
7338     }
7339   else if (mips_opts.mips16 && insn_length (ip) == 2)
7340     {
7341       if (!delayed_branch_p (ip))
7342         /* Make sure there is enough room to swap this instruction with
7343            a following jump instruction.  */
7344         frag_grow (6);
7345       add_fixed_insn (ip);
7346     }
7347   else
7348     {
7349       if (mips_opts.mips16
7350           && mips_opts.noreorder
7351           && delayed_branch_p (&history[0]))
7352         as_warn (_("extended instruction in delay slot"));
7353
7354       if (mips_relax.sequence)
7355         {
7356           /* If we've reached the end of this frag, turn it into a variant
7357              frag and record the information for the instructions we've
7358              written so far.  */
7359           if (frag_room () < 4)
7360             relax_close_frag ();
7361           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (ip);
7362         }
7363
7364       if (mips_relax.sequence != 2)
7365         {
7366           if (mips_macro_warning.first_insn_sizes[0] == 0)
7367             mips_macro_warning.first_insn_sizes[0] = insn_length (ip);
7368           mips_macro_warning.sizes[0] += insn_length (ip);
7369           mips_macro_warning.insns[0]++;
7370         }
7371       if (mips_relax.sequence != 1)
7372         {
7373           if (mips_macro_warning.first_insn_sizes[1] == 0)
7374             mips_macro_warning.first_insn_sizes[1] = insn_length (ip);
7375           mips_macro_warning.sizes[1] += insn_length (ip);
7376           mips_macro_warning.insns[1]++;
7377         }
7378
7379       if (mips_opts.mips16)
7380         {
7381           ip->fixed_p = 1;
7382           ip->mips16_absolute_jump_p = (*reloc_type == BFD_RELOC_MIPS16_JMP);
7383         }
7384       add_fixed_insn (ip);
7385     }
7386
7387   if (!ip->complete_p && *reloc_type < BFD_RELOC_UNUSED)
7388     {
7389       bfd_reloc_code_real_type final_type[3];
7390       reloc_howto_type *howto0;
7391       reloc_howto_type *howto;
7392       int i;
7393
7394       /* Perform any necessary conversion to microMIPS relocations
7395          and find out how many relocations there actually are.  */
7396       for (i = 0; i < 3 && reloc_type[i] != BFD_RELOC_UNUSED; i++)
7397         final_type[i] = micromips_map_reloc (reloc_type[i]);
7398
7399       /* In a compound relocation, it is the final (outermost)
7400          operator that determines the relocated field.  */
7401       howto = howto0 = bfd_reloc_type_lookup (stdoutput, final_type[i - 1]);
7402       if (!howto)
7403         abort ();
7404
7405       if (i > 1)
7406         howto0 = bfd_reloc_type_lookup (stdoutput, final_type[0]);
7407       ip->fixp[0] = fix_new_exp (ip->frag, ip->where,
7408                                  bfd_get_reloc_size (howto),
7409                                  address_expr,
7410                                  howto0 && howto0->pc_relative,
7411                                  final_type[0]);
7412
7413       /* Tag symbols that have a R_MIPS16_26 relocation against them.  */
7414       if (final_type[0] == BFD_RELOC_MIPS16_JMP && ip->fixp[0]->fx_addsy)
7415         *symbol_get_tc (ip->fixp[0]->fx_addsy) = 1;
7416
7417       /* These relocations can have an addend that won't fit in
7418          4 octets for 64bit assembly.  */
7419       if (GPR_SIZE == 64
7420           && ! howto->partial_inplace
7421           && (reloc_type[0] == BFD_RELOC_16
7422               || reloc_type[0] == BFD_RELOC_32
7423               || reloc_type[0] == BFD_RELOC_MIPS_JMP
7424               || reloc_type[0] == BFD_RELOC_GPREL16
7425               || reloc_type[0] == BFD_RELOC_MIPS_LITERAL
7426               || reloc_type[0] == BFD_RELOC_GPREL32
7427               || reloc_type[0] == BFD_RELOC_64
7428               || reloc_type[0] == BFD_RELOC_CTOR
7429               || reloc_type[0] == BFD_RELOC_MIPS_SUB
7430               || reloc_type[0] == BFD_RELOC_MIPS_HIGHEST
7431               || reloc_type[0] == BFD_RELOC_MIPS_HIGHER
7432               || reloc_type[0] == BFD_RELOC_MIPS_SCN_DISP
7433               || reloc_type[0] == BFD_RELOC_MIPS_REL16
7434               || reloc_type[0] == BFD_RELOC_MIPS_RELGOT
7435               || reloc_type[0] == BFD_RELOC_MIPS16_GPREL
7436               || hi16_reloc_p (reloc_type[0])
7437               || lo16_reloc_p (reloc_type[0])))
7438         ip->fixp[0]->fx_no_overflow = 1;
7439
7440       /* These relocations can have an addend that won't fit in 2 octets.  */
7441       if (reloc_type[0] == BFD_RELOC_MICROMIPS_7_PCREL_S1
7442           || reloc_type[0] == BFD_RELOC_MICROMIPS_10_PCREL_S1)
7443         ip->fixp[0]->fx_no_overflow = 1;
7444
7445       if (mips_relax.sequence)
7446         {
7447           if (mips_relax.first_fixup == 0)
7448             mips_relax.first_fixup = ip->fixp[0];
7449         }
7450       else if (reloc_needs_lo_p (*reloc_type))
7451         {
7452           struct mips_hi_fixup *hi_fixup;
7453
7454           /* Reuse the last entry if it already has a matching %lo.  */
7455           hi_fixup = mips_hi_fixup_list;
7456           if (hi_fixup == 0
7457               || !fixup_has_matching_lo_p (hi_fixup->fixp))
7458             {
7459               hi_fixup = XNEW (struct mips_hi_fixup);
7460               hi_fixup->next = mips_hi_fixup_list;
7461               mips_hi_fixup_list = hi_fixup;
7462             }
7463           hi_fixup->fixp = ip->fixp[0];
7464           hi_fixup->seg = now_seg;
7465         }
7466
7467       /* Add fixups for the second and third relocations, if given.
7468          Note that the ABI allows the second relocation to be
7469          against RSS_UNDEF, RSS_GP, RSS_GP0 or RSS_LOC.  At the
7470          moment we only use RSS_UNDEF, but we could add support
7471          for the others if it ever becomes necessary.  */
7472       for (i = 1; i < 3; i++)
7473         if (reloc_type[i] != BFD_RELOC_UNUSED)
7474           {
7475             ip->fixp[i] = fix_new (ip->frag, ip->where,
7476                                    ip->fixp[0]->fx_size, NULL, 0,
7477                                    FALSE, final_type[i]);
7478
7479             /* Use fx_tcbit to mark compound relocs.  */
7480             ip->fixp[0]->fx_tcbit = 1;
7481             ip->fixp[i]->fx_tcbit = 1;
7482           }
7483     }
7484   install_insn (ip);
7485
7486   /* Update the register mask information.  */
7487   mips_gprmask |= gpr_read_mask (ip) | gpr_write_mask (ip);
7488   mips_cprmask[1] |= fpr_read_mask (ip) | fpr_write_mask (ip);
7489
7490   switch (method)
7491     {
7492     case APPEND_ADD:
7493       insert_into_history (0, 1, ip);
7494       break;
7495
7496     case APPEND_ADD_WITH_NOP:
7497       {
7498         struct mips_cl_insn *nop;
7499
7500         insert_into_history (0, 1, ip);
7501         nop = get_delay_slot_nop (ip);
7502         add_fixed_insn (nop);
7503         insert_into_history (0, 1, nop);
7504         if (mips_relax.sequence)
7505           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (nop);
7506       }
7507       break;
7508
7509     case APPEND_ADD_COMPACT:
7510       /* Convert MIPS16 jr/jalr into a "compact" jump.  */
7511       gas_assert (mips_opts.mips16);
7512       ip->insn_opcode |= 0x0080;
7513       find_altered_mips16_opcode (ip);
7514       install_insn (ip);
7515       insert_into_history (0, 1, ip);
7516       break;
7517
7518     case APPEND_SWAP:
7519       {
7520         struct mips_cl_insn delay = history[0];
7521
7522         if (relaxed_branch || delay.frag != ip->frag)
7523           {
7524             /* Add the delay slot instruction to the end of the
7525                current frag and shrink the fixed part of the
7526                original frag.  If the branch occupies the tail of
7527                the latter, move it backwards to cover the gap.  */
7528             delay.frag->fr_fix -= branch_disp;
7529             if (delay.frag == ip->frag)
7530               move_insn (ip, ip->frag, ip->where - branch_disp);
7531             add_fixed_insn (&delay);
7532           }
7533         else
7534           {
7535             /* If this is not a relaxed branch and we are in the
7536                same frag, then just swap the instructions.  */
7537             move_insn (ip, delay.frag, delay.where);
7538             move_insn (&delay, ip->frag, ip->where + insn_length (ip));
7539           }
7540         history[0] = *ip;
7541         delay.fixed_p = 1;
7542         insert_into_history (0, 1, &delay);
7543       }
7544       break;
7545     }
7546
7547   /* If we have just completed an unconditional branch, clear the history.  */
7548   if ((delayed_branch_p (&history[1]) && uncond_branch_p (&history[1]))
7549       || (compact_branch_p (&history[0]) && uncond_branch_p (&history[0])))
7550     {
7551       unsigned int i;
7552
7553       mips_no_prev_insn ();
7554
7555       for (i = 0; i < ARRAY_SIZE (history); i++)
7556         history[i].cleared_p = 1;
7557     }
7558
7559   /* We need to emit a label at the end of branch-likely macros.  */
7560   if (emit_branch_likely_macro)
7561     {
7562       emit_branch_likely_macro = FALSE;
7563       micromips_add_label ();
7564     }
7565
7566   /* We just output an insn, so the next one doesn't have a label.  */
7567   mips_clear_insn_labels ();
7568 }
7569
7570 /* Forget that there was any previous instruction or label.
7571    When BRANCH is true, the branch history is also flushed.  */
7572
7573 static void
7574 mips_no_prev_insn (void)
7575 {
7576   prev_nop_frag = NULL;
7577   insert_into_history (0, ARRAY_SIZE (history), NOP_INSN);
7578   mips_clear_insn_labels ();
7579 }
7580
7581 /* This function must be called before we emit something other than
7582    instructions.  It is like mips_no_prev_insn except that it inserts
7583    any NOPS that might be needed by previous instructions.  */
7584
7585 void
7586 mips_emit_delays (void)
7587 {
7588   if (! mips_opts.noreorder)
7589     {
7590       int nops = nops_for_insn (0, history, NULL);
7591       if (nops > 0)
7592         {
7593           while (nops-- > 0)
7594             add_fixed_insn (NOP_INSN);
7595           mips_move_text_labels ();
7596         }
7597     }
7598   mips_no_prev_insn ();
7599 }
7600
7601 /* Start a (possibly nested) noreorder block.  */
7602
7603 static void
7604 start_noreorder (void)
7605 {
7606   if (mips_opts.noreorder == 0)
7607     {
7608       unsigned int i;
7609       int nops;
7610
7611       /* None of the instructions before the .set noreorder can be moved.  */
7612       for (i = 0; i < ARRAY_SIZE (history); i++)
7613         history[i].fixed_p = 1;
7614
7615       /* Insert any nops that might be needed between the .set noreorder
7616          block and the previous instructions.  We will later remove any
7617          nops that turn out not to be needed.  */
7618       nops = nops_for_insn (0, history, NULL);
7619       if (nops > 0)
7620         {
7621           if (mips_optimize != 0)
7622             {
7623               /* Record the frag which holds the nop instructions, so
7624                  that we can remove them if we don't need them.  */
7625               frag_grow (nops * NOP_INSN_SIZE);
7626               prev_nop_frag = frag_now;
7627               prev_nop_frag_holds = nops;
7628               prev_nop_frag_required = 0;
7629               prev_nop_frag_since = 0;
7630             }
7631
7632           for (; nops > 0; --nops)
7633             add_fixed_insn (NOP_INSN);
7634
7635           /* Move on to a new frag, so that it is safe to simply
7636              decrease the size of prev_nop_frag.  */
7637           frag_wane (frag_now);
7638           frag_new (0);
7639           mips_move_text_labels ();
7640         }
7641       mips_mark_labels ();
7642       mips_clear_insn_labels ();
7643     }
7644   mips_opts.noreorder++;
7645   mips_any_noreorder = 1;
7646 }
7647
7648 /* End a nested noreorder block.  */
7649
7650 static void
7651 end_noreorder (void)
7652 {
7653   mips_opts.noreorder--;
7654   if (mips_opts.noreorder == 0 && prev_nop_frag != NULL)
7655     {
7656       /* Commit to inserting prev_nop_frag_required nops and go back to
7657          handling nop insertion the .set reorder way.  */
7658       prev_nop_frag->fr_fix -= ((prev_nop_frag_holds - prev_nop_frag_required)
7659                                 * NOP_INSN_SIZE);
7660       insert_into_history (prev_nop_frag_since,
7661                            prev_nop_frag_required, NOP_INSN);
7662       prev_nop_frag = NULL;
7663     }
7664 }
7665
7666 /* Sign-extend 32-bit mode constants that have bit 31 set and all
7667    higher bits unset.  */
7668
7669 static void
7670 normalize_constant_expr (expressionS *ex)
7671 {
7672   if (ex->X_op == O_constant
7673       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7674     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7675                         - 0x80000000);
7676 }
7677
7678 /* Sign-extend 32-bit mode address offsets that have bit 31 set and
7679    all higher bits unset.  */
7680
7681 static void
7682 normalize_address_expr (expressionS *ex)
7683 {
7684   if (((ex->X_op == O_constant && HAVE_32BIT_ADDRESSES)
7685         || (ex->X_op == O_symbol && HAVE_32BIT_SYMBOLS))
7686       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7687     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7688                         - 0x80000000);
7689 }
7690
7691 /* Try to match TOKENS against OPCODE, storing the result in INSN.
7692    Return true if the match was successful.
7693
7694    OPCODE_EXTRA is a value that should be ORed into the opcode
7695    (used for VU0 channel suffixes, etc.).  MORE_ALTS is true if
7696    there are more alternatives after OPCODE and SOFT_MATCH is
7697    as for mips_arg_info.  */
7698
7699 static bfd_boolean
7700 match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
7701             struct mips_operand_token *tokens, unsigned int opcode_extra,
7702             bfd_boolean lax_match, bfd_boolean complete_p)
7703 {
7704   const char *args;
7705   struct mips_arg_info arg;
7706   const struct mips_operand *operand;
7707   char c;
7708
7709   imm_expr.X_op = O_absent;
7710   offset_expr.X_op = O_absent;
7711   offset_reloc[0] = BFD_RELOC_UNUSED;
7712   offset_reloc[1] = BFD_RELOC_UNUSED;
7713   offset_reloc[2] = BFD_RELOC_UNUSED;
7714
7715   create_insn (insn, opcode);
7716   /* When no opcode suffix is specified, assume ".xyzw". */
7717   if ((opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0 && opcode_extra == 0)
7718     insn->insn_opcode |= 0xf << mips_vu0_channel_mask.lsb;
7719   else
7720     insn->insn_opcode |= opcode_extra;
7721   memset (&arg, 0, sizeof (arg));
7722   arg.insn = insn;
7723   arg.token = tokens;
7724   arg.argnum = 1;
7725   arg.last_regno = ILLEGAL_REG;
7726   arg.dest_regno = ILLEGAL_REG;
7727   arg.lax_match = lax_match;
7728   for (args = opcode->args;; ++args)
7729     {
7730       if (arg.token->type == OT_END)
7731         {
7732           /* Handle unary instructions in which only one operand is given.
7733              The source is then the same as the destination.  */
7734           if (arg.opnum == 1 && *args == ',')
7735             {
7736               operand = (mips_opts.micromips
7737                          ? decode_micromips_operand (args + 1)
7738                          : decode_mips_operand (args + 1));
7739               if (operand && mips_optional_operand_p (operand))
7740                 {
7741                   arg.token = tokens;
7742                   arg.argnum = 1;
7743                   continue;
7744                 }
7745             }
7746
7747           /* Treat elided base registers as $0.  */
7748           if (strcmp (args, "(b)") == 0)
7749             args += 3;
7750
7751           if (args[0] == '+')
7752             switch (args[1])
7753               {
7754               case 'K':
7755               case 'N':
7756                 /* The register suffix is optional. */
7757                 args += 2;
7758                 break;
7759               }
7760
7761           /* Fail the match if there were too few operands.  */
7762           if (*args)
7763             return FALSE;
7764
7765           /* Successful match.  */
7766           if (!complete_p)
7767             return TRUE;
7768           clear_insn_error ();
7769           if (arg.dest_regno == arg.last_regno
7770               && strncmp (insn->insn_mo->name, "jalr", 4) == 0)
7771             {
7772               if (arg.opnum == 2)
7773                 set_insn_error
7774                   (0, _("source and destination must be different"));
7775               else if (arg.last_regno == 31)
7776                 set_insn_error
7777                   (0, _("a destination register must be supplied"));
7778             }
7779           else if (arg.last_regno == 31
7780                    && (strncmp (insn->insn_mo->name, "bltzal", 6) == 0
7781                        || strncmp (insn->insn_mo->name, "bgezal", 6) == 0))
7782             set_insn_error (0, _("the source register must not be $31"));
7783           check_completed_insn (&arg);
7784           return TRUE;
7785         }
7786
7787       /* Fail the match if the line has too many operands.   */
7788       if (*args == 0)
7789         return FALSE;
7790
7791       /* Handle characters that need to match exactly.  */
7792       if (*args == '(' || *args == ')' || *args == ',')
7793         {
7794           if (match_char (&arg, *args))
7795             continue;
7796           return FALSE;
7797         }
7798       if (*args == '#')
7799         {
7800           ++args;
7801           if (arg.token->type == OT_DOUBLE_CHAR
7802               && arg.token->u.ch == *args)
7803             {
7804               ++arg.token;
7805               continue;
7806             }
7807           return FALSE;
7808         }
7809
7810       /* Handle special macro operands.  Work out the properties of
7811          other operands.  */
7812       arg.opnum += 1;
7813       switch (*args)
7814         {
7815         case '-':
7816           switch (args[1])
7817             {
7818             case 'A':
7819               *offset_reloc = BFD_RELOC_MIPS_19_PCREL_S2;
7820               break;
7821
7822             case 'B':
7823               *offset_reloc = BFD_RELOC_MIPS_18_PCREL_S3;
7824               break;
7825             }
7826           break;
7827
7828         case '+':
7829           switch (args[1])
7830             {
7831             case 'i':
7832               *offset_reloc = BFD_RELOC_MIPS_JMP;
7833               break;
7834
7835             case '\'':
7836               *offset_reloc = BFD_RELOC_MIPS_26_PCREL_S2;
7837               break;
7838
7839             case '\"':
7840               *offset_reloc = BFD_RELOC_MIPS_21_PCREL_S2;
7841               break;
7842             }
7843           break;
7844
7845         case 'I':
7846           if (!match_const_int (&arg, &imm_expr.X_add_number))
7847             return FALSE;
7848           imm_expr.X_op = O_constant;
7849           if (GPR_SIZE == 32)
7850             normalize_constant_expr (&imm_expr);
7851           continue;
7852
7853         case 'A':
7854           if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
7855             {
7856               /* Assume that the offset has been elided and that what
7857                  we saw was a base register.  The match will fail later
7858                  if that assumption turns out to be wrong.  */
7859               offset_expr.X_op = O_constant;
7860               offset_expr.X_add_number = 0;
7861             }
7862           else
7863             {
7864               if (!match_expression (&arg, &offset_expr, offset_reloc))
7865                 return FALSE;
7866               normalize_address_expr (&offset_expr);
7867             }
7868           continue;
7869
7870         case 'F':
7871           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7872                                      8, TRUE))
7873             return FALSE;
7874           continue;
7875
7876         case 'L':
7877           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7878                                      8, FALSE))
7879             return FALSE;
7880           continue;
7881
7882         case 'f':
7883           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7884                                      4, TRUE))
7885             return FALSE;
7886           continue;
7887
7888         case 'l':
7889           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7890                                      4, FALSE))
7891             return FALSE;
7892           continue;
7893
7894         case 'p':
7895           *offset_reloc = BFD_RELOC_16_PCREL_S2;
7896           break;
7897
7898         case 'a':
7899           *offset_reloc = BFD_RELOC_MIPS_JMP;
7900           break;
7901
7902         case 'm':
7903           gas_assert (mips_opts.micromips);
7904           c = args[1];
7905           switch (c)
7906             {
7907             case 'D':
7908             case 'E':
7909               if (!forced_insn_length)
7910                 *offset_reloc = (int) BFD_RELOC_UNUSED + c;
7911               else if (c == 'D')
7912                 *offset_reloc = BFD_RELOC_MICROMIPS_10_PCREL_S1;
7913               else
7914                 *offset_reloc = BFD_RELOC_MICROMIPS_7_PCREL_S1;
7915               break;
7916             }
7917           break;
7918         }
7919
7920       operand = (mips_opts.micromips
7921                  ? decode_micromips_operand (args)
7922                  : decode_mips_operand (args));
7923       if (!operand)
7924         abort ();
7925
7926       /* Skip prefixes.  */
7927       if (*args == '+' || *args == 'm' || *args == '-')
7928         args++;
7929
7930       if (mips_optional_operand_p (operand)
7931           && args[1] == ','
7932           && (arg.token[0].type != OT_REG
7933               || arg.token[1].type == OT_END))
7934         {
7935           /* Assume that the register has been elided and is the
7936              same as the first operand.  */
7937           arg.token = tokens;
7938           arg.argnum = 1;
7939         }
7940
7941       if (!match_operand (&arg, operand))
7942         return FALSE;
7943     }
7944 }
7945
7946 /* Like match_insn, but for MIPS16.  */
7947
7948 static bfd_boolean
7949 match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
7950                    struct mips_operand_token *tokens)
7951 {
7952   const char *args;
7953   const struct mips_operand *operand;
7954   const struct mips_operand *ext_operand;
7955   struct mips_arg_info arg;
7956   int relax_char;
7957
7958   create_insn (insn, opcode);
7959   imm_expr.X_op = O_absent;
7960   offset_expr.X_op = O_absent;
7961   offset_reloc[0] = BFD_RELOC_UNUSED;
7962   offset_reloc[1] = BFD_RELOC_UNUSED;
7963   offset_reloc[2] = BFD_RELOC_UNUSED;
7964   relax_char = 0;
7965
7966   memset (&arg, 0, sizeof (arg));
7967   arg.insn = insn;
7968   arg.token = tokens;
7969   arg.argnum = 1;
7970   arg.last_regno = ILLEGAL_REG;
7971   arg.dest_regno = ILLEGAL_REG;
7972   relax_char = 0;
7973   for (args = opcode->args;; ++args)
7974     {
7975       int c;
7976
7977       if (arg.token->type == OT_END)
7978         {
7979           offsetT value;
7980
7981           /* Handle unary instructions in which only one operand is given.
7982              The source is then the same as the destination.  */
7983           if (arg.opnum == 1 && *args == ',')
7984             {
7985               operand = decode_mips16_operand (args[1], FALSE);
7986               if (operand && mips_optional_operand_p (operand))
7987                 {
7988                   arg.token = tokens;
7989                   arg.argnum = 1;
7990                   continue;
7991                 }
7992             }
7993
7994           /* Fail the match if there were too few operands.  */
7995           if (*args)
7996             return FALSE;
7997
7998           /* Successful match.  Stuff the immediate value in now, if
7999              we can.  */
8000           clear_insn_error ();
8001           if (opcode->pinfo == INSN_MACRO)
8002             {
8003               gas_assert (relax_char == 0 || relax_char == 'p');
8004               gas_assert (*offset_reloc == BFD_RELOC_UNUSED);
8005             }
8006           else if (relax_char
8007                    && offset_expr.X_op == O_constant
8008                    && calculate_reloc (*offset_reloc,
8009                                        offset_expr.X_add_number,
8010                                        &value))
8011             {
8012               mips16_immed (NULL, 0, relax_char, *offset_reloc, value,
8013                             forced_insn_length, &insn->insn_opcode);
8014               offset_expr.X_op = O_absent;
8015               *offset_reloc = BFD_RELOC_UNUSED;
8016             }
8017           else if (relax_char && *offset_reloc != BFD_RELOC_UNUSED)
8018             {
8019               if (forced_insn_length == 2)
8020                 set_insn_error (0, _("invalid unextended operand value"));
8021               forced_insn_length = 4;
8022               insn->insn_opcode |= MIPS16_EXTEND;
8023             }
8024           else if (relax_char)
8025             *offset_reloc = (int) BFD_RELOC_UNUSED + relax_char;
8026
8027           check_completed_insn (&arg);
8028           return TRUE;
8029         }
8030
8031       /* Fail the match if the line has too many operands.   */
8032       if (*args == 0)
8033         return FALSE;
8034
8035       /* Handle characters that need to match exactly.  */
8036       if (*args == '(' || *args == ')' || *args == ',')
8037         {
8038           if (match_char (&arg, *args))
8039             continue;
8040           return FALSE;
8041         }
8042
8043       arg.opnum += 1;
8044       c = *args;
8045       switch (c)
8046         {
8047         case 'p':
8048         case 'q':
8049         case 'A':
8050         case 'B':
8051         case 'E':
8052           relax_char = c;
8053           break;
8054
8055         case 'I':
8056           if (!match_const_int (&arg, &imm_expr.X_add_number))
8057             return FALSE;
8058           imm_expr.X_op = O_constant;
8059           if (GPR_SIZE == 32)
8060             normalize_constant_expr (&imm_expr);
8061           continue;
8062
8063         case 'a':
8064         case 'i':
8065           *offset_reloc = BFD_RELOC_MIPS16_JMP;
8066           insn->insn_opcode <<= 16;
8067           break;
8068         }
8069
8070       operand = decode_mips16_operand (c, FALSE);
8071       if (!operand)
8072         abort ();
8073
8074       /* '6' is a special case.  It is used for BREAK and SDBBP,
8075          whose operands are only meaningful to the software that decodes
8076          them.  This means that there is no architectural reason why
8077          they cannot be prefixed by EXTEND, but in practice,
8078          exception handlers will only look at the instruction
8079          itself.  We therefore allow '6' to be extended when
8080          disassembling but not when assembling.  */
8081       if (operand->type != OP_PCREL && c != '6')
8082         {
8083           ext_operand = decode_mips16_operand (c, TRUE);
8084           if (operand != ext_operand)
8085             {
8086               if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
8087                 {
8088                   offset_expr.X_op = O_constant;
8089                   offset_expr.X_add_number = 0;
8090                   relax_char = c;
8091                   continue;
8092                 }
8093
8094               /* We need the OT_INTEGER check because some MIPS16
8095                  immediate variants are listed before the register ones.  */
8096               if (arg.token->type != OT_INTEGER
8097                   || !match_expression (&arg, &offset_expr, offset_reloc))
8098                 return FALSE;
8099
8100               /* '8' is used for SLTI(U) and has traditionally not
8101                  been allowed to take relocation operators.  */
8102               if (offset_reloc[0] != BFD_RELOC_UNUSED
8103                   && (ext_operand->size != 16 || c == '8'))
8104                 return FALSE;
8105
8106               relax_char = c;
8107               continue;
8108             }
8109         }
8110
8111       if (mips_optional_operand_p (operand)
8112           && args[1] == ','
8113           && (arg.token[0].type != OT_REG
8114               || arg.token[1].type == OT_END))
8115         {
8116           /* Assume that the register has been elided and is the
8117              same as the first operand.  */
8118           arg.token = tokens;
8119           arg.argnum = 1;
8120         }
8121
8122       if (!match_operand (&arg, operand))
8123         return FALSE;
8124     }
8125 }
8126
8127 /* Record that the current instruction is invalid for the current ISA.  */
8128
8129 static void
8130 match_invalid_for_isa (void)
8131 {
8132   set_insn_error_ss
8133     (0, _("opcode not supported on this processor: %s (%s)"),
8134      mips_cpu_info_from_arch (mips_opts.arch)->name,
8135      mips_cpu_info_from_isa (mips_opts.isa)->name);
8136 }
8137
8138 /* Try to match TOKENS against a series of opcode entries, starting at FIRST.
8139    Return true if a definite match or failure was found, storing any match
8140    in INSN.  OPCODE_EXTRA is a value that should be ORed into the opcode
8141    (to handle things like VU0 suffixes).  LAX_MATCH is true if we have already
8142    tried and failed to match under normal conditions and now want to try a
8143    more relaxed match.  */
8144
8145 static bfd_boolean
8146 match_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
8147              const struct mips_opcode *past, struct mips_operand_token *tokens,
8148              int opcode_extra, bfd_boolean lax_match)
8149 {
8150   const struct mips_opcode *opcode;
8151   const struct mips_opcode *invalid_delay_slot;
8152   bfd_boolean seen_valid_for_isa, seen_valid_for_size;
8153
8154   /* Search for a match, ignoring alternatives that don't satisfy the
8155      current ISA or forced_length.  */
8156   invalid_delay_slot = 0;
8157   seen_valid_for_isa = FALSE;
8158   seen_valid_for_size = FALSE;
8159   opcode = first;
8160   do
8161     {
8162       gas_assert (strcmp (opcode->name, first->name) == 0);
8163       if (is_opcode_valid (opcode))
8164         {
8165           seen_valid_for_isa = TRUE;
8166           if (is_size_valid (opcode))
8167             {
8168               bfd_boolean delay_slot_ok;
8169
8170               seen_valid_for_size = TRUE;
8171               delay_slot_ok = is_delay_slot_valid (opcode);
8172               if (match_insn (insn, opcode, tokens, opcode_extra,
8173                               lax_match, delay_slot_ok))
8174                 {
8175                   if (!delay_slot_ok)
8176                     {
8177                       if (!invalid_delay_slot)
8178                         invalid_delay_slot = opcode;
8179                     }
8180                   else
8181                     return TRUE;
8182                 }
8183             }
8184         }
8185       ++opcode;
8186     }
8187   while (opcode < past && strcmp (opcode->name, first->name) == 0);
8188
8189   /* If the only matches we found had the wrong length for the delay slot,
8190      pick the first such match.  We'll issue an appropriate warning later.  */
8191   if (invalid_delay_slot)
8192     {
8193       if (match_insn (insn, invalid_delay_slot, tokens, opcode_extra,
8194                       lax_match, TRUE))
8195         return TRUE;
8196       abort ();
8197     }
8198
8199   /* Handle the case where we didn't try to match an instruction because
8200      all the alternatives were incompatible with the current ISA.  */
8201   if (!seen_valid_for_isa)
8202     {
8203       match_invalid_for_isa ();
8204       return TRUE;
8205     }
8206
8207   /* Handle the case where we didn't try to match an instruction because
8208      all the alternatives were of the wrong size.  */
8209   if (!seen_valid_for_size)
8210     {
8211       if (mips_opts.insn32)
8212         set_insn_error (0, _("opcode not supported in the `insn32' mode"));
8213       else
8214         set_insn_error_i
8215           (0, _("unrecognized %d-bit version of microMIPS opcode"),
8216            8 * forced_insn_length);
8217       return TRUE;
8218     }
8219
8220   return FALSE;
8221 }
8222
8223 /* Like match_insns, but for MIPS16.  */
8224
8225 static bfd_boolean
8226 match_mips16_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
8227                     struct mips_operand_token *tokens)
8228 {
8229   const struct mips_opcode *opcode;
8230   bfd_boolean seen_valid_for_isa;
8231
8232   /* Search for a match, ignoring alternatives that don't satisfy the
8233      current ISA.  There are no separate entries for extended forms so
8234      we deal with forced_length later.  */
8235   seen_valid_for_isa = FALSE;
8236   opcode = first;
8237   do
8238     {
8239       gas_assert (strcmp (opcode->name, first->name) == 0);
8240       if (is_opcode_valid_16 (opcode))
8241         {
8242           seen_valid_for_isa = TRUE;
8243           if (match_mips16_insn (insn, opcode, tokens))
8244             return TRUE;
8245         }
8246       ++opcode;
8247     }
8248   while (opcode < &mips16_opcodes[bfd_mips16_num_opcodes]
8249          && strcmp (opcode->name, first->name) == 0);
8250
8251   /* Handle the case where we didn't try to match an instruction because
8252      all the alternatives were incompatible with the current ISA.  */
8253   if (!seen_valid_for_isa)
8254     {
8255       match_invalid_for_isa ();
8256       return TRUE;
8257     }
8258
8259   return FALSE;
8260 }
8261
8262 /* Set up global variables for the start of a new macro.  */
8263
8264 static void
8265 macro_start (void)
8266 {
8267   memset (&mips_macro_warning.sizes, 0, sizeof (mips_macro_warning.sizes));
8268   memset (&mips_macro_warning.first_insn_sizes, 0,
8269           sizeof (mips_macro_warning.first_insn_sizes));
8270   memset (&mips_macro_warning.insns, 0, sizeof (mips_macro_warning.insns));
8271   mips_macro_warning.delay_slot_p = (mips_opts.noreorder
8272                                      && delayed_branch_p (&history[0]));
8273   switch (history[0].insn_mo->pinfo2
8274           & (INSN2_BRANCH_DELAY_32BIT | INSN2_BRANCH_DELAY_16BIT))
8275     {
8276     case INSN2_BRANCH_DELAY_32BIT:
8277       mips_macro_warning.delay_slot_length = 4;
8278       break;
8279     case INSN2_BRANCH_DELAY_16BIT:
8280       mips_macro_warning.delay_slot_length = 2;
8281       break;
8282     default:
8283       mips_macro_warning.delay_slot_length = 0;
8284       break;
8285     }
8286   mips_macro_warning.first_frag = NULL;
8287 }
8288
8289 /* Given that a macro is longer than one instruction or of the wrong size,
8290    return the appropriate warning for it.  Return null if no warning is
8291    needed.  SUBTYPE is a bitmask of RELAX_DELAY_SLOT, RELAX_DELAY_SLOT_16BIT,
8292    RELAX_DELAY_SLOT_SIZE_FIRST, RELAX_DELAY_SLOT_SIZE_SECOND,
8293    and RELAX_NOMACRO.  */
8294
8295 static const char *
8296 macro_warning (relax_substateT subtype)
8297 {
8298   if (subtype & RELAX_DELAY_SLOT)
8299     return _("macro instruction expanded into multiple instructions"
8300              " in a branch delay slot");
8301   else if (subtype & RELAX_NOMACRO)
8302     return _("macro instruction expanded into multiple instructions");
8303   else if (subtype & (RELAX_DELAY_SLOT_SIZE_FIRST
8304                       | RELAX_DELAY_SLOT_SIZE_SECOND))
8305     return ((subtype & RELAX_DELAY_SLOT_16BIT)
8306             ? _("macro instruction expanded into a wrong size instruction"
8307                 " in a 16-bit branch delay slot")
8308             : _("macro instruction expanded into a wrong size instruction"
8309                 " in a 32-bit branch delay slot"));
8310   else
8311     return 0;
8312 }
8313
8314 /* Finish up a macro.  Emit warnings as appropriate.  */
8315
8316 static void
8317 macro_end (void)
8318 {
8319   /* Relaxation warning flags.  */
8320   relax_substateT subtype = 0;
8321
8322   /* Check delay slot size requirements.  */
8323   if (mips_macro_warning.delay_slot_length == 2)
8324     subtype |= RELAX_DELAY_SLOT_16BIT;
8325   if (mips_macro_warning.delay_slot_length != 0)
8326     {
8327       if (mips_macro_warning.delay_slot_length
8328           != mips_macro_warning.first_insn_sizes[0])
8329         subtype |= RELAX_DELAY_SLOT_SIZE_FIRST;
8330       if (mips_macro_warning.delay_slot_length
8331           != mips_macro_warning.first_insn_sizes[1])
8332         subtype |= RELAX_DELAY_SLOT_SIZE_SECOND;
8333     }
8334
8335   /* Check instruction count requirements.  */
8336   if (mips_macro_warning.insns[0] > 1 || mips_macro_warning.insns[1] > 1)
8337     {
8338       if (mips_macro_warning.insns[1] > mips_macro_warning.insns[0])
8339         subtype |= RELAX_SECOND_LONGER;
8340       if (mips_opts.warn_about_macros)
8341         subtype |= RELAX_NOMACRO;
8342       if (mips_macro_warning.delay_slot_p)
8343         subtype |= RELAX_DELAY_SLOT;
8344     }
8345
8346   /* If both alternatives fail to fill a delay slot correctly,
8347      emit the warning now.  */
8348   if ((subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0
8349       && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0)
8350     {
8351       relax_substateT s;
8352       const char *msg;
8353
8354       s = subtype & (RELAX_DELAY_SLOT_16BIT
8355                      | RELAX_DELAY_SLOT_SIZE_FIRST
8356                      | RELAX_DELAY_SLOT_SIZE_SECOND);
8357       msg = macro_warning (s);
8358       if (msg != NULL)
8359         as_warn ("%s", msg);
8360       subtype &= ~s;
8361     }
8362
8363   /* If both implementations are longer than 1 instruction, then emit the
8364      warning now.  */
8365   if (mips_macro_warning.insns[0] > 1 && mips_macro_warning.insns[1] > 1)
8366     {
8367       relax_substateT s;
8368       const char *msg;
8369
8370       s = subtype & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT);
8371       msg = macro_warning (s);
8372       if (msg != NULL)
8373         as_warn ("%s", msg);
8374       subtype &= ~s;
8375     }
8376
8377   /* If any flags still set, then one implementation might need a warning
8378      and the other either will need one of a different kind or none at all.
8379      Pass any remaining flags over to relaxation.  */
8380   if (mips_macro_warning.first_frag != NULL)
8381     mips_macro_warning.first_frag->fr_subtype |= subtype;
8382 }
8383
8384 /* Instruction operand formats used in macros that vary between
8385    standard MIPS and microMIPS code.  */
8386
8387 static const char * const brk_fmt[2][2] = { { "c", "c" }, { "mF", "c" } };
8388 static const char * const cop12_fmt[2] = { "E,o(b)", "E,~(b)" };
8389 static const char * const jalr_fmt[2] = { "d,s", "t,s" };
8390 static const char * const lui_fmt[2] = { "t,u", "s,u" };
8391 static const char * const mem12_fmt[2] = { "t,o(b)", "t,~(b)" };
8392 static const char * const mfhl_fmt[2][2] = { { "d", "d" }, { "mj", "s" } };
8393 static const char * const shft_fmt[2] = { "d,w,<", "t,r,<" };
8394 static const char * const trap_fmt[2] = { "s,t,q", "s,t,|" };
8395
8396 #define BRK_FMT (brk_fmt[mips_opts.micromips][mips_opts.insn32])
8397 #define COP12_FMT (ISA_IS_R6 (mips_opts.isa) ? "E,+:(d)" \
8398                                              : cop12_fmt[mips_opts.micromips])
8399 #define JALR_FMT (jalr_fmt[mips_opts.micromips])
8400 #define LUI_FMT (lui_fmt[mips_opts.micromips])
8401 #define MEM12_FMT (mem12_fmt[mips_opts.micromips])
8402 #define LL_SC_FMT (ISA_IS_R6 (mips_opts.isa) ? "t,+j(b)" \
8403                                              : mem12_fmt[mips_opts.micromips])
8404 #define MFHL_FMT (mfhl_fmt[mips_opts.micromips][mips_opts.insn32])
8405 #define SHFT_FMT (shft_fmt[mips_opts.micromips])
8406 #define TRAP_FMT (trap_fmt[mips_opts.micromips])
8407
8408 /* Read a macro's relocation codes from *ARGS and store them in *R.
8409    The first argument in *ARGS will be either the code for a single
8410    relocation or -1 followed by the three codes that make up a
8411    composite relocation.  */
8412
8413 static void
8414 macro_read_relocs (va_list *args, bfd_reloc_code_real_type *r)
8415 {
8416   int i, next;
8417
8418   next = va_arg (*args, int);
8419   if (next >= 0)
8420     r[0] = (bfd_reloc_code_real_type) next;
8421   else
8422     {
8423       for (i = 0; i < 3; i++)
8424         r[i] = (bfd_reloc_code_real_type) va_arg (*args, int);
8425       /* This function is only used for 16-bit relocation fields.
8426          To make the macro code simpler, treat an unrelocated value
8427          in the same way as BFD_RELOC_LO16.  */
8428       if (r[0] == BFD_RELOC_UNUSED)
8429         r[0] = BFD_RELOC_LO16;
8430     }
8431 }
8432
8433 /* Build an instruction created by a macro expansion.  This is passed
8434    a pointer to the count of instructions created so far, an
8435    expression, the name of the instruction to build, an operand format
8436    string, and corresponding arguments.  */
8437
8438 static void
8439 macro_build (expressionS *ep, const char *name, const char *fmt, ...)
8440 {
8441   const struct mips_opcode *mo = NULL;
8442   bfd_reloc_code_real_type r[3];
8443   const struct mips_opcode *amo;
8444   const struct mips_operand *operand;
8445   struct hash_control *hash;
8446   struct mips_cl_insn insn;
8447   va_list args;
8448   unsigned int uval;
8449
8450   va_start (args, fmt);
8451
8452   if (mips_opts.mips16)
8453     {
8454       mips16_macro_build (ep, name, fmt, &args);
8455       va_end (args);
8456       return;
8457     }
8458
8459   r[0] = BFD_RELOC_UNUSED;
8460   r[1] = BFD_RELOC_UNUSED;
8461   r[2] = BFD_RELOC_UNUSED;
8462   hash = mips_opts.micromips ? micromips_op_hash : op_hash;
8463   amo = (struct mips_opcode *) hash_find (hash, name);
8464   gas_assert (amo);
8465   gas_assert (strcmp (name, amo->name) == 0);
8466
8467   do
8468     {
8469       /* Search until we get a match for NAME.  It is assumed here that
8470          macros will never generate MDMX, MIPS-3D, or MT instructions.
8471          We try to match an instruction that fulfils the branch delay
8472          slot instruction length requirement (if any) of the previous
8473          instruction.  While doing this we record the first instruction
8474          seen that matches all the other conditions and use it anyway
8475          if the requirement cannot be met; we will issue an appropriate
8476          warning later on.  */
8477       if (strcmp (fmt, amo->args) == 0
8478           && amo->pinfo != INSN_MACRO
8479           && is_opcode_valid (amo)
8480           && is_size_valid (amo))
8481         {
8482           if (is_delay_slot_valid (amo))
8483             {
8484               mo = amo;
8485               break;
8486             }
8487           else if (!mo)
8488             mo = amo;
8489         }
8490
8491       ++amo;
8492       gas_assert (amo->name);
8493     }
8494   while (strcmp (name, amo->name) == 0);
8495
8496   gas_assert (mo);
8497   create_insn (&insn, mo);
8498   for (; *fmt; ++fmt)
8499     {
8500       switch (*fmt)
8501         {
8502         case ',':
8503         case '(':
8504         case ')':
8505         case 'z':
8506           break;
8507
8508         case 'i':
8509         case 'j':
8510           macro_read_relocs (&args, r);
8511           gas_assert (*r == BFD_RELOC_GPREL16
8512                       || *r == BFD_RELOC_MIPS_HIGHER
8513                       || *r == BFD_RELOC_HI16_S
8514                       || *r == BFD_RELOC_LO16
8515                       || *r == BFD_RELOC_MIPS_GOT_OFST);
8516           break;
8517
8518         case 'o':
8519           macro_read_relocs (&args, r);
8520           break;
8521
8522         case 'u':
8523           macro_read_relocs (&args, r);
8524           gas_assert (ep != NULL
8525                       && (ep->X_op == O_constant
8526                           || (ep->X_op == O_symbol
8527                               && (*r == BFD_RELOC_MIPS_HIGHEST
8528                                   || *r == BFD_RELOC_HI16_S
8529                                   || *r == BFD_RELOC_HI16
8530                                   || *r == BFD_RELOC_GPREL16
8531                                   || *r == BFD_RELOC_MIPS_GOT_HI16
8532                                   || *r == BFD_RELOC_MIPS_CALL_HI16))));
8533           break;
8534
8535         case 'p':
8536           gas_assert (ep != NULL);
8537
8538           /*
8539            * This allows macro() to pass an immediate expression for
8540            * creating short branches without creating a symbol.
8541            *
8542            * We don't allow branch relaxation for these branches, as
8543            * they should only appear in ".set nomacro" anyway.
8544            */
8545           if (ep->X_op == O_constant)
8546             {
8547               /* For microMIPS we always use relocations for branches.
8548                  So we should not resolve immediate values.  */
8549               gas_assert (!mips_opts.micromips);
8550
8551               if ((ep->X_add_number & 3) != 0)
8552                 as_bad (_("branch to misaligned address (0x%lx)"),
8553                         (unsigned long) ep->X_add_number);
8554               if ((ep->X_add_number + 0x20000) & ~0x3ffff)
8555                 as_bad (_("branch address range overflow (0x%lx)"),
8556                         (unsigned long) ep->X_add_number);
8557               insn.insn_opcode |= (ep->X_add_number >> 2) & 0xffff;
8558               ep = NULL;
8559             }
8560           else
8561             *r = BFD_RELOC_16_PCREL_S2;
8562           break;
8563
8564         case 'a':
8565           gas_assert (ep != NULL);
8566           *r = BFD_RELOC_MIPS_JMP;
8567           break;
8568
8569         default:
8570           operand = (mips_opts.micromips
8571                      ? decode_micromips_operand (fmt)
8572                      : decode_mips_operand (fmt));
8573           if (!operand)
8574             abort ();
8575
8576           uval = va_arg (args, int);
8577           if (operand->type == OP_CLO_CLZ_DEST)
8578             uval |= (uval << 5);
8579           insn_insert_operand (&insn, operand, uval);
8580
8581           if (*fmt == '+' || *fmt == 'm' || *fmt == '-')
8582             ++fmt;
8583           break;
8584         }
8585     }
8586   va_end (args);
8587   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
8588
8589   append_insn (&insn, ep, r, TRUE);
8590 }
8591
8592 static void
8593 mips16_macro_build (expressionS *ep, const char *name, const char *fmt,
8594                     va_list *args)
8595 {
8596   struct mips_opcode *mo;
8597   struct mips_cl_insn insn;
8598   const struct mips_operand *operand;
8599   bfd_reloc_code_real_type r[3]
8600     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
8601
8602   mo = (struct mips_opcode *) hash_find (mips16_op_hash, name);
8603   gas_assert (mo);
8604   gas_assert (strcmp (name, mo->name) == 0);
8605
8606   while (strcmp (fmt, mo->args) != 0 || mo->pinfo == INSN_MACRO)
8607     {
8608       ++mo;
8609       gas_assert (mo->name);
8610       gas_assert (strcmp (name, mo->name) == 0);
8611     }
8612
8613   create_insn (&insn, mo);
8614   for (; *fmt; ++fmt)
8615     {
8616       int c;
8617
8618       c = *fmt;
8619       switch (c)
8620         {
8621         case ',':
8622         case '(':
8623         case ')':
8624           break;
8625
8626         case '0':
8627         case 'S':
8628         case 'P':
8629         case 'R':
8630           break;
8631
8632         case '<':
8633         case '>':
8634         case '4':
8635         case '5':
8636         case 'H':
8637         case 'W':
8638         case 'D':
8639         case 'j':
8640         case '8':
8641         case 'V':
8642         case 'C':
8643         case 'U':
8644         case 'k':
8645         case 'K':
8646         case 'p':
8647         case 'q':
8648           {
8649             offsetT value;
8650
8651             gas_assert (ep != NULL);
8652
8653             if (ep->X_op != O_constant)
8654               *r = (int) BFD_RELOC_UNUSED + c;
8655             else if (calculate_reloc (*r, ep->X_add_number, &value))
8656               {
8657                 mips16_immed (NULL, 0, c, *r, value, 0, &insn.insn_opcode);
8658                 ep = NULL;
8659                 *r = BFD_RELOC_UNUSED;
8660               }
8661           }
8662           break;
8663
8664         default:
8665           operand = decode_mips16_operand (c, FALSE);
8666           if (!operand)
8667             abort ();
8668
8669           insn_insert_operand (&insn, operand, va_arg (*args, int));
8670           break;
8671         }
8672     }
8673
8674   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
8675
8676   append_insn (&insn, ep, r, TRUE);
8677 }
8678
8679 /*
8680  * Generate a "jalr" instruction with a relocation hint to the called
8681  * function.  This occurs in NewABI PIC code.
8682  */
8683 static void
8684 macro_build_jalr (expressionS *ep, int cprestore)
8685 {
8686   static const bfd_reloc_code_real_type jalr_relocs[2]
8687     = { BFD_RELOC_MIPS_JALR, BFD_RELOC_MICROMIPS_JALR };
8688   bfd_reloc_code_real_type jalr_reloc = jalr_relocs[mips_opts.micromips];
8689   const char *jalr;
8690   char *f = NULL;
8691
8692   if (MIPS_JALR_HINT_P (ep))
8693     {
8694       frag_grow (8);
8695       f = frag_more (0);
8696     }
8697   if (mips_opts.micromips)
8698     {
8699       jalr = ((mips_opts.noreorder && !cprestore) || mips_opts.insn32
8700               ? "jalr" : "jalrs");
8701       if (MIPS_JALR_HINT_P (ep)
8702           || mips_opts.insn32
8703           || (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
8704         macro_build (NULL, jalr, "t,s", RA, PIC_CALL_REG);
8705       else
8706         macro_build (NULL, jalr, "mj", PIC_CALL_REG);
8707     }
8708   else
8709     macro_build (NULL, "jalr", "d,s", RA, PIC_CALL_REG);
8710   if (MIPS_JALR_HINT_P (ep))
8711     fix_new_exp (frag_now, f - frag_now->fr_literal, 4, ep, FALSE, jalr_reloc);
8712 }
8713
8714 /*
8715  * Generate a "lui" instruction.
8716  */
8717 static void
8718 macro_build_lui (expressionS *ep, int regnum)
8719 {
8720   gas_assert (! mips_opts.mips16);
8721
8722   if (ep->X_op != O_constant)
8723     {
8724       gas_assert (ep->X_op == O_symbol);
8725       /* _gp_disp is a special case, used from s_cpload.
8726          __gnu_local_gp is used if mips_no_shared.  */
8727       gas_assert (mips_pic == NO_PIC
8728               || (! HAVE_NEWABI
8729                   && strcmp (S_GET_NAME (ep->X_add_symbol), "_gp_disp") == 0)
8730               || (! mips_in_shared
8731                   && strcmp (S_GET_NAME (ep->X_add_symbol),
8732                              "__gnu_local_gp") == 0));
8733     }
8734
8735   macro_build (ep, "lui", LUI_FMT, regnum, BFD_RELOC_HI16_S);
8736 }
8737
8738 /* Generate a sequence of instructions to do a load or store from a constant
8739    offset off of a base register (breg) into/from a target register (treg),
8740    using AT if necessary.  */
8741 static void
8742 macro_build_ldst_constoffset (expressionS *ep, const char *op,
8743                               int treg, int breg, int dbl)
8744 {
8745   gas_assert (ep->X_op == O_constant);
8746
8747   /* Sign-extending 32-bit constants makes their handling easier.  */
8748   if (!dbl)
8749     normalize_constant_expr (ep);
8750
8751   /* Right now, this routine can only handle signed 32-bit constants.  */
8752   if (! IS_SEXT_32BIT_NUM(ep->X_add_number + 0x8000))
8753     as_warn (_("operand overflow"));
8754
8755   if (IS_SEXT_16BIT_NUM(ep->X_add_number))
8756     {
8757       /* Signed 16-bit offset will fit in the op.  Easy!  */
8758       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, breg);
8759     }
8760   else
8761     {
8762       /* 32-bit offset, need multiple instructions and AT, like:
8763            lui      $tempreg,const_hi       (BFD_RELOC_HI16_S)
8764            addu     $tempreg,$tempreg,$breg
8765            <op>     $treg,const_lo($tempreg)   (BFD_RELOC_LO16)
8766          to handle the complete offset.  */
8767       macro_build_lui (ep, AT);
8768       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
8769       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, AT);
8770
8771       if (!mips_opts.at)
8772         as_bad (_("macro used $at after \".set noat\""));
8773     }
8774 }
8775
8776 /*                      set_at()
8777  * Generates code to set the $at register to true (one)
8778  * if reg is less than the immediate expression.
8779  */
8780 static void
8781 set_at (int reg, int unsignedp)
8782 {
8783   if (imm_expr.X_add_number >= -0x8000
8784       && imm_expr.X_add_number < 0x8000)
8785     macro_build (&imm_expr, unsignedp ? "sltiu" : "slti", "t,r,j",
8786                  AT, reg, BFD_RELOC_LO16);
8787   else
8788     {
8789       load_register (AT, &imm_expr, GPR_SIZE == 64);
8790       macro_build (NULL, unsignedp ? "sltu" : "slt", "d,v,t", AT, reg, AT);
8791     }
8792 }
8793
8794 /* Count the leading zeroes by performing a binary chop. This is a
8795    bulky bit of source, but performance is a LOT better for the
8796    majority of values than a simple loop to count the bits:
8797        for (lcnt = 0; (lcnt < 32); lcnt++)
8798          if ((v) & (1 << (31 - lcnt)))
8799            break;
8800   However it is not code size friendly, and the gain will drop a bit
8801   on certain cached systems.
8802 */
8803 #define COUNT_TOP_ZEROES(v)             \
8804   (((v) & ~0xffff) == 0                 \
8805    ? ((v) & ~0xff) == 0                 \
8806      ? ((v) & ~0xf) == 0                \
8807        ? ((v) & ~0x3) == 0              \
8808          ? ((v) & ~0x1) == 0            \
8809            ? !(v)                       \
8810              ? 32                       \
8811              : 31                       \
8812            : 30                         \
8813          : ((v) & ~0x7) == 0            \
8814            ? 29                         \
8815            : 28                         \
8816        : ((v) & ~0x3f) == 0             \
8817          ? ((v) & ~0x1f) == 0           \
8818            ? 27                         \
8819            : 26                         \
8820          : ((v) & ~0x7f) == 0           \
8821            ? 25                         \
8822            : 24                         \
8823      : ((v) & ~0xfff) == 0              \
8824        ? ((v) & ~0x3ff) == 0            \
8825          ? ((v) & ~0x1ff) == 0          \
8826            ? 23                         \
8827            : 22                         \
8828          : ((v) & ~0x7ff) == 0          \
8829            ? 21                         \
8830            : 20                         \
8831        : ((v) & ~0x3fff) == 0           \
8832          ? ((v) & ~0x1fff) == 0         \
8833            ? 19                         \
8834            : 18                         \
8835          : ((v) & ~0x7fff) == 0         \
8836            ? 17                         \
8837            : 16                         \
8838    : ((v) & ~0xffffff) == 0             \
8839      ? ((v) & ~0xfffff) == 0            \
8840        ? ((v) & ~0x3ffff) == 0          \
8841          ? ((v) & ~0x1ffff) == 0        \
8842            ? 15                         \
8843            : 14                         \
8844          : ((v) & ~0x7ffff) == 0        \
8845            ? 13                         \
8846            : 12                         \
8847        : ((v) & ~0x3fffff) == 0         \
8848          ? ((v) & ~0x1fffff) == 0       \
8849            ? 11                         \
8850            : 10                         \
8851          : ((v) & ~0x7fffff) == 0       \
8852            ? 9                          \
8853            : 8                          \
8854      : ((v) & ~0xfffffff) == 0          \
8855        ? ((v) & ~0x3ffffff) == 0        \
8856          ? ((v) & ~0x1ffffff) == 0      \
8857            ? 7                          \
8858            : 6                          \
8859          : ((v) & ~0x7ffffff) == 0      \
8860            ? 5                          \
8861            : 4                          \
8862        : ((v) & ~0x3fffffff) == 0       \
8863          ? ((v) & ~0x1fffffff) == 0     \
8864            ? 3                          \
8865            : 2                          \
8866          : ((v) & ~0x7fffffff) == 0     \
8867            ? 1                          \
8868            : 0)
8869
8870 /*                      load_register()
8871  *  This routine generates the least number of instructions necessary to load
8872  *  an absolute expression value into a register.
8873  */
8874 static void
8875 load_register (int reg, expressionS *ep, int dbl)
8876 {
8877   int freg;
8878   expressionS hi32, lo32;
8879
8880   if (ep->X_op != O_big)
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       if (IS_SEXT_16BIT_NUM (ep->X_add_number))
8889         {
8890           /* We can handle 16 bit signed values with an addiu to
8891              $zero.  No need to ever use daddiu here, since $zero and
8892              the result are always correct in 32 bit mode.  */
8893           macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8894           return;
8895         }
8896       else if (ep->X_add_number >= 0 && ep->X_add_number < 0x10000)
8897         {
8898           /* We can handle 16 bit unsigned values with an ori to
8899              $zero.  */
8900           macro_build (ep, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
8901           return;
8902         }
8903       else if ((IS_SEXT_32BIT_NUM (ep->X_add_number)))
8904         {
8905           /* 32 bit values require an lui.  */
8906           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
8907           if ((ep->X_add_number & 0xffff) != 0)
8908             macro_build (ep, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
8909           return;
8910         }
8911     }
8912
8913   /* The value is larger than 32 bits.  */
8914
8915   if (!dbl || GPR_SIZE == 32)
8916     {
8917       char value[32];
8918
8919       sprintf_vma (value, ep->X_add_number);
8920       as_bad (_("number (0x%s) larger than 32 bits"), value);
8921       macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8922       return;
8923     }
8924
8925   if (ep->X_op != O_big)
8926     {
8927       hi32 = *ep;
8928       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
8929       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
8930       hi32.X_add_number &= 0xffffffff;
8931       lo32 = *ep;
8932       lo32.X_add_number &= 0xffffffff;
8933     }
8934   else
8935     {
8936       gas_assert (ep->X_add_number > 2);
8937       if (ep->X_add_number == 3)
8938         generic_bignum[3] = 0;
8939       else if (ep->X_add_number > 4)
8940         as_bad (_("number larger than 64 bits"));
8941       lo32.X_op = O_constant;
8942       lo32.X_add_number = generic_bignum[0] + (generic_bignum[1] << 16);
8943       hi32.X_op = O_constant;
8944       hi32.X_add_number = generic_bignum[2] + (generic_bignum[3] << 16);
8945     }
8946
8947   if (hi32.X_add_number == 0)
8948     freg = 0;
8949   else
8950     {
8951       int shift, bit;
8952       unsigned long hi, lo;
8953
8954       if (hi32.X_add_number == (offsetT) 0xffffffff)
8955         {
8956           if ((lo32.X_add_number & 0xffff8000) == 0xffff8000)
8957             {
8958               macro_build (&lo32, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8959               return;
8960             }
8961           if (lo32.X_add_number & 0x80000000)
8962             {
8963               macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
8964               if (lo32.X_add_number & 0xffff)
8965                 macro_build (&lo32, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
8966               return;
8967             }
8968         }
8969
8970       /* Check for 16bit shifted constant.  We know that hi32 is
8971          non-zero, so start the mask on the first bit of the hi32
8972          value.  */
8973       shift = 17;
8974       do
8975         {
8976           unsigned long himask, lomask;
8977
8978           if (shift < 32)
8979             {
8980               himask = 0xffff >> (32 - shift);
8981               lomask = (0xffff << shift) & 0xffffffff;
8982             }
8983           else
8984             {
8985               himask = 0xffff << (shift - 32);
8986               lomask = 0;
8987             }
8988           if ((hi32.X_add_number & ~(offsetT) himask) == 0
8989               && (lo32.X_add_number & ~(offsetT) lomask) == 0)
8990             {
8991               expressionS tmp;
8992
8993               tmp.X_op = O_constant;
8994               if (shift < 32)
8995                 tmp.X_add_number = ((hi32.X_add_number << (32 - shift))
8996                                     | (lo32.X_add_number >> shift));
8997               else
8998                 tmp.X_add_number = hi32.X_add_number >> (shift - 32);
8999               macro_build (&tmp, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
9000               macro_build (NULL, (shift >= 32) ? "dsll32" : "dsll", SHFT_FMT,
9001                            reg, reg, (shift >= 32) ? shift - 32 : shift);
9002               return;
9003             }
9004           ++shift;
9005         }
9006       while (shift <= (64 - 16));
9007
9008       /* Find the bit number of the lowest one bit, and store the
9009          shifted value in hi/lo.  */
9010       hi = (unsigned long) (hi32.X_add_number & 0xffffffff);
9011       lo = (unsigned long) (lo32.X_add_number & 0xffffffff);
9012       if (lo != 0)
9013         {
9014           bit = 0;
9015           while ((lo & 1) == 0)
9016             {
9017               lo >>= 1;
9018               ++bit;
9019             }
9020           lo |= (hi & (((unsigned long) 1 << bit) - 1)) << (32 - bit);
9021           hi >>= bit;
9022         }
9023       else
9024         {
9025           bit = 32;
9026           while ((hi & 1) == 0)
9027             {
9028               hi >>= 1;
9029               ++bit;
9030             }
9031           lo = hi;
9032           hi = 0;
9033         }
9034
9035       /* Optimize if the shifted value is a (power of 2) - 1.  */
9036       if ((hi == 0 && ((lo + 1) & lo) == 0)
9037           || (lo == 0xffffffff && ((hi + 1) & hi) == 0))
9038         {
9039           shift = COUNT_TOP_ZEROES ((unsigned int) hi32.X_add_number);
9040           if (shift != 0)
9041             {
9042               expressionS tmp;
9043
9044               /* This instruction will set the register to be all
9045                  ones.  */
9046               tmp.X_op = O_constant;
9047               tmp.X_add_number = (offsetT) -1;
9048               macro_build (&tmp, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
9049               if (bit != 0)
9050                 {
9051                   bit += shift;
9052                   macro_build (NULL, (bit >= 32) ? "dsll32" : "dsll", SHFT_FMT,
9053                                reg, reg, (bit >= 32) ? bit - 32 : bit);
9054                 }
9055               macro_build (NULL, (shift >= 32) ? "dsrl32" : "dsrl", SHFT_FMT,
9056                            reg, reg, (shift >= 32) ? shift - 32 : shift);
9057               return;
9058             }
9059         }
9060
9061       /* Sign extend hi32 before calling load_register, because we can
9062          generally get better code when we load a sign extended value.  */
9063       if ((hi32.X_add_number & 0x80000000) != 0)
9064         hi32.X_add_number |= ~(offsetT) 0xffffffff;
9065       load_register (reg, &hi32, 0);
9066       freg = reg;
9067     }
9068   if ((lo32.X_add_number & 0xffff0000) == 0)
9069     {
9070       if (freg != 0)
9071         {
9072           macro_build (NULL, "dsll32", SHFT_FMT, reg, freg, 0);
9073           freg = reg;
9074         }
9075     }
9076   else
9077     {
9078       expressionS mid16;
9079
9080       if ((freg == 0) && (lo32.X_add_number == (offsetT) 0xffffffff))
9081         {
9082           macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
9083           macro_build (NULL, "dsrl32", SHFT_FMT, reg, reg, 0);
9084           return;
9085         }
9086
9087       if (freg != 0)
9088         {
9089           macro_build (NULL, "dsll", SHFT_FMT, reg, freg, 16);
9090           freg = reg;
9091         }
9092       mid16 = lo32;
9093       mid16.X_add_number >>= 16;
9094       macro_build (&mid16, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
9095       macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9096       freg = reg;
9097     }
9098   if ((lo32.X_add_number & 0xffff) != 0)
9099     macro_build (&lo32, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
9100 }
9101
9102 static inline void
9103 load_delay_nop (void)
9104 {
9105   if (!gpr_interlocks)
9106     macro_build (NULL, "nop", "");
9107 }
9108
9109 /* Load an address into a register.  */
9110
9111 static void
9112 load_address (int reg, expressionS *ep, int *used_at)
9113 {
9114   if (ep->X_op != O_constant
9115       && ep->X_op != O_symbol)
9116     {
9117       as_bad (_("expression too complex"));
9118       ep->X_op = O_constant;
9119     }
9120
9121   if (ep->X_op == O_constant)
9122     {
9123       load_register (reg, ep, HAVE_64BIT_ADDRESSES);
9124       return;
9125     }
9126
9127   if (mips_pic == NO_PIC)
9128     {
9129       /* If this is a reference to a GP relative symbol, we want
9130            addiu        $reg,$gp,<sym>          (BFD_RELOC_GPREL16)
9131          Otherwise we want
9132            lui          $reg,<sym>              (BFD_RELOC_HI16_S)
9133            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9134          If we have an addend, we always use the latter form.
9135
9136          With 64bit address space and a usable $at we want
9137            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
9138            lui          $at,<sym>               (BFD_RELOC_HI16_S)
9139            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
9140            daddiu       $at,<sym>               (BFD_RELOC_LO16)
9141            dsll32       $reg,0
9142            daddu        $reg,$reg,$at
9143
9144          If $at is already in use, we use a path which is suboptimal
9145          on superscalar processors.
9146            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
9147            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
9148            dsll         $reg,16
9149            daddiu       $reg,<sym>              (BFD_RELOC_HI16_S)
9150            dsll         $reg,16
9151            daddiu       $reg,<sym>              (BFD_RELOC_LO16)
9152
9153          For GP relative symbols in 64bit address space we can use
9154          the same sequence as in 32bit address space.  */
9155       if (HAVE_64BIT_SYMBOLS)
9156         {
9157           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
9158               && !nopic_need_relax (ep->X_add_symbol, 1))
9159             {
9160               relax_start (ep->X_add_symbol);
9161               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
9162                            mips_gp_register, BFD_RELOC_GPREL16);
9163               relax_switch ();
9164             }
9165
9166           if (*used_at == 0 && mips_opts.at)
9167             {
9168               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
9169               macro_build (ep, "lui", LUI_FMT, AT, BFD_RELOC_HI16_S);
9170               macro_build (ep, "daddiu", "t,r,j", reg, reg,
9171                            BFD_RELOC_MIPS_HIGHER);
9172               macro_build (ep, "daddiu", "t,r,j", AT, AT, BFD_RELOC_LO16);
9173               macro_build (NULL, "dsll32", SHFT_FMT, reg, reg, 0);
9174               macro_build (NULL, "daddu", "d,v,t", reg, reg, AT);
9175               *used_at = 1;
9176             }
9177           else
9178             {
9179               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
9180               macro_build (ep, "daddiu", "t,r,j", reg, reg,
9181                            BFD_RELOC_MIPS_HIGHER);
9182               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9183               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_HI16_S);
9184               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9185               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_LO16);
9186             }
9187
9188           if (mips_relax.sequence)
9189             relax_end ();
9190         }
9191       else
9192         {
9193           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
9194               && !nopic_need_relax (ep->X_add_symbol, 1))
9195             {
9196               relax_start (ep->X_add_symbol);
9197               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
9198                            mips_gp_register, BFD_RELOC_GPREL16);
9199               relax_switch ();
9200             }
9201           macro_build_lui (ep, reg);
9202           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j",
9203                        reg, reg, BFD_RELOC_LO16);
9204           if (mips_relax.sequence)
9205             relax_end ();
9206         }
9207     }
9208   else if (!mips_big_got)
9209     {
9210       expressionS ex;
9211
9212       /* If this is a reference to an external symbol, we want
9213            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9214          Otherwise we want
9215            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9216            nop
9217            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9218          If there is a constant, it must be added in after.
9219
9220          If we have NewABI, we want
9221            lw           $reg,<sym+cst>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
9222          unless we're referencing a global symbol with a non-zero
9223          offset, in which case cst must be added separately.  */
9224       if (HAVE_NEWABI)
9225         {
9226           if (ep->X_add_number)
9227             {
9228               ex.X_add_number = ep->X_add_number;
9229               ep->X_add_number = 0;
9230               relax_start (ep->X_add_symbol);
9231               macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9232                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
9233               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9234                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9235               ex.X_op = O_constant;
9236               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
9237                            reg, reg, BFD_RELOC_LO16);
9238               ep->X_add_number = ex.X_add_number;
9239               relax_switch ();
9240             }
9241           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9242                        BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
9243           if (mips_relax.sequence)
9244             relax_end ();
9245         }
9246       else
9247         {
9248           ex.X_add_number = ep->X_add_number;
9249           ep->X_add_number = 0;
9250           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9251                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
9252           load_delay_nop ();
9253           relax_start (ep->X_add_symbol);
9254           relax_switch ();
9255           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9256                        BFD_RELOC_LO16);
9257           relax_end ();
9258
9259           if (ex.X_add_number != 0)
9260             {
9261               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9262                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9263               ex.X_op = O_constant;
9264               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
9265                            reg, reg, BFD_RELOC_LO16);
9266             }
9267         }
9268     }
9269   else if (mips_big_got)
9270     {
9271       expressionS ex;
9272
9273       /* This is the large GOT case.  If this is a reference to an
9274          external symbol, we want
9275            lui          $reg,<sym>              (BFD_RELOC_MIPS_GOT_HI16)
9276            addu         $reg,$reg,$gp
9277            lw           $reg,<sym>($reg)        (BFD_RELOC_MIPS_GOT_LO16)
9278
9279          Otherwise, for a reference to a local symbol in old ABI, we want
9280            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9281            nop
9282            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9283          If there is a constant, it must be added in after.
9284
9285          In the NewABI, for local symbols, with or without offsets, we want:
9286            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
9287            addiu        $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
9288       */
9289       if (HAVE_NEWABI)
9290         {
9291           ex.X_add_number = ep->X_add_number;
9292           ep->X_add_number = 0;
9293           relax_start (ep->X_add_symbol);
9294           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
9295           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
9296                        reg, reg, mips_gp_register);
9297           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
9298                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
9299           if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9300             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9301           else if (ex.X_add_number)
9302             {
9303               ex.X_op = O_constant;
9304               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9305                            BFD_RELOC_LO16);
9306             }
9307
9308           ep->X_add_number = ex.X_add_number;
9309           relax_switch ();
9310           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9311                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
9312           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9313                        BFD_RELOC_MIPS_GOT_OFST);
9314           relax_end ();
9315         }
9316       else
9317         {
9318           ex.X_add_number = ep->X_add_number;
9319           ep->X_add_number = 0;
9320           relax_start (ep->X_add_symbol);
9321           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
9322           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
9323                        reg, reg, mips_gp_register);
9324           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
9325                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
9326           relax_switch ();
9327           if (reg_needs_delay (mips_gp_register))
9328             {
9329               /* We need a nop before loading from $gp.  This special
9330                  check is required because the lui which starts the main
9331                  instruction stream does not refer to $gp, and so will not
9332                  insert the nop which may be required.  */
9333               macro_build (NULL, "nop", "");
9334             }
9335           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9336                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
9337           load_delay_nop ();
9338           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9339                        BFD_RELOC_LO16);
9340           relax_end ();
9341
9342           if (ex.X_add_number != 0)
9343             {
9344               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9345                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9346               ex.X_op = O_constant;
9347               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9348                            BFD_RELOC_LO16);
9349             }
9350         }
9351     }
9352   else
9353     abort ();
9354
9355   if (!mips_opts.at && *used_at == 1)
9356     as_bad (_("macro used $at after \".set noat\""));
9357 }
9358
9359 /* Move the contents of register SOURCE into register DEST.  */
9360
9361 static void
9362 move_register (int dest, int source)
9363 {
9364   /* Prefer to use a 16-bit microMIPS instruction unless the previous
9365      instruction specifically requires a 32-bit one.  */
9366   if (mips_opts.micromips
9367       && !mips_opts.insn32
9368       && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
9369     macro_build (NULL, "move", "mp,mj", dest, source);
9370   else
9371     macro_build (NULL, "or", "d,v,t", dest, source, 0);
9372 }
9373
9374 /* Emit an SVR4 PIC sequence to load address LOCAL into DEST, where
9375    LOCAL is the sum of a symbol and a 16-bit or 32-bit displacement.
9376    The two alternatives are:
9377
9378    Global symbol                Local sybmol
9379    -------------                ------------
9380    lw DEST,%got(SYMBOL)         lw DEST,%got(SYMBOL + OFFSET)
9381    ...                          ...
9382    addiu DEST,DEST,OFFSET       addiu DEST,DEST,%lo(SYMBOL + OFFSET)
9383
9384    load_got_offset emits the first instruction and add_got_offset
9385    emits the second for a 16-bit offset or add_got_offset_hilo emits
9386    a sequence to add a 32-bit offset using a scratch register.  */
9387
9388 static void
9389 load_got_offset (int dest, expressionS *local)
9390 {
9391   expressionS global;
9392
9393   global = *local;
9394   global.X_add_number = 0;
9395
9396   relax_start (local->X_add_symbol);
9397   macro_build (&global, ADDRESS_LOAD_INSN, "t,o(b)", dest,
9398                BFD_RELOC_MIPS_GOT16, mips_gp_register);
9399   relax_switch ();
9400   macro_build (local, ADDRESS_LOAD_INSN, "t,o(b)", dest,
9401                BFD_RELOC_MIPS_GOT16, mips_gp_register);
9402   relax_end ();
9403 }
9404
9405 static void
9406 add_got_offset (int dest, expressionS *local)
9407 {
9408   expressionS global;
9409
9410   global.X_op = O_constant;
9411   global.X_op_symbol = NULL;
9412   global.X_add_symbol = NULL;
9413   global.X_add_number = local->X_add_number;
9414
9415   relax_start (local->X_add_symbol);
9416   macro_build (&global, ADDRESS_ADDI_INSN, "t,r,j",
9417                dest, dest, BFD_RELOC_LO16);
9418   relax_switch ();
9419   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", dest, dest, BFD_RELOC_LO16);
9420   relax_end ();
9421 }
9422
9423 static void
9424 add_got_offset_hilo (int dest, expressionS *local, int tmp)
9425 {
9426   expressionS global;
9427   int hold_mips_optimize;
9428
9429   global.X_op = O_constant;
9430   global.X_op_symbol = NULL;
9431   global.X_add_symbol = NULL;
9432   global.X_add_number = local->X_add_number;
9433
9434   relax_start (local->X_add_symbol);
9435   load_register (tmp, &global, HAVE_64BIT_ADDRESSES);
9436   relax_switch ();
9437   /* Set mips_optimize around the lui instruction to avoid
9438      inserting an unnecessary nop after the lw.  */
9439   hold_mips_optimize = mips_optimize;
9440   mips_optimize = 2;
9441   macro_build_lui (&global, tmp);
9442   mips_optimize = hold_mips_optimize;
9443   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", tmp, tmp, BFD_RELOC_LO16);
9444   relax_end ();
9445
9446   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dest, dest, tmp);
9447 }
9448
9449 /* Emit a sequence of instructions to emulate a branch likely operation.
9450    BR is an ordinary branch corresponding to one to be emulated.  BRNEG
9451    is its complementing branch with the original condition negated.
9452    CALL is set if the original branch specified the link operation.
9453    EP, FMT, SREG and TREG specify the usual macro_build() parameters.
9454
9455    Code like this is produced in the noreorder mode:
9456
9457         BRNEG   <args>, 1f
9458          nop
9459         b       <sym>
9460          delay slot (executed only if branch taken)
9461     1:
9462
9463    or, if CALL is set:
9464
9465         BRNEG   <args>, 1f
9466          nop
9467         bal     <sym>
9468          delay slot (executed only if branch taken)
9469     1:
9470
9471    In the reorder mode the delay slot would be filled with a nop anyway,
9472    so code produced is simply:
9473
9474         BR      <args>, <sym>
9475          nop
9476
9477    This function is used when producing code for the microMIPS ASE that
9478    does not implement branch likely instructions in hardware.  */
9479
9480 static void
9481 macro_build_branch_likely (const char *br, const char *brneg,
9482                            int call, expressionS *ep, const char *fmt,
9483                            unsigned int sreg, unsigned int treg)
9484 {
9485   int noreorder = mips_opts.noreorder;
9486   expressionS expr1;
9487
9488   gas_assert (mips_opts.micromips);
9489   start_noreorder ();
9490   if (noreorder)
9491     {
9492       micromips_label_expr (&expr1);
9493       macro_build (&expr1, brneg, fmt, sreg, treg);
9494       macro_build (NULL, "nop", "");
9495       macro_build (ep, call ? "bal" : "b", "p");
9496
9497       /* Set to true so that append_insn adds a label.  */
9498       emit_branch_likely_macro = TRUE;
9499     }
9500   else
9501     {
9502       macro_build (ep, br, fmt, sreg, treg);
9503       macro_build (NULL, "nop", "");
9504     }
9505   end_noreorder ();
9506 }
9507
9508 /* Emit a coprocessor branch-likely macro specified by TYPE, using CC as
9509    the condition code tested.  EP specifies the branch target.  */
9510
9511 static void
9512 macro_build_branch_ccl (int type, expressionS *ep, unsigned int cc)
9513 {
9514   const int call = 0;
9515   const char *brneg;
9516   const char *br;
9517
9518   switch (type)
9519     {
9520     case M_BC1FL:
9521       br = "bc1f";
9522       brneg = "bc1t";
9523       break;
9524     case M_BC1TL:
9525       br = "bc1t";
9526       brneg = "bc1f";
9527       break;
9528     case M_BC2FL:
9529       br = "bc2f";
9530       brneg = "bc2t";
9531       break;
9532     case M_BC2TL:
9533       br = "bc2t";
9534       brneg = "bc2f";
9535       break;
9536     default:
9537       abort ();
9538     }
9539   macro_build_branch_likely (br, brneg, call, ep, "N,p", cc, ZERO);
9540 }
9541
9542 /* Emit a two-argument branch macro specified by TYPE, using SREG as
9543    the register tested.  EP specifies the branch target.  */
9544
9545 static void
9546 macro_build_branch_rs (int type, expressionS *ep, unsigned int sreg)
9547 {
9548   const char *brneg = NULL;
9549   const char *br;
9550   int call = 0;
9551
9552   switch (type)
9553     {
9554     case M_BGEZ:
9555       br = "bgez";
9556       break;
9557     case M_BGEZL:
9558       br = mips_opts.micromips ? "bgez" : "bgezl";
9559       brneg = "bltz";
9560       break;
9561     case M_BGEZALL:
9562       gas_assert (mips_opts.micromips);
9563       br = mips_opts.insn32 ? "bgezal" : "bgezals";
9564       brneg = "bltz";
9565       call = 1;
9566       break;
9567     case M_BGTZ:
9568       br = "bgtz";
9569       break;
9570     case M_BGTZL:
9571       br = mips_opts.micromips ? "bgtz" : "bgtzl";
9572       brneg = "blez";
9573       break;
9574     case M_BLEZ:
9575       br = "blez";
9576       break;
9577     case M_BLEZL:
9578       br = mips_opts.micromips ? "blez" : "blezl";
9579       brneg = "bgtz";
9580       break;
9581     case M_BLTZ:
9582       br = "bltz";
9583       break;
9584     case M_BLTZL:
9585       br = mips_opts.micromips ? "bltz" : "bltzl";
9586       brneg = "bgez";
9587       break;
9588     case M_BLTZALL:
9589       gas_assert (mips_opts.micromips);
9590       br = mips_opts.insn32 ? "bltzal" : "bltzals";
9591       brneg = "bgez";
9592       call = 1;
9593       break;
9594     default:
9595       abort ();
9596     }
9597   if (mips_opts.micromips && brneg)
9598     macro_build_branch_likely (br, brneg, call, ep, "s,p", sreg, ZERO);
9599   else
9600     macro_build (ep, br, "s,p", sreg);
9601 }
9602
9603 /* Emit a three-argument branch macro specified by TYPE, using SREG and
9604    TREG as the registers tested.  EP specifies the branch target.  */
9605
9606 static void
9607 macro_build_branch_rsrt (int type, expressionS *ep,
9608                          unsigned int sreg, unsigned int treg)
9609 {
9610   const char *brneg = NULL;
9611   const int call = 0;
9612   const char *br;
9613
9614   switch (type)
9615     {
9616     case M_BEQ:
9617     case M_BEQ_I:
9618       br = "beq";
9619       break;
9620     case M_BEQL:
9621     case M_BEQL_I:
9622       br = mips_opts.micromips ? "beq" : "beql";
9623       brneg = "bne";
9624       break;
9625     case M_BNE:
9626     case M_BNE_I:
9627       br = "bne";
9628       break;
9629     case M_BNEL:
9630     case M_BNEL_I:
9631       br = mips_opts.micromips ? "bne" : "bnel";
9632       brneg = "beq";
9633       break;
9634     default:
9635       abort ();
9636     }
9637   if (mips_opts.micromips && brneg)
9638     macro_build_branch_likely (br, brneg, call, ep, "s,t,p", sreg, treg);
9639   else
9640     macro_build (ep, br, "s,t,p", sreg, treg);
9641 }
9642
9643 /* Return the high part that should be loaded in order to make the low
9644    part of VALUE accessible using an offset of OFFBITS bits.  */
9645
9646 static offsetT
9647 offset_high_part (offsetT value, unsigned int offbits)
9648 {
9649   offsetT bias;
9650   addressT low_mask;
9651
9652   if (offbits == 0)
9653     return value;
9654   bias = 1 << (offbits - 1);
9655   low_mask = bias * 2 - 1;
9656   return (value + bias) & ~low_mask;
9657 }
9658
9659 /* Return true if the value stored in offset_expr and offset_reloc
9660    fits into a signed offset of OFFBITS bits.  RANGE is the maximum
9661    amount that the caller wants to add without inducing overflow
9662    and ALIGN is the known alignment of the value in bytes.  */
9663
9664 static bfd_boolean
9665 small_offset_p (unsigned int range, unsigned int align, unsigned int offbits)
9666 {
9667   if (offbits == 16)
9668     {
9669       /* Accept any relocation operator if overflow isn't a concern.  */
9670       if (range < align && *offset_reloc != BFD_RELOC_UNUSED)
9671         return TRUE;
9672
9673       /* These relocations are guaranteed not to overflow in correct links.  */
9674       if (*offset_reloc == BFD_RELOC_MIPS_LITERAL
9675           || gprel16_reloc_p (*offset_reloc))
9676         return TRUE;
9677     }
9678   if (offset_expr.X_op == O_constant
9679       && offset_high_part (offset_expr.X_add_number, offbits) == 0
9680       && offset_high_part (offset_expr.X_add_number + range, offbits) == 0)
9681     return TRUE;
9682   return FALSE;
9683 }
9684
9685 /*
9686  *                      Build macros
9687  *   This routine implements the seemingly endless macro or synthesized
9688  * instructions and addressing modes in the mips assembly language. Many
9689  * of these macros are simple and are similar to each other. These could
9690  * probably be handled by some kind of table or grammar approach instead of
9691  * this verbose method. Others are not simple macros but are more like
9692  * optimizing code generation.
9693  *   One interesting optimization is when several store macros appear
9694  * consecutively that would load AT with the upper half of the same address.
9695  * The ensuing load upper instructions are ommited. This implies some kind
9696  * of global optimization. We currently only optimize within a single macro.
9697  *   For many of the load and store macros if the address is specified as a
9698  * constant expression in the first 64k of memory (ie ld $2,0x4000c) we
9699  * first load register 'at' with zero and use it as the base register. The
9700  * mips assembler simply uses register $zero. Just one tiny optimization
9701  * we're missing.
9702  */
9703 static void
9704 macro (struct mips_cl_insn *ip, char *str)
9705 {
9706   const struct mips_operand_array *operands;
9707   unsigned int breg, i;
9708   unsigned int tempreg;
9709   int mask;
9710   int used_at = 0;
9711   expressionS label_expr;
9712   expressionS expr1;
9713   expressionS *ep;
9714   const char *s;
9715   const char *s2;
9716   const char *fmt;
9717   int likely = 0;
9718   int coproc = 0;
9719   int offbits = 16;
9720   int call = 0;
9721   int jals = 0;
9722   int dbl = 0;
9723   int imm = 0;
9724   int ust = 0;
9725   int lp = 0;
9726   bfd_boolean large_offset;
9727   int off;
9728   int hold_mips_optimize;
9729   unsigned int align;
9730   unsigned int op[MAX_OPERANDS];
9731
9732   gas_assert (! mips_opts.mips16);
9733
9734   operands = insn_operands (ip);
9735   for (i = 0; i < MAX_OPERANDS; i++)
9736     if (operands->operand[i])
9737       op[i] = insn_extract_operand (ip, operands->operand[i]);
9738     else
9739       op[i] = -1;
9740
9741   mask = ip->insn_mo->mask;
9742
9743   label_expr.X_op = O_constant;
9744   label_expr.X_op_symbol = NULL;
9745   label_expr.X_add_symbol = NULL;
9746   label_expr.X_add_number = 0;
9747
9748   expr1.X_op = O_constant;
9749   expr1.X_op_symbol = NULL;
9750   expr1.X_add_symbol = NULL;
9751   expr1.X_add_number = 1;
9752   align = 1;
9753
9754   switch (mask)
9755     {
9756     case M_DABS:
9757       dbl = 1;
9758     case M_ABS:
9759       /*    bgez    $a0,1f
9760             move    v0,$a0
9761             sub     v0,$zero,$a0
9762          1:
9763        */
9764
9765       start_noreorder ();
9766
9767       if (mips_opts.micromips)
9768         micromips_label_expr (&label_expr);
9769       else
9770         label_expr.X_add_number = 8;
9771       macro_build (&label_expr, "bgez", "s,p", op[1]);
9772       if (op[0] == op[1])
9773         macro_build (NULL, "nop", "");
9774       else
9775         move_register (op[0], op[1]);
9776       macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", op[0], 0, op[1]);
9777       if (mips_opts.micromips)
9778         micromips_add_label ();
9779
9780       end_noreorder ();
9781       break;
9782
9783     case M_ADD_I:
9784       s = "addi";
9785       s2 = "add";
9786       goto do_addi;
9787     case M_ADDU_I:
9788       s = "addiu";
9789       s2 = "addu";
9790       goto do_addi;
9791     case M_DADD_I:
9792       dbl = 1;
9793       s = "daddi";
9794       s2 = "dadd";
9795       if (!mips_opts.micromips)
9796         goto do_addi;
9797       if (imm_expr.X_add_number >= -0x200
9798           && imm_expr.X_add_number < 0x200)
9799         {
9800           macro_build (NULL, s, "t,r,.", op[0], op[1],
9801                        (int) imm_expr.X_add_number);
9802           break;
9803         }
9804       goto do_addi_i;
9805     case M_DADDU_I:
9806       dbl = 1;
9807       s = "daddiu";
9808       s2 = "daddu";
9809     do_addi:
9810       if (imm_expr.X_add_number >= -0x8000
9811           && imm_expr.X_add_number < 0x8000)
9812         {
9813           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
9814           break;
9815         }
9816     do_addi_i:
9817       used_at = 1;
9818       load_register (AT, &imm_expr, dbl);
9819       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9820       break;
9821
9822     case M_AND_I:
9823       s = "andi";
9824       s2 = "and";
9825       goto do_bit;
9826     case M_OR_I:
9827       s = "ori";
9828       s2 = "or";
9829       goto do_bit;
9830     case M_NOR_I:
9831       s = "";
9832       s2 = "nor";
9833       goto do_bit;
9834     case M_XOR_I:
9835       s = "xori";
9836       s2 = "xor";
9837     do_bit:
9838       if (imm_expr.X_add_number >= 0
9839           && imm_expr.X_add_number < 0x10000)
9840         {
9841           if (mask != M_NOR_I)
9842             macro_build (&imm_expr, s, "t,r,i", op[0], op[1], BFD_RELOC_LO16);
9843           else
9844             {
9845               macro_build (&imm_expr, "ori", "t,r,i",
9846                            op[0], op[1], BFD_RELOC_LO16);
9847               macro_build (NULL, "nor", "d,v,t", op[0], op[0], 0);
9848             }
9849           break;
9850         }
9851
9852       used_at = 1;
9853       load_register (AT, &imm_expr, GPR_SIZE == 64);
9854       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9855       break;
9856
9857     case M_BALIGN:
9858       switch (imm_expr.X_add_number)
9859         {
9860         case 0:
9861           macro_build (NULL, "nop", "");
9862           break;
9863         case 2:
9864           macro_build (NULL, "packrl.ph", "d,s,t", op[0], op[0], op[1]);
9865           break;
9866         case 1:
9867         case 3:
9868           macro_build (NULL, "balign", "t,s,2", op[0], op[1],
9869                        (int) imm_expr.X_add_number);
9870           break;
9871         default:
9872           as_bad (_("BALIGN immediate not 0, 1, 2 or 3 (%lu)"),
9873                   (unsigned long) imm_expr.X_add_number);
9874           break;
9875         }
9876       break;
9877
9878     case M_BC1FL:
9879     case M_BC1TL:
9880     case M_BC2FL:
9881     case M_BC2TL:
9882       gas_assert (mips_opts.micromips);
9883       macro_build_branch_ccl (mask, &offset_expr,
9884                               EXTRACT_OPERAND (1, BCC, *ip));
9885       break;
9886
9887     case M_BEQ_I:
9888     case M_BEQL_I:
9889     case M_BNE_I:
9890     case M_BNEL_I:
9891       if (imm_expr.X_add_number == 0)
9892         op[1] = 0;
9893       else
9894         {
9895           op[1] = AT;
9896           used_at = 1;
9897           load_register (op[1], &imm_expr, GPR_SIZE == 64);
9898         }
9899       /* Fall through.  */
9900     case M_BEQL:
9901     case M_BNEL:
9902       macro_build_branch_rsrt (mask, &offset_expr, op[0], op[1]);
9903       break;
9904
9905     case M_BGEL:
9906       likely = 1;
9907     case M_BGE:
9908       if (op[1] == 0)
9909         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[0]);
9910       else if (op[0] == 0)
9911         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[1]);
9912       else
9913         {
9914           used_at = 1;
9915           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
9916           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9917                                    &offset_expr, AT, ZERO);
9918         }
9919       break;
9920
9921     case M_BGEZL:
9922     case M_BGEZALL:
9923     case M_BGTZL:
9924     case M_BLEZL:
9925     case M_BLTZL:
9926     case M_BLTZALL:
9927       macro_build_branch_rs (mask, &offset_expr, op[0]);
9928       break;
9929
9930     case M_BGTL_I:
9931       likely = 1;
9932     case M_BGT_I:
9933       /* Check for > max integer.  */
9934       if (imm_expr.X_add_number >= GPR_SMAX)
9935         {
9936         do_false:
9937           /* Result is always false.  */
9938           if (! likely)
9939             macro_build (NULL, "nop", "");
9940           else
9941             macro_build_branch_rsrt (M_BNEL, &offset_expr, ZERO, ZERO);
9942           break;
9943         }
9944       ++imm_expr.X_add_number;
9945       /* FALLTHROUGH */
9946     case M_BGE_I:
9947     case M_BGEL_I:
9948       if (mask == M_BGEL_I)
9949         likely = 1;
9950       if (imm_expr.X_add_number == 0)
9951         {
9952           macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ,
9953                                  &offset_expr, op[0]);
9954           break;
9955         }
9956       if (imm_expr.X_add_number == 1)
9957         {
9958           macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ,
9959                                  &offset_expr, op[0]);
9960           break;
9961         }
9962       if (imm_expr.X_add_number <= GPR_SMIN)
9963         {
9964         do_true:
9965           /* result is always true */
9966           as_warn (_("branch %s is always true"), ip->insn_mo->name);
9967           macro_build (&offset_expr, "b", "p");
9968           break;
9969         }
9970       used_at = 1;
9971       set_at (op[0], 0);
9972       macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9973                                &offset_expr, AT, ZERO);
9974       break;
9975
9976     case M_BGEUL:
9977       likely = 1;
9978     case M_BGEU:
9979       if (op[1] == 0)
9980         goto do_true;
9981       else if (op[0] == 0)
9982         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9983                                  &offset_expr, ZERO, op[1]);
9984       else
9985         {
9986           used_at = 1;
9987           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
9988           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9989                                    &offset_expr, AT, ZERO);
9990         }
9991       break;
9992
9993     case M_BGTUL_I:
9994       likely = 1;
9995     case M_BGTU_I:
9996       if (op[0] == 0
9997           || (GPR_SIZE == 32
9998               && imm_expr.X_add_number == -1))
9999         goto do_false;
10000       ++imm_expr.X_add_number;
10001       /* FALLTHROUGH */
10002     case M_BGEU_I:
10003     case M_BGEUL_I:
10004       if (mask == M_BGEUL_I)
10005         likely = 1;
10006       if (imm_expr.X_add_number == 0)
10007         goto do_true;
10008       else if (imm_expr.X_add_number == 1)
10009         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10010                                  &offset_expr, op[0], ZERO);
10011       else
10012         {
10013           used_at = 1;
10014           set_at (op[0], 1);
10015           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10016                                    &offset_expr, AT, ZERO);
10017         }
10018       break;
10019
10020     case M_BGTL:
10021       likely = 1;
10022     case M_BGT:
10023       if (op[1] == 0)
10024         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[0]);
10025       else if (op[0] == 0)
10026         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[1]);
10027       else
10028         {
10029           used_at = 1;
10030           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
10031           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10032                                    &offset_expr, AT, ZERO);
10033         }
10034       break;
10035
10036     case M_BGTUL:
10037       likely = 1;
10038     case M_BGTU:
10039       if (op[1] == 0)
10040         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10041                                  &offset_expr, op[0], ZERO);
10042       else if (op[0] == 0)
10043         goto do_false;
10044       else
10045         {
10046           used_at = 1;
10047           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
10048           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10049                                    &offset_expr, AT, ZERO);
10050         }
10051       break;
10052
10053     case M_BLEL:
10054       likely = 1;
10055     case M_BLE:
10056       if (op[1] == 0)
10057         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
10058       else if (op[0] == 0)
10059         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[1]);
10060       else
10061         {
10062           used_at = 1;
10063           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
10064           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10065                                    &offset_expr, AT, ZERO);
10066         }
10067       break;
10068
10069     case M_BLEL_I:
10070       likely = 1;
10071     case M_BLE_I:
10072       if (imm_expr.X_add_number >= GPR_SMAX)
10073         goto do_true;
10074       ++imm_expr.X_add_number;
10075       /* FALLTHROUGH */
10076     case M_BLT_I:
10077     case M_BLTL_I:
10078       if (mask == M_BLTL_I)
10079         likely = 1;
10080       if (imm_expr.X_add_number == 0)
10081         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
10082       else if (imm_expr.X_add_number == 1)
10083         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
10084       else
10085         {
10086           used_at = 1;
10087           set_at (op[0], 0);
10088           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10089                                    &offset_expr, AT, ZERO);
10090         }
10091       break;
10092
10093     case M_BLEUL:
10094       likely = 1;
10095     case M_BLEU:
10096       if (op[1] == 0)
10097         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10098                                  &offset_expr, op[0], ZERO);
10099       else if (op[0] == 0)
10100         goto do_true;
10101       else
10102         {
10103           used_at = 1;
10104           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
10105           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10106                                    &offset_expr, AT, ZERO);
10107         }
10108       break;
10109
10110     case M_BLEUL_I:
10111       likely = 1;
10112     case M_BLEU_I:
10113       if (op[0] == 0
10114           || (GPR_SIZE == 32
10115               && imm_expr.X_add_number == -1))
10116         goto do_true;
10117       ++imm_expr.X_add_number;
10118       /* FALLTHROUGH */
10119     case M_BLTU_I:
10120     case M_BLTUL_I:
10121       if (mask == M_BLTUL_I)
10122         likely = 1;
10123       if (imm_expr.X_add_number == 0)
10124         goto do_false;
10125       else if (imm_expr.X_add_number == 1)
10126         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10127                                  &offset_expr, op[0], ZERO);
10128       else
10129         {
10130           used_at = 1;
10131           set_at (op[0], 1);
10132           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10133                                    &offset_expr, AT, ZERO);
10134         }
10135       break;
10136
10137     case M_BLTL:
10138       likely = 1;
10139     case M_BLT:
10140       if (op[1] == 0)
10141         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
10142       else if (op[0] == 0)
10143         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[1]);
10144       else
10145         {
10146           used_at = 1;
10147           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
10148           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10149                                    &offset_expr, AT, ZERO);
10150         }
10151       break;
10152
10153     case M_BLTUL:
10154       likely = 1;
10155     case M_BLTU:
10156       if (op[1] == 0)
10157         goto do_false;
10158       else if (op[0] == 0)
10159         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10160                                  &offset_expr, ZERO, op[1]);
10161       else
10162         {
10163           used_at = 1;
10164           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
10165           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10166                                    &offset_expr, AT, ZERO);
10167         }
10168       break;
10169
10170     case M_DDIV_3:
10171       dbl = 1;
10172     case M_DIV_3:
10173       s = "mflo";
10174       goto do_div3;
10175     case M_DREM_3:
10176       dbl = 1;
10177     case M_REM_3:
10178       s = "mfhi";
10179     do_div3:
10180       if (op[2] == 0)
10181         {
10182           as_warn (_("divide by zero"));
10183           if (mips_trap)
10184             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
10185           else
10186             macro_build (NULL, "break", BRK_FMT, 7);
10187           break;
10188         }
10189
10190       start_noreorder ();
10191       if (mips_trap)
10192         {
10193           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
10194           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
10195         }
10196       else
10197         {
10198           if (mips_opts.micromips)
10199             micromips_label_expr (&label_expr);
10200           else
10201             label_expr.X_add_number = 8;
10202           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
10203           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
10204           macro_build (NULL, "break", BRK_FMT, 7);
10205           if (mips_opts.micromips)
10206             micromips_add_label ();
10207         }
10208       expr1.X_add_number = -1;
10209       used_at = 1;
10210       load_register (AT, &expr1, dbl);
10211       if (mips_opts.micromips)
10212         micromips_label_expr (&label_expr);
10213       else
10214         label_expr.X_add_number = mips_trap ? (dbl ? 12 : 8) : (dbl ? 20 : 16);
10215       macro_build (&label_expr, "bne", "s,t,p", op[2], AT);
10216       if (dbl)
10217         {
10218           expr1.X_add_number = 1;
10219           load_register (AT, &expr1, dbl);
10220           macro_build (NULL, "dsll32", SHFT_FMT, AT, AT, 31);
10221         }
10222       else
10223         {
10224           expr1.X_add_number = 0x80000000;
10225           macro_build (&expr1, "lui", LUI_FMT, AT, BFD_RELOC_HI16);
10226         }
10227       if (mips_trap)
10228         {
10229           macro_build (NULL, "teq", TRAP_FMT, op[1], AT, 6);
10230           /* We want to close the noreorder block as soon as possible, so
10231              that later insns are available for delay slot filling.  */
10232           end_noreorder ();
10233         }
10234       else
10235         {
10236           if (mips_opts.micromips)
10237             micromips_label_expr (&label_expr);
10238           else
10239             label_expr.X_add_number = 8;
10240           macro_build (&label_expr, "bne", "s,t,p", op[1], AT);
10241           macro_build (NULL, "nop", "");
10242
10243           /* We want to close the noreorder block as soon as possible, so
10244              that later insns are available for delay slot filling.  */
10245           end_noreorder ();
10246
10247           macro_build (NULL, "break", BRK_FMT, 6);
10248         }
10249       if (mips_opts.micromips)
10250         micromips_add_label ();
10251       macro_build (NULL, s, MFHL_FMT, op[0]);
10252       break;
10253
10254     case M_DIV_3I:
10255       s = "div";
10256       s2 = "mflo";
10257       goto do_divi;
10258     case M_DIVU_3I:
10259       s = "divu";
10260       s2 = "mflo";
10261       goto do_divi;
10262     case M_REM_3I:
10263       s = "div";
10264       s2 = "mfhi";
10265       goto do_divi;
10266     case M_REMU_3I:
10267       s = "divu";
10268       s2 = "mfhi";
10269       goto do_divi;
10270     case M_DDIV_3I:
10271       dbl = 1;
10272       s = "ddiv";
10273       s2 = "mflo";
10274       goto do_divi;
10275     case M_DDIVU_3I:
10276       dbl = 1;
10277       s = "ddivu";
10278       s2 = "mflo";
10279       goto do_divi;
10280     case M_DREM_3I:
10281       dbl = 1;
10282       s = "ddiv";
10283       s2 = "mfhi";
10284       goto do_divi;
10285     case M_DREMU_3I:
10286       dbl = 1;
10287       s = "ddivu";
10288       s2 = "mfhi";
10289     do_divi:
10290       if (imm_expr.X_add_number == 0)
10291         {
10292           as_warn (_("divide by zero"));
10293           if (mips_trap)
10294             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
10295           else
10296             macro_build (NULL, "break", BRK_FMT, 7);
10297           break;
10298         }
10299       if (imm_expr.X_add_number == 1)
10300         {
10301           if (strcmp (s2, "mflo") == 0)
10302             move_register (op[0], op[1]);
10303           else
10304             move_register (op[0], ZERO);
10305           break;
10306         }
10307       if (imm_expr.X_add_number == -1 && s[strlen (s) - 1] != 'u')
10308         {
10309           if (strcmp (s2, "mflo") == 0)
10310             macro_build (NULL, dbl ? "dneg" : "neg", "d,w", op[0], op[1]);
10311           else
10312             move_register (op[0], ZERO);
10313           break;
10314         }
10315
10316       used_at = 1;
10317       load_register (AT, &imm_expr, dbl);
10318       macro_build (NULL, s, "z,s,t", op[1], AT);
10319       macro_build (NULL, s2, MFHL_FMT, op[0]);
10320       break;
10321
10322     case M_DIVU_3:
10323       s = "divu";
10324       s2 = "mflo";
10325       goto do_divu3;
10326     case M_REMU_3:
10327       s = "divu";
10328       s2 = "mfhi";
10329       goto do_divu3;
10330     case M_DDIVU_3:
10331       s = "ddivu";
10332       s2 = "mflo";
10333       goto do_divu3;
10334     case M_DREMU_3:
10335       s = "ddivu";
10336       s2 = "mfhi";
10337     do_divu3:
10338       start_noreorder ();
10339       if (mips_trap)
10340         {
10341           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
10342           macro_build (NULL, s, "z,s,t", op[1], op[2]);
10343           /* We want to close the noreorder block as soon as possible, so
10344              that later insns are available for delay slot filling.  */
10345           end_noreorder ();
10346         }
10347       else
10348         {
10349           if (mips_opts.micromips)
10350             micromips_label_expr (&label_expr);
10351           else
10352             label_expr.X_add_number = 8;
10353           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
10354           macro_build (NULL, s, "z,s,t", op[1], op[2]);
10355
10356           /* We want to close the noreorder block as soon as possible, so
10357              that later insns are available for delay slot filling.  */
10358           end_noreorder ();
10359           macro_build (NULL, "break", BRK_FMT, 7);
10360           if (mips_opts.micromips)
10361             micromips_add_label ();
10362         }
10363       macro_build (NULL, s2, MFHL_FMT, op[0]);
10364       break;
10365
10366     case M_DLCA_AB:
10367       dbl = 1;
10368     case M_LCA_AB:
10369       call = 1;
10370       goto do_la;
10371     case M_DLA_AB:
10372       dbl = 1;
10373     case M_LA_AB:
10374     do_la:
10375       /* Load the address of a symbol into a register.  If breg is not
10376          zero, we then add a base register to it.  */
10377
10378       breg = op[2];
10379       if (dbl && GPR_SIZE == 32)
10380         as_warn (_("dla used to load 32-bit register; recommend using la "
10381                    "instead"));
10382
10383       if (!dbl && HAVE_64BIT_OBJECTS)
10384         as_warn (_("la used to load 64-bit address; recommend using dla "
10385                    "instead"));
10386
10387       if (small_offset_p (0, align, 16))
10388         {
10389           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", op[0], breg,
10390                        -1, offset_reloc[0], offset_reloc[1], offset_reloc[2]);
10391           break;
10392         }
10393
10394       if (mips_opts.at && (op[0] == breg))
10395         {
10396           tempreg = AT;
10397           used_at = 1;
10398         }
10399       else
10400         tempreg = op[0];
10401
10402       if (offset_expr.X_op != O_symbol
10403           && offset_expr.X_op != O_constant)
10404         {
10405           as_bad (_("expression too complex"));
10406           offset_expr.X_op = O_constant;
10407         }
10408
10409       if (offset_expr.X_op == O_constant)
10410         load_register (tempreg, &offset_expr, HAVE_64BIT_ADDRESSES);
10411       else if (mips_pic == NO_PIC)
10412         {
10413           /* If this is a reference to a GP relative symbol, we want
10414                addiu    $tempreg,$gp,<sym>      (BFD_RELOC_GPREL16)
10415              Otherwise we want
10416                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
10417                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10418              If we have a constant, we need two instructions anyhow,
10419              so we may as well always use the latter form.
10420
10421              With 64bit address space and a usable $at we want
10422                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
10423                lui      $at,<sym>               (BFD_RELOC_HI16_S)
10424                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
10425                daddiu   $at,<sym>               (BFD_RELOC_LO16)
10426                dsll32   $tempreg,0
10427                daddu    $tempreg,$tempreg,$at
10428
10429              If $at is already in use, we use a path which is suboptimal
10430              on superscalar processors.
10431                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
10432                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
10433                dsll     $tempreg,16
10434                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
10435                dsll     $tempreg,16
10436                daddiu   $tempreg,<sym>          (BFD_RELOC_LO16)
10437
10438              For GP relative symbols in 64bit address space we can use
10439              the same sequence as in 32bit address space.  */
10440           if (HAVE_64BIT_SYMBOLS)
10441             {
10442               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
10443                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
10444                 {
10445                   relax_start (offset_expr.X_add_symbol);
10446                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10447                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
10448                   relax_switch ();
10449                 }
10450
10451               if (used_at == 0 && mips_opts.at)
10452                 {
10453                   macro_build (&offset_expr, "lui", LUI_FMT,
10454                                tempreg, BFD_RELOC_MIPS_HIGHEST);
10455                   macro_build (&offset_expr, "lui", LUI_FMT,
10456                                AT, BFD_RELOC_HI16_S);
10457                   macro_build (&offset_expr, "daddiu", "t,r,j",
10458                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
10459                   macro_build (&offset_expr, "daddiu", "t,r,j",
10460                                AT, AT, BFD_RELOC_LO16);
10461                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
10462                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
10463                   used_at = 1;
10464                 }
10465               else
10466                 {
10467                   macro_build (&offset_expr, "lui", LUI_FMT,
10468                                tempreg, BFD_RELOC_MIPS_HIGHEST);
10469                   macro_build (&offset_expr, "daddiu", "t,r,j",
10470                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
10471                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
10472                   macro_build (&offset_expr, "daddiu", "t,r,j",
10473                                tempreg, tempreg, BFD_RELOC_HI16_S);
10474                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
10475                   macro_build (&offset_expr, "daddiu", "t,r,j",
10476                                tempreg, tempreg, BFD_RELOC_LO16);
10477                 }
10478
10479               if (mips_relax.sequence)
10480                 relax_end ();
10481             }
10482           else
10483             {
10484               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
10485                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
10486                 {
10487                   relax_start (offset_expr.X_add_symbol);
10488                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10489                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
10490                   relax_switch ();
10491                 }
10492               if (!IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
10493                 as_bad (_("offset too large"));
10494               macro_build_lui (&offset_expr, tempreg);
10495               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10496                            tempreg, tempreg, BFD_RELOC_LO16);
10497               if (mips_relax.sequence)
10498                 relax_end ();
10499             }
10500         }
10501       else if (!mips_big_got && !HAVE_NEWABI)
10502         {
10503           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
10504
10505           /* If this is a reference to an external symbol, and there
10506              is no constant, we want
10507                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10508              or for lca or if tempreg is PIC_CALL_REG
10509                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
10510              For a local symbol, we want
10511                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10512                nop
10513                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10514
10515              If we have a small constant, and this is a reference to
10516              an external symbol, we want
10517                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10518                nop
10519                addiu    $tempreg,$tempreg,<constant>
10520              For a local symbol, we want the same instruction
10521              sequence, but we output a BFD_RELOC_LO16 reloc on the
10522              addiu instruction.
10523
10524              If we have a large constant, and this is a reference to
10525              an external symbol, we want
10526                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10527                lui      $at,<hiconstant>
10528                addiu    $at,$at,<loconstant>
10529                addu     $tempreg,$tempreg,$at
10530              For a local symbol, we want the same instruction
10531              sequence, but we output a BFD_RELOC_LO16 reloc on the
10532              addiu instruction.
10533            */
10534
10535           if (offset_expr.X_add_number == 0)
10536             {
10537               if (mips_pic == SVR4_PIC
10538                   && breg == 0
10539                   && (call || tempreg == PIC_CALL_REG))
10540                 lw_reloc_type = (int) BFD_RELOC_MIPS_CALL16;
10541
10542               relax_start (offset_expr.X_add_symbol);
10543               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10544                            lw_reloc_type, mips_gp_register);
10545               if (breg != 0)
10546                 {
10547                   /* We're going to put in an addu instruction using
10548                      tempreg, so we may as well insert the nop right
10549                      now.  */
10550                   load_delay_nop ();
10551                 }
10552               relax_switch ();
10553               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10554                            tempreg, BFD_RELOC_MIPS_GOT16, mips_gp_register);
10555               load_delay_nop ();
10556               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10557                            tempreg, tempreg, BFD_RELOC_LO16);
10558               relax_end ();
10559               /* FIXME: If breg == 0, and the next instruction uses
10560                  $tempreg, then if this variant case is used an extra
10561                  nop will be generated.  */
10562             }
10563           else if (offset_expr.X_add_number >= -0x8000
10564                    && offset_expr.X_add_number < 0x8000)
10565             {
10566               load_got_offset (tempreg, &offset_expr);
10567               load_delay_nop ();
10568               add_got_offset (tempreg, &offset_expr);
10569             }
10570           else
10571             {
10572               expr1.X_add_number = offset_expr.X_add_number;
10573               offset_expr.X_add_number =
10574                 SEXT_16BIT (offset_expr.X_add_number);
10575               load_got_offset (tempreg, &offset_expr);
10576               offset_expr.X_add_number = expr1.X_add_number;
10577               /* If we are going to add in a base register, and the
10578                  target register and the base register are the same,
10579                  then we are using AT as a temporary register.  Since
10580                  we want to load the constant into AT, we add our
10581                  current AT (from the global offset table) and the
10582                  register into the register now, and pretend we were
10583                  not using a base register.  */
10584               if (breg == op[0])
10585                 {
10586                   load_delay_nop ();
10587                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10588                                op[0], AT, breg);
10589                   breg = 0;
10590                   tempreg = op[0];
10591                 }
10592               add_got_offset_hilo (tempreg, &offset_expr, AT);
10593               used_at = 1;
10594             }
10595         }
10596       else if (!mips_big_got && HAVE_NEWABI)
10597         {
10598           int add_breg_early = 0;
10599
10600           /* If this is a reference to an external, and there is no
10601              constant, or local symbol (*), with or without a
10602              constant, we want
10603                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10604              or for lca or if tempreg is PIC_CALL_REG
10605                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
10606
10607              If we have a small constant, and this is a reference to
10608              an external symbol, we want
10609                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10610                addiu    $tempreg,$tempreg,<constant>
10611
10612              If we have a large constant, and this is a reference to
10613              an external symbol, we want
10614                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10615                lui      $at,<hiconstant>
10616                addiu    $at,$at,<loconstant>
10617                addu     $tempreg,$tempreg,$at
10618
10619              (*) Other assemblers seem to prefer GOT_PAGE/GOT_OFST for
10620              local symbols, even though it introduces an additional
10621              instruction.  */
10622
10623           if (offset_expr.X_add_number)
10624             {
10625               expr1.X_add_number = offset_expr.X_add_number;
10626               offset_expr.X_add_number = 0;
10627
10628               relax_start (offset_expr.X_add_symbol);
10629               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10630                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10631
10632               if (expr1.X_add_number >= -0x8000
10633                   && expr1.X_add_number < 0x8000)
10634                 {
10635                   macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10636                                tempreg, tempreg, BFD_RELOC_LO16);
10637                 }
10638               else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
10639                 {
10640                   unsigned int dreg;
10641
10642                   /* If we are going to add in a base register, and the
10643                      target register and the base register are the same,
10644                      then we are using AT as a temporary register.  Since
10645                      we want to load the constant into AT, we add our
10646                      current AT (from the global offset table) and the
10647                      register into the register now, and pretend we were
10648                      not using a base register.  */
10649                   if (breg != op[0])
10650                     dreg = tempreg;
10651                   else
10652                     {
10653                       gas_assert (tempreg == AT);
10654                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10655                                    op[0], AT, breg);
10656                       dreg = op[0];
10657                       add_breg_early = 1;
10658                     }
10659
10660                   load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10661                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10662                                dreg, dreg, AT);
10663
10664                   used_at = 1;
10665                 }
10666               else
10667                 as_bad (_("PIC code offset overflow (max 32 signed bits)"));
10668
10669               relax_switch ();
10670               offset_expr.X_add_number = expr1.X_add_number;
10671
10672               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10673                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10674               if (add_breg_early)
10675                 {
10676                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10677                                op[0], tempreg, breg);
10678                   breg = 0;
10679                   tempreg = op[0];
10680                 }
10681               relax_end ();
10682             }
10683           else if (breg == 0 && (call || tempreg == PIC_CALL_REG))
10684             {
10685               relax_start (offset_expr.X_add_symbol);
10686               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10687                            BFD_RELOC_MIPS_CALL16, mips_gp_register);
10688               relax_switch ();
10689               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10690                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10691               relax_end ();
10692             }
10693           else
10694             {
10695               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10696                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10697             }
10698         }
10699       else if (mips_big_got && !HAVE_NEWABI)
10700         {
10701           int gpdelay;
10702           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
10703           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
10704           int local_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
10705
10706           /* This is the large GOT case.  If this is a reference to an
10707              external symbol, and there is no constant, we want
10708                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10709                addu     $tempreg,$tempreg,$gp
10710                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10711              or for lca or if tempreg is PIC_CALL_REG
10712                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
10713                addu     $tempreg,$tempreg,$gp
10714                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
10715              For a local symbol, we want
10716                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10717                nop
10718                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10719
10720              If we have a small constant, and this is a reference to
10721              an external symbol, we want
10722                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10723                addu     $tempreg,$tempreg,$gp
10724                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10725                nop
10726                addiu    $tempreg,$tempreg,<constant>
10727              For a local symbol, we want
10728                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10729                nop
10730                addiu    $tempreg,$tempreg,<constant> (BFD_RELOC_LO16)
10731
10732              If we have a large constant, and this is a reference to
10733              an external symbol, we want
10734                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10735                addu     $tempreg,$tempreg,$gp
10736                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10737                lui      $at,<hiconstant>
10738                addiu    $at,$at,<loconstant>
10739                addu     $tempreg,$tempreg,$at
10740              For a local symbol, we want
10741                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10742                lui      $at,<hiconstant>
10743                addiu    $at,$at,<loconstant>    (BFD_RELOC_LO16)
10744                addu     $tempreg,$tempreg,$at
10745           */
10746
10747           expr1.X_add_number = offset_expr.X_add_number;
10748           offset_expr.X_add_number = 0;
10749           relax_start (offset_expr.X_add_symbol);
10750           gpdelay = reg_needs_delay (mips_gp_register);
10751           if (expr1.X_add_number == 0 && breg == 0
10752               && (call || tempreg == PIC_CALL_REG))
10753             {
10754               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
10755               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
10756             }
10757           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
10758           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10759                        tempreg, tempreg, mips_gp_register);
10760           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10761                        tempreg, lw_reloc_type, tempreg);
10762           if (expr1.X_add_number == 0)
10763             {
10764               if (breg != 0)
10765                 {
10766                   /* We're going to put in an addu instruction using
10767                      tempreg, so we may as well insert the nop right
10768                      now.  */
10769                   load_delay_nop ();
10770                 }
10771             }
10772           else if (expr1.X_add_number >= -0x8000
10773                    && expr1.X_add_number < 0x8000)
10774             {
10775               load_delay_nop ();
10776               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10777                            tempreg, tempreg, BFD_RELOC_LO16);
10778             }
10779           else
10780             {
10781               unsigned int dreg;
10782
10783               /* If we are going to add in a base register, and the
10784                  target register and the base register are the same,
10785                  then we are using AT as a temporary register.  Since
10786                  we want to load the constant into AT, we add our
10787                  current AT (from the global offset table) and the
10788                  register into the register now, and pretend we were
10789                  not using a base register.  */
10790               if (breg != op[0])
10791                 dreg = tempreg;
10792               else
10793                 {
10794                   gas_assert (tempreg == AT);
10795                   load_delay_nop ();
10796                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10797                                op[0], AT, breg);
10798                   dreg = op[0];
10799                 }
10800
10801               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10802               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
10803
10804               used_at = 1;
10805             }
10806           offset_expr.X_add_number = SEXT_16BIT (expr1.X_add_number);
10807           relax_switch ();
10808
10809           if (gpdelay)
10810             {
10811               /* This is needed because this instruction uses $gp, but
10812                  the first instruction on the main stream does not.  */
10813               macro_build (NULL, "nop", "");
10814             }
10815
10816           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10817                        local_reloc_type, mips_gp_register);
10818           if (expr1.X_add_number >= -0x8000
10819               && expr1.X_add_number < 0x8000)
10820             {
10821               load_delay_nop ();
10822               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10823                            tempreg, tempreg, BFD_RELOC_LO16);
10824               /* FIXME: If add_number is 0, and there was no base
10825                  register, the external symbol case ended with a load,
10826                  so if the symbol turns out to not be external, and
10827                  the next instruction uses tempreg, an unnecessary nop
10828                  will be inserted.  */
10829             }
10830           else
10831             {
10832               if (breg == op[0])
10833                 {
10834                   /* We must add in the base register now, as in the
10835                      external symbol case.  */
10836                   gas_assert (tempreg == AT);
10837                   load_delay_nop ();
10838                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10839                                op[0], AT, breg);
10840                   tempreg = op[0];
10841                   /* We set breg to 0 because we have arranged to add
10842                      it in in both cases.  */
10843                   breg = 0;
10844                 }
10845
10846               macro_build_lui (&expr1, AT);
10847               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10848                            AT, AT, BFD_RELOC_LO16);
10849               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10850                            tempreg, tempreg, AT);
10851               used_at = 1;
10852             }
10853           relax_end ();
10854         }
10855       else if (mips_big_got && HAVE_NEWABI)
10856         {
10857           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
10858           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
10859           int add_breg_early = 0;
10860
10861           /* This is the large GOT case.  If this is a reference to an
10862              external symbol, and there is no constant, we want
10863                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10864                add      $tempreg,$tempreg,$gp
10865                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10866              or for lca or if tempreg is PIC_CALL_REG
10867                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
10868                add      $tempreg,$tempreg,$gp
10869                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
10870
10871              If we have a small constant, and this is a reference to
10872              an external symbol, we want
10873                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10874                add      $tempreg,$tempreg,$gp
10875                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10876                addi     $tempreg,$tempreg,<constant>
10877
10878              If we have a large constant, and this is a reference to
10879              an external symbol, we want
10880                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10881                addu     $tempreg,$tempreg,$gp
10882                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10883                lui      $at,<hiconstant>
10884                addi     $at,$at,<loconstant>
10885                add      $tempreg,$tempreg,$at
10886
10887              If we have NewABI, and we know it's a local symbol, we want
10888                lw       $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
10889                addiu    $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
10890              otherwise we have to resort to GOT_HI16/GOT_LO16.  */
10891
10892           relax_start (offset_expr.X_add_symbol);
10893
10894           expr1.X_add_number = offset_expr.X_add_number;
10895           offset_expr.X_add_number = 0;
10896
10897           if (expr1.X_add_number == 0 && breg == 0
10898               && (call || tempreg == PIC_CALL_REG))
10899             {
10900               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
10901               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
10902             }
10903           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
10904           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10905                        tempreg, tempreg, mips_gp_register);
10906           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10907                        tempreg, lw_reloc_type, tempreg);
10908
10909           if (expr1.X_add_number == 0)
10910             ;
10911           else if (expr1.X_add_number >= -0x8000
10912                    && expr1.X_add_number < 0x8000)
10913             {
10914               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10915                            tempreg, tempreg, BFD_RELOC_LO16);
10916             }
10917           else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
10918             {
10919               unsigned int dreg;
10920
10921               /* If we are going to add in a base register, and the
10922                  target register and the base register are the same,
10923                  then we are using AT as a temporary register.  Since
10924                  we want to load the constant into AT, we add our
10925                  current AT (from the global offset table) and the
10926                  register into the register now, and pretend we were
10927                  not using a base register.  */
10928               if (breg != op[0])
10929                 dreg = tempreg;
10930               else
10931                 {
10932                   gas_assert (tempreg == AT);
10933                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10934                                op[0], AT, breg);
10935                   dreg = op[0];
10936                   add_breg_early = 1;
10937                 }
10938
10939               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10940               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
10941
10942               used_at = 1;
10943             }
10944           else
10945             as_bad (_("PIC code offset overflow (max 32 signed bits)"));
10946
10947           relax_switch ();
10948           offset_expr.X_add_number = expr1.X_add_number;
10949           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10950                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
10951           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
10952                        tempreg, BFD_RELOC_MIPS_GOT_OFST);
10953           if (add_breg_early)
10954             {
10955               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10956                            op[0], tempreg, breg);
10957               breg = 0;
10958               tempreg = op[0];
10959             }
10960           relax_end ();
10961         }
10962       else
10963         abort ();
10964
10965       if (breg != 0)
10966         macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", op[0], tempreg, breg);
10967       break;
10968
10969     case M_MSGSND:
10970       gas_assert (!mips_opts.micromips);
10971       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x01);
10972       break;
10973
10974     case M_MSGLD:
10975       gas_assert (!mips_opts.micromips);
10976       macro_build (NULL, "c2", "C", 0x02);
10977       break;
10978
10979     case M_MSGLD_T:
10980       gas_assert (!mips_opts.micromips);
10981       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x02);
10982       break;
10983
10984     case M_MSGWAIT:
10985       gas_assert (!mips_opts.micromips);
10986       macro_build (NULL, "c2", "C", 3);
10987       break;
10988
10989     case M_MSGWAIT_T:
10990       gas_assert (!mips_opts.micromips);
10991       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x03);
10992       break;
10993
10994     case M_J_A:
10995       /* The j instruction may not be used in PIC code, since it
10996          requires an absolute address.  We convert it to a b
10997          instruction.  */
10998       if (mips_pic == NO_PIC)
10999         macro_build (&offset_expr, "j", "a");
11000       else
11001         macro_build (&offset_expr, "b", "p");
11002       break;
11003
11004       /* The jal instructions must be handled as macros because when
11005          generating PIC code they expand to multi-instruction
11006          sequences.  Normally they are simple instructions.  */
11007     case M_JALS_1:
11008       op[1] = op[0];
11009       op[0] = RA;
11010       /* Fall through.  */
11011     case M_JALS_2:
11012       gas_assert (mips_opts.micromips);
11013       if (mips_opts.insn32)
11014         {
11015           as_bad (_("opcode not supported in the `insn32' mode `%s'"), str);
11016           break;
11017         }
11018       jals = 1;
11019       goto jal;
11020     case M_JAL_1:
11021       op[1] = op[0];
11022       op[0] = RA;
11023       /* Fall through.  */
11024     case M_JAL_2:
11025     jal:
11026       if (mips_pic == NO_PIC)
11027         {
11028           s = jals ? "jalrs" : "jalr";
11029           if (mips_opts.micromips
11030               && !mips_opts.insn32
11031               && op[0] == RA
11032               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
11033             macro_build (NULL, s, "mj", op[1]);
11034           else
11035             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
11036         }
11037       else
11038         {
11039           int cprestore = (mips_pic == SVR4_PIC && !HAVE_NEWABI
11040                            && mips_cprestore_offset >= 0);
11041
11042           if (op[1] != PIC_CALL_REG)
11043             as_warn (_("MIPS PIC call to register other than $25"));
11044
11045           s = ((mips_opts.micromips
11046                 && !mips_opts.insn32
11047                 && (!mips_opts.noreorder || cprestore))
11048                ? "jalrs" : "jalr");
11049           if (mips_opts.micromips
11050               && !mips_opts.insn32
11051               && op[0] == RA
11052               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
11053             macro_build (NULL, s, "mj", op[1]);
11054           else
11055             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
11056           if (mips_pic == SVR4_PIC && !HAVE_NEWABI)
11057             {
11058               if (mips_cprestore_offset < 0)
11059                 as_warn (_("no .cprestore pseudo-op used in PIC code"));
11060               else
11061                 {
11062                   if (!mips_frame_reg_valid)
11063                     {
11064                       as_warn (_("no .frame pseudo-op used in PIC code"));
11065                       /* Quiet this warning.  */
11066                       mips_frame_reg_valid = 1;
11067                     }
11068                   if (!mips_cprestore_valid)
11069                     {
11070                       as_warn (_("no .cprestore pseudo-op used in PIC code"));
11071                       /* Quiet this warning.  */
11072                       mips_cprestore_valid = 1;
11073                     }
11074                   if (mips_opts.noreorder)
11075                     macro_build (NULL, "nop", "");
11076                   expr1.X_add_number = mips_cprestore_offset;
11077                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
11078                                                 mips_gp_register,
11079                                                 mips_frame_reg,
11080                                                 HAVE_64BIT_ADDRESSES);
11081                 }
11082             }
11083         }
11084
11085       break;
11086
11087     case M_JALS_A:
11088       gas_assert (mips_opts.micromips);
11089       if (mips_opts.insn32)
11090         {
11091           as_bad (_("opcode not supported in the `insn32' mode `%s'"), str);
11092           break;
11093         }
11094       jals = 1;
11095       /* Fall through.  */
11096     case M_JAL_A:
11097       if (mips_pic == NO_PIC)
11098         macro_build (&offset_expr, jals ? "jals" : "jal", "a");
11099       else if (mips_pic == SVR4_PIC)
11100         {
11101           /* If this is a reference to an external symbol, and we are
11102              using a small GOT, we want
11103                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_CALL16)
11104                nop
11105                jalr     $ra,$25
11106                nop
11107                lw       $gp,cprestore($sp)
11108              The cprestore value is set using the .cprestore
11109              pseudo-op.  If we are using a big GOT, we want
11110                lui      $25,<sym>               (BFD_RELOC_MIPS_CALL_HI16)
11111                addu     $25,$25,$gp
11112                lw       $25,<sym>($25)          (BFD_RELOC_MIPS_CALL_LO16)
11113                nop
11114                jalr     $ra,$25
11115                nop
11116                lw       $gp,cprestore($sp)
11117              If the symbol is not external, we want
11118                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
11119                nop
11120                addiu    $25,$25,<sym>           (BFD_RELOC_LO16)
11121                jalr     $ra,$25
11122                nop
11123                lw $gp,cprestore($sp)
11124
11125              For NewABI, we use the same CALL16 or CALL_HI16/CALL_LO16
11126              sequences above, minus nops, unless the symbol is local,
11127              which enables us to use GOT_PAGE/GOT_OFST (big got) or
11128              GOT_DISP.  */
11129           if (HAVE_NEWABI)
11130             {
11131               if (!mips_big_got)
11132                 {
11133                   relax_start (offset_expr.X_add_symbol);
11134                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11135                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
11136                                mips_gp_register);
11137                   relax_switch ();
11138                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11139                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_DISP,
11140                                mips_gp_register);
11141                   relax_end ();
11142                 }
11143               else
11144                 {
11145                   relax_start (offset_expr.X_add_symbol);
11146                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
11147                                BFD_RELOC_MIPS_CALL_HI16);
11148                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
11149                                PIC_CALL_REG, mips_gp_register);
11150                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11151                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
11152                                PIC_CALL_REG);
11153                   relax_switch ();
11154                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11155                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_PAGE,
11156                                mips_gp_register);
11157                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11158                                PIC_CALL_REG, PIC_CALL_REG,
11159                                BFD_RELOC_MIPS_GOT_OFST);
11160                   relax_end ();
11161                 }
11162
11163               macro_build_jalr (&offset_expr, 0);
11164             }
11165           else
11166             {
11167               relax_start (offset_expr.X_add_symbol);
11168               if (!mips_big_got)
11169                 {
11170                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11171                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
11172                                mips_gp_register);
11173                   load_delay_nop ();
11174                   relax_switch ();
11175                 }
11176               else
11177                 {
11178                   int gpdelay;
11179
11180                   gpdelay = reg_needs_delay (mips_gp_register);
11181                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
11182                                BFD_RELOC_MIPS_CALL_HI16);
11183                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
11184                                PIC_CALL_REG, mips_gp_register);
11185                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11186                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
11187                                PIC_CALL_REG);
11188                   load_delay_nop ();
11189                   relax_switch ();
11190                   if (gpdelay)
11191                     macro_build (NULL, "nop", "");
11192                 }
11193               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11194                            PIC_CALL_REG, BFD_RELOC_MIPS_GOT16,
11195                            mips_gp_register);
11196               load_delay_nop ();
11197               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11198                            PIC_CALL_REG, PIC_CALL_REG, BFD_RELOC_LO16);
11199               relax_end ();
11200               macro_build_jalr (&offset_expr, mips_cprestore_offset >= 0);
11201
11202               if (mips_cprestore_offset < 0)
11203                 as_warn (_("no .cprestore pseudo-op used in PIC code"));
11204               else
11205                 {
11206                   if (!mips_frame_reg_valid)
11207                     {
11208                       as_warn (_("no .frame pseudo-op used in PIC code"));
11209                       /* Quiet this warning.  */
11210                       mips_frame_reg_valid = 1;
11211                     }
11212                   if (!mips_cprestore_valid)
11213                     {
11214                       as_warn (_("no .cprestore pseudo-op used in PIC code"));
11215                       /* Quiet this warning.  */
11216                       mips_cprestore_valid = 1;
11217                     }
11218                   if (mips_opts.noreorder)
11219                     macro_build (NULL, "nop", "");
11220                   expr1.X_add_number = mips_cprestore_offset;
11221                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
11222                                                 mips_gp_register,
11223                                                 mips_frame_reg,
11224                                                 HAVE_64BIT_ADDRESSES);
11225                 }
11226             }
11227         }
11228       else if (mips_pic == VXWORKS_PIC)
11229         as_bad (_("non-PIC jump used in PIC library"));
11230       else
11231         abort ();
11232
11233       break;
11234
11235     case M_LBUE_AB:
11236       s = "lbue";
11237       fmt = "t,+j(b)";
11238       offbits = 9;
11239       goto ld_st;
11240     case M_LHUE_AB:
11241       s = "lhue";
11242       fmt = "t,+j(b)";
11243       offbits = 9;
11244       goto ld_st;
11245     case M_LBE_AB:
11246       s = "lbe";
11247       fmt = "t,+j(b)";
11248       offbits = 9;
11249       goto ld_st;
11250     case M_LHE_AB:
11251       s = "lhe";
11252       fmt = "t,+j(b)";
11253       offbits = 9;
11254       goto ld_st;
11255     case M_LLE_AB:
11256       s = "lle";
11257       fmt = "t,+j(b)";
11258       offbits = 9;
11259       goto ld_st;
11260     case M_LWE_AB:
11261       s = "lwe";
11262       fmt = "t,+j(b)";
11263       offbits = 9;
11264       goto ld_st;
11265     case M_LWLE_AB:
11266       s = "lwle";
11267       fmt = "t,+j(b)";
11268       offbits = 9;
11269       goto ld_st;
11270     case M_LWRE_AB:
11271       s = "lwre";
11272       fmt = "t,+j(b)";
11273       offbits = 9;
11274       goto ld_st;
11275     case M_SBE_AB:
11276       s = "sbe";
11277       fmt = "t,+j(b)";
11278       offbits = 9;
11279       goto ld_st;
11280     case M_SCE_AB:
11281       s = "sce";
11282       fmt = "t,+j(b)";
11283       offbits = 9;
11284       goto ld_st;
11285     case M_SHE_AB:
11286       s = "she";
11287       fmt = "t,+j(b)";
11288       offbits = 9;
11289       goto ld_st;
11290     case M_SWE_AB:
11291       s = "swe";
11292       fmt = "t,+j(b)";
11293       offbits = 9;
11294       goto ld_st;
11295     case M_SWLE_AB:
11296       s = "swle";
11297       fmt = "t,+j(b)";
11298       offbits = 9;
11299       goto ld_st;
11300     case M_SWRE_AB:
11301       s = "swre";
11302       fmt = "t,+j(b)";
11303       offbits = 9;
11304       goto ld_st;
11305     case M_ACLR_AB:
11306       s = "aclr";
11307       fmt = "\\,~(b)";
11308       offbits = 12;
11309       goto ld_st;
11310     case M_ASET_AB:
11311       s = "aset";
11312       fmt = "\\,~(b)";
11313       offbits = 12;
11314       goto ld_st;
11315     case M_LB_AB:
11316       s = "lb";
11317       fmt = "t,o(b)";
11318       goto ld;
11319     case M_LBU_AB:
11320       s = "lbu";
11321       fmt = "t,o(b)";
11322       goto ld;
11323     case M_LH_AB:
11324       s = "lh";
11325       fmt = "t,o(b)";
11326       goto ld;
11327     case M_LHU_AB:
11328       s = "lhu";
11329       fmt = "t,o(b)";
11330       goto ld;
11331     case M_LW_AB:
11332       s = "lw";
11333       fmt = "t,o(b)";
11334       goto ld;
11335     case M_LWC0_AB:
11336       gas_assert (!mips_opts.micromips);
11337       s = "lwc0";
11338       fmt = "E,o(b)";
11339       /* Itbl support may require additional care here.  */
11340       coproc = 1;
11341       goto ld_st;
11342     case M_LWC1_AB:
11343       s = "lwc1";
11344       fmt = "T,o(b)";
11345       /* Itbl support may require additional care here.  */
11346       coproc = 1;
11347       goto ld_st;
11348     case M_LWC2_AB:
11349       s = "lwc2";
11350       fmt = COP12_FMT;
11351       offbits = (mips_opts.micromips ? 12
11352                  : ISA_IS_R6 (mips_opts.isa) ? 11
11353                  : 16);
11354       /* Itbl support may require additional care here.  */
11355       coproc = 1;
11356       goto ld_st;
11357     case M_LWC3_AB:
11358       gas_assert (!mips_opts.micromips);
11359       s = "lwc3";
11360       fmt = "E,o(b)";
11361       /* Itbl support may require additional care here.  */
11362       coproc = 1;
11363       goto ld_st;
11364     case M_LWL_AB:
11365       s = "lwl";
11366       fmt = MEM12_FMT;
11367       offbits = (mips_opts.micromips ? 12 : 16);
11368       goto ld_st;
11369     case M_LWR_AB:
11370       s = "lwr";
11371       fmt = MEM12_FMT;
11372       offbits = (mips_opts.micromips ? 12 : 16);
11373       goto ld_st;
11374     case M_LDC1_AB:
11375       s = "ldc1";
11376       fmt = "T,o(b)";
11377       /* Itbl support may require additional care here.  */
11378       coproc = 1;
11379       goto ld_st;
11380     case M_LDC2_AB:
11381       s = "ldc2";
11382       fmt = COP12_FMT;
11383       offbits = (mips_opts.micromips ? 12
11384                  : ISA_IS_R6 (mips_opts.isa) ? 11
11385                  : 16);
11386       /* Itbl support may require additional care here.  */
11387       coproc = 1;
11388       goto ld_st;
11389     case M_LQC2_AB:
11390       s = "lqc2";
11391       fmt = "+7,o(b)";
11392       /* Itbl support may require additional care here.  */
11393       coproc = 1;
11394       goto ld_st;
11395     case M_LDC3_AB:
11396       s = "ldc3";
11397       fmt = "E,o(b)";
11398       /* Itbl support may require additional care here.  */
11399       coproc = 1;
11400       goto ld_st;
11401     case M_LDL_AB:
11402       s = "ldl";
11403       fmt = MEM12_FMT;
11404       offbits = (mips_opts.micromips ? 12 : 16);
11405       goto ld_st;
11406     case M_LDR_AB:
11407       s = "ldr";
11408       fmt = MEM12_FMT;
11409       offbits = (mips_opts.micromips ? 12 : 16);
11410       goto ld_st;
11411     case M_LL_AB:
11412       s = "ll";
11413       fmt = LL_SC_FMT;
11414       offbits = (mips_opts.micromips ? 12
11415                  : ISA_IS_R6 (mips_opts.isa) ? 9
11416                  : 16);
11417       goto ld;
11418     case M_LLD_AB:
11419       s = "lld";
11420       fmt = LL_SC_FMT;
11421       offbits = (mips_opts.micromips ? 12
11422                  : ISA_IS_R6 (mips_opts.isa) ? 9
11423                  : 16);
11424       goto ld;
11425     case M_LWU_AB:
11426       s = "lwu";
11427       fmt = MEM12_FMT;
11428       offbits = (mips_opts.micromips ? 12 : 16);
11429       goto ld;
11430     case M_LWP_AB:
11431       gas_assert (mips_opts.micromips);
11432       s = "lwp";
11433       fmt = "t,~(b)";
11434       offbits = 12;
11435       lp = 1;
11436       goto ld;
11437     case M_LDP_AB:
11438       gas_assert (mips_opts.micromips);
11439       s = "ldp";
11440       fmt = "t,~(b)";
11441       offbits = 12;
11442       lp = 1;
11443       goto ld;
11444     case M_LWM_AB:
11445       gas_assert (mips_opts.micromips);
11446       s = "lwm";
11447       fmt = "n,~(b)";
11448       offbits = 12;
11449       goto ld_st;
11450     case M_LDM_AB:
11451       gas_assert (mips_opts.micromips);
11452       s = "ldm";
11453       fmt = "n,~(b)";
11454       offbits = 12;
11455       goto ld_st;
11456
11457     ld:
11458       /* We don't want to use $0 as tempreg.  */
11459       if (op[2] == op[0] + lp || op[0] + lp == ZERO)
11460         goto ld_st;
11461       else
11462         tempreg = op[0] + lp;
11463       goto ld_noat;
11464
11465     case M_SB_AB:
11466       s = "sb";
11467       fmt = "t,o(b)";
11468       goto ld_st;
11469     case M_SH_AB:
11470       s = "sh";
11471       fmt = "t,o(b)";
11472       goto ld_st;
11473     case M_SW_AB:
11474       s = "sw";
11475       fmt = "t,o(b)";
11476       goto ld_st;
11477     case M_SWC0_AB:
11478       gas_assert (!mips_opts.micromips);
11479       s = "swc0";
11480       fmt = "E,o(b)";
11481       /* Itbl support may require additional care here.  */
11482       coproc = 1;
11483       goto ld_st;
11484     case M_SWC1_AB:
11485       s = "swc1";
11486       fmt = "T,o(b)";
11487       /* Itbl support may require additional care here.  */
11488       coproc = 1;
11489       goto ld_st;
11490     case M_SWC2_AB:
11491       s = "swc2";
11492       fmt = COP12_FMT;
11493       offbits = (mips_opts.micromips ? 12
11494                  : ISA_IS_R6 (mips_opts.isa) ? 11
11495                  : 16);
11496       /* Itbl support may require additional care here.  */
11497       coproc = 1;
11498       goto ld_st;
11499     case M_SWC3_AB:
11500       gas_assert (!mips_opts.micromips);
11501       s = "swc3";
11502       fmt = "E,o(b)";
11503       /* Itbl support may require additional care here.  */
11504       coproc = 1;
11505       goto ld_st;
11506     case M_SWL_AB:
11507       s = "swl";
11508       fmt = MEM12_FMT;
11509       offbits = (mips_opts.micromips ? 12 : 16);
11510       goto ld_st;
11511     case M_SWR_AB:
11512       s = "swr";
11513       fmt = MEM12_FMT;
11514       offbits = (mips_opts.micromips ? 12 : 16);
11515       goto ld_st;
11516     case M_SC_AB:
11517       s = "sc";
11518       fmt = LL_SC_FMT;
11519       offbits = (mips_opts.micromips ? 12
11520                  : ISA_IS_R6 (mips_opts.isa) ? 9
11521                  : 16);
11522       goto ld_st;
11523     case M_SCD_AB:
11524       s = "scd";
11525       fmt = LL_SC_FMT;
11526       offbits = (mips_opts.micromips ? 12
11527                  : ISA_IS_R6 (mips_opts.isa) ? 9
11528                  : 16);
11529       goto ld_st;
11530     case M_CACHE_AB:
11531       s = "cache";
11532       fmt = (mips_opts.micromips ? "k,~(b)"
11533              : ISA_IS_R6 (mips_opts.isa) ? "k,+j(b)"
11534              : "k,o(b)");
11535       offbits = (mips_opts.micromips ? 12
11536                  : ISA_IS_R6 (mips_opts.isa) ? 9
11537                  : 16);
11538       goto ld_st;
11539     case M_CACHEE_AB:
11540       s = "cachee";
11541       fmt = "k,+j(b)";
11542       offbits = 9;
11543       goto ld_st;
11544     case M_PREF_AB:
11545       s = "pref";
11546       fmt = (mips_opts.micromips ? "k,~(b)"
11547              : ISA_IS_R6 (mips_opts.isa) ? "k,+j(b)"
11548              : "k,o(b)");
11549       offbits = (mips_opts.micromips ? 12
11550                  : ISA_IS_R6 (mips_opts.isa) ? 9
11551                  : 16);
11552       goto ld_st;
11553     case M_PREFE_AB:
11554       s = "prefe";
11555       fmt = "k,+j(b)";
11556       offbits = 9;
11557       goto ld_st;
11558     case M_SDC1_AB:
11559       s = "sdc1";
11560       fmt = "T,o(b)";
11561       coproc = 1;
11562       /* Itbl support may require additional care here.  */
11563       goto ld_st;
11564     case M_SDC2_AB:
11565       s = "sdc2";
11566       fmt = COP12_FMT;
11567       offbits = (mips_opts.micromips ? 12
11568                  : ISA_IS_R6 (mips_opts.isa) ? 11
11569                  : 16);
11570       /* Itbl support may require additional care here.  */
11571       coproc = 1;
11572       goto ld_st;
11573     case M_SQC2_AB:
11574       s = "sqc2";
11575       fmt = "+7,o(b)";
11576       /* Itbl support may require additional care here.  */
11577       coproc = 1;
11578       goto ld_st;
11579     case M_SDC3_AB:
11580       gas_assert (!mips_opts.micromips);
11581       s = "sdc3";
11582       fmt = "E,o(b)";
11583       /* Itbl support may require additional care here.  */
11584       coproc = 1;
11585       goto ld_st;
11586     case M_SDL_AB:
11587       s = "sdl";
11588       fmt = MEM12_FMT;
11589       offbits = (mips_opts.micromips ? 12 : 16);
11590       goto ld_st;
11591     case M_SDR_AB:
11592       s = "sdr";
11593       fmt = MEM12_FMT;
11594       offbits = (mips_opts.micromips ? 12 : 16);
11595       goto ld_st;
11596     case M_SWP_AB:
11597       gas_assert (mips_opts.micromips);
11598       s = "swp";
11599       fmt = "t,~(b)";
11600       offbits = 12;
11601       goto ld_st;
11602     case M_SDP_AB:
11603       gas_assert (mips_opts.micromips);
11604       s = "sdp";
11605       fmt = "t,~(b)";
11606       offbits = 12;
11607       goto ld_st;
11608     case M_SWM_AB:
11609       gas_assert (mips_opts.micromips);
11610       s = "swm";
11611       fmt = "n,~(b)";
11612       offbits = 12;
11613       goto ld_st;
11614     case M_SDM_AB:
11615       gas_assert (mips_opts.micromips);
11616       s = "sdm";
11617       fmt = "n,~(b)";
11618       offbits = 12;
11619
11620     ld_st:
11621       tempreg = AT;
11622     ld_noat:
11623       breg = op[2];
11624       if (small_offset_p (0, align, 16))
11625         {
11626           /* The first case exists for M_LD_AB and M_SD_AB, which are
11627              macros for o32 but which should act like normal instructions
11628              otherwise.  */
11629           if (offbits == 16)
11630             macro_build (&offset_expr, s, fmt, op[0], -1, offset_reloc[0],
11631                          offset_reloc[1], offset_reloc[2], breg);
11632           else if (small_offset_p (0, align, offbits))
11633             {
11634               if (offbits == 0)
11635                 macro_build (NULL, s, fmt, op[0], breg);
11636               else
11637                 macro_build (NULL, s, fmt, op[0],
11638                              (int) offset_expr.X_add_number, breg);
11639             }
11640           else
11641             {
11642               if (tempreg == AT)
11643                 used_at = 1;
11644               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11645                            tempreg, breg, -1, offset_reloc[0],
11646                            offset_reloc[1], offset_reloc[2]);
11647               if (offbits == 0)
11648                 macro_build (NULL, s, fmt, op[0], tempreg);
11649               else
11650                 macro_build (NULL, s, fmt, op[0], 0, tempreg);
11651             }
11652           break;
11653         }
11654
11655       if (tempreg == AT)
11656         used_at = 1;
11657
11658       if (offset_expr.X_op != O_constant
11659           && offset_expr.X_op != O_symbol)
11660         {
11661           as_bad (_("expression too complex"));
11662           offset_expr.X_op = O_constant;
11663         }
11664
11665       if (HAVE_32BIT_ADDRESSES
11666           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
11667         {
11668           char value [32];
11669
11670           sprintf_vma (value, offset_expr.X_add_number);
11671           as_bad (_("number (0x%s) larger than 32 bits"), value);
11672         }
11673
11674       /* A constant expression in PIC code can be handled just as it
11675          is in non PIC code.  */
11676       if (offset_expr.X_op == O_constant)
11677         {
11678           expr1.X_add_number = offset_high_part (offset_expr.X_add_number,
11679                                                  offbits == 0 ? 16 : offbits);
11680           offset_expr.X_add_number -= expr1.X_add_number;
11681
11682           load_register (tempreg, &expr1, HAVE_64BIT_ADDRESSES);
11683           if (breg != 0)
11684             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11685                          tempreg, tempreg, breg);
11686           if (offbits == 0)
11687             {
11688               if (offset_expr.X_add_number != 0)
11689                 macro_build (&offset_expr, ADDRESS_ADDI_INSN,
11690                              "t,r,j", tempreg, tempreg, BFD_RELOC_LO16);
11691               macro_build (NULL, s, fmt, op[0], tempreg);
11692             }
11693           else if (offbits == 16)
11694             macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11695           else
11696             macro_build (NULL, s, fmt, op[0],
11697                          (int) offset_expr.X_add_number, tempreg);
11698         }
11699       else if (offbits != 16)
11700         {
11701           /* The offset field is too narrow to be used for a low-part
11702              relocation, so load the whole address into the auxillary
11703              register.  */
11704           load_address (tempreg, &offset_expr, &used_at);
11705           if (breg != 0)
11706             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11707                          tempreg, tempreg, breg);
11708           if (offbits == 0)
11709             macro_build (NULL, s, fmt, op[0], tempreg);
11710           else
11711             macro_build (NULL, s, fmt, op[0], 0, tempreg);
11712         }
11713       else if (mips_pic == NO_PIC)
11714         {
11715           /* If this is a reference to a GP relative symbol, and there
11716              is no base register, we want
11717                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
11718              Otherwise, if there is no base register, we want
11719                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11720                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11721              If we have a constant, we need two instructions anyhow,
11722              so we always use the latter form.
11723
11724              If we have a base register, and this is a reference to a
11725              GP relative symbol, we want
11726                addu     $tempreg,$breg,$gp
11727                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_GPREL16)
11728              Otherwise we want
11729                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11730                addu     $tempreg,$tempreg,$breg
11731                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11732              With a constant we always use the latter case.
11733
11734              With 64bit address space and no base register and $at usable,
11735              we want
11736                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11737                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11738                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11739                dsll32   $tempreg,0
11740                daddu    $tempreg,$at
11741                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11742              If we have a base register, we want
11743                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11744                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11745                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11746                daddu    $at,$breg
11747                dsll32   $tempreg,0
11748                daddu    $tempreg,$at
11749                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11750
11751              Without $at we can't generate the optimal path for superscalar
11752              processors here since this would require two temporary registers.
11753                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11754                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11755                dsll     $tempreg,16
11756                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11757                dsll     $tempreg,16
11758                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11759              If we have a base register, we want
11760                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11761                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11762                dsll     $tempreg,16
11763                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11764                dsll     $tempreg,16
11765                daddu    $tempreg,$tempreg,$breg
11766                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11767
11768              For GP relative symbols in 64bit address space we can use
11769              the same sequence as in 32bit address space.  */
11770           if (HAVE_64BIT_SYMBOLS)
11771             {
11772               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11773                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11774                 {
11775                   relax_start (offset_expr.X_add_symbol);
11776                   if (breg == 0)
11777                     {
11778                       macro_build (&offset_expr, s, fmt, op[0],
11779                                    BFD_RELOC_GPREL16, mips_gp_register);
11780                     }
11781                   else
11782                     {
11783                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11784                                    tempreg, breg, mips_gp_register);
11785                       macro_build (&offset_expr, s, fmt, op[0],
11786                                    BFD_RELOC_GPREL16, tempreg);
11787                     }
11788                   relax_switch ();
11789                 }
11790
11791               if (used_at == 0 && mips_opts.at)
11792                 {
11793                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11794                                BFD_RELOC_MIPS_HIGHEST);
11795                   macro_build (&offset_expr, "lui", LUI_FMT, AT,
11796                                BFD_RELOC_HI16_S);
11797                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11798                                tempreg, BFD_RELOC_MIPS_HIGHER);
11799                   if (breg != 0)
11800                     macro_build (NULL, "daddu", "d,v,t", AT, AT, breg);
11801                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
11802                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
11803                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16,
11804                                tempreg);
11805                   used_at = 1;
11806                 }
11807               else
11808                 {
11809                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11810                                BFD_RELOC_MIPS_HIGHEST);
11811                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11812                                tempreg, BFD_RELOC_MIPS_HIGHER);
11813                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11814                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11815                                tempreg, BFD_RELOC_HI16_S);
11816                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11817                   if (breg != 0)
11818                     macro_build (NULL, "daddu", "d,v,t",
11819                                  tempreg, tempreg, breg);
11820                   macro_build (&offset_expr, s, fmt, op[0],
11821                                BFD_RELOC_LO16, tempreg);
11822                 }
11823
11824               if (mips_relax.sequence)
11825                 relax_end ();
11826               break;
11827             }
11828
11829           if (breg == 0)
11830             {
11831               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11832                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11833                 {
11834                   relax_start (offset_expr.X_add_symbol);
11835                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_GPREL16,
11836                                mips_gp_register);
11837                   relax_switch ();
11838                 }
11839               macro_build_lui (&offset_expr, tempreg);
11840               macro_build (&offset_expr, s, fmt, op[0],
11841                            BFD_RELOC_LO16, tempreg);
11842               if (mips_relax.sequence)
11843                 relax_end ();
11844             }
11845           else
11846             {
11847               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11848                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11849                 {
11850                   relax_start (offset_expr.X_add_symbol);
11851                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11852                                tempreg, breg, mips_gp_register);
11853                   macro_build (&offset_expr, s, fmt, op[0],
11854                                BFD_RELOC_GPREL16, tempreg);
11855                   relax_switch ();
11856                 }
11857               macro_build_lui (&offset_expr, tempreg);
11858               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11859                            tempreg, tempreg, breg);
11860               macro_build (&offset_expr, s, fmt, op[0],
11861                            BFD_RELOC_LO16, tempreg);
11862               if (mips_relax.sequence)
11863                 relax_end ();
11864             }
11865         }
11866       else if (!mips_big_got)
11867         {
11868           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
11869
11870           /* If this is a reference to an external symbol, we want
11871                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11872                nop
11873                <op>     op[0],0($tempreg)
11874              Otherwise we want
11875                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11876                nop
11877                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
11878                <op>     op[0],0($tempreg)
11879
11880              For NewABI, we want
11881                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
11882                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)
11883
11884              If there is a base register, we add it to $tempreg before
11885              the <op>.  If there is a constant, we stick it in the
11886              <op> instruction.  We don't handle constants larger than
11887              16 bits, because we have no way to load the upper 16 bits
11888              (actually, we could handle them for the subset of cases
11889              in which we are not using $at).  */
11890           gas_assert (offset_expr.X_op == O_symbol);
11891           if (HAVE_NEWABI)
11892             {
11893               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11894                            BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
11895               if (breg != 0)
11896                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11897                              tempreg, tempreg, breg);
11898               macro_build (&offset_expr, s, fmt, op[0],
11899                            BFD_RELOC_MIPS_GOT_OFST, tempreg);
11900               break;
11901             }
11902           expr1.X_add_number = offset_expr.X_add_number;
11903           offset_expr.X_add_number = 0;
11904           if (expr1.X_add_number < -0x8000
11905               || expr1.X_add_number >= 0x8000)
11906             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11907           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11908                        lw_reloc_type, mips_gp_register);
11909           load_delay_nop ();
11910           relax_start (offset_expr.X_add_symbol);
11911           relax_switch ();
11912           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
11913                        tempreg, BFD_RELOC_LO16);
11914           relax_end ();
11915           if (breg != 0)
11916             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11917                          tempreg, tempreg, breg);
11918           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11919         }
11920       else if (mips_big_got && !HAVE_NEWABI)
11921         {
11922           int gpdelay;
11923
11924           /* If this is a reference to an external symbol, we want
11925                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11926                addu     $tempreg,$tempreg,$gp
11927                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11928                <op>     op[0],0($tempreg)
11929              Otherwise we want
11930                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11931                nop
11932                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
11933                <op>     op[0],0($tempreg)
11934              If there is a base register, we add it to $tempreg before
11935              the <op>.  If there is a constant, we stick it in the
11936              <op> instruction.  We don't handle constants larger than
11937              16 bits, because we have no way to load the upper 16 bits
11938              (actually, we could handle them for the subset of cases
11939              in which we are not using $at).  */
11940           gas_assert (offset_expr.X_op == O_symbol);
11941           expr1.X_add_number = offset_expr.X_add_number;
11942           offset_expr.X_add_number = 0;
11943           if (expr1.X_add_number < -0x8000
11944               || expr1.X_add_number >= 0x8000)
11945             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11946           gpdelay = reg_needs_delay (mips_gp_register);
11947           relax_start (offset_expr.X_add_symbol);
11948           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11949                        BFD_RELOC_MIPS_GOT_HI16);
11950           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
11951                        mips_gp_register);
11952           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11953                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
11954           relax_switch ();
11955           if (gpdelay)
11956             macro_build (NULL, "nop", "");
11957           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11958                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
11959           load_delay_nop ();
11960           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
11961                        tempreg, BFD_RELOC_LO16);
11962           relax_end ();
11963
11964           if (breg != 0)
11965             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11966                          tempreg, tempreg, breg);
11967           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11968         }
11969       else if (mips_big_got && HAVE_NEWABI)
11970         {
11971           /* If this is a reference to an external symbol, we want
11972                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11973                add      $tempreg,$tempreg,$gp
11974                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11975                <op>     op[0],<ofst>($tempreg)
11976              Otherwise, for local symbols, we want:
11977                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
11978                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)  */
11979           gas_assert (offset_expr.X_op == O_symbol);
11980           expr1.X_add_number = offset_expr.X_add_number;
11981           offset_expr.X_add_number = 0;
11982           if (expr1.X_add_number < -0x8000
11983               || expr1.X_add_number >= 0x8000)
11984             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11985           relax_start (offset_expr.X_add_symbol);
11986           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11987                        BFD_RELOC_MIPS_GOT_HI16);
11988           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
11989                        mips_gp_register);
11990           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11991                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
11992           if (breg != 0)
11993             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11994                          tempreg, tempreg, breg);
11995           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11996
11997           relax_switch ();
11998           offset_expr.X_add_number = expr1.X_add_number;
11999           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
12000                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
12001           if (breg != 0)
12002             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12003                          tempreg, tempreg, breg);
12004           macro_build (&offset_expr, s, fmt, op[0],
12005                        BFD_RELOC_MIPS_GOT_OFST, tempreg);
12006           relax_end ();
12007         }
12008       else
12009         abort ();
12010
12011       break;
12012
12013     case M_JRADDIUSP:
12014       gas_assert (mips_opts.micromips);
12015       gas_assert (mips_opts.insn32);
12016       start_noreorder ();
12017       macro_build (NULL, "jr", "s", RA);
12018       expr1.X_add_number = op[0] << 2;
12019       macro_build (&expr1, "addiu", "t,r,j", SP, SP, BFD_RELOC_LO16);
12020       end_noreorder ();
12021       break;
12022
12023     case M_JRC:
12024       gas_assert (mips_opts.micromips);
12025       gas_assert (mips_opts.insn32);
12026       macro_build (NULL, "jr", "s", op[0]);
12027       if (mips_opts.noreorder)
12028         macro_build (NULL, "nop", "");
12029       break;
12030
12031     case M_LI:
12032     case M_LI_S:
12033       load_register (op[0], &imm_expr, 0);
12034       break;
12035
12036     case M_DLI:
12037       load_register (op[0], &imm_expr, 1);
12038       break;
12039
12040     case M_LI_SS:
12041       if (imm_expr.X_op == O_constant)
12042         {
12043           used_at = 1;
12044           load_register (AT, &imm_expr, 0);
12045           macro_build (NULL, "mtc1", "t,G", AT, op[0]);
12046           break;
12047         }
12048       else
12049         {
12050           gas_assert (imm_expr.X_op == O_absent
12051                       && offset_expr.X_op == O_symbol
12052                       && strcmp (segment_name (S_GET_SEGMENT
12053                                                (offset_expr.X_add_symbol)),
12054                                  ".lit4") == 0
12055                       && offset_expr.X_add_number == 0);
12056           macro_build (&offset_expr, "lwc1", "T,o(b)", op[0],
12057                        BFD_RELOC_MIPS_LITERAL, mips_gp_register);
12058           break;
12059         }
12060
12061     case M_LI_D:
12062       /* Check if we have a constant in IMM_EXPR.  If the GPRs are 64 bits
12063          wide, IMM_EXPR is the entire value.  Otherwise IMM_EXPR is the high
12064          order 32 bits of the value and the low order 32 bits are either
12065          zero or in OFFSET_EXPR.  */
12066       if (imm_expr.X_op == O_constant)
12067         {
12068           if (GPR_SIZE == 64)
12069             load_register (op[0], &imm_expr, 1);
12070           else
12071             {
12072               int hreg, lreg;
12073
12074               if (target_big_endian)
12075                 {
12076                   hreg = op[0];
12077                   lreg = op[0] + 1;
12078                 }
12079               else
12080                 {
12081                   hreg = op[0] + 1;
12082                   lreg = op[0];
12083                 }
12084
12085               if (hreg <= 31)
12086                 load_register (hreg, &imm_expr, 0);
12087               if (lreg <= 31)
12088                 {
12089                   if (offset_expr.X_op == O_absent)
12090                     move_register (lreg, 0);
12091                   else
12092                     {
12093                       gas_assert (offset_expr.X_op == O_constant);
12094                       load_register (lreg, &offset_expr, 0);
12095                     }
12096                 }
12097             }
12098           break;
12099         }
12100       gas_assert (imm_expr.X_op == O_absent);
12101
12102       /* We know that sym is in the .rdata section.  First we get the
12103          upper 16 bits of the address.  */
12104       if (mips_pic == NO_PIC)
12105         {
12106           macro_build_lui (&offset_expr, AT);
12107           used_at = 1;
12108         }
12109       else
12110         {
12111           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12112                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
12113           used_at = 1;
12114         }
12115
12116       /* Now we load the register(s).  */
12117       if (GPR_SIZE == 64)
12118         {
12119           used_at = 1;
12120           macro_build (&offset_expr, "ld", "t,o(b)", op[0],
12121                        BFD_RELOC_LO16, AT);
12122         }
12123       else
12124         {
12125           used_at = 1;
12126           macro_build (&offset_expr, "lw", "t,o(b)", op[0],
12127                        BFD_RELOC_LO16, AT);
12128           if (op[0] != RA)
12129             {
12130               /* FIXME: How in the world do we deal with the possible
12131                  overflow here?  */
12132               offset_expr.X_add_number += 4;
12133               macro_build (&offset_expr, "lw", "t,o(b)",
12134                            op[0] + 1, BFD_RELOC_LO16, AT);
12135             }
12136         }
12137       break;
12138
12139     case M_LI_DD:
12140       /* Check if we have a constant in IMM_EXPR.  If the FPRs are 64 bits
12141          wide, IMM_EXPR is the entire value and the GPRs are known to be 64
12142          bits wide as well.  Otherwise IMM_EXPR is the high order 32 bits of
12143          the value and the low order 32 bits are either zero or in
12144          OFFSET_EXPR.  */
12145       if (imm_expr.X_op == O_constant)
12146         {
12147           used_at = 1;
12148           load_register (AT, &imm_expr, FPR_SIZE == 64);
12149           if (FPR_SIZE == 64 && GPR_SIZE == 64)
12150             macro_build (NULL, "dmtc1", "t,S", AT, op[0]);
12151           else
12152             {
12153               if (ISA_HAS_MXHC1 (mips_opts.isa))
12154                 macro_build (NULL, "mthc1", "t,G", AT, op[0]);
12155               else if (FPR_SIZE != 32)
12156                 as_bad (_("Unable to generate `%s' compliant code "
12157                           "without mthc1"),
12158                         (FPR_SIZE == 64) ? "fp64" : "fpxx");
12159               else
12160                 macro_build (NULL, "mtc1", "t,G", AT, op[0] + 1);
12161               if (offset_expr.X_op == O_absent)
12162                 macro_build (NULL, "mtc1", "t,G", 0, op[0]);
12163               else
12164                 {
12165                   gas_assert (offset_expr.X_op == O_constant);
12166                   load_register (AT, &offset_expr, 0);
12167                   macro_build (NULL, "mtc1", "t,G", AT, op[0]);
12168                 }
12169             }
12170           break;
12171         }
12172
12173       gas_assert (imm_expr.X_op == O_absent
12174                   && offset_expr.X_op == O_symbol
12175                   && offset_expr.X_add_number == 0);
12176       s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
12177       if (strcmp (s, ".lit8") == 0)
12178         {
12179           op[2] = mips_gp_register;
12180           offset_reloc[0] = BFD_RELOC_MIPS_LITERAL;
12181           offset_reloc[1] = BFD_RELOC_UNUSED;
12182           offset_reloc[2] = BFD_RELOC_UNUSED;
12183         }
12184       else
12185         {
12186           gas_assert (strcmp (s, RDATA_SECTION_NAME) == 0);
12187           used_at = 1;
12188           if (mips_pic != NO_PIC)
12189             macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12190                          BFD_RELOC_MIPS_GOT16, mips_gp_register);
12191           else
12192             {
12193               /* FIXME: This won't work for a 64 bit address.  */
12194               macro_build_lui (&offset_expr, AT);
12195             }
12196
12197           op[2] = AT;
12198           offset_reloc[0] = BFD_RELOC_LO16;
12199           offset_reloc[1] = BFD_RELOC_UNUSED;
12200           offset_reloc[2] = BFD_RELOC_UNUSED;
12201         }
12202       align = 8;
12203       /* Fall through */
12204
12205     case M_L_DAB:
12206       /*
12207        * The MIPS assembler seems to check for X_add_number not
12208        * being double aligned and generating:
12209        *        lui     at,%hi(foo+1)
12210        *        addu    at,at,v1
12211        *        addiu   at,at,%lo(foo+1)
12212        *        lwc1    f2,0(at)
12213        *        lwc1    f3,4(at)
12214        * But, the resulting address is the same after relocation so why
12215        * generate the extra instruction?
12216        */
12217       /* Itbl support may require additional care here.  */
12218       coproc = 1;
12219       fmt = "T,o(b)";
12220       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
12221         {
12222           s = "ldc1";
12223           goto ld_st;
12224         }
12225       s = "lwc1";
12226       goto ldd_std;
12227
12228     case M_S_DAB:
12229       gas_assert (!mips_opts.micromips);
12230       /* Itbl support may require additional care here.  */
12231       coproc = 1;
12232       fmt = "T,o(b)";
12233       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
12234         {
12235           s = "sdc1";
12236           goto ld_st;
12237         }
12238       s = "swc1";
12239       goto ldd_std;
12240
12241     case M_LQ_AB:
12242       fmt = "t,o(b)";
12243       s = "lq";
12244       goto ld;
12245
12246     case M_SQ_AB:
12247       fmt = "t,o(b)";
12248       s = "sq";
12249       goto ld_st;
12250
12251     case M_LD_AB:
12252       fmt = "t,o(b)";
12253       if (GPR_SIZE == 64)
12254         {
12255           s = "ld";
12256           goto ld;
12257         }
12258       s = "lw";
12259       goto ldd_std;
12260
12261     case M_SD_AB:
12262       fmt = "t,o(b)";
12263       if (GPR_SIZE == 64)
12264         {
12265           s = "sd";
12266           goto ld_st;
12267         }
12268       s = "sw";
12269
12270     ldd_std:
12271       /* Even on a big endian machine $fn comes before $fn+1.  We have
12272          to adjust when loading from memory.  We set coproc if we must
12273          load $fn+1 first.  */
12274       /* Itbl support may require additional care here.  */
12275       if (!target_big_endian)
12276         coproc = 0;
12277
12278       breg = op[2];
12279       if (small_offset_p (0, align, 16))
12280         {
12281           ep = &offset_expr;
12282           if (!small_offset_p (4, align, 16))
12283             {
12284               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", AT, breg,
12285                            -1, offset_reloc[0], offset_reloc[1],
12286                            offset_reloc[2]);
12287               expr1.X_add_number = 0;
12288               ep = &expr1;
12289               breg = AT;
12290               used_at = 1;
12291               offset_reloc[0] = BFD_RELOC_LO16;
12292               offset_reloc[1] = BFD_RELOC_UNUSED;
12293               offset_reloc[2] = BFD_RELOC_UNUSED;
12294             }
12295           if (strcmp (s, "lw") == 0 && op[0] == breg)
12296             {
12297               ep->X_add_number += 4;
12298               macro_build (ep, s, fmt, op[0] + 1, -1, offset_reloc[0],
12299                            offset_reloc[1], offset_reloc[2], breg);
12300               ep->X_add_number -= 4;
12301               macro_build (ep, s, fmt, op[0], -1, offset_reloc[0],
12302                            offset_reloc[1], offset_reloc[2], breg);
12303             }
12304           else
12305             {
12306               macro_build (ep, s, fmt, coproc ? op[0] + 1 : op[0], -1,
12307                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
12308                            breg);
12309               ep->X_add_number += 4;
12310               macro_build (ep, s, fmt, coproc ? op[0] : op[0] + 1, -1,
12311                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
12312                            breg);
12313             }
12314           break;
12315         }
12316
12317       if (offset_expr.X_op != O_symbol
12318           && offset_expr.X_op != O_constant)
12319         {
12320           as_bad (_("expression too complex"));
12321           offset_expr.X_op = O_constant;
12322         }
12323
12324       if (HAVE_32BIT_ADDRESSES
12325           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
12326         {
12327           char value [32];
12328
12329           sprintf_vma (value, offset_expr.X_add_number);
12330           as_bad (_("number (0x%s) larger than 32 bits"), value);
12331         }
12332
12333       if (mips_pic == NO_PIC || offset_expr.X_op == O_constant)
12334         {
12335           /* If this is a reference to a GP relative symbol, we want
12336                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
12337                <op>     op[0]+1,<sym>+4($gp)    (BFD_RELOC_GPREL16)
12338              If we have a base register, we use this
12339                addu     $at,$breg,$gp
12340                <op>     op[0],<sym>($at)        (BFD_RELOC_GPREL16)
12341                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_GPREL16)
12342              If this is not a GP relative symbol, we want
12343                lui      $at,<sym>               (BFD_RELOC_HI16_S)
12344                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12345                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12346              If there is a base register, we add it to $at after the
12347              lui instruction.  If there is a constant, we always use
12348              the last case.  */
12349           if (offset_expr.X_op == O_symbol
12350               && (valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
12351               && !nopic_need_relax (offset_expr.X_add_symbol, 1))
12352             {
12353               relax_start (offset_expr.X_add_symbol);
12354               if (breg == 0)
12355                 {
12356                   tempreg = mips_gp_register;
12357                 }
12358               else
12359                 {
12360                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12361                                AT, breg, mips_gp_register);
12362                   tempreg = AT;
12363                   used_at = 1;
12364                 }
12365
12366               /* Itbl support may require additional care here.  */
12367               macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12368                            BFD_RELOC_GPREL16, tempreg);
12369               offset_expr.X_add_number += 4;
12370
12371               /* Set mips_optimize to 2 to avoid inserting an
12372                  undesired nop.  */
12373               hold_mips_optimize = mips_optimize;
12374               mips_optimize = 2;
12375               /* Itbl support may require additional care here.  */
12376               macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12377                            BFD_RELOC_GPREL16, tempreg);
12378               mips_optimize = hold_mips_optimize;
12379
12380               relax_switch ();
12381
12382               offset_expr.X_add_number -= 4;
12383             }
12384           used_at = 1;
12385           if (offset_high_part (offset_expr.X_add_number, 16)
12386               != offset_high_part (offset_expr.X_add_number + 4, 16))
12387             {
12388               load_address (AT, &offset_expr, &used_at);
12389               offset_expr.X_op = O_constant;
12390               offset_expr.X_add_number = 0;
12391             }
12392           else
12393             macro_build_lui (&offset_expr, AT);
12394           if (breg != 0)
12395             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12396           /* Itbl support may require additional care here.  */
12397           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12398                        BFD_RELOC_LO16, AT);
12399           /* FIXME: How do we handle overflow here?  */
12400           offset_expr.X_add_number += 4;
12401           /* Itbl support may require additional care here.  */
12402           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12403                        BFD_RELOC_LO16, AT);
12404           if (mips_relax.sequence)
12405             relax_end ();
12406         }
12407       else if (!mips_big_got)
12408         {
12409           /* If this is a reference to an external symbol, we want
12410                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12411                nop
12412                <op>     op[0],0($at)
12413                <op>     op[0]+1,4($at)
12414              Otherwise we want
12415                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12416                nop
12417                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12418                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12419              If there is a base register we add it to $at before the
12420              lwc1 instructions.  If there is a constant we include it
12421              in the lwc1 instructions.  */
12422           used_at = 1;
12423           expr1.X_add_number = offset_expr.X_add_number;
12424           if (expr1.X_add_number < -0x8000
12425               || expr1.X_add_number >= 0x8000 - 4)
12426             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12427           load_got_offset (AT, &offset_expr);
12428           load_delay_nop ();
12429           if (breg != 0)
12430             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12431
12432           /* Set mips_optimize to 2 to avoid inserting an undesired
12433              nop.  */
12434           hold_mips_optimize = mips_optimize;
12435           mips_optimize = 2;
12436
12437           /* Itbl support may require additional care here.  */
12438           relax_start (offset_expr.X_add_symbol);
12439           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
12440                        BFD_RELOC_LO16, AT);
12441           expr1.X_add_number += 4;
12442           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
12443                        BFD_RELOC_LO16, AT);
12444           relax_switch ();
12445           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12446                        BFD_RELOC_LO16, AT);
12447           offset_expr.X_add_number += 4;
12448           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12449                        BFD_RELOC_LO16, AT);
12450           relax_end ();
12451
12452           mips_optimize = hold_mips_optimize;
12453         }
12454       else if (mips_big_got)
12455         {
12456           int gpdelay;
12457
12458           /* If this is a reference to an external symbol, we want
12459                lui      $at,<sym>               (BFD_RELOC_MIPS_GOT_HI16)
12460                addu     $at,$at,$gp
12461                lw       $at,<sym>($at)          (BFD_RELOC_MIPS_GOT_LO16)
12462                nop
12463                <op>     op[0],0($at)
12464                <op>     op[0]+1,4($at)
12465              Otherwise we want
12466                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12467                nop
12468                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12469                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12470              If there is a base register we add it to $at before the
12471              lwc1 instructions.  If there is a constant we include it
12472              in the lwc1 instructions.  */
12473           used_at = 1;
12474           expr1.X_add_number = offset_expr.X_add_number;
12475           offset_expr.X_add_number = 0;
12476           if (expr1.X_add_number < -0x8000
12477               || expr1.X_add_number >= 0x8000 - 4)
12478             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12479           gpdelay = reg_needs_delay (mips_gp_register);
12480           relax_start (offset_expr.X_add_symbol);
12481           macro_build (&offset_expr, "lui", LUI_FMT,
12482                        AT, BFD_RELOC_MIPS_GOT_HI16);
12483           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12484                        AT, AT, mips_gp_register);
12485           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
12486                        AT, BFD_RELOC_MIPS_GOT_LO16, AT);
12487           load_delay_nop ();
12488           if (breg != 0)
12489             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12490           /* Itbl support may require additional care here.  */
12491           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
12492                        BFD_RELOC_LO16, AT);
12493           expr1.X_add_number += 4;
12494
12495           /* Set mips_optimize to 2 to avoid inserting an undesired
12496              nop.  */
12497           hold_mips_optimize = mips_optimize;
12498           mips_optimize = 2;
12499           /* Itbl support may require additional care here.  */
12500           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
12501                        BFD_RELOC_LO16, AT);
12502           mips_optimize = hold_mips_optimize;
12503           expr1.X_add_number -= 4;
12504
12505           relax_switch ();
12506           offset_expr.X_add_number = expr1.X_add_number;
12507           if (gpdelay)
12508             macro_build (NULL, "nop", "");
12509           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12510                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
12511           load_delay_nop ();
12512           if (breg != 0)
12513             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12514           /* Itbl support may require additional care here.  */
12515           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12516                        BFD_RELOC_LO16, AT);
12517           offset_expr.X_add_number += 4;
12518
12519           /* Set mips_optimize to 2 to avoid inserting an undesired
12520              nop.  */
12521           hold_mips_optimize = mips_optimize;
12522           mips_optimize = 2;
12523           /* Itbl support may require additional care here.  */
12524           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12525                        BFD_RELOC_LO16, AT);
12526           mips_optimize = hold_mips_optimize;
12527           relax_end ();
12528         }
12529       else
12530         abort ();
12531
12532       break;
12533
12534     case M_SAA_AB:
12535       s = "saa";
12536       goto saa_saad;
12537     case M_SAAD_AB:
12538       s = "saad";
12539     saa_saad:
12540       gas_assert (!mips_opts.micromips);
12541       offbits = 0;
12542       fmt = "t,(b)";
12543       goto ld_st;
12544
12545    /* New code added to support COPZ instructions.
12546       This code builds table entries out of the macros in mip_opcodes.
12547       R4000 uses interlocks to handle coproc delays.
12548       Other chips (like the R3000) require nops to be inserted for delays.
12549
12550       FIXME: Currently, we require that the user handle delays.
12551       In order to fill delay slots for non-interlocked chips,
12552       we must have a way to specify delays based on the coprocessor.
12553       Eg. 4 cycles if load coproc reg from memory, 1 if in cache, etc.
12554       What are the side-effects of the cop instruction?
12555       What cache support might we have and what are its effects?
12556       Both coprocessor & memory require delays. how long???
12557       What registers are read/set/modified?
12558
12559       If an itbl is provided to interpret cop instructions,
12560       this knowledge can be encoded in the itbl spec.  */
12561
12562     case M_COP0:
12563       s = "c0";
12564       goto copz;
12565     case M_COP1:
12566       s = "c1";
12567       goto copz;
12568     case M_COP2:
12569       s = "c2";
12570       goto copz;
12571     case M_COP3:
12572       s = "c3";
12573     copz:
12574       gas_assert (!mips_opts.micromips);
12575       /* For now we just do C (same as Cz).  The parameter will be
12576          stored in insn_opcode by mips_ip.  */
12577       macro_build (NULL, s, "C", (int) ip->insn_opcode);
12578       break;
12579
12580     case M_MOVE:
12581       move_register (op[0], op[1]);
12582       break;
12583
12584     case M_MOVEP:
12585       gas_assert (mips_opts.micromips);
12586       gas_assert (mips_opts.insn32);
12587       move_register (micromips_to_32_reg_h_map1[op[0]],
12588                      micromips_to_32_reg_m_map[op[1]]);
12589       move_register (micromips_to_32_reg_h_map2[op[0]],
12590                      micromips_to_32_reg_n_map[op[2]]);
12591       break;
12592
12593     case M_DMUL:
12594       dbl = 1;
12595     case M_MUL:
12596       if (mips_opts.arch == CPU_R5900)
12597         macro_build (NULL, dbl ? "dmultu" : "multu", "d,s,t", op[0], op[1],
12598                      op[2]);
12599       else
12600         {
12601           macro_build (NULL, dbl ? "dmultu" : "multu", "s,t", op[1], op[2]);
12602           macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12603         }
12604       break;
12605
12606     case M_DMUL_I:
12607       dbl = 1;
12608     case M_MUL_I:
12609       /* The MIPS assembler some times generates shifts and adds.  I'm
12610          not trying to be that fancy. GCC should do this for us
12611          anyway.  */
12612       used_at = 1;
12613       load_register (AT, &imm_expr, dbl);
12614       macro_build (NULL, dbl ? "dmult" : "mult", "s,t", op[1], AT);
12615       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12616       break;
12617
12618     case M_DMULO_I:
12619       dbl = 1;
12620     case M_MULO_I:
12621       imm = 1;
12622       goto do_mulo;
12623
12624     case M_DMULO:
12625       dbl = 1;
12626     case M_MULO:
12627     do_mulo:
12628       start_noreorder ();
12629       used_at = 1;
12630       if (imm)
12631         load_register (AT, &imm_expr, dbl);
12632       macro_build (NULL, dbl ? "dmult" : "mult", "s,t",
12633                    op[1], imm ? AT : op[2]);
12634       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12635       macro_build (NULL, dbl ? "dsra32" : "sra", SHFT_FMT, op[0], op[0], 31);
12636       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12637       if (mips_trap)
12638         macro_build (NULL, "tne", TRAP_FMT, op[0], AT, 6);
12639       else
12640         {
12641           if (mips_opts.micromips)
12642             micromips_label_expr (&label_expr);
12643           else
12644             label_expr.X_add_number = 8;
12645           macro_build (&label_expr, "beq", "s,t,p", op[0], AT);
12646           macro_build (NULL, "nop", "");
12647           macro_build (NULL, "break", BRK_FMT, 6);
12648           if (mips_opts.micromips)
12649             micromips_add_label ();
12650         }
12651       end_noreorder ();
12652       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12653       break;
12654
12655     case M_DMULOU_I:
12656       dbl = 1;
12657     case M_MULOU_I:
12658       imm = 1;
12659       goto do_mulou;
12660
12661     case M_DMULOU:
12662       dbl = 1;
12663     case M_MULOU:
12664     do_mulou:
12665       start_noreorder ();
12666       used_at = 1;
12667       if (imm)
12668         load_register (AT, &imm_expr, dbl);
12669       macro_build (NULL, dbl ? "dmultu" : "multu", "s,t",
12670                    op[1], imm ? AT : op[2]);
12671       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12672       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12673       if (mips_trap)
12674         macro_build (NULL, "tne", TRAP_FMT, AT, ZERO, 6);
12675       else
12676         {
12677           if (mips_opts.micromips)
12678             micromips_label_expr (&label_expr);
12679           else
12680             label_expr.X_add_number = 8;
12681           macro_build (&label_expr, "beq", "s,t,p", AT, ZERO);
12682           macro_build (NULL, "nop", "");
12683           macro_build (NULL, "break", BRK_FMT, 6);
12684           if (mips_opts.micromips)
12685             micromips_add_label ();
12686         }
12687       end_noreorder ();
12688       break;
12689
12690     case M_DROL:
12691       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12692         {
12693           if (op[0] == op[1])
12694             {
12695               tempreg = AT;
12696               used_at = 1;
12697             }
12698           else
12699             tempreg = op[0];
12700           macro_build (NULL, "dnegu", "d,w", tempreg, op[2]);
12701           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], tempreg);
12702           break;
12703         }
12704       used_at = 1;
12705       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12706       macro_build (NULL, "dsrlv", "d,t,s", AT, op[1], AT);
12707       macro_build (NULL, "dsllv", "d,t,s", op[0], op[1], op[2]);
12708       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12709       break;
12710
12711     case M_ROL:
12712       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12713         {
12714           if (op[0] == op[1])
12715             {
12716               tempreg = AT;
12717               used_at = 1;
12718             }
12719           else
12720             tempreg = op[0];
12721           macro_build (NULL, "negu", "d,w", tempreg, op[2]);
12722           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], tempreg);
12723           break;
12724         }
12725       used_at = 1;
12726       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12727       macro_build (NULL, "srlv", "d,t,s", AT, op[1], AT);
12728       macro_build (NULL, "sllv", "d,t,s", op[0], op[1], op[2]);
12729       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12730       break;
12731
12732     case M_DROL_I:
12733       {
12734         unsigned int rot;
12735         const char *l;
12736         const char *rr;
12737
12738         rot = imm_expr.X_add_number & 0x3f;
12739         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12740           {
12741             rot = (64 - rot) & 0x3f;
12742             if (rot >= 32)
12743               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12744             else
12745               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12746             break;
12747           }
12748         if (rot == 0)
12749           {
12750             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12751             break;
12752           }
12753         l = (rot < 0x20) ? "dsll" : "dsll32";
12754         rr = ((0x40 - rot) < 0x20) ? "dsrl" : "dsrl32";
12755         rot &= 0x1f;
12756         used_at = 1;
12757         macro_build (NULL, l, SHFT_FMT, AT, op[1], rot);
12758         macro_build (NULL, rr, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12759         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12760       }
12761       break;
12762
12763     case M_ROL_I:
12764       {
12765         unsigned int rot;
12766
12767         rot = imm_expr.X_add_number & 0x1f;
12768         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12769           {
12770             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1],
12771                          (32 - rot) & 0x1f);
12772             break;
12773           }
12774         if (rot == 0)
12775           {
12776             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
12777             break;
12778           }
12779         used_at = 1;
12780         macro_build (NULL, "sll", SHFT_FMT, AT, op[1], rot);
12781         macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12782         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12783       }
12784       break;
12785
12786     case M_DROR:
12787       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12788         {
12789           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], op[2]);
12790           break;
12791         }
12792       used_at = 1;
12793       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12794       macro_build (NULL, "dsllv", "d,t,s", AT, op[1], AT);
12795       macro_build (NULL, "dsrlv", "d,t,s", op[0], op[1], op[2]);
12796       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12797       break;
12798
12799     case M_ROR:
12800       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12801         {
12802           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], op[2]);
12803           break;
12804         }
12805       used_at = 1;
12806       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12807       macro_build (NULL, "sllv", "d,t,s", AT, op[1], AT);
12808       macro_build (NULL, "srlv", "d,t,s", op[0], op[1], op[2]);
12809       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12810       break;
12811
12812     case M_DROR_I:
12813       {
12814         unsigned int rot;
12815         const char *l;
12816         const char *rr;
12817
12818         rot = imm_expr.X_add_number & 0x3f;
12819         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12820           {
12821             if (rot >= 32)
12822               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12823             else
12824               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12825             break;
12826           }
12827         if (rot == 0)
12828           {
12829             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12830             break;
12831           }
12832         rr = (rot < 0x20) ? "dsrl" : "dsrl32";
12833         l = ((0x40 - rot) < 0x20) ? "dsll" : "dsll32";
12834         rot &= 0x1f;
12835         used_at = 1;
12836         macro_build (NULL, rr, SHFT_FMT, AT, op[1], rot);
12837         macro_build (NULL, l, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12838         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12839       }
12840       break;
12841
12842     case M_ROR_I:
12843       {
12844         unsigned int rot;
12845
12846         rot = imm_expr.X_add_number & 0x1f;
12847         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12848           {
12849             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1], rot);
12850             break;
12851           }
12852         if (rot == 0)
12853           {
12854             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
12855             break;
12856           }
12857         used_at = 1;
12858         macro_build (NULL, "srl", SHFT_FMT, AT, op[1], rot);
12859         macro_build (NULL, "sll", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12860         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12861       }
12862       break;
12863
12864     case M_SEQ:
12865       if (op[1] == 0)
12866         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[2], BFD_RELOC_LO16);
12867       else if (op[2] == 0)
12868         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12869       else
12870         {
12871           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
12872           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
12873         }
12874       break;
12875
12876     case M_SEQ_I:
12877       if (imm_expr.X_add_number == 0)
12878         {
12879           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12880           break;
12881         }
12882       if (op[1] == 0)
12883         {
12884           as_warn (_("instruction %s: result is always false"),
12885                    ip->insn_mo->name);
12886           move_register (op[0], 0);
12887           break;
12888         }
12889       if (CPU_HAS_SEQ (mips_opts.arch)
12890           && -512 <= imm_expr.X_add_number
12891           && imm_expr.X_add_number < 512)
12892         {
12893           macro_build (NULL, "seqi", "t,r,+Q", op[0], op[1],
12894                        (int) imm_expr.X_add_number);
12895           break;
12896         }
12897       if (imm_expr.X_add_number >= 0
12898           && imm_expr.X_add_number < 0x10000)
12899         macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1], BFD_RELOC_LO16);
12900       else if (imm_expr.X_add_number > -0x8000
12901                && imm_expr.X_add_number < 0)
12902         {
12903           imm_expr.X_add_number = -imm_expr.X_add_number;
12904           macro_build (&imm_expr, GPR_SIZE == 32 ? "addiu" : "daddiu",
12905                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12906         }
12907       else if (CPU_HAS_SEQ (mips_opts.arch))
12908         {
12909           used_at = 1;
12910           load_register (AT, &imm_expr, GPR_SIZE == 64);
12911           macro_build (NULL, "seq", "d,v,t", op[0], op[1], AT);
12912           break;
12913         }
12914       else
12915         {
12916           load_register (AT, &imm_expr, GPR_SIZE == 64);
12917           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
12918           used_at = 1;
12919         }
12920       macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
12921       break;
12922
12923     case M_SGE:         /* X >= Y  <==>  not (X < Y) */
12924       s = "slt";
12925       goto sge;
12926     case M_SGEU:
12927       s = "sltu";
12928     sge:
12929       macro_build (NULL, s, "d,v,t", op[0], op[1], op[2]);
12930       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12931       break;
12932
12933     case M_SGE_I:       /* X >= I  <==>  not (X < I) */
12934     case M_SGEU_I:
12935       if (imm_expr.X_add_number >= -0x8000
12936           && imm_expr.X_add_number < 0x8000)
12937         macro_build (&imm_expr, mask == M_SGE_I ? "slti" : "sltiu", "t,r,j",
12938                      op[0], op[1], BFD_RELOC_LO16);
12939       else
12940         {
12941           load_register (AT, &imm_expr, GPR_SIZE == 64);
12942           macro_build (NULL, mask == M_SGE_I ? "slt" : "sltu", "d,v,t",
12943                        op[0], op[1], AT);
12944           used_at = 1;
12945         }
12946       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12947       break;
12948
12949     case M_SGT:         /* X > Y  <==>  Y < X */
12950       s = "slt";
12951       goto sgt;
12952     case M_SGTU:
12953       s = "sltu";
12954     sgt:
12955       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
12956       break;
12957
12958     case M_SGT_I:       /* X > I  <==>  I < X */
12959       s = "slt";
12960       goto sgti;
12961     case M_SGTU_I:
12962       s = "sltu";
12963     sgti:
12964       used_at = 1;
12965       load_register (AT, &imm_expr, GPR_SIZE == 64);
12966       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
12967       break;
12968
12969     case M_SLE:         /* X <= Y  <==>  Y >= X  <==>  not (Y < X) */
12970       s = "slt";
12971       goto sle;
12972     case M_SLEU:
12973       s = "sltu";
12974     sle:
12975       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
12976       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12977       break;
12978
12979     case M_SLE_I:       /* X <= I  <==>  I >= X  <==>  not (I < X) */
12980       s = "slt";
12981       goto slei;
12982     case M_SLEU_I:
12983       s = "sltu";
12984     slei:
12985       used_at = 1;
12986       load_register (AT, &imm_expr, GPR_SIZE == 64);
12987       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
12988       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12989       break;
12990
12991     case M_SLT_I:
12992       if (imm_expr.X_add_number >= -0x8000
12993           && imm_expr.X_add_number < 0x8000)
12994         {
12995           macro_build (&imm_expr, "slti", "t,r,j", op[0], op[1],
12996                        BFD_RELOC_LO16);
12997           break;
12998         }
12999       used_at = 1;
13000       load_register (AT, &imm_expr, GPR_SIZE == 64);
13001       macro_build (NULL, "slt", "d,v,t", op[0], op[1], AT);
13002       break;
13003
13004     case M_SLTU_I:
13005       if (imm_expr.X_add_number >= -0x8000
13006           && imm_expr.X_add_number < 0x8000)
13007         {
13008           macro_build (&imm_expr, "sltiu", "t,r,j", op[0], op[1],
13009                        BFD_RELOC_LO16);
13010           break;
13011         }
13012       used_at = 1;
13013       load_register (AT, &imm_expr, GPR_SIZE == 64);
13014       macro_build (NULL, "sltu", "d,v,t", op[0], op[1], AT);
13015       break;
13016
13017     case M_SNE:
13018       if (op[1] == 0)
13019         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[2]);
13020       else if (op[2] == 0)
13021         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
13022       else
13023         {
13024           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
13025           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
13026         }
13027       break;
13028
13029     case M_SNE_I:
13030       if (imm_expr.X_add_number == 0)
13031         {
13032           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
13033           break;
13034         }
13035       if (op[1] == 0)
13036         {
13037           as_warn (_("instruction %s: result is always true"),
13038                    ip->insn_mo->name);
13039           macro_build (&expr1, GPR_SIZE == 32 ? "addiu" : "daddiu", "t,r,j",
13040                        op[0], 0, BFD_RELOC_LO16);
13041           break;
13042         }
13043       if (CPU_HAS_SEQ (mips_opts.arch)
13044           && -512 <= imm_expr.X_add_number
13045           && imm_expr.X_add_number < 512)
13046         {
13047           macro_build (NULL, "snei", "t,r,+Q", op[0], op[1],
13048                        (int) imm_expr.X_add_number);
13049           break;
13050         }
13051       if (imm_expr.X_add_number >= 0
13052           && imm_expr.X_add_number < 0x10000)
13053         {
13054           macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1],
13055                        BFD_RELOC_LO16);
13056         }
13057       else if (imm_expr.X_add_number > -0x8000
13058                && imm_expr.X_add_number < 0)
13059         {
13060           imm_expr.X_add_number = -imm_expr.X_add_number;
13061           macro_build (&imm_expr, GPR_SIZE == 32 ? "addiu" : "daddiu",
13062                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13063         }
13064       else if (CPU_HAS_SEQ (mips_opts.arch))
13065         {
13066           used_at = 1;
13067           load_register (AT, &imm_expr, GPR_SIZE == 64);
13068           macro_build (NULL, "sne", "d,v,t", op[0], op[1], AT);
13069           break;
13070         }
13071       else
13072         {
13073           load_register (AT, &imm_expr, GPR_SIZE == 64);
13074           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
13075           used_at = 1;
13076         }
13077       macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
13078       break;
13079
13080     case M_SUB_I:
13081       s = "addi";
13082       s2 = "sub";
13083       goto do_subi;
13084     case M_SUBU_I:
13085       s = "addiu";
13086       s2 = "subu";
13087       goto do_subi;
13088     case M_DSUB_I:
13089       dbl = 1;
13090       s = "daddi";
13091       s2 = "dsub";
13092       if (!mips_opts.micromips)
13093         goto do_subi;
13094       if (imm_expr.X_add_number > -0x200
13095           && imm_expr.X_add_number <= 0x200)
13096         {
13097           macro_build (NULL, s, "t,r,.", op[0], op[1],
13098                        (int) -imm_expr.X_add_number);
13099           break;
13100         }
13101       goto do_subi_i;
13102     case M_DSUBU_I:
13103       dbl = 1;
13104       s = "daddiu";
13105       s2 = "dsubu";
13106     do_subi:
13107       if (imm_expr.X_add_number > -0x8000
13108           && imm_expr.X_add_number <= 0x8000)
13109         {
13110           imm_expr.X_add_number = -imm_expr.X_add_number;
13111           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13112           break;
13113         }
13114     do_subi_i:
13115       used_at = 1;
13116       load_register (AT, &imm_expr, dbl);
13117       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
13118       break;
13119
13120     case M_TEQ_I:
13121       s = "teq";
13122       goto trap;
13123     case M_TGE_I:
13124       s = "tge";
13125       goto trap;
13126     case M_TGEU_I:
13127       s = "tgeu";
13128       goto trap;
13129     case M_TLT_I:
13130       s = "tlt";
13131       goto trap;
13132     case M_TLTU_I:
13133       s = "tltu";
13134       goto trap;
13135     case M_TNE_I:
13136       s = "tne";
13137     trap:
13138       used_at = 1;
13139       load_register (AT, &imm_expr, GPR_SIZE == 64);
13140       macro_build (NULL, s, "s,t", op[0], AT);
13141       break;
13142
13143     case M_TRUNCWS:
13144     case M_TRUNCWD:
13145       gas_assert (!mips_opts.micromips);
13146       gas_assert (mips_opts.isa == ISA_MIPS1);
13147       used_at = 1;
13148
13149       /*
13150        * Is the double cfc1 instruction a bug in the mips assembler;
13151        * or is there a reason for it?
13152        */
13153       start_noreorder ();
13154       macro_build (NULL, "cfc1", "t,G", op[2], RA);
13155       macro_build (NULL, "cfc1", "t,G", op[2], RA);
13156       macro_build (NULL, "nop", "");
13157       expr1.X_add_number = 3;
13158       macro_build (&expr1, "ori", "t,r,i", AT, op[2], BFD_RELOC_LO16);
13159       expr1.X_add_number = 2;
13160       macro_build (&expr1, "xori", "t,r,i", AT, AT, BFD_RELOC_LO16);
13161       macro_build (NULL, "ctc1", "t,G", AT, RA);
13162       macro_build (NULL, "nop", "");
13163       macro_build (NULL, mask == M_TRUNCWD ? "cvt.w.d" : "cvt.w.s", "D,S",
13164                    op[0], op[1]);
13165       macro_build (NULL, "ctc1", "t,G", op[2], RA);
13166       macro_build (NULL, "nop", "");
13167       end_noreorder ();
13168       break;
13169
13170     case M_ULH_AB:
13171       s = "lb";
13172       s2 = "lbu";
13173       off = 1;
13174       goto uld_st;
13175     case M_ULHU_AB:
13176       s = "lbu";
13177       s2 = "lbu";
13178       off = 1;
13179       goto uld_st;
13180     case M_ULW_AB:
13181       s = "lwl";
13182       s2 = "lwr";
13183       offbits = (mips_opts.micromips ? 12 : 16);
13184       off = 3;
13185       goto uld_st;
13186     case M_ULD_AB:
13187       s = "ldl";
13188       s2 = "ldr";
13189       offbits = (mips_opts.micromips ? 12 : 16);
13190       off = 7;
13191       goto uld_st;
13192     case M_USH_AB:
13193       s = "sb";
13194       s2 = "sb";
13195       off = 1;
13196       ust = 1;
13197       goto uld_st;
13198     case M_USW_AB:
13199       s = "swl";
13200       s2 = "swr";
13201       offbits = (mips_opts.micromips ? 12 : 16);
13202       off = 3;
13203       ust = 1;
13204       goto uld_st;
13205     case M_USD_AB:
13206       s = "sdl";
13207       s2 = "sdr";
13208       offbits = (mips_opts.micromips ? 12 : 16);
13209       off = 7;
13210       ust = 1;
13211
13212     uld_st:
13213       breg = op[2];
13214       large_offset = !small_offset_p (off, align, offbits);
13215       ep = &offset_expr;
13216       expr1.X_add_number = 0;
13217       if (large_offset)
13218         {
13219           used_at = 1;
13220           tempreg = AT;
13221           if (small_offset_p (0, align, 16))
13222             macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", tempreg, breg, -1,
13223                          offset_reloc[0], offset_reloc[1], offset_reloc[2]);
13224           else
13225             {
13226               load_address (tempreg, ep, &used_at);
13227               if (breg != 0)
13228                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
13229                              tempreg, tempreg, breg);
13230             }
13231           offset_reloc[0] = BFD_RELOC_LO16;
13232           offset_reloc[1] = BFD_RELOC_UNUSED;
13233           offset_reloc[2] = BFD_RELOC_UNUSED;
13234           breg = tempreg;
13235           tempreg = op[0];
13236           ep = &expr1;
13237         }
13238       else if (!ust && op[0] == breg)
13239         {
13240           used_at = 1;
13241           tempreg = AT;
13242         }
13243       else
13244         tempreg = op[0];
13245
13246       if (off == 1)
13247         goto ulh_sh;
13248
13249       if (!target_big_endian)
13250         ep->X_add_number += off;
13251       if (offbits == 12)
13252         macro_build (NULL, s, "t,~(b)", tempreg, (int) ep->X_add_number, breg);
13253       else
13254         macro_build (ep, s, "t,o(b)", tempreg, -1,
13255                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13256
13257       if (!target_big_endian)
13258         ep->X_add_number -= off;
13259       else
13260         ep->X_add_number += off;
13261       if (offbits == 12)
13262         macro_build (NULL, s2, "t,~(b)",
13263                      tempreg, (int) ep->X_add_number, breg);
13264       else
13265         macro_build (ep, s2, "t,o(b)", tempreg, -1,
13266                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13267
13268       /* If necessary, move the result in tempreg to the final destination.  */
13269       if (!ust && op[0] != tempreg)
13270         {
13271           /* Protect second load's delay slot.  */
13272           load_delay_nop ();
13273           move_register (op[0], tempreg);
13274         }
13275       break;
13276
13277     ulh_sh:
13278       used_at = 1;
13279       if (target_big_endian == ust)
13280         ep->X_add_number += off;
13281       tempreg = ust || large_offset ? op[0] : AT;
13282       macro_build (ep, s, "t,o(b)", tempreg, -1,
13283                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13284
13285       /* For halfword transfers we need a temporary register to shuffle
13286          bytes.  Unfortunately for M_USH_A we have none available before
13287          the next store as AT holds the base address.  We deal with this
13288          case by clobbering TREG and then restoring it as with ULH.  */
13289       tempreg = ust == large_offset ? op[0] : AT;
13290       if (ust)
13291         macro_build (NULL, "srl", SHFT_FMT, tempreg, op[0], 8);
13292
13293       if (target_big_endian == ust)
13294         ep->X_add_number -= off;
13295       else
13296         ep->X_add_number += off;
13297       macro_build (ep, s2, "t,o(b)", tempreg, -1,
13298                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13299
13300       /* For M_USH_A re-retrieve the LSB.  */
13301       if (ust && large_offset)
13302         {
13303           if (target_big_endian)
13304             ep->X_add_number += off;
13305           else
13306             ep->X_add_number -= off;
13307           macro_build (&expr1, "lbu", "t,o(b)", AT, -1,
13308                        offset_reloc[0], offset_reloc[1], offset_reloc[2], AT);
13309         }
13310       /* For ULH and M_USH_A OR the LSB in.  */
13311       if (!ust || large_offset)
13312         {
13313           tempreg = !large_offset ? AT : op[0];
13314           macro_build (NULL, "sll", SHFT_FMT, tempreg, tempreg, 8);
13315           macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
13316         }
13317       break;
13318
13319     default:
13320       /* FIXME: Check if this is one of the itbl macros, since they
13321          are added dynamically.  */
13322       as_bad (_("macro %s not implemented yet"), ip->insn_mo->name);
13323       break;
13324     }
13325   if (!mips_opts.at && used_at)
13326     as_bad (_("macro used $at after \".set noat\""));
13327 }
13328
13329 /* Implement macros in mips16 mode.  */
13330
13331 static void
13332 mips16_macro (struct mips_cl_insn *ip)
13333 {
13334   const struct mips_operand_array *operands;
13335   int mask;
13336   int tmp;
13337   expressionS expr1;
13338   int dbl;
13339   const char *s, *s2, *s3;
13340   unsigned int op[MAX_OPERANDS];
13341   unsigned int i;
13342
13343   mask = ip->insn_mo->mask;
13344
13345   operands = insn_operands (ip);
13346   for (i = 0; i < MAX_OPERANDS; i++)
13347     if (operands->operand[i])
13348       op[i] = insn_extract_operand (ip, operands->operand[i]);
13349     else
13350       op[i] = -1;
13351
13352   expr1.X_op = O_constant;
13353   expr1.X_op_symbol = NULL;
13354   expr1.X_add_symbol = NULL;
13355   expr1.X_add_number = 1;
13356
13357   dbl = 0;
13358
13359   switch (mask)
13360     {
13361     default:
13362       abort ();
13363
13364     case M_DDIV_3:
13365       dbl = 1;
13366     case M_DIV_3:
13367       s = "mflo";
13368       goto do_div3;
13369     case M_DREM_3:
13370       dbl = 1;
13371     case M_REM_3:
13372       s = "mfhi";
13373     do_div3:
13374       start_noreorder ();
13375       macro_build (NULL, dbl ? "ddiv" : "div", "0,x,y", op[1], op[2]);
13376       expr1.X_add_number = 2;
13377       macro_build (&expr1, "bnez", "x,p", op[2]);
13378       macro_build (NULL, "break", "6", 7);
13379
13380       /* FIXME: The normal code checks for of -1 / -0x80000000 here,
13381          since that causes an overflow.  We should do that as well,
13382          but I don't see how to do the comparisons without a temporary
13383          register.  */
13384       end_noreorder ();
13385       macro_build (NULL, s, "x", op[0]);
13386       break;
13387
13388     case M_DIVU_3:
13389       s = "divu";
13390       s2 = "mflo";
13391       goto do_divu3;
13392     case M_REMU_3:
13393       s = "divu";
13394       s2 = "mfhi";
13395       goto do_divu3;
13396     case M_DDIVU_3:
13397       s = "ddivu";
13398       s2 = "mflo";
13399       goto do_divu3;
13400     case M_DREMU_3:
13401       s = "ddivu";
13402       s2 = "mfhi";
13403     do_divu3:
13404       start_noreorder ();
13405       macro_build (NULL, s, "0,x,y", op[1], op[2]);
13406       expr1.X_add_number = 2;
13407       macro_build (&expr1, "bnez", "x,p", op[2]);
13408       macro_build (NULL, "break", "6", 7);
13409       end_noreorder ();
13410       macro_build (NULL, s2, "x", op[0]);
13411       break;
13412
13413     case M_DMUL:
13414       dbl = 1;
13415     case M_MUL:
13416       macro_build (NULL, dbl ? "dmultu" : "multu", "x,y", op[1], op[2]);
13417       macro_build (NULL, "mflo", "x", op[0]);
13418       break;
13419
13420     case M_DSUBU_I:
13421       dbl = 1;
13422       goto do_subu;
13423     case M_SUBU_I:
13424     do_subu:
13425       imm_expr.X_add_number = -imm_expr.X_add_number;
13426       macro_build (&imm_expr, dbl ? "daddiu" : "addiu", "y,x,4", op[0], op[1]);
13427       break;
13428
13429     case M_SUBU_I_2:
13430       imm_expr.X_add_number = -imm_expr.X_add_number;
13431       macro_build (&imm_expr, "addiu", "x,k", op[0]);
13432       break;
13433
13434     case M_DSUBU_I_2:
13435       imm_expr.X_add_number = -imm_expr.X_add_number;
13436       macro_build (&imm_expr, "daddiu", "y,j", op[0]);
13437       break;
13438
13439     case M_BEQ:
13440       s = "cmp";
13441       s2 = "bteqz";
13442       goto do_branch;
13443     case M_BNE:
13444       s = "cmp";
13445       s2 = "btnez";
13446       goto do_branch;
13447     case M_BLT:
13448       s = "slt";
13449       s2 = "btnez";
13450       goto do_branch;
13451     case M_BLTU:
13452       s = "sltu";
13453       s2 = "btnez";
13454       goto do_branch;
13455     case M_BLE:
13456       s = "slt";
13457       s2 = "bteqz";
13458       goto do_reverse_branch;
13459     case M_BLEU:
13460       s = "sltu";
13461       s2 = "bteqz";
13462       goto do_reverse_branch;
13463     case M_BGE:
13464       s = "slt";
13465       s2 = "bteqz";
13466       goto do_branch;
13467     case M_BGEU:
13468       s = "sltu";
13469       s2 = "bteqz";
13470       goto do_branch;
13471     case M_BGT:
13472       s = "slt";
13473       s2 = "btnez";
13474       goto do_reverse_branch;
13475     case M_BGTU:
13476       s = "sltu";
13477       s2 = "btnez";
13478
13479     do_reverse_branch:
13480       tmp = op[1];
13481       op[1] = op[0];
13482       op[0] = tmp;
13483
13484     do_branch:
13485       macro_build (NULL, s, "x,y", op[0], op[1]);
13486       macro_build (&offset_expr, s2, "p");
13487       break;
13488
13489     case M_BEQ_I:
13490       s = "cmpi";
13491       s2 = "bteqz";
13492       s3 = "x,U";
13493       goto do_branch_i;
13494     case M_BNE_I:
13495       s = "cmpi";
13496       s2 = "btnez";
13497       s3 = "x,U";
13498       goto do_branch_i;
13499     case M_BLT_I:
13500       s = "slti";
13501       s2 = "btnez";
13502       s3 = "x,8";
13503       goto do_branch_i;
13504     case M_BLTU_I:
13505       s = "sltiu";
13506       s2 = "btnez";
13507       s3 = "x,8";
13508       goto do_branch_i;
13509     case M_BLE_I:
13510       s = "slti";
13511       s2 = "btnez";
13512       s3 = "x,8";
13513       goto do_addone_branch_i;
13514     case M_BLEU_I:
13515       s = "sltiu";
13516       s2 = "btnez";
13517       s3 = "x,8";
13518       goto do_addone_branch_i;
13519     case M_BGE_I:
13520       s = "slti";
13521       s2 = "bteqz";
13522       s3 = "x,8";
13523       goto do_branch_i;
13524     case M_BGEU_I:
13525       s = "sltiu";
13526       s2 = "bteqz";
13527       s3 = "x,8";
13528       goto do_branch_i;
13529     case M_BGT_I:
13530       s = "slti";
13531       s2 = "bteqz";
13532       s3 = "x,8";
13533       goto do_addone_branch_i;
13534     case M_BGTU_I:
13535       s = "sltiu";
13536       s2 = "bteqz";
13537       s3 = "x,8";
13538
13539     do_addone_branch_i:
13540       ++imm_expr.X_add_number;
13541
13542     do_branch_i:
13543       macro_build (&imm_expr, s, s3, op[0]);
13544       macro_build (&offset_expr, s2, "p");
13545       break;
13546
13547     case M_ABS:
13548       expr1.X_add_number = 0;
13549       macro_build (&expr1, "slti", "x,8", op[1]);
13550       if (op[0] != op[1])
13551         macro_build (NULL, "move", "y,X", op[0], mips16_to_32_reg_map[op[1]]);
13552       expr1.X_add_number = 2;
13553       macro_build (&expr1, "bteqz", "p");
13554       macro_build (NULL, "neg", "x,w", op[0], op[0]);
13555       break;
13556     }
13557 }
13558
13559 /* Look up instruction [START, START + LENGTH) in HASH.  Record any extra
13560    opcode bits in *OPCODE_EXTRA.  */
13561
13562 static struct mips_opcode *
13563 mips_lookup_insn (struct hash_control *hash, const char *start,
13564                   ssize_t length, unsigned int *opcode_extra)
13565 {
13566   char *name, *dot, *p;
13567   unsigned int mask, suffix;
13568   ssize_t opend;
13569   struct mips_opcode *insn;
13570
13571   /* Make a copy of the instruction so that we can fiddle with it.  */
13572   name = xstrndup (start, length);
13573
13574   /* Look up the instruction as-is.  */
13575   insn = (struct mips_opcode *) hash_find (hash, name);
13576   if (insn)
13577     goto end;
13578
13579   dot = strchr (name, '.');
13580   if (dot && dot[1])
13581     {
13582       /* Try to interpret the text after the dot as a VU0 channel suffix.  */
13583       p = mips_parse_vu0_channels (dot + 1, &mask);
13584       if (*p == 0 && mask != 0)
13585         {
13586           *dot = 0;
13587           insn = (struct mips_opcode *) hash_find (hash, name);
13588           *dot = '.';
13589           if (insn && (insn->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0)
13590             {
13591               *opcode_extra |= mask << mips_vu0_channel_mask.lsb;
13592               goto end;
13593             }
13594         }
13595     }
13596
13597   if (mips_opts.micromips)
13598     {
13599       /* See if there's an instruction size override suffix,
13600          either `16' or `32', at the end of the mnemonic proper,
13601          that defines the operation, i.e. before the first `.'
13602          character if any.  Strip it and retry.  */
13603       opend = dot != NULL ? dot - name : length;
13604       if (opend >= 3 && name[opend - 2] == '1' && name[opend - 1] == '6')
13605         suffix = 2;
13606       else if (name[opend - 2] == '3' && name[opend - 1] == '2')
13607         suffix = 4;
13608       else
13609         suffix = 0;
13610       if (suffix)
13611         {
13612           memcpy (name + opend - 2, name + opend, length - opend + 1);
13613           insn = (struct mips_opcode *) hash_find (hash, name);
13614           if (insn)
13615             {
13616               forced_insn_length = suffix;
13617               goto end;
13618             }
13619         }
13620     }
13621
13622   insn = NULL;
13623  end:
13624   free (name);
13625   return insn;
13626 }
13627
13628 /* Assemble an instruction into its binary format.  If the instruction
13629    is a macro, set imm_expr and offset_expr to the values associated
13630    with "I" and "A" operands respectively.  Otherwise store the value
13631    of the relocatable field (if any) in offset_expr.  In both cases
13632    set offset_reloc to the relocation operators applied to offset_expr.  */
13633
13634 static void
13635 mips_ip (char *str, struct mips_cl_insn *insn)
13636 {
13637   const struct mips_opcode *first, *past;
13638   struct hash_control *hash;
13639   char format;
13640   size_t end;
13641   struct mips_operand_token *tokens;
13642   unsigned int opcode_extra;
13643
13644   if (mips_opts.micromips)
13645     {
13646       hash = micromips_op_hash;
13647       past = &micromips_opcodes[bfd_micromips_num_opcodes];
13648     }
13649   else
13650     {
13651       hash = op_hash;
13652       past = &mips_opcodes[NUMOPCODES];
13653     }
13654   forced_insn_length = 0;
13655   opcode_extra = 0;
13656
13657   /* We first try to match an instruction up to a space or to the end.  */
13658   for (end = 0; str[end] != '\0' && !ISSPACE (str[end]); end++)
13659     continue;
13660
13661   first = mips_lookup_insn (hash, str, end, &opcode_extra);
13662   if (first == NULL)
13663     {
13664       set_insn_error (0, _("unrecognized opcode"));
13665       return;
13666     }
13667
13668   if (strcmp (first->name, "li.s") == 0)
13669     format = 'f';
13670   else if (strcmp (first->name, "li.d") == 0)
13671     format = 'd';
13672   else
13673     format = 0;
13674   tokens = mips_parse_arguments (str + end, format);
13675   if (!tokens)
13676     return;
13677
13678   if (!match_insns (insn, first, past, tokens, opcode_extra, FALSE)
13679       && !match_insns (insn, first, past, tokens, opcode_extra, TRUE))
13680     set_insn_error (0, _("invalid operands"));
13681
13682   obstack_free (&mips_operand_tokens, tokens);
13683 }
13684
13685 /* As for mips_ip, but used when assembling MIPS16 code.
13686    Also set forced_insn_length to the resulting instruction size in
13687    bytes if the user explicitly requested a small or extended instruction.  */
13688
13689 static void
13690 mips16_ip (char *str, struct mips_cl_insn *insn)
13691 {
13692   char *end, *s, c;
13693   struct mips_opcode *first;
13694   struct mips_operand_token *tokens;
13695
13696   forced_insn_length = 0;
13697
13698   for (s = str; ISLOWER (*s); ++s)
13699     ;
13700   end = s;
13701   c = *end;
13702   switch (c)
13703     {
13704     case '\0':
13705       break;
13706
13707     case ' ':
13708       s++;
13709       break;
13710
13711     case '.':
13712       if (s[1] == 't' && s[2] == ' ')
13713         {
13714           forced_insn_length = 2;
13715           s += 3;
13716           break;
13717         }
13718       else if (s[1] == 'e' && s[2] == ' ')
13719         {
13720           forced_insn_length = 4;
13721           s += 3;
13722           break;
13723         }
13724       /* Fall through.  */
13725     default:
13726       set_insn_error (0, _("unrecognized opcode"));
13727       return;
13728     }
13729
13730   if (mips_opts.noautoextend && !forced_insn_length)
13731     forced_insn_length = 2;
13732
13733   *end = 0;
13734   first = (struct mips_opcode *) hash_find (mips16_op_hash, str);
13735   *end = c;
13736
13737   if (!first)
13738     {
13739       set_insn_error (0, _("unrecognized opcode"));
13740       return;
13741     }
13742
13743   tokens = mips_parse_arguments (s, 0);
13744   if (!tokens)
13745     return;
13746
13747   if (!match_mips16_insns (insn, first, tokens))
13748     set_insn_error (0, _("invalid operands"));
13749
13750   obstack_free (&mips_operand_tokens, tokens);
13751 }
13752
13753 /* Marshal immediate value VAL for an extended MIPS16 instruction.
13754    NBITS is the number of significant bits in VAL.  */
13755
13756 static unsigned long
13757 mips16_immed_extend (offsetT val, unsigned int nbits)
13758 {
13759   int extval;
13760   if (nbits == 16)
13761     {
13762       extval = ((val >> 11) & 0x1f) | (val & 0x7e0);
13763       val &= 0x1f;
13764     }
13765   else if (nbits == 15)
13766     {
13767       extval = ((val >> 11) & 0xf) | (val & 0x7f0);
13768       val &= 0xf;
13769     }
13770   else
13771     {
13772       extval = ((val & 0x1f) << 6) | (val & 0x20);
13773       val = 0;
13774     }
13775   return (extval << 16) | val;
13776 }
13777
13778 /* Like decode_mips16_operand, but require the operand to be defined and
13779    require it to be an integer.  */
13780
13781 static const struct mips_int_operand *
13782 mips16_immed_operand (int type, bfd_boolean extended_p)
13783 {
13784   const struct mips_operand *operand;
13785
13786   operand = decode_mips16_operand (type, extended_p);
13787   if (!operand || (operand->type != OP_INT && operand->type != OP_PCREL))
13788     abort ();
13789   return (const struct mips_int_operand *) operand;
13790 }
13791
13792 /* Return true if SVAL fits OPERAND.  RELOC is as for mips16_immed.  */
13793
13794 static bfd_boolean
13795 mips16_immed_in_range_p (const struct mips_int_operand *operand,
13796                          bfd_reloc_code_real_type reloc, offsetT sval)
13797 {
13798   int min_val, max_val;
13799
13800   min_val = mips_int_operand_min (operand);
13801   max_val = mips_int_operand_max (operand);
13802   if (reloc != BFD_RELOC_UNUSED)
13803     {
13804       if (min_val < 0)
13805         sval = SEXT_16BIT (sval);
13806       else
13807         sval &= 0xffff;
13808     }
13809
13810   return (sval >= min_val
13811           && sval <= max_val
13812           && (sval & ((1 << operand->shift) - 1)) == 0);
13813 }
13814
13815 /* Install immediate value VAL into MIPS16 instruction *INSN,
13816    extending it if necessary.  The instruction in *INSN may
13817    already be extended.
13818
13819    RELOC is the relocation that produced VAL, or BFD_RELOC_UNUSED
13820    if none.  In the former case, VAL is a 16-bit number with no
13821    defined signedness.
13822
13823    TYPE is the type of the immediate field.  USER_INSN_LENGTH
13824    is the length that the user requested, or 0 if none.  */
13825
13826 static void
13827 mips16_immed (const char *file, unsigned int line, int type,
13828               bfd_reloc_code_real_type reloc, offsetT val,
13829               unsigned int user_insn_length, unsigned long *insn)
13830 {
13831   const struct mips_int_operand *operand;
13832   unsigned int uval, length;
13833
13834   operand = mips16_immed_operand (type, FALSE);
13835   if (!mips16_immed_in_range_p (operand, reloc, val))
13836     {
13837       /* We need an extended instruction.  */
13838       if (user_insn_length == 2)
13839         as_bad_where (file, line, _("invalid unextended operand value"));
13840       else
13841         *insn |= MIPS16_EXTEND;
13842     }
13843   else if (user_insn_length == 4)
13844     {
13845       /* The operand doesn't force an unextended instruction to be extended.
13846          Warn if the user wanted an extended instruction anyway.  */
13847       *insn |= MIPS16_EXTEND;
13848       as_warn_where (file, line,
13849                      _("extended operand requested but not required"));
13850     }
13851
13852   length = mips16_opcode_length (*insn);
13853   if (length == 4)
13854     {
13855       operand = mips16_immed_operand (type, TRUE);
13856       if (!mips16_immed_in_range_p (operand, reloc, val))
13857         as_bad_where (file, line,
13858                       _("operand value out of range for instruction"));
13859     }
13860   uval = ((unsigned int) val >> operand->shift) - operand->bias;
13861   if (length == 2)
13862     *insn = mips_insert_operand (&operand->root, *insn, uval);
13863   else
13864     *insn |= mips16_immed_extend (uval, operand->root.size);
13865 }
13866 \f
13867 struct percent_op_match
13868 {
13869   const char *str;
13870   bfd_reloc_code_real_type reloc;
13871 };
13872
13873 static const struct percent_op_match mips_percent_op[] =
13874 {
13875   {"%lo", BFD_RELOC_LO16},
13876   {"%call_hi", BFD_RELOC_MIPS_CALL_HI16},
13877   {"%call_lo", BFD_RELOC_MIPS_CALL_LO16},
13878   {"%call16", BFD_RELOC_MIPS_CALL16},
13879   {"%got_disp", BFD_RELOC_MIPS_GOT_DISP},
13880   {"%got_page", BFD_RELOC_MIPS_GOT_PAGE},
13881   {"%got_ofst", BFD_RELOC_MIPS_GOT_OFST},
13882   {"%got_hi", BFD_RELOC_MIPS_GOT_HI16},
13883   {"%got_lo", BFD_RELOC_MIPS_GOT_LO16},
13884   {"%got", BFD_RELOC_MIPS_GOT16},
13885   {"%gp_rel", BFD_RELOC_GPREL16},
13886   {"%half", BFD_RELOC_16},
13887   {"%highest", BFD_RELOC_MIPS_HIGHEST},
13888   {"%higher", BFD_RELOC_MIPS_HIGHER},
13889   {"%neg", BFD_RELOC_MIPS_SUB},
13890   {"%tlsgd", BFD_RELOC_MIPS_TLS_GD},
13891   {"%tlsldm", BFD_RELOC_MIPS_TLS_LDM},
13892   {"%dtprel_hi", BFD_RELOC_MIPS_TLS_DTPREL_HI16},
13893   {"%dtprel_lo", BFD_RELOC_MIPS_TLS_DTPREL_LO16},
13894   {"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16},
13895   {"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16},
13896   {"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL},
13897   {"%hi", BFD_RELOC_HI16_S},
13898   {"%pcrel_hi", BFD_RELOC_HI16_S_PCREL},
13899   {"%pcrel_lo", BFD_RELOC_LO16_PCREL}
13900 };
13901
13902 static const struct percent_op_match mips16_percent_op[] =
13903 {
13904   {"%lo", BFD_RELOC_MIPS16_LO16},
13905   {"%gprel", BFD_RELOC_MIPS16_GPREL},
13906   {"%got", BFD_RELOC_MIPS16_GOT16},
13907   {"%call16", BFD_RELOC_MIPS16_CALL16},
13908   {"%hi", BFD_RELOC_MIPS16_HI16_S},
13909   {"%tlsgd", BFD_RELOC_MIPS16_TLS_GD},
13910   {"%tlsldm", BFD_RELOC_MIPS16_TLS_LDM},
13911   {"%dtprel_hi", BFD_RELOC_MIPS16_TLS_DTPREL_HI16},
13912   {"%dtprel_lo", BFD_RELOC_MIPS16_TLS_DTPREL_LO16},
13913   {"%tprel_hi", BFD_RELOC_MIPS16_TLS_TPREL_HI16},
13914   {"%tprel_lo", BFD_RELOC_MIPS16_TLS_TPREL_LO16},
13915   {"%gottprel", BFD_RELOC_MIPS16_TLS_GOTTPREL}
13916 };
13917
13918
13919 /* Return true if *STR points to a relocation operator.  When returning true,
13920    move *STR over the operator and store its relocation code in *RELOC.
13921    Leave both *STR and *RELOC alone when returning false.  */
13922
13923 static bfd_boolean
13924 parse_relocation (char **str, bfd_reloc_code_real_type *reloc)
13925 {
13926   const struct percent_op_match *percent_op;
13927   size_t limit, i;
13928
13929   if (mips_opts.mips16)
13930     {
13931       percent_op = mips16_percent_op;
13932       limit = ARRAY_SIZE (mips16_percent_op);
13933     }
13934   else
13935     {
13936       percent_op = mips_percent_op;
13937       limit = ARRAY_SIZE (mips_percent_op);
13938     }
13939
13940   for (i = 0; i < limit; i++)
13941     if (strncasecmp (*str, percent_op[i].str, strlen (percent_op[i].str)) == 0)
13942       {
13943         int len = strlen (percent_op[i].str);
13944
13945         if (!ISSPACE ((*str)[len]) && (*str)[len] != '(')
13946           continue;
13947
13948         *str += strlen (percent_op[i].str);
13949         *reloc = percent_op[i].reloc;
13950
13951         /* Check whether the output BFD supports this relocation.
13952            If not, issue an error and fall back on something safe.  */
13953         if (!bfd_reloc_type_lookup (stdoutput, percent_op[i].reloc))
13954           {
13955             as_bad (_("relocation %s isn't supported by the current ABI"),
13956                     percent_op[i].str);
13957             *reloc = BFD_RELOC_UNUSED;
13958           }
13959         return TRUE;
13960       }
13961   return FALSE;
13962 }
13963
13964
13965 /* Parse string STR as a 16-bit relocatable operand.  Store the
13966    expression in *EP and the relocations in the array starting
13967    at RELOC.  Return the number of relocation operators used.
13968
13969    On exit, EXPR_END points to the first character after the expression.  */
13970
13971 static size_t
13972 my_getSmallExpression (expressionS *ep, bfd_reloc_code_real_type *reloc,
13973                        char *str)
13974 {
13975   bfd_reloc_code_real_type reversed_reloc[3];
13976   size_t reloc_index, i;
13977   int crux_depth, str_depth;
13978   char *crux;
13979
13980   /* Search for the start of the main expression, recoding relocations
13981      in REVERSED_RELOC.  End the loop with CRUX pointing to the start
13982      of the main expression and with CRUX_DEPTH containing the number
13983      of open brackets at that point.  */
13984   reloc_index = -1;
13985   str_depth = 0;
13986   do
13987     {
13988       reloc_index++;
13989       crux = str;
13990       crux_depth = str_depth;
13991
13992       /* Skip over whitespace and brackets, keeping count of the number
13993          of brackets.  */
13994       while (*str == ' ' || *str == '\t' || *str == '(')
13995         if (*str++ == '(')
13996           str_depth++;
13997     }
13998   while (*str == '%'
13999          && reloc_index < (HAVE_NEWABI ? 3 : 1)
14000          && parse_relocation (&str, &reversed_reloc[reloc_index]));
14001
14002   my_getExpression (ep, crux);
14003   str = expr_end;
14004
14005   /* Match every open bracket.  */
14006   while (crux_depth > 0 && (*str == ')' || *str == ' ' || *str == '\t'))
14007     if (*str++ == ')')
14008       crux_depth--;
14009
14010   if (crux_depth > 0)
14011     as_bad (_("unclosed '('"));
14012
14013   expr_end = str;
14014
14015   if (reloc_index != 0)
14016     {
14017       prev_reloc_op_frag = frag_now;
14018       for (i = 0; i < reloc_index; i++)
14019         reloc[i] = reversed_reloc[reloc_index - 1 - i];
14020     }
14021
14022   return reloc_index;
14023 }
14024
14025 static void
14026 my_getExpression (expressionS *ep, char *str)
14027 {
14028   char *save_in;
14029
14030   save_in = input_line_pointer;
14031   input_line_pointer = str;
14032   expression (ep);
14033   expr_end = input_line_pointer;
14034   input_line_pointer = save_in;
14035 }
14036
14037 const char *
14038 md_atof (int type, char *litP, int *sizeP)
14039 {
14040   return ieee_md_atof (type, litP, sizeP, target_big_endian);
14041 }
14042
14043 void
14044 md_number_to_chars (char *buf, valueT val, int n)
14045 {
14046   if (target_big_endian)
14047     number_to_chars_bigendian (buf, val, n);
14048   else
14049     number_to_chars_littleendian (buf, val, n);
14050 }
14051 \f
14052 static int support_64bit_objects(void)
14053 {
14054   const char **list, **l;
14055   int yes;
14056
14057   list = bfd_target_list ();
14058   for (l = list; *l != NULL; l++)
14059     if (strcmp (*l, ELF_TARGET ("elf64-", "big")) == 0
14060         || strcmp (*l, ELF_TARGET ("elf64-", "little")) == 0)
14061       break;
14062   yes = (*l != NULL);
14063   free (list);
14064   return yes;
14065 }
14066
14067 /* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to
14068    NEW_VALUE.  Warn if another value was already specified.  Note:
14069    we have to defer parsing the -march and -mtune arguments in order
14070    to handle 'from-abi' correctly, since the ABI might be specified
14071    in a later argument.  */
14072
14073 static void
14074 mips_set_option_string (const char **string_ptr, const char *new_value)
14075 {
14076   if (*string_ptr != 0 && strcasecmp (*string_ptr, new_value) != 0)
14077     as_warn (_("a different %s was already specified, is now %s"),
14078              string_ptr == &mips_arch_string ? "-march" : "-mtune",
14079              new_value);
14080
14081   *string_ptr = new_value;
14082 }
14083
14084 int
14085 md_parse_option (int c, const char *arg)
14086 {
14087   unsigned int i;
14088
14089   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
14090     if (c == mips_ases[i].option_on || c == mips_ases[i].option_off)
14091       {
14092         file_ase_explicit |= mips_set_ase (&mips_ases[i], &file_mips_opts,
14093                                            c == mips_ases[i].option_on);
14094         return 1;
14095       }
14096
14097   switch (c)
14098     {
14099     case OPTION_CONSTRUCT_FLOATS:
14100       mips_disable_float_construction = 0;
14101       break;
14102
14103     case OPTION_NO_CONSTRUCT_FLOATS:
14104       mips_disable_float_construction = 1;
14105       break;
14106
14107     case OPTION_TRAP:
14108       mips_trap = 1;
14109       break;
14110
14111     case OPTION_BREAK:
14112       mips_trap = 0;
14113       break;
14114
14115     case OPTION_EB:
14116       target_big_endian = 1;
14117       break;
14118
14119     case OPTION_EL:
14120       target_big_endian = 0;
14121       break;
14122
14123     case 'O':
14124       if (arg == NULL)
14125         mips_optimize = 1;
14126       else if (arg[0] == '0')
14127         mips_optimize = 0;
14128       else if (arg[0] == '1')
14129         mips_optimize = 1;
14130       else
14131         mips_optimize = 2;
14132       break;
14133
14134     case 'g':
14135       if (arg == NULL)
14136         mips_debug = 2;
14137       else
14138         mips_debug = atoi (arg);
14139       break;
14140
14141     case OPTION_MIPS1:
14142       file_mips_opts.isa = ISA_MIPS1;
14143       break;
14144
14145     case OPTION_MIPS2:
14146       file_mips_opts.isa = ISA_MIPS2;
14147       break;
14148
14149     case OPTION_MIPS3:
14150       file_mips_opts.isa = ISA_MIPS3;
14151       break;
14152
14153     case OPTION_MIPS4:
14154       file_mips_opts.isa = ISA_MIPS4;
14155       break;
14156
14157     case OPTION_MIPS5:
14158       file_mips_opts.isa = ISA_MIPS5;
14159       break;
14160
14161     case OPTION_MIPS32:
14162       file_mips_opts.isa = ISA_MIPS32;
14163       break;
14164
14165     case OPTION_MIPS32R2:
14166       file_mips_opts.isa = ISA_MIPS32R2;
14167       break;
14168
14169     case OPTION_MIPS32R3:
14170       file_mips_opts.isa = ISA_MIPS32R3;
14171       break;
14172
14173     case OPTION_MIPS32R5:
14174       file_mips_opts.isa = ISA_MIPS32R5;
14175       break;
14176
14177     case OPTION_MIPS32R6:
14178       file_mips_opts.isa = ISA_MIPS32R6;
14179       break;
14180
14181     case OPTION_MIPS64R2:
14182       file_mips_opts.isa = ISA_MIPS64R2;
14183       break;
14184
14185     case OPTION_MIPS64R3:
14186       file_mips_opts.isa = ISA_MIPS64R3;
14187       break;
14188
14189     case OPTION_MIPS64R5:
14190       file_mips_opts.isa = ISA_MIPS64R5;
14191       break;
14192
14193     case OPTION_MIPS64R6:
14194       file_mips_opts.isa = ISA_MIPS64R6;
14195       break;
14196
14197     case OPTION_MIPS64:
14198       file_mips_opts.isa = ISA_MIPS64;
14199       break;
14200
14201     case OPTION_MTUNE:
14202       mips_set_option_string (&mips_tune_string, arg);
14203       break;
14204
14205     case OPTION_MARCH:
14206       mips_set_option_string (&mips_arch_string, arg);
14207       break;
14208
14209     case OPTION_M4650:
14210       mips_set_option_string (&mips_arch_string, "4650");
14211       mips_set_option_string (&mips_tune_string, "4650");
14212       break;
14213
14214     case OPTION_NO_M4650:
14215       break;
14216
14217     case OPTION_M4010:
14218       mips_set_option_string (&mips_arch_string, "4010");
14219       mips_set_option_string (&mips_tune_string, "4010");
14220       break;
14221
14222     case OPTION_NO_M4010:
14223       break;
14224
14225     case OPTION_M4100:
14226       mips_set_option_string (&mips_arch_string, "4100");
14227       mips_set_option_string (&mips_tune_string, "4100");
14228       break;
14229
14230     case OPTION_NO_M4100:
14231       break;
14232
14233     case OPTION_M3900:
14234       mips_set_option_string (&mips_arch_string, "3900");
14235       mips_set_option_string (&mips_tune_string, "3900");
14236       break;
14237
14238     case OPTION_NO_M3900:
14239       break;
14240
14241     case OPTION_MICROMIPS:
14242       if (file_mips_opts.mips16 == 1)
14243         {
14244           as_bad (_("-mmicromips cannot be used with -mips16"));
14245           return 0;
14246         }
14247       file_mips_opts.micromips = 1;
14248       mips_no_prev_insn ();
14249       break;
14250
14251     case OPTION_NO_MICROMIPS:
14252       file_mips_opts.micromips = 0;
14253       mips_no_prev_insn ();
14254       break;
14255
14256     case OPTION_MIPS16:
14257       if (file_mips_opts.micromips == 1)
14258         {
14259           as_bad (_("-mips16 cannot be used with -micromips"));
14260           return 0;
14261         }
14262       file_mips_opts.mips16 = 1;
14263       mips_no_prev_insn ();
14264       break;
14265
14266     case OPTION_NO_MIPS16:
14267       file_mips_opts.mips16 = 0;
14268       mips_no_prev_insn ();
14269       break;
14270
14271     case OPTION_FIX_24K:
14272       mips_fix_24k = 1;
14273       break;
14274
14275     case OPTION_NO_FIX_24K:
14276       mips_fix_24k = 0;
14277       break;
14278
14279     case OPTION_FIX_RM7000:
14280       mips_fix_rm7000 = 1;
14281       break;
14282
14283     case OPTION_NO_FIX_RM7000:
14284       mips_fix_rm7000 = 0;
14285       break;
14286
14287     case OPTION_FIX_LOONGSON2F_JUMP:
14288       mips_fix_loongson2f_jump = TRUE;
14289       break;
14290
14291     case OPTION_NO_FIX_LOONGSON2F_JUMP:
14292       mips_fix_loongson2f_jump = FALSE;
14293       break;
14294
14295     case OPTION_FIX_LOONGSON2F_NOP:
14296       mips_fix_loongson2f_nop = TRUE;
14297       break;
14298
14299     case OPTION_NO_FIX_LOONGSON2F_NOP:
14300       mips_fix_loongson2f_nop = FALSE;
14301       break;
14302
14303     case OPTION_FIX_VR4120:
14304       mips_fix_vr4120 = 1;
14305       break;
14306
14307     case OPTION_NO_FIX_VR4120:
14308       mips_fix_vr4120 = 0;
14309       break;
14310
14311     case OPTION_FIX_VR4130:
14312       mips_fix_vr4130 = 1;
14313       break;
14314
14315     case OPTION_NO_FIX_VR4130:
14316       mips_fix_vr4130 = 0;
14317       break;
14318
14319     case OPTION_FIX_CN63XXP1:
14320       mips_fix_cn63xxp1 = TRUE;
14321       break;
14322
14323     case OPTION_NO_FIX_CN63XXP1:
14324       mips_fix_cn63xxp1 = FALSE;
14325       break;
14326
14327     case OPTION_RELAX_BRANCH:
14328       mips_relax_branch = 1;
14329       break;
14330
14331     case OPTION_NO_RELAX_BRANCH:
14332       mips_relax_branch = 0;
14333       break;
14334
14335     case OPTION_INSN32:
14336       file_mips_opts.insn32 = TRUE;
14337       break;
14338
14339     case OPTION_NO_INSN32:
14340       file_mips_opts.insn32 = FALSE;
14341       break;
14342
14343     case OPTION_MSHARED:
14344       mips_in_shared = TRUE;
14345       break;
14346
14347     case OPTION_MNO_SHARED:
14348       mips_in_shared = FALSE;
14349       break;
14350
14351     case OPTION_MSYM32:
14352       file_mips_opts.sym32 = TRUE;
14353       break;
14354
14355     case OPTION_MNO_SYM32:
14356       file_mips_opts.sym32 = FALSE;
14357       break;
14358
14359       /* When generating ELF code, we permit -KPIC and -call_shared to
14360          select SVR4_PIC, and -non_shared to select no PIC.  This is
14361          intended to be compatible with Irix 5.  */
14362     case OPTION_CALL_SHARED:
14363       mips_pic = SVR4_PIC;
14364       mips_abicalls = TRUE;
14365       break;
14366
14367     case OPTION_CALL_NONPIC:
14368       mips_pic = NO_PIC;
14369       mips_abicalls = TRUE;
14370       break;
14371
14372     case OPTION_NON_SHARED:
14373       mips_pic = NO_PIC;
14374       mips_abicalls = FALSE;
14375       break;
14376
14377       /* The -xgot option tells the assembler to use 32 bit offsets
14378          when accessing the got in SVR4_PIC mode.  It is for Irix
14379          compatibility.  */
14380     case OPTION_XGOT:
14381       mips_big_got = 1;
14382       break;
14383
14384     case 'G':
14385       g_switch_value = atoi (arg);
14386       g_switch_seen = 1;
14387       break;
14388
14389       /* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
14390          and -mabi=64.  */
14391     case OPTION_32:
14392       mips_abi = O32_ABI;
14393       break;
14394
14395     case OPTION_N32:
14396       mips_abi = N32_ABI;
14397       break;
14398
14399     case OPTION_64:
14400       mips_abi = N64_ABI;
14401       if (!support_64bit_objects())
14402         as_fatal (_("no compiled in support for 64 bit object file format"));
14403       break;
14404
14405     case OPTION_GP32:
14406       file_mips_opts.gp = 32;
14407       break;
14408
14409     case OPTION_GP64:
14410       file_mips_opts.gp = 64;
14411       break;
14412
14413     case OPTION_FP32:
14414       file_mips_opts.fp = 32;
14415       break;
14416
14417     case OPTION_FPXX:
14418       file_mips_opts.fp = 0;
14419       break;
14420
14421     case OPTION_FP64:
14422       file_mips_opts.fp = 64;
14423       break;
14424
14425     case OPTION_ODD_SPREG:
14426       file_mips_opts.oddspreg = 1;
14427       break;
14428
14429     case OPTION_NO_ODD_SPREG:
14430       file_mips_opts.oddspreg = 0;
14431       break;
14432
14433     case OPTION_SINGLE_FLOAT:
14434       file_mips_opts.single_float = 1;
14435       break;
14436
14437     case OPTION_DOUBLE_FLOAT:
14438       file_mips_opts.single_float = 0;
14439       break;
14440
14441     case OPTION_SOFT_FLOAT:
14442       file_mips_opts.soft_float = 1;
14443       break;
14444
14445     case OPTION_HARD_FLOAT:
14446       file_mips_opts.soft_float = 0;
14447       break;
14448
14449     case OPTION_MABI:
14450       if (strcmp (arg, "32") == 0)
14451         mips_abi = O32_ABI;
14452       else if (strcmp (arg, "o64") == 0)
14453         mips_abi = O64_ABI;
14454       else if (strcmp (arg, "n32") == 0)
14455         mips_abi = N32_ABI;
14456       else if (strcmp (arg, "64") == 0)
14457         {
14458           mips_abi = N64_ABI;
14459           if (! support_64bit_objects())
14460             as_fatal (_("no compiled in support for 64 bit object file "
14461                         "format"));
14462         }
14463       else if (strcmp (arg, "eabi") == 0)
14464         mips_abi = EABI_ABI;
14465       else
14466         {
14467           as_fatal (_("invalid abi -mabi=%s"), arg);
14468           return 0;
14469         }
14470       break;
14471
14472     case OPTION_M7000_HILO_FIX:
14473       mips_7000_hilo_fix = TRUE;
14474       break;
14475
14476     case OPTION_MNO_7000_HILO_FIX:
14477       mips_7000_hilo_fix = FALSE;
14478       break;
14479
14480     case OPTION_MDEBUG:
14481       mips_flag_mdebug = TRUE;
14482       break;
14483
14484     case OPTION_NO_MDEBUG:
14485       mips_flag_mdebug = FALSE;
14486       break;
14487
14488     case OPTION_PDR:
14489       mips_flag_pdr = TRUE;
14490       break;
14491
14492     case OPTION_NO_PDR:
14493       mips_flag_pdr = FALSE;
14494       break;
14495
14496     case OPTION_MVXWORKS_PIC:
14497       mips_pic = VXWORKS_PIC;
14498       break;
14499
14500     case OPTION_NAN:
14501       if (strcmp (arg, "2008") == 0)
14502         mips_nan2008 = 1;
14503       else if (strcmp (arg, "legacy") == 0)
14504         mips_nan2008 = 0;
14505       else
14506         {
14507           as_fatal (_("invalid NaN setting -mnan=%s"), arg);
14508           return 0;
14509         }
14510       break;
14511
14512     default:
14513       return 0;
14514     }
14515
14516     mips_fix_loongson2f = mips_fix_loongson2f_nop || mips_fix_loongson2f_jump;
14517
14518   return 1;
14519 }
14520 \f
14521 /* Set up globals to tune for the ISA or processor described by INFO.  */
14522
14523 static void
14524 mips_set_tune (const struct mips_cpu_info *info)
14525 {
14526   if (info != 0)
14527     mips_tune = info->cpu;
14528 }
14529
14530
14531 void
14532 mips_after_parse_args (void)
14533 {
14534   const struct mips_cpu_info *arch_info = 0;
14535   const struct mips_cpu_info *tune_info = 0;
14536
14537   /* GP relative stuff not working for PE */
14538   if (strncmp (TARGET_OS, "pe", 2) == 0)
14539     {
14540       if (g_switch_seen && g_switch_value != 0)
14541         as_bad (_("-G not supported in this configuration"));
14542       g_switch_value = 0;
14543     }
14544
14545   if (mips_abi == NO_ABI)
14546     mips_abi = MIPS_DEFAULT_ABI;
14547
14548   /* The following code determines the architecture.
14549      Similar code was added to GCC 3.3 (see override_options() in
14550      config/mips/mips.c).  The GAS and GCC code should be kept in sync
14551      as much as possible.  */
14552
14553   if (mips_arch_string != 0)
14554     arch_info = mips_parse_cpu ("-march", mips_arch_string);
14555
14556   if (file_mips_opts.isa != ISA_UNKNOWN)
14557     {
14558       /* Handle -mipsN.  At this point, file_mips_opts.isa contains the
14559          ISA level specified by -mipsN, while arch_info->isa contains
14560          the -march selection (if any).  */
14561       if (arch_info != 0)
14562         {
14563           /* -march takes precedence over -mipsN, since it is more descriptive.
14564              There's no harm in specifying both as long as the ISA levels
14565              are the same.  */
14566           if (file_mips_opts.isa != arch_info->isa)
14567             as_bad (_("-%s conflicts with the other architecture options,"
14568                       " which imply -%s"),
14569                     mips_cpu_info_from_isa (file_mips_opts.isa)->name,
14570                     mips_cpu_info_from_isa (arch_info->isa)->name);
14571         }
14572       else
14573         arch_info = mips_cpu_info_from_isa (file_mips_opts.isa);
14574     }
14575
14576   if (arch_info == 0)
14577     {
14578       arch_info = mips_parse_cpu ("default CPU", MIPS_CPU_STRING_DEFAULT);
14579       gas_assert (arch_info);
14580     }
14581
14582   if (ABI_NEEDS_64BIT_REGS (mips_abi) && !ISA_HAS_64BIT_REGS (arch_info->isa))
14583     as_bad (_("-march=%s is not compatible with the selected ABI"),
14584             arch_info->name);
14585
14586   file_mips_opts.arch = arch_info->cpu;
14587   file_mips_opts.isa = arch_info->isa;
14588
14589   /* Set up initial mips_opts state.  */
14590   mips_opts = file_mips_opts;
14591
14592   /* The register size inference code is now placed in
14593      file_mips_check_options.  */
14594
14595   /* Optimize for file_mips_opts.arch, unless -mtune selects a different
14596      processor.  */
14597   if (mips_tune_string != 0)
14598     tune_info = mips_parse_cpu ("-mtune", mips_tune_string);
14599
14600   if (tune_info == 0)
14601     mips_set_tune (arch_info);
14602   else
14603     mips_set_tune (tune_info);
14604
14605   if (mips_flag_mdebug < 0)
14606     mips_flag_mdebug = 0;
14607 }
14608 \f
14609 void
14610 mips_init_after_args (void)
14611 {
14612   /* initialize opcodes */
14613   bfd_mips_num_opcodes = bfd_mips_num_builtin_opcodes;
14614   mips_opcodes = (struct mips_opcode *) mips_builtin_opcodes;
14615 }
14616
14617 long
14618 md_pcrel_from (fixS *fixP)
14619 {
14620   valueT addr = fixP->fx_where + fixP->fx_frag->fr_address;
14621   switch (fixP->fx_r_type)
14622     {
14623     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
14624     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
14625       /* Return the address of the delay slot.  */
14626       return addr + 2;
14627
14628     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
14629     case BFD_RELOC_MICROMIPS_JMP:
14630     case BFD_RELOC_MIPS16_16_PCREL_S1:
14631     case BFD_RELOC_16_PCREL_S2:
14632     case BFD_RELOC_MIPS_21_PCREL_S2:
14633     case BFD_RELOC_MIPS_26_PCREL_S2:
14634     case BFD_RELOC_MIPS_JMP:
14635       /* Return the address of the delay slot.  */
14636       return addr + 4;
14637
14638     case BFD_RELOC_MIPS_18_PCREL_S3:
14639       /* Return the aligned address of the doubleword containing
14640          the instruction.  */
14641       return addr & ~7;
14642
14643     default:
14644       return addr;
14645     }
14646 }
14647
14648 /* This is called before the symbol table is processed.  In order to
14649    work with gcc when using mips-tfile, we must keep all local labels.
14650    However, in other cases, we want to discard them.  If we were
14651    called with -g, but we didn't see any debugging information, it may
14652    mean that gcc is smuggling debugging information through to
14653    mips-tfile, in which case we must generate all local labels.  */
14654
14655 void
14656 mips_frob_file_before_adjust (void)
14657 {
14658 #ifndef NO_ECOFF_DEBUGGING
14659   if (ECOFF_DEBUGGING
14660       && mips_debug != 0
14661       && ! ecoff_debugging_seen)
14662     flag_keep_locals = 1;
14663 #endif
14664 }
14665
14666 /* Sort any unmatched HI16 and GOT16 relocs so that they immediately precede
14667    the corresponding LO16 reloc.  This is called before md_apply_fix and
14668    tc_gen_reloc.  Unmatched relocs can only be generated by use of explicit
14669    relocation operators.
14670
14671    For our purposes, a %lo() expression matches a %got() or %hi()
14672    expression if:
14673
14674       (a) it refers to the same symbol; and
14675       (b) the offset applied in the %lo() expression is no lower than
14676           the offset applied in the %got() or %hi().
14677
14678    (b) allows us to cope with code like:
14679
14680         lui     $4,%hi(foo)
14681         lh      $4,%lo(foo+2)($4)
14682
14683    ...which is legal on RELA targets, and has a well-defined behaviour
14684    if the user knows that adding 2 to "foo" will not induce a carry to
14685    the high 16 bits.
14686
14687    When several %lo()s match a particular %got() or %hi(), we use the
14688    following rules to distinguish them:
14689
14690      (1) %lo()s with smaller offsets are a better match than %lo()s with
14691          higher offsets.
14692
14693      (2) %lo()s with no matching %got() or %hi() are better than those
14694          that already have a matching %got() or %hi().
14695
14696      (3) later %lo()s are better than earlier %lo()s.
14697
14698    These rules are applied in order.
14699
14700    (1) means, among other things, that %lo()s with identical offsets are
14701    chosen if they exist.
14702
14703    (2) means that we won't associate several high-part relocations with
14704    the same low-part relocation unless there's no alternative.  Having
14705    several high parts for the same low part is a GNU extension; this rule
14706    allows careful users to avoid it.
14707
14708    (3) is purely cosmetic.  mips_hi_fixup_list is is in reverse order,
14709    with the last high-part relocation being at the front of the list.
14710    It therefore makes sense to choose the last matching low-part
14711    relocation, all other things being equal.  It's also easier
14712    to code that way.  */
14713
14714 void
14715 mips_frob_file (void)
14716 {
14717   struct mips_hi_fixup *l;
14718   bfd_reloc_code_real_type looking_for_rtype = BFD_RELOC_UNUSED;
14719
14720   for (l = mips_hi_fixup_list; l != NULL; l = l->next)
14721     {
14722       segment_info_type *seginfo;
14723       bfd_boolean matched_lo_p;
14724       fixS **hi_pos, **lo_pos, **pos;
14725
14726       gas_assert (reloc_needs_lo_p (l->fixp->fx_r_type));
14727
14728       /* If a GOT16 relocation turns out to be against a global symbol,
14729          there isn't supposed to be a matching LO.  Ignore %gots against
14730          constants; we'll report an error for those later.  */
14731       if (got16_reloc_p (l->fixp->fx_r_type)
14732           && !(l->fixp->fx_addsy
14733                && pic_need_relax (l->fixp->fx_addsy, l->seg)))
14734         continue;
14735
14736       /* Check quickly whether the next fixup happens to be a matching %lo.  */
14737       if (fixup_has_matching_lo_p (l->fixp))
14738         continue;
14739
14740       seginfo = seg_info (l->seg);
14741
14742       /* Set HI_POS to the position of this relocation in the chain.
14743          Set LO_POS to the position of the chosen low-part relocation.
14744          MATCHED_LO_P is true on entry to the loop if *POS is a low-part
14745          relocation that matches an immediately-preceding high-part
14746          relocation.  */
14747       hi_pos = NULL;
14748       lo_pos = NULL;
14749       matched_lo_p = FALSE;
14750       looking_for_rtype = matching_lo_reloc (l->fixp->fx_r_type);
14751
14752       for (pos = &seginfo->fix_root; *pos != NULL; pos = &(*pos)->fx_next)
14753         {
14754           if (*pos == l->fixp)
14755             hi_pos = pos;
14756
14757           if ((*pos)->fx_r_type == looking_for_rtype
14758               && symbol_same_p ((*pos)->fx_addsy, l->fixp->fx_addsy)
14759               && (*pos)->fx_offset >= l->fixp->fx_offset
14760               && (lo_pos == NULL
14761                   || (*pos)->fx_offset < (*lo_pos)->fx_offset
14762                   || (!matched_lo_p
14763                       && (*pos)->fx_offset == (*lo_pos)->fx_offset)))
14764             lo_pos = pos;
14765
14766           matched_lo_p = (reloc_needs_lo_p ((*pos)->fx_r_type)
14767                           && fixup_has_matching_lo_p (*pos));
14768         }
14769
14770       /* If we found a match, remove the high-part relocation from its
14771          current position and insert it before the low-part relocation.
14772          Make the offsets match so that fixup_has_matching_lo_p()
14773          will return true.
14774
14775          We don't warn about unmatched high-part relocations since some
14776          versions of gcc have been known to emit dead "lui ...%hi(...)"
14777          instructions.  */
14778       if (lo_pos != NULL)
14779         {
14780           l->fixp->fx_offset = (*lo_pos)->fx_offset;
14781           if (l->fixp->fx_next != *lo_pos)
14782             {
14783               *hi_pos = l->fixp->fx_next;
14784               l->fixp->fx_next = *lo_pos;
14785               *lo_pos = l->fixp;
14786             }
14787         }
14788     }
14789 }
14790
14791 int
14792 mips_force_relocation (fixS *fixp)
14793 {
14794   if (generic_force_reloc (fixp))
14795     return 1;
14796
14797   /* We want to keep BFD_RELOC_MICROMIPS_*_PCREL_S1 relocation,
14798      so that the linker relaxation can update targets.  */
14799   if (fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
14800       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
14801       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1)
14802     return 1;
14803
14804   /* We want all PC-relative relocations to be kept for R6 relaxation.  */
14805   if (ISA_IS_R6 (file_mips_opts.isa)
14806       && (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
14807           || fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
14808           || fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2
14809           || fixp->fx_r_type == BFD_RELOC_MIPS_18_PCREL_S3
14810           || fixp->fx_r_type == BFD_RELOC_MIPS_19_PCREL_S2
14811           || fixp->fx_r_type == BFD_RELOC_HI16_S_PCREL
14812           || fixp->fx_r_type == BFD_RELOC_LO16_PCREL))
14813     return 1;
14814
14815   return 0;
14816 }
14817
14818 /* Read the instruction associated with RELOC from BUF.  */
14819
14820 static unsigned int
14821 read_reloc_insn (char *buf, bfd_reloc_code_real_type reloc)
14822 {
14823   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
14824     return read_compressed_insn (buf, 4);
14825   else
14826     return read_insn (buf);
14827 }
14828
14829 /* Write instruction INSN to BUF, given that it has been relocated
14830    by RELOC.  */
14831
14832 static void
14833 write_reloc_insn (char *buf, bfd_reloc_code_real_type reloc,
14834                   unsigned long insn)
14835 {
14836   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
14837     write_compressed_insn (buf, insn, 4);
14838   else
14839     write_insn (buf, insn);
14840 }
14841
14842 /* Apply a fixup to the object file.  */
14843
14844 void
14845 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
14846 {
14847   char *buf;
14848   unsigned long insn;
14849   reloc_howto_type *howto;
14850
14851   if (fixP->fx_pcrel)
14852     switch (fixP->fx_r_type)
14853       {
14854       case BFD_RELOC_16_PCREL_S2:
14855       case BFD_RELOC_MIPS16_16_PCREL_S1:
14856       case BFD_RELOC_MICROMIPS_7_PCREL_S1:
14857       case BFD_RELOC_MICROMIPS_10_PCREL_S1:
14858       case BFD_RELOC_MICROMIPS_16_PCREL_S1:
14859       case BFD_RELOC_32_PCREL:
14860       case BFD_RELOC_MIPS_21_PCREL_S2:
14861       case BFD_RELOC_MIPS_26_PCREL_S2:
14862       case BFD_RELOC_MIPS_18_PCREL_S3:
14863       case BFD_RELOC_MIPS_19_PCREL_S2:
14864       case BFD_RELOC_HI16_S_PCREL:
14865       case BFD_RELOC_LO16_PCREL:
14866         break;
14867
14868       case BFD_RELOC_32:
14869         fixP->fx_r_type = BFD_RELOC_32_PCREL;
14870         break;
14871
14872       default:
14873         as_bad_where (fixP->fx_file, fixP->fx_line,
14874                       _("PC-relative reference to a different section"));
14875         break;
14876       }
14877
14878   /* Handle BFD_RELOC_8, since it's easy.  Punt on other bfd relocations
14879      that have no MIPS ELF equivalent.  */
14880   if (fixP->fx_r_type != BFD_RELOC_8)
14881     {
14882       howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
14883       if (!howto)
14884         return;
14885     }
14886
14887   gas_assert (fixP->fx_size == 2
14888               || fixP->fx_size == 4
14889               || fixP->fx_r_type == BFD_RELOC_8
14890               || fixP->fx_r_type == BFD_RELOC_16
14891               || fixP->fx_r_type == BFD_RELOC_64
14892               || fixP->fx_r_type == BFD_RELOC_CTOR
14893               || fixP->fx_r_type == BFD_RELOC_MIPS_SUB
14894               || fixP->fx_r_type == BFD_RELOC_MICROMIPS_SUB
14895               || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
14896               || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY
14897               || fixP->fx_r_type == BFD_RELOC_MIPS_TLS_DTPREL64
14898               || fixP->fx_r_type == BFD_RELOC_NONE);
14899
14900   buf = fixP->fx_frag->fr_literal + fixP->fx_where;
14901
14902   /* Don't treat parts of a composite relocation as done.  There are two
14903      reasons for this:
14904
14905      (1) The second and third parts will be against 0 (RSS_UNDEF) but
14906          should nevertheless be emitted if the first part is.
14907
14908      (2) In normal usage, composite relocations are never assembly-time
14909          constants.  The easiest way of dealing with the pathological
14910          exceptions is to generate a relocation against STN_UNDEF and
14911          leave everything up to the linker.  */
14912   if (fixP->fx_addsy == NULL && !fixP->fx_pcrel && fixP->fx_tcbit == 0)
14913     fixP->fx_done = 1;
14914
14915   switch (fixP->fx_r_type)
14916     {
14917     case BFD_RELOC_MIPS_TLS_GD:
14918     case BFD_RELOC_MIPS_TLS_LDM:
14919     case BFD_RELOC_MIPS_TLS_DTPREL32:
14920     case BFD_RELOC_MIPS_TLS_DTPREL64:
14921     case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
14922     case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
14923     case BFD_RELOC_MIPS_TLS_GOTTPREL:
14924     case BFD_RELOC_MIPS_TLS_TPREL32:
14925     case BFD_RELOC_MIPS_TLS_TPREL64:
14926     case BFD_RELOC_MIPS_TLS_TPREL_HI16:
14927     case BFD_RELOC_MIPS_TLS_TPREL_LO16:
14928     case BFD_RELOC_MICROMIPS_TLS_GD:
14929     case BFD_RELOC_MICROMIPS_TLS_LDM:
14930     case BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16:
14931     case BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16:
14932     case BFD_RELOC_MICROMIPS_TLS_GOTTPREL:
14933     case BFD_RELOC_MICROMIPS_TLS_TPREL_HI16:
14934     case BFD_RELOC_MICROMIPS_TLS_TPREL_LO16:
14935     case BFD_RELOC_MIPS16_TLS_GD:
14936     case BFD_RELOC_MIPS16_TLS_LDM:
14937     case BFD_RELOC_MIPS16_TLS_DTPREL_HI16:
14938     case BFD_RELOC_MIPS16_TLS_DTPREL_LO16:
14939     case BFD_RELOC_MIPS16_TLS_GOTTPREL:
14940     case BFD_RELOC_MIPS16_TLS_TPREL_HI16:
14941     case BFD_RELOC_MIPS16_TLS_TPREL_LO16:
14942       if (fixP->fx_addsy)
14943         S_SET_THREAD_LOCAL (fixP->fx_addsy);
14944       else
14945         as_bad_where (fixP->fx_file, fixP->fx_line,
14946                       _("TLS relocation against a constant"));
14947       break;
14948
14949     case BFD_RELOC_MIPS_JMP:
14950     case BFD_RELOC_MIPS_SHIFT5:
14951     case BFD_RELOC_MIPS_SHIFT6:
14952     case BFD_RELOC_MIPS_GOT_DISP:
14953     case BFD_RELOC_MIPS_GOT_PAGE:
14954     case BFD_RELOC_MIPS_GOT_OFST:
14955     case BFD_RELOC_MIPS_SUB:
14956     case BFD_RELOC_MIPS_INSERT_A:
14957     case BFD_RELOC_MIPS_INSERT_B:
14958     case BFD_RELOC_MIPS_DELETE:
14959     case BFD_RELOC_MIPS_HIGHEST:
14960     case BFD_RELOC_MIPS_HIGHER:
14961     case BFD_RELOC_MIPS_SCN_DISP:
14962     case BFD_RELOC_MIPS_REL16:
14963     case BFD_RELOC_MIPS_RELGOT:
14964     case BFD_RELOC_MIPS_JALR:
14965     case BFD_RELOC_HI16:
14966     case BFD_RELOC_HI16_S:
14967     case BFD_RELOC_LO16:
14968     case BFD_RELOC_GPREL16:
14969     case BFD_RELOC_MIPS_LITERAL:
14970     case BFD_RELOC_MIPS_CALL16:
14971     case BFD_RELOC_MIPS_GOT16:
14972     case BFD_RELOC_GPREL32:
14973     case BFD_RELOC_MIPS_GOT_HI16:
14974     case BFD_RELOC_MIPS_GOT_LO16:
14975     case BFD_RELOC_MIPS_CALL_HI16:
14976     case BFD_RELOC_MIPS_CALL_LO16:
14977     case BFD_RELOC_HI16_S_PCREL:
14978     case BFD_RELOC_LO16_PCREL:
14979     case BFD_RELOC_MIPS16_GPREL:
14980     case BFD_RELOC_MIPS16_GOT16:
14981     case BFD_RELOC_MIPS16_CALL16:
14982     case BFD_RELOC_MIPS16_HI16:
14983     case BFD_RELOC_MIPS16_HI16_S:
14984     case BFD_RELOC_MIPS16_LO16:
14985     case BFD_RELOC_MIPS16_JMP:
14986     case BFD_RELOC_MICROMIPS_JMP:
14987     case BFD_RELOC_MICROMIPS_GOT_DISP:
14988     case BFD_RELOC_MICROMIPS_GOT_PAGE:
14989     case BFD_RELOC_MICROMIPS_GOT_OFST:
14990     case BFD_RELOC_MICROMIPS_SUB:
14991     case BFD_RELOC_MICROMIPS_HIGHEST:
14992     case BFD_RELOC_MICROMIPS_HIGHER:
14993     case BFD_RELOC_MICROMIPS_SCN_DISP:
14994     case BFD_RELOC_MICROMIPS_JALR:
14995     case BFD_RELOC_MICROMIPS_HI16:
14996     case BFD_RELOC_MICROMIPS_HI16_S:
14997     case BFD_RELOC_MICROMIPS_LO16:
14998     case BFD_RELOC_MICROMIPS_GPREL16:
14999     case BFD_RELOC_MICROMIPS_LITERAL:
15000     case BFD_RELOC_MICROMIPS_CALL16:
15001     case BFD_RELOC_MICROMIPS_GOT16:
15002     case BFD_RELOC_MICROMIPS_GOT_HI16:
15003     case BFD_RELOC_MICROMIPS_GOT_LO16:
15004     case BFD_RELOC_MICROMIPS_CALL_HI16:
15005     case BFD_RELOC_MICROMIPS_CALL_LO16:
15006     case BFD_RELOC_MIPS_EH:
15007       if (fixP->fx_done)
15008         {
15009           offsetT value;
15010
15011           if (calculate_reloc (fixP->fx_r_type, *valP, &value))
15012             {
15013               insn = read_reloc_insn (buf, fixP->fx_r_type);
15014               if (mips16_reloc_p (fixP->fx_r_type))
15015                 insn |= mips16_immed_extend (value, 16);
15016               else
15017                 insn |= (value & 0xffff);
15018               write_reloc_insn (buf, fixP->fx_r_type, insn);
15019             }
15020           else
15021             as_bad_where (fixP->fx_file, fixP->fx_line,
15022                           _("unsupported constant in relocation"));
15023         }
15024       break;
15025
15026     case BFD_RELOC_64:
15027       /* This is handled like BFD_RELOC_32, but we output a sign
15028          extended value if we are only 32 bits.  */
15029       if (fixP->fx_done)
15030         {
15031           if (8 <= sizeof (valueT))
15032             md_number_to_chars (buf, *valP, 8);
15033           else
15034             {
15035               valueT hiv;
15036
15037               if ((*valP & 0x80000000) != 0)
15038                 hiv = 0xffffffff;
15039               else
15040                 hiv = 0;
15041               md_number_to_chars (buf + (target_big_endian ? 4 : 0), *valP, 4);
15042               md_number_to_chars (buf + (target_big_endian ? 0 : 4), hiv, 4);
15043             }
15044         }
15045       break;
15046
15047     case BFD_RELOC_RVA:
15048     case BFD_RELOC_32:
15049     case BFD_RELOC_32_PCREL:
15050     case BFD_RELOC_16:
15051     case BFD_RELOC_8:
15052       /* If we are deleting this reloc entry, we must fill in the
15053          value now.  This can happen if we have a .word which is not
15054          resolved when it appears but is later defined.  */
15055       if (fixP->fx_done)
15056         md_number_to_chars (buf, *valP, fixP->fx_size);
15057       break;
15058
15059     case BFD_RELOC_MIPS_21_PCREL_S2:
15060       if ((*valP & 0x3) != 0)
15061         as_bad_where (fixP->fx_file, fixP->fx_line,
15062                       _("branch to misaligned address (%lx)"), (long) *valP);
15063       if (!fixP->fx_done)
15064         break;
15065
15066       if (*valP + 0x400000 <= 0x7fffff)
15067         {
15068           insn = read_insn (buf);
15069           insn |= (*valP >> 2) & 0x1fffff;
15070           write_insn (buf, insn);
15071         }
15072       else
15073         as_bad_where (fixP->fx_file, fixP->fx_line,
15074                       _("branch out of range"));
15075       break;
15076
15077     case BFD_RELOC_MIPS_26_PCREL_S2:
15078       if ((*valP & 0x3) != 0)
15079         as_bad_where (fixP->fx_file, fixP->fx_line,
15080                       _("branch to misaligned address (%lx)"), (long) *valP);
15081       if (!fixP->fx_done)
15082         break;
15083
15084       if (*valP + 0x8000000 <= 0xfffffff)
15085         {
15086           insn = read_insn (buf);
15087           insn |= (*valP >> 2) & 0x3ffffff;
15088           write_insn (buf, insn);
15089         }
15090       else
15091         as_bad_where (fixP->fx_file, fixP->fx_line,
15092                       _("branch out of range"));
15093       break;
15094
15095     case BFD_RELOC_MIPS_18_PCREL_S3:
15096       if (fixP->fx_addsy && (S_GET_VALUE (fixP->fx_addsy) & 0x7) != 0)
15097         as_bad_where (fixP->fx_file, fixP->fx_line,
15098                       _("PC-relative access using misaligned symbol (%lx)"),
15099                       (long) S_GET_VALUE (fixP->fx_addsy));
15100       if ((fixP->fx_offset & 0x7) != 0)
15101         as_bad_where (fixP->fx_file, fixP->fx_line,
15102                       _("PC-relative access using misaligned offset (%lx)"),
15103                       (long) fixP->fx_offset);
15104       if (!fixP->fx_done)
15105         break;
15106
15107       if (*valP + 0x100000 <= 0x1fffff)
15108         {
15109           insn = read_insn (buf);
15110           insn |= (*valP >> 3) & 0x3ffff;
15111           write_insn (buf, insn);
15112         }
15113       else
15114         as_bad_where (fixP->fx_file, fixP->fx_line,
15115                       _("PC-relative access out of range"));
15116       break;
15117
15118     case BFD_RELOC_MIPS_19_PCREL_S2:
15119       if ((*valP & 0x3) != 0)
15120         as_bad_where (fixP->fx_file, fixP->fx_line,
15121                       _("PC-relative access to misaligned address (%lx)"),
15122                       (long) *valP);
15123       if (!fixP->fx_done)
15124         break;
15125
15126       if (*valP + 0x100000 <= 0x1fffff)
15127         {
15128           insn = read_insn (buf);
15129           insn |= (*valP >> 2) & 0x7ffff;
15130           write_insn (buf, insn);
15131         }
15132       else
15133         as_bad_where (fixP->fx_file, fixP->fx_line,
15134                       _("PC-relative access out of range"));
15135       break;
15136
15137     case BFD_RELOC_16_PCREL_S2:
15138       if ((*valP & 0x3) != 0)
15139         as_bad_where (fixP->fx_file, fixP->fx_line,
15140                       _("branch to misaligned address (%lx)"), (long) *valP);
15141
15142       /* We need to save the bits in the instruction since fixup_segment()
15143          might be deleting the relocation entry (i.e., a branch within
15144          the current segment).  */
15145       if (! fixP->fx_done)
15146         break;
15147
15148       /* Update old instruction data.  */
15149       insn = read_insn (buf);
15150
15151       if (*valP + 0x20000 <= 0x3ffff)
15152         {
15153           insn |= (*valP >> 2) & 0xffff;
15154           write_insn (buf, insn);
15155         }
15156       else if (mips_pic == NO_PIC
15157                && fixP->fx_done
15158                && fixP->fx_frag->fr_address >= text_section->vma
15159                && (fixP->fx_frag->fr_address
15160                    < text_section->vma + bfd_get_section_size (text_section))
15161                && ((insn & 0xffff0000) == 0x10000000     /* beq $0,$0 */
15162                    || (insn & 0xffff0000) == 0x04010000  /* bgez $0 */
15163                    || (insn & 0xffff0000) == 0x04110000)) /* bgezal $0 */
15164         {
15165           /* The branch offset is too large.  If this is an
15166              unconditional branch, and we are not generating PIC code,
15167              we can convert it to an absolute jump instruction.  */
15168           if ((insn & 0xffff0000) == 0x04110000)         /* bgezal $0 */
15169             insn = 0x0c000000;  /* jal */
15170           else
15171             insn = 0x08000000;  /* j */
15172           fixP->fx_r_type = BFD_RELOC_MIPS_JMP;
15173           fixP->fx_done = 0;
15174           fixP->fx_addsy = section_symbol (text_section);
15175           *valP += md_pcrel_from (fixP);
15176           write_insn (buf, insn);
15177         }
15178       else
15179         {
15180           /* If we got here, we have branch-relaxation disabled,
15181              and there's nothing we can do to fix this instruction
15182              without turning it into a longer sequence.  */
15183           as_bad_where (fixP->fx_file, fixP->fx_line,
15184                         _("branch out of range"));
15185         }
15186       break;
15187
15188     case BFD_RELOC_MIPS16_16_PCREL_S1:
15189     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
15190     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
15191     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
15192       /* We adjust the offset back to even.  */
15193       if ((*valP & 0x1) != 0)
15194         --(*valP);
15195
15196       if (! fixP->fx_done)
15197         break;
15198
15199       /* Should never visit here, because we keep the relocation.  */
15200       abort ();
15201       break;
15202
15203     case BFD_RELOC_VTABLE_INHERIT:
15204       fixP->fx_done = 0;
15205       if (fixP->fx_addsy
15206           && !S_IS_DEFINED (fixP->fx_addsy)
15207           && !S_IS_WEAK (fixP->fx_addsy))
15208         S_SET_WEAK (fixP->fx_addsy);
15209       break;
15210
15211     case BFD_RELOC_NONE:
15212     case BFD_RELOC_VTABLE_ENTRY:
15213       fixP->fx_done = 0;
15214       break;
15215
15216     default:
15217       abort ();
15218     }
15219
15220   /* Remember value for tc_gen_reloc.  */
15221   fixP->fx_addnumber = *valP;
15222 }
15223
15224 static symbolS *
15225 get_symbol (void)
15226 {
15227   int c;
15228   char *name;
15229   symbolS *p;
15230
15231   c = get_symbol_name (&name);
15232   p = (symbolS *) symbol_find_or_make (name);
15233   (void) restore_line_pointer (c);
15234   return p;
15235 }
15236
15237 /* Align the current frag to a given power of two.  If a particular
15238    fill byte should be used, FILL points to an integer that contains
15239    that byte, otherwise FILL is null.
15240
15241    This function used to have the comment:
15242
15243       The MIPS assembler also automatically adjusts any preceding label.
15244
15245    The implementation therefore applied the adjustment to a maximum of
15246    one label.  However, other label adjustments are applied to batches
15247    of labels, and adjusting just one caused problems when new labels
15248    were added for the sake of debugging or unwind information.
15249    We therefore adjust all preceding labels (given as LABELS) instead.  */
15250
15251 static void
15252 mips_align (int to, int *fill, struct insn_label_list *labels)
15253 {
15254   mips_emit_delays ();
15255   mips_record_compressed_mode ();
15256   if (fill == NULL && subseg_text_p (now_seg))
15257     frag_align_code (to, 0);
15258   else
15259     frag_align (to, fill ? *fill : 0, 0);
15260   record_alignment (now_seg, to);
15261   mips_move_labels (labels, FALSE);
15262 }
15263
15264 /* Align to a given power of two.  .align 0 turns off the automatic
15265    alignment used by the data creating pseudo-ops.  */
15266
15267 static void
15268 s_align (int x ATTRIBUTE_UNUSED)
15269 {
15270   int temp, fill_value, *fill_ptr;
15271   long max_alignment = 28;
15272
15273   /* o Note that the assembler pulls down any immediately preceding label
15274        to the aligned address.
15275      o It's not documented but auto alignment is reinstated by
15276        a .align pseudo instruction.
15277      o Note also that after auto alignment is turned off the mips assembler
15278        issues an error on attempt to assemble an improperly aligned data item.
15279        We don't.  */
15280
15281   temp = get_absolute_expression ();
15282   if (temp > max_alignment)
15283     as_bad (_("alignment too large, %d assumed"), temp = max_alignment);
15284   else if (temp < 0)
15285     {
15286       as_warn (_("alignment negative, 0 assumed"));
15287       temp = 0;
15288     }
15289   if (*input_line_pointer == ',')
15290     {
15291       ++input_line_pointer;
15292       fill_value = get_absolute_expression ();
15293       fill_ptr = &fill_value;
15294     }
15295   else
15296     fill_ptr = 0;
15297   if (temp)
15298     {
15299       segment_info_type *si = seg_info (now_seg);
15300       struct insn_label_list *l = si->label_list;
15301       /* Auto alignment should be switched on by next section change.  */
15302       auto_align = 1;
15303       mips_align (temp, fill_ptr, l);
15304     }
15305   else
15306     {
15307       auto_align = 0;
15308     }
15309
15310   demand_empty_rest_of_line ();
15311 }
15312
15313 static void
15314 s_change_sec (int sec)
15315 {
15316   segT seg;
15317
15318   /* The ELF backend needs to know that we are changing sections, so
15319      that .previous works correctly.  We could do something like check
15320      for an obj_section_change_hook macro, but that might be confusing
15321      as it would not be appropriate to use it in the section changing
15322      functions in read.c, since obj-elf.c intercepts those.  FIXME:
15323      This should be cleaner, somehow.  */
15324   obj_elf_section_change_hook ();
15325
15326   mips_emit_delays ();
15327
15328   switch (sec)
15329     {
15330     case 't':
15331       s_text (0);
15332       break;
15333     case 'd':
15334       s_data (0);
15335       break;
15336     case 'b':
15337       subseg_set (bss_section, (subsegT) get_absolute_expression ());
15338       demand_empty_rest_of_line ();
15339       break;
15340
15341     case 'r':
15342       seg = subseg_new (RDATA_SECTION_NAME,
15343                         (subsegT) get_absolute_expression ());
15344       bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
15345                                               | SEC_READONLY | SEC_RELOC
15346                                               | SEC_DATA));
15347       if (strncmp (TARGET_OS, "elf", 3) != 0)
15348         record_alignment (seg, 4);
15349       demand_empty_rest_of_line ();
15350       break;
15351
15352     case 's':
15353       seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
15354       bfd_set_section_flags (stdoutput, seg,
15355                              SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
15356       if (strncmp (TARGET_OS, "elf", 3) != 0)
15357         record_alignment (seg, 4);
15358       demand_empty_rest_of_line ();
15359       break;
15360
15361     case 'B':
15362       seg = subseg_new (".sbss", (subsegT) get_absolute_expression ());
15363       bfd_set_section_flags (stdoutput, seg, SEC_ALLOC);
15364       if (strncmp (TARGET_OS, "elf", 3) != 0)
15365         record_alignment (seg, 4);
15366       demand_empty_rest_of_line ();
15367       break;
15368     }
15369
15370   auto_align = 1;
15371 }
15372
15373 void
15374 s_change_section (int ignore ATTRIBUTE_UNUSED)
15375 {
15376   char *saved_ilp;
15377   char *section_name;
15378   char c, endc;
15379   char next_c = 0;
15380   int section_type;
15381   int section_flag;
15382   int section_entry_size;
15383   int section_alignment;
15384
15385   saved_ilp = input_line_pointer;
15386   endc = get_symbol_name (&section_name);
15387   c = (endc == '"' ? input_line_pointer[1] : endc);
15388   if (c)
15389     next_c = input_line_pointer [(endc == '"' ? 2 : 1)];
15390
15391   /* Do we have .section Name<,"flags">?  */
15392   if (c != ',' || (c == ',' && next_c == '"'))
15393     {
15394       /* Just after name is now '\0'.  */
15395       (void) restore_line_pointer (endc);
15396       input_line_pointer = saved_ilp;
15397       obj_elf_section (ignore);
15398       return;
15399     }
15400
15401   section_name = xstrdup (section_name);
15402   c = restore_line_pointer (endc);
15403
15404   input_line_pointer++;
15405
15406   /* Do we have .section Name<,type><,flag><,entry_size><,alignment>  */
15407   if (c == ',')
15408     section_type = get_absolute_expression ();
15409   else
15410     section_type = 0;
15411
15412   if (*input_line_pointer++ == ',')
15413     section_flag = get_absolute_expression ();
15414   else
15415     section_flag = 0;
15416
15417   if (*input_line_pointer++ == ',')
15418     section_entry_size = get_absolute_expression ();
15419   else
15420     section_entry_size = 0;
15421
15422   if (*input_line_pointer++ == ',')
15423     section_alignment = get_absolute_expression ();
15424   else
15425     section_alignment = 0;
15426
15427   /* FIXME: really ignore?  */
15428   (void) section_alignment;
15429
15430   /* When using the generic form of .section (as implemented by obj-elf.c),
15431      there's no way to set the section type to SHT_MIPS_DWARF.  Users have
15432      traditionally had to fall back on the more common @progbits instead.
15433
15434      There's nothing really harmful in this, since bfd will correct
15435      SHT_PROGBITS to SHT_MIPS_DWARF before writing out the file.  But it
15436      means that, for backwards compatibility, the special_section entries
15437      for dwarf sections must use SHT_PROGBITS rather than SHT_MIPS_DWARF.
15438
15439      Even so, we shouldn't force users of the MIPS .section syntax to
15440      incorrectly label the sections as SHT_PROGBITS.  The best compromise
15441      seems to be to map SHT_MIPS_DWARF to SHT_PROGBITS before calling the
15442      generic type-checking code.  */
15443   if (section_type == SHT_MIPS_DWARF)
15444     section_type = SHT_PROGBITS;
15445
15446   obj_elf_change_section (section_name, section_type, section_flag,
15447                           section_entry_size, 0, 0, 0);
15448
15449   if (now_seg->name != section_name)
15450     free (section_name);
15451 }
15452
15453 void
15454 mips_enable_auto_align (void)
15455 {
15456   auto_align = 1;
15457 }
15458
15459 static void
15460 s_cons (int log_size)
15461 {
15462   segment_info_type *si = seg_info (now_seg);
15463   struct insn_label_list *l = si->label_list;
15464
15465   mips_emit_delays ();
15466   if (log_size > 0 && auto_align)
15467     mips_align (log_size, 0, l);
15468   cons (1 << log_size);
15469   mips_clear_insn_labels ();
15470 }
15471
15472 static void
15473 s_float_cons (int type)
15474 {
15475   segment_info_type *si = seg_info (now_seg);
15476   struct insn_label_list *l = si->label_list;
15477
15478   mips_emit_delays ();
15479
15480   if (auto_align)
15481     {
15482       if (type == 'd')
15483         mips_align (3, 0, l);
15484       else
15485         mips_align (2, 0, l);
15486     }
15487
15488   float_cons (type);
15489   mips_clear_insn_labels ();
15490 }
15491
15492 /* Handle .globl.  We need to override it because on Irix 5 you are
15493    permitted to say
15494        .globl foo .text
15495    where foo is an undefined symbol, to mean that foo should be
15496    considered to be the address of a function.  */
15497
15498 static void
15499 s_mips_globl (int x ATTRIBUTE_UNUSED)
15500 {
15501   char *name;
15502   int c;
15503   symbolS *symbolP;
15504   flagword flag;
15505
15506   do
15507     {
15508       c = get_symbol_name (&name);
15509       symbolP = symbol_find_or_make (name);
15510       S_SET_EXTERNAL (symbolP);
15511
15512       *input_line_pointer = c;
15513       SKIP_WHITESPACE_AFTER_NAME ();
15514
15515       /* On Irix 5, every global symbol that is not explicitly labelled as
15516          being a function is apparently labelled as being an object.  */
15517       flag = BSF_OBJECT;
15518
15519       if (!is_end_of_line[(unsigned char) *input_line_pointer]
15520           && (*input_line_pointer != ','))
15521         {
15522           char *secname;
15523           asection *sec;
15524
15525           c = get_symbol_name (&secname);
15526           sec = bfd_get_section_by_name (stdoutput, secname);
15527           if (sec == NULL)
15528             as_bad (_("%s: no such section"), secname);
15529           (void) restore_line_pointer (c);
15530
15531           if (sec != NULL && (sec->flags & SEC_CODE) != 0)
15532             flag = BSF_FUNCTION;
15533         }
15534
15535       symbol_get_bfdsym (symbolP)->flags |= flag;
15536
15537       c = *input_line_pointer;
15538       if (c == ',')
15539         {
15540           input_line_pointer++;
15541           SKIP_WHITESPACE ();
15542           if (is_end_of_line[(unsigned char) *input_line_pointer])
15543             c = '\n';
15544         }
15545     }
15546   while (c == ',');
15547
15548   demand_empty_rest_of_line ();
15549 }
15550
15551 static void
15552 s_option (int x ATTRIBUTE_UNUSED)
15553 {
15554   char *opt;
15555   char c;
15556
15557   c = get_symbol_name (&opt);
15558
15559   if (*opt == 'O')
15560     {
15561       /* FIXME: What does this mean?  */
15562     }
15563   else if (strncmp (opt, "pic", 3) == 0 && ISDIGIT (opt[3]) && opt[4] == '\0')
15564     {
15565       int i;
15566
15567       i = atoi (opt + 3);
15568       if (i != 0 && i != 2)
15569         as_bad (_(".option pic%d not supported"), i);
15570       else if (mips_pic == VXWORKS_PIC)
15571         as_bad (_(".option pic%d not supported in VxWorks PIC mode"), i);
15572       else if (i == 0)
15573         mips_pic = NO_PIC;
15574       else if (i == 2)
15575         {
15576           mips_pic = SVR4_PIC;
15577           mips_abicalls = TRUE;
15578         }
15579
15580       if (mips_pic == SVR4_PIC)
15581         {
15582           if (g_switch_seen && g_switch_value != 0)
15583             as_warn (_("-G may not be used with SVR4 PIC code"));
15584           g_switch_value = 0;
15585           bfd_set_gp_size (stdoutput, 0);
15586         }
15587     }
15588   else
15589     as_warn (_("unrecognized option \"%s\""), opt);
15590
15591   (void) restore_line_pointer (c);
15592   demand_empty_rest_of_line ();
15593 }
15594
15595 /* This structure is used to hold a stack of .set values.  */
15596
15597 struct mips_option_stack
15598 {
15599   struct mips_option_stack *next;
15600   struct mips_set_options options;
15601 };
15602
15603 static struct mips_option_stack *mips_opts_stack;
15604
15605 /* Return status for .set/.module option handling.  */
15606
15607 enum code_option_type
15608 {
15609   /* Unrecognized option.  */
15610   OPTION_TYPE_BAD = -1,
15611
15612   /* Ordinary option.  */
15613   OPTION_TYPE_NORMAL,
15614
15615   /* ISA changing option.  */
15616   OPTION_TYPE_ISA
15617 };
15618
15619 /* Handle common .set/.module options.  Return status indicating option
15620    type.  */
15621
15622 static enum code_option_type
15623 parse_code_option (char * name)
15624 {
15625   bfd_boolean isa_set = FALSE;
15626   const struct mips_ase *ase;
15627
15628   if (strncmp (name, "at=", 3) == 0)
15629     {
15630       char *s = name + 3;
15631
15632       if (!reg_lookup (&s, RTYPE_NUM | RTYPE_GP, &mips_opts.at))
15633         as_bad (_("unrecognized register name `%s'"), s);
15634     }
15635   else if (strcmp (name, "at") == 0)
15636     mips_opts.at = ATREG;
15637   else if (strcmp (name, "noat") == 0)
15638     mips_opts.at = ZERO;
15639   else if (strcmp (name, "move") == 0 || strcmp (name, "novolatile") == 0)
15640     mips_opts.nomove = 0;
15641   else if (strcmp (name, "nomove") == 0 || strcmp (name, "volatile") == 0)
15642     mips_opts.nomove = 1;
15643   else if (strcmp (name, "bopt") == 0)
15644     mips_opts.nobopt = 0;
15645   else if (strcmp (name, "nobopt") == 0)
15646     mips_opts.nobopt = 1;
15647   else if (strcmp (name, "gp=32") == 0)
15648     mips_opts.gp = 32;
15649   else if (strcmp (name, "gp=64") == 0)
15650     mips_opts.gp = 64;
15651   else if (strcmp (name, "fp=32") == 0)
15652     mips_opts.fp = 32;
15653   else if (strcmp (name, "fp=xx") == 0)
15654     mips_opts.fp = 0;
15655   else if (strcmp (name, "fp=64") == 0)
15656     mips_opts.fp = 64;
15657   else if (strcmp (name, "softfloat") == 0)
15658     mips_opts.soft_float = 1;
15659   else if (strcmp (name, "hardfloat") == 0)
15660     mips_opts.soft_float = 0;
15661   else if (strcmp (name, "singlefloat") == 0)
15662     mips_opts.single_float = 1;
15663   else if (strcmp (name, "doublefloat") == 0)
15664     mips_opts.single_float = 0;
15665   else if (strcmp (name, "nooddspreg") == 0)
15666     mips_opts.oddspreg = 0;
15667   else if (strcmp (name, "oddspreg") == 0)
15668     mips_opts.oddspreg = 1;
15669   else if (strcmp (name, "mips16") == 0
15670            || strcmp (name, "MIPS-16") == 0)
15671     mips_opts.mips16 = 1;
15672   else if (strcmp (name, "nomips16") == 0
15673            || strcmp (name, "noMIPS-16") == 0)
15674     mips_opts.mips16 = 0;
15675   else if (strcmp (name, "micromips") == 0)
15676     mips_opts.micromips = 1;
15677   else if (strcmp (name, "nomicromips") == 0)
15678     mips_opts.micromips = 0;
15679   else if (name[0] == 'n'
15680            && name[1] == 'o'
15681            && (ase = mips_lookup_ase (name + 2)))
15682     mips_set_ase (ase, &mips_opts, FALSE);
15683   else if ((ase = mips_lookup_ase (name)))
15684     mips_set_ase (ase, &mips_opts, TRUE);
15685   else if (strncmp (name, "mips", 4) == 0 || strncmp (name, "arch=", 5) == 0)
15686     {
15687       /* Permit the user to change the ISA and architecture on the fly.
15688          Needless to say, misuse can cause serious problems.  */
15689       if (strncmp (name, "arch=", 5) == 0)
15690         {
15691           const struct mips_cpu_info *p;
15692
15693           p = mips_parse_cpu ("internal use", name + 5);
15694           if (!p)
15695             as_bad (_("unknown architecture %s"), name + 5);
15696           else
15697             {
15698               mips_opts.arch = p->cpu;
15699               mips_opts.isa = p->isa;
15700               isa_set = TRUE;
15701             }
15702         }
15703       else if (strncmp (name, "mips", 4) == 0)
15704         {
15705           const struct mips_cpu_info *p;
15706
15707           p = mips_parse_cpu ("internal use", name);
15708           if (!p)
15709             as_bad (_("unknown ISA level %s"), name + 4);
15710           else
15711             {
15712               mips_opts.arch = p->cpu;
15713               mips_opts.isa = p->isa;
15714               isa_set = TRUE;
15715             }
15716         }
15717       else
15718         as_bad (_("unknown ISA or architecture %s"), name);
15719     }
15720   else if (strcmp (name, "autoextend") == 0)
15721     mips_opts.noautoextend = 0;
15722   else if (strcmp (name, "noautoextend") == 0)
15723     mips_opts.noautoextend = 1;
15724   else if (strcmp (name, "insn32") == 0)
15725     mips_opts.insn32 = TRUE;
15726   else if (strcmp (name, "noinsn32") == 0)
15727     mips_opts.insn32 = FALSE;
15728   else if (strcmp (name, "sym32") == 0)
15729     mips_opts.sym32 = TRUE;
15730   else if (strcmp (name, "nosym32") == 0)
15731     mips_opts.sym32 = FALSE;
15732   else
15733     return OPTION_TYPE_BAD;
15734
15735   return isa_set ? OPTION_TYPE_ISA : OPTION_TYPE_NORMAL;
15736 }
15737
15738 /* Handle the .set pseudo-op.  */
15739
15740 static void
15741 s_mipsset (int x ATTRIBUTE_UNUSED)
15742 {
15743   enum code_option_type type = OPTION_TYPE_NORMAL;
15744   char *name = input_line_pointer, ch;
15745
15746   file_mips_check_options ();
15747
15748   while (!is_end_of_line[(unsigned char) *input_line_pointer])
15749     ++input_line_pointer;
15750   ch = *input_line_pointer;
15751   *input_line_pointer = '\0';
15752
15753   if (strchr (name, ','))
15754     {
15755       /* Generic ".set" directive; use the generic handler.  */
15756       *input_line_pointer = ch;
15757       input_line_pointer = name;
15758       s_set (0);
15759       return;
15760     }
15761
15762   if (strcmp (name, "reorder") == 0)
15763     {
15764       if (mips_opts.noreorder)
15765         end_noreorder ();
15766     }
15767   else if (strcmp (name, "noreorder") == 0)
15768     {
15769       if (!mips_opts.noreorder)
15770         start_noreorder ();
15771     }
15772   else if (strcmp (name, "macro") == 0)
15773     mips_opts.warn_about_macros = 0;
15774   else if (strcmp (name, "nomacro") == 0)
15775     {
15776       if (mips_opts.noreorder == 0)
15777         as_bad (_("`noreorder' must be set before `nomacro'"));
15778       mips_opts.warn_about_macros = 1;
15779     }
15780   else if (strcmp (name, "gp=default") == 0)
15781     mips_opts.gp = file_mips_opts.gp;
15782   else if (strcmp (name, "fp=default") == 0)
15783     mips_opts.fp = file_mips_opts.fp;
15784   else if (strcmp (name, "mips0") == 0 || strcmp (name, "arch=default") == 0)
15785     {
15786       mips_opts.isa = file_mips_opts.isa;
15787       mips_opts.arch = file_mips_opts.arch;
15788       mips_opts.gp = file_mips_opts.gp;
15789       mips_opts.fp = file_mips_opts.fp;
15790     }
15791   else if (strcmp (name, "push") == 0)
15792     {
15793       struct mips_option_stack *s;
15794
15795       s = XNEW (struct mips_option_stack);
15796       s->next = mips_opts_stack;
15797       s->options = mips_opts;
15798       mips_opts_stack = s;
15799     }
15800   else if (strcmp (name, "pop") == 0)
15801     {
15802       struct mips_option_stack *s;
15803
15804       s = mips_opts_stack;
15805       if (s == NULL)
15806         as_bad (_(".set pop with no .set push"));
15807       else
15808         {
15809           /* If we're changing the reorder mode we need to handle
15810              delay slots correctly.  */
15811           if (s->options.noreorder && ! mips_opts.noreorder)
15812             start_noreorder ();
15813           else if (! s->options.noreorder && mips_opts.noreorder)
15814             end_noreorder ();
15815
15816           mips_opts = s->options;
15817           mips_opts_stack = s->next;
15818           free (s);
15819         }
15820     }
15821   else
15822     {
15823       type = parse_code_option (name);
15824       if (type == OPTION_TYPE_BAD)
15825         as_warn (_("tried to set unrecognized symbol: %s\n"), name);
15826     }
15827
15828   /* The use of .set [arch|cpu]= historically 'fixes' the width of gp and fp
15829      registers based on what is supported by the arch/cpu.  */
15830   if (type == OPTION_TYPE_ISA)
15831     {
15832       switch (mips_opts.isa)
15833         {
15834         case 0:
15835           break;
15836         case ISA_MIPS1:
15837           /* MIPS I cannot support FPXX.  */
15838           mips_opts.fp = 32;
15839           /* fall-through.  */
15840         case ISA_MIPS2:
15841         case ISA_MIPS32:
15842         case ISA_MIPS32R2:
15843         case ISA_MIPS32R3:
15844         case ISA_MIPS32R5:
15845           mips_opts.gp = 32;
15846           if (mips_opts.fp != 0)
15847             mips_opts.fp = 32;
15848           break;
15849         case ISA_MIPS32R6:
15850           mips_opts.gp = 32;
15851           mips_opts.fp = 64;
15852           break;
15853         case ISA_MIPS3:
15854         case ISA_MIPS4:
15855         case ISA_MIPS5:
15856         case ISA_MIPS64:
15857         case ISA_MIPS64R2:
15858         case ISA_MIPS64R3:
15859         case ISA_MIPS64R5:
15860         case ISA_MIPS64R6:
15861           mips_opts.gp = 64;
15862           if (mips_opts.fp != 0)
15863             {
15864               if (mips_opts.arch == CPU_R5900)
15865                 mips_opts.fp = 32;
15866               else
15867                 mips_opts.fp = 64;
15868             }
15869           break;
15870         default:
15871           as_bad (_("unknown ISA level %s"), name + 4);
15872           break;
15873         }
15874     }
15875
15876   mips_check_options (&mips_opts, FALSE);
15877
15878   mips_check_isa_supports_ases ();
15879   *input_line_pointer = ch;
15880   demand_empty_rest_of_line ();
15881 }
15882
15883 /* Handle the .module pseudo-op.  */
15884
15885 static void
15886 s_module (int ignore ATTRIBUTE_UNUSED)
15887 {
15888   char *name = input_line_pointer, ch;
15889
15890   while (!is_end_of_line[(unsigned char) *input_line_pointer])
15891     ++input_line_pointer;
15892   ch = *input_line_pointer;
15893   *input_line_pointer = '\0';
15894
15895   if (!file_mips_opts_checked)
15896     {
15897       if (parse_code_option (name) == OPTION_TYPE_BAD)
15898         as_bad (_(".module used with unrecognized symbol: %s\n"), name);
15899
15900       /* Update module level settings from mips_opts.  */
15901       file_mips_opts = mips_opts;
15902     }
15903   else
15904     as_bad (_(".module is not permitted after generating code"));
15905
15906   *input_line_pointer = ch;
15907   demand_empty_rest_of_line ();
15908 }
15909
15910 /* Handle the .abicalls pseudo-op.  I believe this is equivalent to
15911    .option pic2.  It means to generate SVR4 PIC calls.  */
15912
15913 static void
15914 s_abicalls (int ignore ATTRIBUTE_UNUSED)
15915 {
15916   mips_pic = SVR4_PIC;
15917   mips_abicalls = TRUE;
15918
15919   if (g_switch_seen && g_switch_value != 0)
15920     as_warn (_("-G may not be used with SVR4 PIC code"));
15921   g_switch_value = 0;
15922
15923   bfd_set_gp_size (stdoutput, 0);
15924   demand_empty_rest_of_line ();
15925 }
15926
15927 /* Handle the .cpload pseudo-op.  This is used when generating SVR4
15928    PIC code.  It sets the $gp register for the function based on the
15929    function address, which is in the register named in the argument.
15930    This uses a relocation against _gp_disp, which is handled specially
15931    by the linker.  The result is:
15932         lui     $gp,%hi(_gp_disp)
15933         addiu   $gp,$gp,%lo(_gp_disp)
15934         addu    $gp,$gp,.cpload argument
15935    The .cpload argument is normally $25 == $t9.
15936
15937    The -mno-shared option changes this to:
15938         lui     $gp,%hi(__gnu_local_gp)
15939         addiu   $gp,$gp,%lo(__gnu_local_gp)
15940    and the argument is ignored.  This saves an instruction, but the
15941    resulting code is not position independent; it uses an absolute
15942    address for __gnu_local_gp.  Thus code assembled with -mno-shared
15943    can go into an ordinary executable, but not into a shared library.  */
15944
15945 static void
15946 s_cpload (int ignore ATTRIBUTE_UNUSED)
15947 {
15948   expressionS ex;
15949   int reg;
15950   int in_shared;
15951
15952   file_mips_check_options ();
15953
15954   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
15955      .cpload is ignored.  */
15956   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
15957     {
15958       s_ignore (0);
15959       return;
15960     }
15961
15962   if (mips_opts.mips16)
15963     {
15964       as_bad (_("%s not supported in MIPS16 mode"), ".cpload");
15965       ignore_rest_of_line ();
15966       return;
15967     }
15968
15969   /* .cpload should be in a .set noreorder section.  */
15970   if (mips_opts.noreorder == 0)
15971     as_warn (_(".cpload not in noreorder section"));
15972
15973   reg = tc_get_register (0);
15974
15975   /* If we need to produce a 64-bit address, we are better off using
15976      the default instruction sequence.  */
15977   in_shared = mips_in_shared || HAVE_64BIT_SYMBOLS;
15978
15979   ex.X_op = O_symbol;
15980   ex.X_add_symbol = symbol_find_or_make (in_shared ? "_gp_disp" :
15981                                          "__gnu_local_gp");
15982   ex.X_op_symbol = NULL;
15983   ex.X_add_number = 0;
15984
15985   /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
15986   symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
15987
15988   mips_mark_labels ();
15989   mips_assembling_insn = TRUE;
15990
15991   macro_start ();
15992   macro_build_lui (&ex, mips_gp_register);
15993   macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
15994                mips_gp_register, BFD_RELOC_LO16);
15995   if (in_shared)
15996     macro_build (NULL, "addu", "d,v,t", mips_gp_register,
15997                  mips_gp_register, reg);
15998   macro_end ();
15999
16000   mips_assembling_insn = FALSE;
16001   demand_empty_rest_of_line ();
16002 }
16003
16004 /* Handle the .cpsetup pseudo-op defined for NewABI PIC code.  The syntax is:
16005      .cpsetup $reg1, offset|$reg2, label
16006
16007    If offset is given, this results in:
16008      sd         $gp, offset($sp)
16009      lui        $gp, %hi(%neg(%gp_rel(label)))
16010      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
16011      daddu      $gp, $gp, $reg1
16012
16013    If $reg2 is given, this results in:
16014      or         $reg2, $gp, $0
16015      lui        $gp, %hi(%neg(%gp_rel(label)))
16016      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
16017      daddu      $gp, $gp, $reg1
16018    $reg1 is normally $25 == $t9.
16019
16020    The -mno-shared option replaces the last three instructions with
16021         lui     $gp,%hi(_gp)
16022         addiu   $gp,$gp,%lo(_gp)  */
16023
16024 static void
16025 s_cpsetup (int ignore ATTRIBUTE_UNUSED)
16026 {
16027   expressionS ex_off;
16028   expressionS ex_sym;
16029   int reg1;
16030
16031   file_mips_check_options ();
16032
16033   /* If we are not generating SVR4 PIC code, .cpsetup is ignored.
16034      We also need NewABI support.  */
16035   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16036     {
16037       s_ignore (0);
16038       return;
16039     }
16040
16041   if (mips_opts.mips16)
16042     {
16043       as_bad (_("%s not supported in MIPS16 mode"), ".cpsetup");
16044       ignore_rest_of_line ();
16045       return;
16046     }
16047
16048   reg1 = tc_get_register (0);
16049   SKIP_WHITESPACE ();
16050   if (*input_line_pointer != ',')
16051     {
16052       as_bad (_("missing argument separator ',' for .cpsetup"));
16053       return;
16054     }
16055   else
16056     ++input_line_pointer;
16057   SKIP_WHITESPACE ();
16058   if (*input_line_pointer == '$')
16059     {
16060       mips_cpreturn_register = tc_get_register (0);
16061       mips_cpreturn_offset = -1;
16062     }
16063   else
16064     {
16065       mips_cpreturn_offset = get_absolute_expression ();
16066       mips_cpreturn_register = -1;
16067     }
16068   SKIP_WHITESPACE ();
16069   if (*input_line_pointer != ',')
16070     {
16071       as_bad (_("missing argument separator ',' for .cpsetup"));
16072       return;
16073     }
16074   else
16075     ++input_line_pointer;
16076   SKIP_WHITESPACE ();
16077   expression (&ex_sym);
16078
16079   mips_mark_labels ();
16080   mips_assembling_insn = TRUE;
16081
16082   macro_start ();
16083   if (mips_cpreturn_register == -1)
16084     {
16085       ex_off.X_op = O_constant;
16086       ex_off.X_add_symbol = NULL;
16087       ex_off.X_op_symbol = NULL;
16088       ex_off.X_add_number = mips_cpreturn_offset;
16089
16090       macro_build (&ex_off, "sd", "t,o(b)", mips_gp_register,
16091                    BFD_RELOC_LO16, SP);
16092     }
16093   else
16094     move_register (mips_cpreturn_register, mips_gp_register);
16095
16096   if (mips_in_shared || HAVE_64BIT_SYMBOLS)
16097     {
16098       macro_build (&ex_sym, "lui", LUI_FMT, mips_gp_register,
16099                    -1, BFD_RELOC_GPREL16, BFD_RELOC_MIPS_SUB,
16100                    BFD_RELOC_HI16_S);
16101
16102       macro_build (&ex_sym, "addiu", "t,r,j", mips_gp_register,
16103                    mips_gp_register, -1, BFD_RELOC_GPREL16,
16104                    BFD_RELOC_MIPS_SUB, BFD_RELOC_LO16);
16105
16106       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", mips_gp_register,
16107                    mips_gp_register, reg1);
16108     }
16109   else
16110     {
16111       expressionS ex;
16112
16113       ex.X_op = O_symbol;
16114       ex.X_add_symbol = symbol_find_or_make ("__gnu_local_gp");
16115       ex.X_op_symbol = NULL;
16116       ex.X_add_number = 0;
16117
16118       /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
16119       symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
16120
16121       macro_build_lui (&ex, mips_gp_register);
16122       macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
16123                    mips_gp_register, BFD_RELOC_LO16);
16124     }
16125
16126   macro_end ();
16127
16128   mips_assembling_insn = FALSE;
16129   demand_empty_rest_of_line ();
16130 }
16131
16132 static void
16133 s_cplocal (int ignore ATTRIBUTE_UNUSED)
16134 {
16135   file_mips_check_options ();
16136
16137   /* If we are not generating SVR4 PIC code, or if this is not NewABI code,
16138      .cplocal is ignored.  */
16139   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16140     {
16141       s_ignore (0);
16142       return;
16143     }
16144
16145   if (mips_opts.mips16)
16146     {
16147       as_bad (_("%s not supported in MIPS16 mode"), ".cplocal");
16148       ignore_rest_of_line ();
16149       return;
16150     }
16151
16152   mips_gp_register = tc_get_register (0);
16153   demand_empty_rest_of_line ();
16154 }
16155
16156 /* Handle the .cprestore pseudo-op.  This stores $gp into a given
16157    offset from $sp.  The offset is remembered, and after making a PIC
16158    call $gp is restored from that location.  */
16159
16160 static void
16161 s_cprestore (int ignore ATTRIBUTE_UNUSED)
16162 {
16163   expressionS ex;
16164
16165   file_mips_check_options ();
16166
16167   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
16168      .cprestore is ignored.  */
16169   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
16170     {
16171       s_ignore (0);
16172       return;
16173     }
16174
16175   if (mips_opts.mips16)
16176     {
16177       as_bad (_("%s not supported in MIPS16 mode"), ".cprestore");
16178       ignore_rest_of_line ();
16179       return;
16180     }
16181
16182   mips_cprestore_offset = get_absolute_expression ();
16183   mips_cprestore_valid = 1;
16184
16185   ex.X_op = O_constant;
16186   ex.X_add_symbol = NULL;
16187   ex.X_op_symbol = NULL;
16188   ex.X_add_number = mips_cprestore_offset;
16189
16190   mips_mark_labels ();
16191   mips_assembling_insn = TRUE;
16192
16193   macro_start ();
16194   macro_build_ldst_constoffset (&ex, ADDRESS_STORE_INSN, mips_gp_register,
16195                                 SP, HAVE_64BIT_ADDRESSES);
16196   macro_end ();
16197
16198   mips_assembling_insn = FALSE;
16199   demand_empty_rest_of_line ();
16200 }
16201
16202 /* Handle the .cpreturn pseudo-op defined for NewABI PIC code. If an offset
16203    was given in the preceding .cpsetup, it results in:
16204      ld         $gp, offset($sp)
16205
16206    If a register $reg2 was given there, it results in:
16207      or         $gp, $reg2, $0  */
16208
16209 static void
16210 s_cpreturn (int ignore ATTRIBUTE_UNUSED)
16211 {
16212   expressionS ex;
16213
16214   file_mips_check_options ();
16215
16216   /* If we are not generating SVR4 PIC code, .cpreturn is ignored.
16217      We also need NewABI support.  */
16218   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16219     {
16220       s_ignore (0);
16221       return;
16222     }
16223
16224   if (mips_opts.mips16)
16225     {
16226       as_bad (_("%s not supported in MIPS16 mode"), ".cpreturn");
16227       ignore_rest_of_line ();
16228       return;
16229     }
16230
16231   mips_mark_labels ();
16232   mips_assembling_insn = TRUE;
16233
16234   macro_start ();
16235   if (mips_cpreturn_register == -1)
16236     {
16237       ex.X_op = O_constant;
16238       ex.X_add_symbol = NULL;
16239       ex.X_op_symbol = NULL;
16240       ex.X_add_number = mips_cpreturn_offset;
16241
16242       macro_build (&ex, "ld", "t,o(b)", mips_gp_register, BFD_RELOC_LO16, SP);
16243     }
16244   else
16245     move_register (mips_gp_register, mips_cpreturn_register);
16246
16247   macro_end ();
16248
16249   mips_assembling_insn = FALSE;
16250   demand_empty_rest_of_line ();
16251 }
16252
16253 /* Handle a .dtprelword, .dtpreldword, .tprelword, or .tpreldword
16254    pseudo-op; DIRSTR says which. The pseudo-op generates a BYTES-size
16255    DTP- or TP-relative relocation of type RTYPE, for use in either DWARF
16256    debug information or MIPS16 TLS.  */
16257
16258 static void
16259 s_tls_rel_directive (const size_t bytes, const char *dirstr,
16260                      bfd_reloc_code_real_type rtype)
16261 {
16262   expressionS ex;
16263   char *p;
16264
16265   expression (&ex);
16266
16267   if (ex.X_op != O_symbol)
16268     {
16269       as_bad (_("unsupported use of %s"), dirstr);
16270       ignore_rest_of_line ();
16271     }
16272
16273   p = frag_more (bytes);
16274   md_number_to_chars (p, 0, bytes);
16275   fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE, rtype);
16276   demand_empty_rest_of_line ();
16277   mips_clear_insn_labels ();
16278 }
16279
16280 /* Handle .dtprelword.  */
16281
16282 static void
16283 s_dtprelword (int ignore ATTRIBUTE_UNUSED)
16284 {
16285   s_tls_rel_directive (4, ".dtprelword", BFD_RELOC_MIPS_TLS_DTPREL32);
16286 }
16287
16288 /* Handle .dtpreldword.  */
16289
16290 static void
16291 s_dtpreldword (int ignore ATTRIBUTE_UNUSED)
16292 {
16293   s_tls_rel_directive (8, ".dtpreldword", BFD_RELOC_MIPS_TLS_DTPREL64);
16294 }
16295
16296 /* Handle .tprelword.  */
16297
16298 static void
16299 s_tprelword (int ignore ATTRIBUTE_UNUSED)
16300 {
16301   s_tls_rel_directive (4, ".tprelword", BFD_RELOC_MIPS_TLS_TPREL32);
16302 }
16303
16304 /* Handle .tpreldword.  */
16305
16306 static void
16307 s_tpreldword (int ignore ATTRIBUTE_UNUSED)
16308 {
16309   s_tls_rel_directive (8, ".tpreldword", BFD_RELOC_MIPS_TLS_TPREL64);
16310 }
16311
16312 /* Handle the .gpvalue pseudo-op.  This is used when generating NewABI PIC
16313    code.  It sets the offset to use in gp_rel relocations.  */
16314
16315 static void
16316 s_gpvalue (int ignore ATTRIBUTE_UNUSED)
16317 {
16318   /* If we are not generating SVR4 PIC code, .gpvalue is ignored.
16319      We also need NewABI support.  */
16320   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16321     {
16322       s_ignore (0);
16323       return;
16324     }
16325
16326   mips_gprel_offset = get_absolute_expression ();
16327
16328   demand_empty_rest_of_line ();
16329 }
16330
16331 /* Handle the .gpword pseudo-op.  This is used when generating PIC
16332    code.  It generates a 32 bit GP relative reloc.  */
16333
16334 static void
16335 s_gpword (int ignore ATTRIBUTE_UNUSED)
16336 {
16337   segment_info_type *si;
16338   struct insn_label_list *l;
16339   expressionS ex;
16340   char *p;
16341
16342   /* When not generating PIC code, this is treated as .word.  */
16343   if (mips_pic != SVR4_PIC)
16344     {
16345       s_cons (2);
16346       return;
16347     }
16348
16349   si = seg_info (now_seg);
16350   l = si->label_list;
16351   mips_emit_delays ();
16352   if (auto_align)
16353     mips_align (2, 0, l);
16354
16355   expression (&ex);
16356   mips_clear_insn_labels ();
16357
16358   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16359     {
16360       as_bad (_("unsupported use of .gpword"));
16361       ignore_rest_of_line ();
16362     }
16363
16364   p = frag_more (4);
16365   md_number_to_chars (p, 0, 4);
16366   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16367                BFD_RELOC_GPREL32);
16368
16369   demand_empty_rest_of_line ();
16370 }
16371
16372 static void
16373 s_gpdword (int ignore ATTRIBUTE_UNUSED)
16374 {
16375   segment_info_type *si;
16376   struct insn_label_list *l;
16377   expressionS ex;
16378   char *p;
16379
16380   /* When not generating PIC code, this is treated as .dword.  */
16381   if (mips_pic != SVR4_PIC)
16382     {
16383       s_cons (3);
16384       return;
16385     }
16386
16387   si = seg_info (now_seg);
16388   l = si->label_list;
16389   mips_emit_delays ();
16390   if (auto_align)
16391     mips_align (3, 0, l);
16392
16393   expression (&ex);
16394   mips_clear_insn_labels ();
16395
16396   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16397     {
16398       as_bad (_("unsupported use of .gpdword"));
16399       ignore_rest_of_line ();
16400     }
16401
16402   p = frag_more (8);
16403   md_number_to_chars (p, 0, 8);
16404   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16405                BFD_RELOC_GPREL32)->fx_tcbit = 1;
16406
16407   /* GPREL32 composed with 64 gives a 64-bit GP offset.  */
16408   fix_new (frag_now, p - frag_now->fr_literal, 8, NULL, 0,
16409            FALSE, BFD_RELOC_64)->fx_tcbit = 1;
16410
16411   demand_empty_rest_of_line ();
16412 }
16413
16414 /* Handle the .ehword pseudo-op.  This is used when generating unwinding
16415    tables.  It generates a R_MIPS_EH reloc.  */
16416
16417 static void
16418 s_ehword (int ignore ATTRIBUTE_UNUSED)
16419 {
16420   expressionS ex;
16421   char *p;
16422
16423   mips_emit_delays ();
16424
16425   expression (&ex);
16426   mips_clear_insn_labels ();
16427
16428   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16429     {
16430       as_bad (_("unsupported use of .ehword"));
16431       ignore_rest_of_line ();
16432     }
16433
16434   p = frag_more (4);
16435   md_number_to_chars (p, 0, 4);
16436   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16437                BFD_RELOC_32_PCREL);
16438
16439   demand_empty_rest_of_line ();
16440 }
16441
16442 /* Handle the .cpadd pseudo-op.  This is used when dealing with switch
16443    tables in SVR4 PIC code.  */
16444
16445 static void
16446 s_cpadd (int ignore ATTRIBUTE_UNUSED)
16447 {
16448   int reg;
16449
16450   file_mips_check_options ();
16451
16452   /* This is ignored when not generating SVR4 PIC code.  */
16453   if (mips_pic != SVR4_PIC)
16454     {
16455       s_ignore (0);
16456       return;
16457     }
16458
16459   mips_mark_labels ();
16460   mips_assembling_insn = TRUE;
16461
16462   /* Add $gp to the register named as an argument.  */
16463   macro_start ();
16464   reg = tc_get_register (0);
16465   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", reg, reg, mips_gp_register);
16466   macro_end ();
16467
16468   mips_assembling_insn = FALSE;
16469   demand_empty_rest_of_line ();
16470 }
16471
16472 /* Handle the .insn pseudo-op.  This marks instruction labels in
16473    mips16/micromips mode.  This permits the linker to handle them specially,
16474    such as generating jalx instructions when needed.  We also make
16475    them odd for the duration of the assembly, in order to generate the
16476    right sort of code.  We will make them even in the adjust_symtab
16477    routine, while leaving them marked.  This is convenient for the
16478    debugger and the disassembler.  The linker knows to make them odd
16479    again.  */
16480
16481 static void
16482 s_insn (int ignore ATTRIBUTE_UNUSED)
16483 {
16484   file_mips_check_options ();
16485   file_ase_mips16 |= mips_opts.mips16;
16486   file_ase_micromips |= mips_opts.micromips;
16487
16488   mips_mark_labels ();
16489
16490   demand_empty_rest_of_line ();
16491 }
16492
16493 /* Handle the .nan pseudo-op.  */
16494
16495 static void
16496 s_nan (int ignore ATTRIBUTE_UNUSED)
16497 {
16498   static const char str_legacy[] = "legacy";
16499   static const char str_2008[] = "2008";
16500   size_t i;
16501
16502   for (i = 0; !is_end_of_line[(unsigned char) input_line_pointer[i]]; i++);
16503
16504   if (i == sizeof (str_2008) - 1
16505       && memcmp (input_line_pointer, str_2008, i) == 0)
16506     mips_nan2008 = 1;
16507   else if (i == sizeof (str_legacy) - 1
16508            && memcmp (input_line_pointer, str_legacy, i) == 0)
16509     {
16510       if (ISA_HAS_LEGACY_NAN (file_mips_opts.isa))
16511         mips_nan2008 = 0;
16512       else
16513         as_bad (_("`%s' does not support legacy NaN"),
16514                   mips_cpu_info_from_isa (file_mips_opts.isa)->name);
16515     }
16516   else
16517     as_bad (_("bad .nan directive"));
16518
16519   input_line_pointer += i;
16520   demand_empty_rest_of_line ();
16521 }
16522
16523 /* Handle a .stab[snd] directive.  Ideally these directives would be
16524    implemented in a transparent way, so that removing them would not
16525    have any effect on the generated instructions.  However, s_stab
16526    internally changes the section, so in practice we need to decide
16527    now whether the preceding label marks compressed code.  We do not
16528    support changing the compression mode of a label after a .stab*
16529    directive, such as in:
16530
16531    foo:
16532         .stabs ...
16533         .set mips16
16534
16535    so the current mode wins.  */
16536
16537 static void
16538 s_mips_stab (int type)
16539 {
16540   mips_mark_labels ();
16541   s_stab (type);
16542 }
16543
16544 /* Handle the .weakext pseudo-op as defined in Kane and Heinrich.  */
16545
16546 static void
16547 s_mips_weakext (int ignore ATTRIBUTE_UNUSED)
16548 {
16549   char *name;
16550   int c;
16551   symbolS *symbolP;
16552   expressionS exp;
16553
16554   c = get_symbol_name (&name);
16555   symbolP = symbol_find_or_make (name);
16556   S_SET_WEAK (symbolP);
16557   *input_line_pointer = c;
16558
16559   SKIP_WHITESPACE_AFTER_NAME ();
16560
16561   if (! is_end_of_line[(unsigned char) *input_line_pointer])
16562     {
16563       if (S_IS_DEFINED (symbolP))
16564         {
16565           as_bad (_("ignoring attempt to redefine symbol %s"),
16566                   S_GET_NAME (symbolP));
16567           ignore_rest_of_line ();
16568           return;
16569         }
16570
16571       if (*input_line_pointer == ',')
16572         {
16573           ++input_line_pointer;
16574           SKIP_WHITESPACE ();
16575         }
16576
16577       expression (&exp);
16578       if (exp.X_op != O_symbol)
16579         {
16580           as_bad (_("bad .weakext directive"));
16581           ignore_rest_of_line ();
16582           return;
16583         }
16584       symbol_set_value_expression (symbolP, &exp);
16585     }
16586
16587   demand_empty_rest_of_line ();
16588 }
16589
16590 /* Parse a register string into a number.  Called from the ECOFF code
16591    to parse .frame.  The argument is non-zero if this is the frame
16592    register, so that we can record it in mips_frame_reg.  */
16593
16594 int
16595 tc_get_register (int frame)
16596 {
16597   unsigned int reg;
16598
16599   SKIP_WHITESPACE ();
16600   if (! reg_lookup (&input_line_pointer, RWARN | RTYPE_NUM | RTYPE_GP, &reg))
16601     reg = 0;
16602   if (frame)
16603     {
16604       mips_frame_reg = reg != 0 ? reg : SP;
16605       mips_frame_reg_valid = 1;
16606       mips_cprestore_valid = 0;
16607     }
16608   return reg;
16609 }
16610
16611 valueT
16612 md_section_align (asection *seg, valueT addr)
16613 {
16614   int align = bfd_get_section_alignment (stdoutput, seg);
16615
16616   /* We don't need to align ELF sections to the full alignment.
16617      However, Irix 5 may prefer that we align them at least to a 16
16618      byte boundary.  We don't bother to align the sections if we
16619      are targeted for an embedded system.  */
16620   if (strncmp (TARGET_OS, "elf", 3) == 0)
16621     return addr;
16622   if (align > 4)
16623     align = 4;
16624
16625   return ((addr + (1 << align) - 1) & -(1 << align));
16626 }
16627
16628 /* Utility routine, called from above as well.  If called while the
16629    input file is still being read, it's only an approximation.  (For
16630    example, a symbol may later become defined which appeared to be
16631    undefined earlier.)  */
16632
16633 static int
16634 nopic_need_relax (symbolS *sym, int before_relaxing)
16635 {
16636   if (sym == 0)
16637     return 0;
16638
16639   if (g_switch_value > 0)
16640     {
16641       const char *symname;
16642       int change;
16643
16644       /* Find out whether this symbol can be referenced off the $gp
16645          register.  It can be if it is smaller than the -G size or if
16646          it is in the .sdata or .sbss section.  Certain symbols can
16647          not be referenced off the $gp, although it appears as though
16648          they can.  */
16649       symname = S_GET_NAME (sym);
16650       if (symname != (const char *) NULL
16651           && (strcmp (symname, "eprol") == 0
16652               || strcmp (symname, "etext") == 0
16653               || strcmp (symname, "_gp") == 0
16654               || strcmp (symname, "edata") == 0
16655               || strcmp (symname, "_fbss") == 0
16656               || strcmp (symname, "_fdata") == 0
16657               || strcmp (symname, "_ftext") == 0
16658               || strcmp (symname, "end") == 0
16659               || strcmp (symname, "_gp_disp") == 0))
16660         change = 1;
16661       else if ((! S_IS_DEFINED (sym) || S_IS_COMMON (sym))
16662                && (0
16663 #ifndef NO_ECOFF_DEBUGGING
16664                    || (symbol_get_obj (sym)->ecoff_extern_size != 0
16665                        && (symbol_get_obj (sym)->ecoff_extern_size
16666                            <= g_switch_value))
16667 #endif
16668                    /* We must defer this decision until after the whole
16669                       file has been read, since there might be a .extern
16670                       after the first use of this symbol.  */
16671                    || (before_relaxing
16672 #ifndef NO_ECOFF_DEBUGGING
16673                        && symbol_get_obj (sym)->ecoff_extern_size == 0
16674 #endif
16675                        && S_GET_VALUE (sym) == 0)
16676                    || (S_GET_VALUE (sym) != 0
16677                        && S_GET_VALUE (sym) <= g_switch_value)))
16678         change = 0;
16679       else
16680         {
16681           const char *segname;
16682
16683           segname = segment_name (S_GET_SEGMENT (sym));
16684           gas_assert (strcmp (segname, ".lit8") != 0
16685                   && strcmp (segname, ".lit4") != 0);
16686           change = (strcmp (segname, ".sdata") != 0
16687                     && strcmp (segname, ".sbss") != 0
16688                     && strncmp (segname, ".sdata.", 7) != 0
16689                     && strncmp (segname, ".sbss.", 6) != 0
16690                     && strncmp (segname, ".gnu.linkonce.sb.", 17) != 0
16691                     && strncmp (segname, ".gnu.linkonce.s.", 16) != 0);
16692         }
16693       return change;
16694     }
16695   else
16696     /* We are not optimizing for the $gp register.  */
16697     return 1;
16698 }
16699
16700
16701 /* Return true if the given symbol should be considered local for SVR4 PIC.  */
16702
16703 static bfd_boolean
16704 pic_need_relax (symbolS *sym, asection *segtype)
16705 {
16706   asection *symsec;
16707
16708   /* Handle the case of a symbol equated to another symbol.  */
16709   while (symbol_equated_reloc_p (sym))
16710     {
16711       symbolS *n;
16712
16713       /* It's possible to get a loop here in a badly written program.  */
16714       n = symbol_get_value_expression (sym)->X_add_symbol;
16715       if (n == sym)
16716         break;
16717       sym = n;
16718     }
16719
16720   if (symbol_section_p (sym))
16721     return TRUE;
16722
16723   symsec = S_GET_SEGMENT (sym);
16724
16725   /* This must duplicate the test in adjust_reloc_syms.  */
16726   return (!bfd_is_und_section (symsec)
16727           && !bfd_is_abs_section (symsec)
16728           && !bfd_is_com_section (symsec)
16729           && !s_is_linkonce (sym, segtype)
16730           /* A global or weak symbol is treated as external.  */
16731           && (!S_IS_WEAK (sym) && !S_IS_EXTERNAL (sym)));
16732 }
16733
16734
16735 /* Given a mips16 variant frag FRAGP, return non-zero if it needs an
16736    extended opcode.  SEC is the section the frag is in.  */
16737
16738 static int
16739 mips16_extended_frag (fragS *fragp, asection *sec, long stretch)
16740 {
16741   int type;
16742   const struct mips_int_operand *operand;
16743   offsetT val;
16744   segT symsec;
16745   fragS *sym_frag;
16746
16747   if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
16748     return 0;
16749   if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
16750     return 1;
16751
16752   symsec = S_GET_SEGMENT (fragp->fr_symbol);
16753   type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
16754   operand = mips16_immed_operand (type, FALSE);
16755   if (S_FORCE_RELOC (fragp->fr_symbol, TRUE)
16756       || (operand->root.type == OP_PCREL
16757           ? sec != symsec
16758           : !bfd_is_abs_section (symsec)))
16759     return 1;
16760
16761   sym_frag = symbol_get_frag (fragp->fr_symbol);
16762   val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16763
16764   if (operand->root.type == OP_PCREL)
16765     {
16766       const struct mips_pcrel_operand *pcrel_op;
16767       addressT addr;
16768       offsetT maxtiny;
16769
16770       if (RELAX_MIPS16_LONG_BRANCH (fragp->fr_subtype))
16771         return 1;
16772
16773       pcrel_op = (const struct mips_pcrel_operand *) operand;
16774
16775       /* If the relax_marker of the symbol fragment differs from the
16776          relax_marker of this fragment, we have not yet adjusted the
16777          symbol fragment fr_address.  We want to add in STRETCH in
16778          order to get a better estimate of the address.  This
16779          particularly matters because of the shift bits.  */
16780       if (stretch != 0
16781           && sym_frag->relax_marker != fragp->relax_marker)
16782         {
16783           fragS *f;
16784
16785           /* Adjust stretch for any alignment frag.  Note that if have
16786              been expanding the earlier code, the symbol may be
16787              defined in what appears to be an earlier frag.  FIXME:
16788              This doesn't handle the fr_subtype field, which specifies
16789              a maximum number of bytes to skip when doing an
16790              alignment.  */
16791           for (f = fragp; f != NULL && f != sym_frag; f = f->fr_next)
16792             {
16793               if (f->fr_type == rs_align || f->fr_type == rs_align_code)
16794                 {
16795                   if (stretch < 0)
16796                     stretch = - ((- stretch)
16797                                  & ~ ((1 << (int) f->fr_offset) - 1));
16798                   else
16799                     stretch &= ~ ((1 << (int) f->fr_offset) - 1);
16800                   if (stretch == 0)
16801                     break;
16802                 }
16803             }
16804           if (f != NULL)
16805             val += stretch;
16806         }
16807
16808       addr = fragp->fr_address + fragp->fr_fix;
16809
16810       /* The base address rules are complicated.  The base address of
16811          a branch is the following instruction.  The base address of a
16812          PC relative load or add is the instruction itself, but if it
16813          is in a delay slot (in which case it can not be extended) use
16814          the address of the instruction whose delay slot it is in.  */
16815       if (pcrel_op->include_isa_bit)
16816         {
16817           addr += 2;
16818
16819           /* If we are currently assuming that this frag should be
16820              extended, then, the current address is two bytes
16821              higher.  */
16822           if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16823             addr += 2;
16824
16825           /* Ignore the low bit in the target, since it will be set
16826              for a text label.  */
16827           val &= -2;
16828         }
16829       else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
16830         addr -= 4;
16831       else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
16832         addr -= 2;
16833
16834       val -= addr & -(1 << pcrel_op->align_log2);
16835
16836       /* If any of the shifted bits are set, we must use an extended
16837          opcode.  If the address depends on the size of this
16838          instruction, this can lead to a loop, so we arrange to always
16839          use an extended opcode.  */
16840       if ((val & ((1 << operand->shift) - 1)) != 0)
16841         {
16842           fragp->fr_subtype =
16843             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16844           return 1;
16845         }
16846
16847       /* If we are about to mark a frag as extended because the value
16848          is precisely the next value above maxtiny, then there is a
16849          chance of an infinite loop as in the following code:
16850              la $4,foo
16851              .skip      1020
16852              .align     2
16853            foo:
16854          In this case when the la is extended, foo is 0x3fc bytes
16855          away, so the la can be shrunk, but then foo is 0x400 away, so
16856          the la must be extended.  To avoid this loop, we mark the
16857          frag as extended if it was small, and is about to become
16858          extended with the next value above maxtiny.  */
16859       maxtiny = mips_int_operand_max (operand);
16860       if (val == maxtiny + (1 << operand->shift)
16861           && ! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16862         {
16863           fragp->fr_subtype =
16864             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16865           return 1;
16866         }
16867     }
16868
16869   return !mips16_immed_in_range_p (operand, BFD_RELOC_UNUSED, val);
16870 }
16871
16872 /* Compute the length of a branch sequence, and adjust the
16873    RELAX_BRANCH_TOOFAR bit accordingly.  If FRAGP is NULL, the
16874    worst-case length is computed, with UPDATE being used to indicate
16875    whether an unconditional (-1), branch-likely (+1) or regular (0)
16876    branch is to be computed.  */
16877 static int
16878 relaxed_branch_length (fragS *fragp, asection *sec, int update)
16879 {
16880   bfd_boolean toofar;
16881   int length;
16882
16883   if (fragp
16884       && S_IS_DEFINED (fragp->fr_symbol)
16885       && !S_IS_WEAK (fragp->fr_symbol)
16886       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16887     {
16888       addressT addr;
16889       offsetT val;
16890
16891       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16892
16893       addr = fragp->fr_address + fragp->fr_fix + 4;
16894
16895       val -= addr;
16896
16897       toofar = val < - (0x8000 << 2) || val >= (0x8000 << 2);
16898     }
16899   else
16900     /* If the symbol is not defined or it's in a different segment,
16901        we emit the long sequence.  */
16902     toofar = TRUE;
16903
16904   if (fragp && update && toofar != RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
16905     fragp->fr_subtype
16906       = RELAX_BRANCH_ENCODE (RELAX_BRANCH_AT (fragp->fr_subtype),
16907                              RELAX_BRANCH_UNCOND (fragp->fr_subtype),
16908                              RELAX_BRANCH_LIKELY (fragp->fr_subtype),
16909                              RELAX_BRANCH_LINK (fragp->fr_subtype),
16910                              toofar);
16911
16912   length = 4;
16913   if (toofar)
16914     {
16915       if (fragp ? RELAX_BRANCH_LIKELY (fragp->fr_subtype) : (update > 0))
16916         length += 8;
16917
16918       if (mips_pic != NO_PIC)
16919         {
16920           /* Additional space for PIC loading of target address.  */
16921           length += 8;
16922           if (mips_opts.isa == ISA_MIPS1)
16923             /* Additional space for $at-stabilizing nop.  */
16924             length += 4;
16925         }
16926
16927       /* If branch is conditional.  */
16928       if (fragp ? !RELAX_BRANCH_UNCOND (fragp->fr_subtype) : (update >= 0))
16929         length += 8;
16930     }
16931
16932   return length;
16933 }
16934
16935 /* Compute the length of a branch sequence, and adjust the
16936    RELAX_MICROMIPS_TOOFAR32 bit accordingly.  If FRAGP is NULL, the
16937    worst-case length is computed, with UPDATE being used to indicate
16938    whether an unconditional (-1), or regular (0) branch is to be
16939    computed.  */
16940
16941 static int
16942 relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
16943 {
16944   bfd_boolean toofar;
16945   int length;
16946
16947   if (fragp
16948       && S_IS_DEFINED (fragp->fr_symbol)
16949       && !S_IS_WEAK (fragp->fr_symbol)
16950       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16951     {
16952       addressT addr;
16953       offsetT val;
16954
16955       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16956       /* Ignore the low bit in the target, since it will be set
16957          for a text label.  */
16958       if ((val & 1) != 0)
16959         --val;
16960
16961       addr = fragp->fr_address + fragp->fr_fix + 4;
16962
16963       val -= addr;
16964
16965       toofar = val < - (0x8000 << 1) || val >= (0x8000 << 1);
16966     }
16967   else
16968     /* If the symbol is not defined or it's in a different segment,
16969        we emit the long sequence.  */
16970     toofar = TRUE;
16971
16972   if (fragp && update
16973       && toofar != RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
16974     fragp->fr_subtype = (toofar
16975                          ? RELAX_MICROMIPS_MARK_TOOFAR32 (fragp->fr_subtype)
16976                          : RELAX_MICROMIPS_CLEAR_TOOFAR32 (fragp->fr_subtype));
16977
16978   length = 4;
16979   if (toofar)
16980     {
16981       bfd_boolean compact_known = fragp != NULL;
16982       bfd_boolean compact = FALSE;
16983       bfd_boolean uncond;
16984
16985       if (compact_known)
16986         compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
16987       if (fragp)
16988         uncond = RELAX_MICROMIPS_UNCOND (fragp->fr_subtype);
16989       else
16990         uncond = update < 0;
16991
16992       /* If label is out of range, we turn branch <br>:
16993
16994                 <br>    label                   # 4 bytes
16995             0:
16996
16997          into:
16998
16999                 j       label                   # 4 bytes
17000                 nop                             # 2 bytes if compact && !PIC
17001             0:
17002        */
17003       if (mips_pic == NO_PIC && (!compact_known || compact))
17004         length += 2;
17005
17006       /* If assembling PIC code, we further turn:
17007
17008                         j       label                   # 4 bytes
17009
17010          into:
17011
17012                         lw/ld   at, %got(label)(gp)     # 4 bytes
17013                         d/addiu at, %lo(label)          # 4 bytes
17014                         jr/c    at                      # 2 bytes
17015        */
17016       if (mips_pic != NO_PIC)
17017         length += 6;
17018
17019       /* If branch <br> is conditional, we prepend negated branch <brneg>:
17020
17021                         <brneg> 0f                      # 4 bytes
17022                         nop                             # 2 bytes if !compact
17023        */
17024       if (!uncond)
17025         length += (compact_known && compact) ? 4 : 6;
17026     }
17027
17028   return length;
17029 }
17030
17031 /* Compute the length of a branch, and adjust the RELAX_MICROMIPS_TOOFAR16
17032    bit accordingly.  */
17033
17034 static int
17035 relaxed_micromips_16bit_branch_length (fragS *fragp, asection *sec, int update)
17036 {
17037   bfd_boolean toofar;
17038
17039   if (fragp
17040       && S_IS_DEFINED (fragp->fr_symbol)
17041       && !S_IS_WEAK (fragp->fr_symbol)
17042       && sec == S_GET_SEGMENT (fragp->fr_symbol))
17043     {
17044       addressT addr;
17045       offsetT val;
17046       int type;
17047
17048       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
17049       /* Ignore the low bit in the target, since it will be set
17050          for a text label.  */
17051       if ((val & 1) != 0)
17052         --val;
17053
17054       /* Assume this is a 2-byte branch.  */
17055       addr = fragp->fr_address + fragp->fr_fix + 2;
17056
17057       /* We try to avoid the infinite loop by not adding 2 more bytes for
17058          long branches.  */
17059
17060       val -= addr;
17061
17062       type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
17063       if (type == 'D')
17064         toofar = val < - (0x200 << 1) || val >= (0x200 << 1);
17065       else if (type == 'E')
17066         toofar = val < - (0x40 << 1) || val >= (0x40 << 1);
17067       else
17068         abort ();
17069     }
17070   else
17071     /* If the symbol is not defined or it's in a different segment,
17072        we emit a normal 32-bit branch.  */
17073     toofar = TRUE;
17074
17075   if (fragp && update
17076       && toofar != RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
17077     fragp->fr_subtype
17078       = toofar ? RELAX_MICROMIPS_MARK_TOOFAR16 (fragp->fr_subtype)
17079                : RELAX_MICROMIPS_CLEAR_TOOFAR16 (fragp->fr_subtype);
17080
17081   if (toofar)
17082     return 4;
17083
17084   return 2;
17085 }
17086
17087 /* Estimate the size of a frag before relaxing.  Unless this is the
17088    mips16, we are not really relaxing here, and the final size is
17089    encoded in the subtype information.  For the mips16, we have to
17090    decide whether we are using an extended opcode or not.  */
17091
17092 int
17093 md_estimate_size_before_relax (fragS *fragp, asection *segtype)
17094 {
17095   int change;
17096
17097   if (RELAX_BRANCH_P (fragp->fr_subtype))
17098     {
17099
17100       fragp->fr_var = relaxed_branch_length (fragp, segtype, FALSE);
17101
17102       return fragp->fr_var;
17103     }
17104
17105   if (RELAX_MIPS16_P (fragp->fr_subtype))
17106     /* We don't want to modify the EXTENDED bit here; it might get us
17107        into infinite loops.  We change it only in mips_relax_frag().  */
17108     return (RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2);
17109
17110   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17111     {
17112       int length = 4;
17113
17114       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17115         length = relaxed_micromips_16bit_branch_length (fragp, segtype, FALSE);
17116       if (length == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17117         length = relaxed_micromips_32bit_branch_length (fragp, segtype, FALSE);
17118       fragp->fr_var = length;
17119
17120       return length;
17121     }
17122
17123   if (mips_pic == NO_PIC)
17124     change = nopic_need_relax (fragp->fr_symbol, 0);
17125   else if (mips_pic == SVR4_PIC)
17126     change = pic_need_relax (fragp->fr_symbol, segtype);
17127   else if (mips_pic == VXWORKS_PIC)
17128     /* For vxworks, GOT16 relocations never have a corresponding LO16.  */
17129     change = 0;
17130   else
17131     abort ();
17132
17133   if (change)
17134     {
17135       fragp->fr_subtype |= RELAX_USE_SECOND;
17136       return -RELAX_FIRST (fragp->fr_subtype);
17137     }
17138   else
17139     return -RELAX_SECOND (fragp->fr_subtype);
17140 }
17141
17142 /* This is called to see whether a reloc against a defined symbol
17143    should be converted into a reloc against a section.  */
17144
17145 int
17146 mips_fix_adjustable (fixS *fixp)
17147 {
17148   if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
17149       || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
17150     return 0;
17151
17152   if (fixp->fx_addsy == NULL)
17153     return 1;
17154
17155   /* Allow relocs used for EH tables.  */
17156   if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
17157     return 1;
17158
17159   /* If symbol SYM is in a mergeable section, relocations of the form
17160      SYM + 0 can usually be made section-relative.  The mergeable data
17161      is then identified by the section offset rather than by the symbol.
17162
17163      However, if we're generating REL LO16 relocations, the offset is split
17164      between the LO16 and parterning high part relocation.  The linker will
17165      need to recalculate the complete offset in order to correctly identify
17166      the merge data.
17167
17168      The linker has traditionally not looked for the parterning high part
17169      relocation, and has thus allowed orphaned R_MIPS_LO16 relocations to be
17170      placed anywhere.  Rather than break backwards compatibility by changing
17171      this, it seems better not to force the issue, and instead keep the
17172      original symbol.  This will work with either linker behavior.  */
17173   if ((lo16_reloc_p (fixp->fx_r_type)
17174        || reloc_needs_lo_p (fixp->fx_r_type))
17175       && HAVE_IN_PLACE_ADDENDS
17176       && (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
17177     return 0;
17178
17179   /* There is no place to store an in-place offset for JALR relocations.  */
17180   if (jalr_reloc_p (fixp->fx_r_type) && HAVE_IN_PLACE_ADDENDS)
17181     return 0;
17182
17183   /* Likewise an in-range offset of limited PC-relative relocations may
17184      overflow the in-place relocatable field if recalculated against the
17185      start address of the symbol's containing section.
17186
17187      Also, PC relative relocations for MIPS R6 need to be symbol rather than
17188      section relative to allow linker relaxations to be performed later on.  */
17189   if (limited_pcrel_reloc_p (fixp->fx_r_type)
17190       && (HAVE_IN_PLACE_ADDENDS || ISA_IS_R6 (file_mips_opts.isa)))
17191     return 0;
17192
17193   /* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
17194      to a floating-point stub.  The same is true for non-R_MIPS16_26
17195      relocations against MIPS16 functions; in this case, the stub becomes
17196      the function's canonical address.
17197
17198      Floating-point stubs are stored in unique .mips16.call.* or
17199      .mips16.fn.* sections.  If a stub T for function F is in section S,
17200      the first relocation in section S must be against F; this is how the
17201      linker determines the target function.  All relocations that might
17202      resolve to T must also be against F.  We therefore have the following
17203      restrictions, which are given in an intentionally-redundant way:
17204
17205        1. We cannot reduce R_MIPS16_26 relocations against non-MIPS16
17206           symbols.
17207
17208        2. We cannot reduce a stub's relocations against non-MIPS16 symbols
17209           if that stub might be used.
17210
17211        3. We cannot reduce non-R_MIPS16_26 relocations against MIPS16
17212           symbols.
17213
17214        4. We cannot reduce a stub's relocations against MIPS16 symbols if
17215           that stub might be used.
17216
17217      There is a further restriction:
17218
17219        5. We cannot reduce jump relocations (R_MIPS_26, R_MIPS16_26 or
17220           R_MICROMIPS_26_S1) or branch relocations (R_MIPS_PC26_S2,
17221           R_MIPS_PC21_S2, R_MIPS_PC16, R_MIPS16_PC16_S1,
17222           R_MICROMIPS_PC16_S1, R_MICROMIPS_PC10_S1 or R_MICROMIPS_PC7_S1)
17223           against MIPS16 or microMIPS symbols because we need to keep the
17224           MIPS16 or microMIPS symbol for the purpose of mode mismatch
17225           detection and JAL to JALX instruction conversion in the linker.
17226
17227      For simplicity, we deal with (3)-(4) by not reducing _any_ relocation
17228      against a MIPS16 symbol.  We deal with (5) by additionally leaving
17229      alone any jump and branch relocations against a microMIPS symbol.
17230
17231      We deal with (1)-(2) by saying that, if there's a R_MIPS16_26
17232      relocation against some symbol R, no relocation against R may be
17233      reduced.  (Note that this deals with (2) as well as (1) because
17234      relocations against global symbols will never be reduced on ELF
17235      targets.)  This approach is a little simpler than trying to detect
17236      stub sections, and gives the "all or nothing" per-symbol consistency
17237      that we have for MIPS16 symbols.  */
17238   if (fixp->fx_subsy == NULL
17239       && (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy))
17240           || (ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy))
17241               && (jmp_reloc_p (fixp->fx_r_type)
17242                   || b_reloc_p (fixp->fx_r_type)))
17243           || *symbol_get_tc (fixp->fx_addsy)))
17244     return 0;
17245
17246   return 1;
17247 }
17248
17249 /* Translate internal representation of relocation info to BFD target
17250    format.  */
17251
17252 arelent **
17253 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
17254 {
17255   static arelent *retval[4];
17256   arelent *reloc;
17257   bfd_reloc_code_real_type code;
17258
17259   memset (retval, 0, sizeof(retval));
17260   reloc = retval[0] = XCNEW (arelent);
17261   reloc->sym_ptr_ptr = XNEW (asymbol *);
17262   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
17263   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
17264
17265   if (fixp->fx_pcrel)
17266     {
17267       gas_assert (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
17268                   || fixp->fx_r_type == BFD_RELOC_MIPS16_16_PCREL_S1
17269                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
17270                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
17271                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1
17272                   || fixp->fx_r_type == BFD_RELOC_32_PCREL
17273                   || fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
17274                   || fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2
17275                   || fixp->fx_r_type == BFD_RELOC_MIPS_18_PCREL_S3
17276                   || fixp->fx_r_type == BFD_RELOC_MIPS_19_PCREL_S2
17277                   || fixp->fx_r_type == BFD_RELOC_HI16_S_PCREL
17278                   || fixp->fx_r_type == BFD_RELOC_LO16_PCREL);
17279
17280       /* At this point, fx_addnumber is "symbol offset - pcrel address".
17281          Relocations want only the symbol offset.  */
17282       switch (fixp->fx_r_type)
17283         {
17284         case BFD_RELOC_MIPS_18_PCREL_S3:
17285           reloc->addend = fixp->fx_addnumber + (reloc->address & ~7);
17286           break;
17287         default:
17288           reloc->addend = fixp->fx_addnumber + reloc->address;
17289           break;
17290         }
17291     }
17292   else if (HAVE_IN_PLACE_ADDENDS
17293            && fixp->fx_r_type == BFD_RELOC_MICROMIPS_JMP
17294            && (read_compressed_insn (fixp->fx_frag->fr_literal
17295                                      + fixp->fx_where, 4) >> 26) == 0x3c)
17296     {
17297       /* Shift is 2, unusually, for microMIPS JALX.  Adjust the in-place
17298          addend accordingly.  */
17299       reloc->addend = fixp->fx_addnumber >> 1;
17300     }
17301   else
17302     reloc->addend = fixp->fx_addnumber;
17303
17304   /* Since the old MIPS ELF ABI uses Rel instead of Rela, encode the vtable
17305      entry to be used in the relocation's section offset.  */
17306   if (! HAVE_NEWABI && fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
17307     {
17308       reloc->address = reloc->addend;
17309       reloc->addend = 0;
17310     }
17311
17312   code = fixp->fx_r_type;
17313
17314   reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
17315   if (reloc->howto == NULL)
17316     {
17317       as_bad_where (fixp->fx_file, fixp->fx_line,
17318                     _("cannot represent %s relocation in this object file"
17319                       " format"),
17320                     bfd_get_reloc_code_name (code));
17321       retval[0] = NULL;
17322     }
17323
17324   return retval;
17325 }
17326
17327 /* Relax a machine dependent frag.  This returns the amount by which
17328    the current size of the frag should change.  */
17329
17330 int
17331 mips_relax_frag (asection *sec, fragS *fragp, long stretch)
17332 {
17333   if (RELAX_BRANCH_P (fragp->fr_subtype))
17334     {
17335       offsetT old_var = fragp->fr_var;
17336
17337       fragp->fr_var = relaxed_branch_length (fragp, sec, TRUE);
17338
17339       return fragp->fr_var - old_var;
17340     }
17341
17342   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17343     {
17344       offsetT old_var = fragp->fr_var;
17345       offsetT new_var = 4;
17346
17347       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17348         new_var = relaxed_micromips_16bit_branch_length (fragp, sec, TRUE);
17349       if (new_var == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17350         new_var = relaxed_micromips_32bit_branch_length (fragp, sec, TRUE);
17351       fragp->fr_var = new_var;
17352
17353       return new_var - old_var;
17354     }
17355
17356   if (! RELAX_MIPS16_P (fragp->fr_subtype))
17357     return 0;
17358
17359   if (mips16_extended_frag (fragp, sec, stretch))
17360     {
17361       if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17362         return 0;
17363       fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
17364       return 2;
17365     }
17366   else
17367     {
17368       if (! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17369         return 0;
17370       fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
17371       return -2;
17372     }
17373
17374   return 0;
17375 }
17376
17377 /* Convert a machine dependent frag.  */
17378
17379 void
17380 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
17381 {
17382   if (RELAX_BRANCH_P (fragp->fr_subtype))
17383     {
17384       char *buf;
17385       unsigned long insn;
17386       expressionS exp;
17387       fixS *fixp;
17388
17389       buf = fragp->fr_literal + fragp->fr_fix;
17390       insn = read_insn (buf);
17391
17392       if (!RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
17393         {
17394           /* We generate a fixup instead of applying it right now
17395              because, if there are linker relaxations, we're going to
17396              need the relocations.  */
17397           exp.X_op = O_symbol;
17398           exp.X_add_symbol = fragp->fr_symbol;
17399           exp.X_add_number = fragp->fr_offset;
17400
17401           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
17402                               BFD_RELOC_16_PCREL_S2);
17403           fixp->fx_file = fragp->fr_file;
17404           fixp->fx_line = fragp->fr_line;
17405
17406           buf = write_insn (buf, insn);
17407         }
17408       else
17409         {
17410           int i;
17411
17412           as_warn_where (fragp->fr_file, fragp->fr_line,
17413                          _("relaxed out-of-range branch into a jump"));
17414
17415           if (RELAX_BRANCH_UNCOND (fragp->fr_subtype))
17416             goto uncond;
17417
17418           if (!RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17419             {
17420               /* Reverse the branch.  */
17421               switch ((insn >> 28) & 0xf)
17422                 {
17423                 case 4:
17424                   if ((insn & 0xff000000) == 0x47000000
17425                       || (insn & 0xff600000) == 0x45600000)
17426                     {
17427                       /* BZ.df/BNZ.df, BZ.V/BNZ.V can have the condition
17428                          reversed by tweaking bit 23.  */
17429                       insn ^= 0x00800000;
17430                     }
17431                   else
17432                     {
17433                       /* bc[0-3][tf]l? instructions can have the condition
17434                          reversed by tweaking a single TF bit, and their
17435                          opcodes all have 0x4???????.  */
17436                       gas_assert ((insn & 0xf3e00000) == 0x41000000);
17437                       insn ^= 0x00010000;
17438                     }
17439                   break;
17440
17441                 case 0:
17442                   /* bltz       0x04000000      bgez    0x04010000
17443                      bltzal     0x04100000      bgezal  0x04110000  */
17444                   gas_assert ((insn & 0xfc0e0000) == 0x04000000);
17445                   insn ^= 0x00010000;
17446                   break;
17447
17448                 case 1:
17449                   /* beq        0x10000000      bne     0x14000000
17450                      blez       0x18000000      bgtz    0x1c000000  */
17451                   insn ^= 0x04000000;
17452                   break;
17453
17454                 default:
17455                   abort ();
17456                 }
17457             }
17458
17459           if (RELAX_BRANCH_LINK (fragp->fr_subtype))
17460             {
17461               /* Clear the and-link bit.  */
17462               gas_assert ((insn & 0xfc1c0000) == 0x04100000);
17463
17464               /* bltzal         0x04100000      bgezal  0x04110000
17465                  bltzall        0x04120000      bgezall 0x04130000  */
17466               insn &= ~0x00100000;
17467             }
17468
17469           /* Branch over the branch (if the branch was likely) or the
17470              full jump (not likely case).  Compute the offset from the
17471              current instruction to branch to.  */
17472           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17473             i = 16;
17474           else
17475             {
17476               /* How many bytes in instructions we've already emitted?  */
17477               i = buf - fragp->fr_literal - fragp->fr_fix;
17478               /* How many bytes in instructions from here to the end?  */
17479               i = fragp->fr_var - i;
17480             }
17481           /* Convert to instruction count.  */
17482           i >>= 2;
17483           /* Branch counts from the next instruction.  */
17484           i--;
17485           insn |= i;
17486           /* Branch over the jump.  */
17487           buf = write_insn (buf, insn);
17488
17489           /* nop */
17490           buf = write_insn (buf, 0);
17491
17492           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17493             {
17494               /* beql $0, $0, 2f */
17495               insn = 0x50000000;
17496               /* Compute the PC offset from the current instruction to
17497                  the end of the variable frag.  */
17498               /* How many bytes in instructions we've already emitted?  */
17499               i = buf - fragp->fr_literal - fragp->fr_fix;
17500               /* How many bytes in instructions from here to the end?  */
17501               i = fragp->fr_var - i;
17502               /* Convert to instruction count.  */
17503               i >>= 2;
17504               /* Don't decrement i, because we want to branch over the
17505                  delay slot.  */
17506               insn |= i;
17507
17508               buf = write_insn (buf, insn);
17509               buf = write_insn (buf, 0);
17510             }
17511
17512         uncond:
17513           if (mips_pic == NO_PIC)
17514             {
17515               /* j or jal.  */
17516               insn = (RELAX_BRANCH_LINK (fragp->fr_subtype)
17517                       ? 0x0c000000 : 0x08000000);
17518               exp.X_op = O_symbol;
17519               exp.X_add_symbol = fragp->fr_symbol;
17520               exp.X_add_number = fragp->fr_offset;
17521
17522               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17523                                   FALSE, BFD_RELOC_MIPS_JMP);
17524               fixp->fx_file = fragp->fr_file;
17525               fixp->fx_line = fragp->fr_line;
17526
17527               buf = write_insn (buf, insn);
17528             }
17529           else
17530             {
17531               unsigned long at = RELAX_BRANCH_AT (fragp->fr_subtype);
17532
17533               /* lw/ld $at, <sym>($gp)  R_MIPS_GOT16 */
17534               insn = HAVE_64BIT_ADDRESSES ? 0xdf800000 : 0x8f800000;
17535               insn |= at << OP_SH_RT;
17536               exp.X_op = O_symbol;
17537               exp.X_add_symbol = fragp->fr_symbol;
17538               exp.X_add_number = fragp->fr_offset;
17539
17540               if (fragp->fr_offset)
17541                 {
17542                   exp.X_add_symbol = make_expr_symbol (&exp);
17543                   exp.X_add_number = 0;
17544                 }
17545
17546               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17547                                   FALSE, BFD_RELOC_MIPS_GOT16);
17548               fixp->fx_file = fragp->fr_file;
17549               fixp->fx_line = fragp->fr_line;
17550
17551               buf = write_insn (buf, insn);
17552
17553               if (mips_opts.isa == ISA_MIPS1)
17554                 /* nop */
17555                 buf = write_insn (buf, 0);
17556
17557               /* d/addiu $at, $at, <sym>  R_MIPS_LO16 */
17558               insn = HAVE_64BIT_ADDRESSES ? 0x64000000 : 0x24000000;
17559               insn |= at << OP_SH_RS | at << OP_SH_RT;
17560
17561               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17562                                   FALSE, BFD_RELOC_LO16);
17563               fixp->fx_file = fragp->fr_file;
17564               fixp->fx_line = fragp->fr_line;
17565
17566               buf = write_insn (buf, insn);
17567
17568               /* j(al)r $at.  */
17569               if (RELAX_BRANCH_LINK (fragp->fr_subtype))
17570                 insn = 0x0000f809;
17571               else
17572                 insn = 0x00000008;
17573               insn |= at << OP_SH_RS;
17574
17575               buf = write_insn (buf, insn);
17576             }
17577         }
17578
17579       fragp->fr_fix += fragp->fr_var;
17580       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17581       return;
17582     }
17583
17584   /* Relax microMIPS branches.  */
17585   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17586     {
17587       char *buf = fragp->fr_literal + fragp->fr_fix;
17588       bfd_boolean compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
17589       bfd_boolean al = RELAX_MICROMIPS_LINK (fragp->fr_subtype);
17590       int type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
17591       bfd_boolean short_ds;
17592       unsigned long insn;
17593       expressionS exp;
17594       fixS *fixp;
17595
17596       exp.X_op = O_symbol;
17597       exp.X_add_symbol = fragp->fr_symbol;
17598       exp.X_add_number = fragp->fr_offset;
17599
17600       fragp->fr_fix += fragp->fr_var;
17601
17602       /* Handle 16-bit branches that fit or are forced to fit.  */
17603       if (type != 0 && !RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
17604         {
17605           /* We generate a fixup instead of applying it right now,
17606              because if there is linker relaxation, we're going to
17607              need the relocations.  */
17608           if (type == 'D')
17609             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
17610                                 BFD_RELOC_MICROMIPS_10_PCREL_S1);
17611           else if (type == 'E')
17612             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
17613                                 BFD_RELOC_MICROMIPS_7_PCREL_S1);
17614           else
17615             abort ();
17616
17617           fixp->fx_file = fragp->fr_file;
17618           fixp->fx_line = fragp->fr_line;
17619
17620           /* These relocations can have an addend that won't fit in
17621              2 octets.  */
17622           fixp->fx_no_overflow = 1;
17623
17624           return;
17625         }
17626
17627       /* Handle 32-bit branches that fit or are forced to fit.  */
17628       if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
17629           || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
17630         {
17631           /* We generate a fixup instead of applying it right now,
17632              because if there is linker relaxation, we're going to
17633              need the relocations.  */
17634           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
17635                               BFD_RELOC_MICROMIPS_16_PCREL_S1);
17636           fixp->fx_file = fragp->fr_file;
17637           fixp->fx_line = fragp->fr_line;
17638
17639           if (type == 0)
17640             return;
17641         }
17642
17643       /* Relax 16-bit branches to 32-bit branches.  */
17644       if (type != 0)
17645         {
17646           insn = read_compressed_insn (buf, 2);
17647
17648           if ((insn & 0xfc00) == 0xcc00)                /* b16  */
17649             insn = 0x94000000;                          /* beq  */
17650           else if ((insn & 0xdc00) == 0x8c00)           /* beqz16/bnez16  */
17651             {
17652               unsigned long regno;
17653
17654               regno = (insn >> MICROMIPSOP_SH_MD) & MICROMIPSOP_MASK_MD;
17655               regno = micromips_to_32_reg_d_map [regno];
17656               insn = ((insn & 0x2000) << 16) | 0x94000000;      /* beq/bne  */
17657               insn |= regno << MICROMIPSOP_SH_RS;
17658             }
17659           else
17660             abort ();
17661
17662           /* Nothing else to do, just write it out.  */
17663           if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
17664               || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
17665             {
17666               buf = write_compressed_insn (buf, insn, 4);
17667               gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17668               return;
17669             }
17670         }
17671       else
17672         insn = read_compressed_insn (buf, 4);
17673
17674       /* Relax 32-bit branches to a sequence of instructions.  */
17675       as_warn_where (fragp->fr_file, fragp->fr_line,
17676                      _("relaxed out-of-range branch into a jump"));
17677
17678       /* Set the short-delay-slot bit.  */
17679       short_ds = al && (insn & 0x02000000) != 0;
17680
17681       if (!RELAX_MICROMIPS_UNCOND (fragp->fr_subtype))
17682         {
17683           symbolS *l;
17684
17685           /* Reverse the branch.  */
17686           if ((insn & 0xfc000000) == 0x94000000                 /* beq  */
17687               || (insn & 0xfc000000) == 0xb4000000)             /* bne  */
17688             insn ^= 0x20000000;
17689           else if ((insn & 0xffe00000) == 0x40000000            /* bltz  */
17690                    || (insn & 0xffe00000) == 0x40400000         /* bgez  */
17691                    || (insn & 0xffe00000) == 0x40800000         /* blez  */
17692                    || (insn & 0xffe00000) == 0x40c00000         /* bgtz  */
17693                    || (insn & 0xffe00000) == 0x40a00000         /* bnezc  */
17694                    || (insn & 0xffe00000) == 0x40e00000         /* beqzc  */
17695                    || (insn & 0xffe00000) == 0x40200000         /* bltzal  */
17696                    || (insn & 0xffe00000) == 0x40600000         /* bgezal  */
17697                    || (insn & 0xffe00000) == 0x42200000         /* bltzals  */
17698                    || (insn & 0xffe00000) == 0x42600000)        /* bgezals  */
17699             insn ^= 0x00400000;
17700           else if ((insn & 0xffe30000) == 0x43800000            /* bc1f  */
17701                    || (insn & 0xffe30000) == 0x43a00000         /* bc1t  */
17702                    || (insn & 0xffe30000) == 0x42800000         /* bc2f  */
17703                    || (insn & 0xffe30000) == 0x42a00000)        /* bc2t  */
17704             insn ^= 0x00200000;
17705           else if ((insn & 0xff000000) == 0x83000000            /* BZ.df
17706                                                                    BNZ.df  */
17707                     || (insn & 0xff600000) == 0x81600000)       /* BZ.V
17708                                                                    BNZ.V */
17709             insn ^= 0x00800000;
17710           else
17711             abort ();
17712
17713           if (al)
17714             {
17715               /* Clear the and-link and short-delay-slot bits.  */
17716               gas_assert ((insn & 0xfda00000) == 0x40200000);
17717
17718               /* bltzal  0x40200000     bgezal  0x40600000  */
17719               /* bltzals 0x42200000     bgezals 0x42600000  */
17720               insn &= ~0x02200000;
17721             }
17722
17723           /* Make a label at the end for use with the branch.  */
17724           l = symbol_new (micromips_label_name (), asec, fragp->fr_fix, fragp);
17725           micromips_label_inc ();
17726           S_SET_OTHER (l, ELF_ST_SET_MICROMIPS (S_GET_OTHER (l)));
17727
17728           /* Refer to it.  */
17729           fixp = fix_new (fragp, buf - fragp->fr_literal, 4, l, 0, TRUE,
17730                           BFD_RELOC_MICROMIPS_16_PCREL_S1);
17731           fixp->fx_file = fragp->fr_file;
17732           fixp->fx_line = fragp->fr_line;
17733
17734           /* Branch over the jump.  */
17735           buf = write_compressed_insn (buf, insn, 4);
17736           if (!compact)
17737             /* nop */
17738             buf = write_compressed_insn (buf, 0x0c00, 2);
17739         }
17740
17741       if (mips_pic == NO_PIC)
17742         {
17743           unsigned long jal = short_ds ? 0x74000000 : 0xf4000000; /* jal/s  */
17744
17745           /* j/jal/jals <sym>  R_MICROMIPS_26_S1  */
17746           insn = al ? jal : 0xd4000000;
17747
17748           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17749                               BFD_RELOC_MICROMIPS_JMP);
17750           fixp->fx_file = fragp->fr_file;
17751           fixp->fx_line = fragp->fr_line;
17752
17753           buf = write_compressed_insn (buf, insn, 4);
17754           if (compact)
17755             /* nop */
17756             buf = write_compressed_insn (buf, 0x0c00, 2);
17757         }
17758       else
17759         {
17760           unsigned long at = RELAX_MICROMIPS_AT (fragp->fr_subtype);
17761           unsigned long jalr = short_ds ? 0x45e0 : 0x45c0;      /* jalr/s  */
17762           unsigned long jr = compact ? 0x45a0 : 0x4580;         /* jr/c  */
17763
17764           /* lw/ld $at, <sym>($gp)  R_MICROMIPS_GOT16  */
17765           insn = HAVE_64BIT_ADDRESSES ? 0xdc1c0000 : 0xfc1c0000;
17766           insn |= at << MICROMIPSOP_SH_RT;
17767
17768           if (exp.X_add_number)
17769             {
17770               exp.X_add_symbol = make_expr_symbol (&exp);
17771               exp.X_add_number = 0;
17772             }
17773
17774           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17775                               BFD_RELOC_MICROMIPS_GOT16);
17776           fixp->fx_file = fragp->fr_file;
17777           fixp->fx_line = fragp->fr_line;
17778
17779           buf = write_compressed_insn (buf, insn, 4);
17780
17781           /* d/addiu $at, $at, <sym>  R_MICROMIPS_LO16  */
17782           insn = HAVE_64BIT_ADDRESSES ? 0x5c000000 : 0x30000000;
17783           insn |= at << MICROMIPSOP_SH_RT | at << MICROMIPSOP_SH_RS;
17784
17785           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17786                               BFD_RELOC_MICROMIPS_LO16);
17787           fixp->fx_file = fragp->fr_file;
17788           fixp->fx_line = fragp->fr_line;
17789
17790           buf = write_compressed_insn (buf, insn, 4);
17791
17792           /* jr/jrc/jalr/jalrs $at  */
17793           insn = al ? jalr : jr;
17794           insn |= at << MICROMIPSOP_SH_MJ;
17795
17796           buf = write_compressed_insn (buf, insn, 2);
17797         }
17798
17799       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17800       return;
17801     }
17802
17803   if (RELAX_MIPS16_P (fragp->fr_subtype))
17804     {
17805       int type;
17806       const struct mips_int_operand *operand;
17807       offsetT val;
17808       char *buf;
17809       unsigned int user_length, length;
17810       unsigned long insn;
17811       bfd_boolean ext;
17812       segT symsec;
17813
17814       type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
17815       operand = mips16_immed_operand (type, FALSE);
17816
17817       ext = RELAX_MIPS16_EXTENDED (fragp->fr_subtype);
17818       val = resolve_symbol_value (fragp->fr_symbol) + fragp->fr_offset;
17819       if (operand->root.type == OP_PCREL)
17820         {
17821           const struct mips_pcrel_operand *pcrel_op;
17822           addressT addr;
17823
17824           pcrel_op = (const struct mips_pcrel_operand *) operand;
17825           addr = fragp->fr_address + fragp->fr_fix;
17826
17827           /* The rules for the base address of a PC relative reloc are
17828              complicated; see mips16_extended_frag.  */
17829           if (pcrel_op->include_isa_bit)
17830             {
17831               addr += 2;
17832               if (ext)
17833                 addr += 2;
17834               /* Ignore the low bit in the target, since it will be
17835                  set for a text label.  */
17836               val &= -2;
17837             }
17838           else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
17839             addr -= 4;
17840           else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
17841             addr -= 2;
17842
17843           addr &= -(1 << pcrel_op->align_log2);
17844           val -= addr;
17845
17846           /* Make sure the section winds up with the alignment we have
17847              assumed.  */
17848           if (operand->shift > 0)
17849             record_alignment (asec, operand->shift);
17850         }
17851
17852       if (ext
17853           && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
17854               || RELAX_MIPS16_DSLOT (fragp->fr_subtype)))
17855         as_warn_where (fragp->fr_file, fragp->fr_line,
17856                        _("extended instruction in delay slot"));
17857
17858       buf = fragp->fr_literal + fragp->fr_fix;
17859
17860       insn = read_compressed_insn (buf, 2);
17861       if (ext)
17862         insn |= MIPS16_EXTEND;
17863
17864       if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
17865         user_length = 4;
17866       else if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
17867         user_length = 2;
17868       else
17869         user_length = 0;
17870
17871       symsec = S_GET_SEGMENT (fragp->fr_symbol);
17872       if (S_FORCE_RELOC (fragp->fr_symbol, TRUE)
17873           || (operand->root.type == OP_PCREL
17874               ? asec != symsec
17875               : !bfd_is_abs_section (symsec)))
17876         {
17877           bfd_reloc_code_real_type reloc = BFD_RELOC_NONE;
17878           expressionS exp;
17879           fixS *fixp;
17880
17881           switch (type)
17882             {
17883             case 'p':
17884             case 'q':
17885               reloc = BFD_RELOC_MIPS16_16_PCREL_S1;
17886               break;
17887             default:
17888               as_bad_where (fragp->fr_file, fragp->fr_line,
17889                             _("unsupported relocation"));
17890               break;
17891             }
17892           if (reloc != BFD_RELOC_NONE)
17893             {
17894               gas_assert (ext);
17895
17896               exp.X_op = O_symbol;
17897               exp.X_add_symbol = fragp->fr_symbol;
17898               exp.X_add_number = fragp->fr_offset;
17899
17900               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp,
17901                                   TRUE, reloc);
17902
17903               fixp->fx_file = fragp->fr_file;
17904               fixp->fx_line = fragp->fr_line;
17905
17906               /* These relocations can have an addend that won't fit
17907                  in 2 octets.  */
17908               fixp->fx_no_overflow = 1;
17909             }
17910         }
17911       else
17912         mips16_immed (fragp->fr_file, fragp->fr_line, type,
17913                       BFD_RELOC_UNUSED, val, user_length, &insn);
17914
17915       length = (ext ? 4 : 2);
17916       gas_assert (mips16_opcode_length (insn) == length);
17917       write_compressed_insn (buf, insn, length);
17918       fragp->fr_fix += length;
17919     }
17920   else
17921     {
17922       relax_substateT subtype = fragp->fr_subtype;
17923       bfd_boolean second_longer = (subtype & RELAX_SECOND_LONGER) != 0;
17924       bfd_boolean use_second = (subtype & RELAX_USE_SECOND) != 0;
17925       int first, second;
17926       fixS *fixp;
17927
17928       first = RELAX_FIRST (subtype);
17929       second = RELAX_SECOND (subtype);
17930       fixp = (fixS *) fragp->fr_opcode;
17931
17932       /* If the delay slot chosen does not match the size of the instruction,
17933          then emit a warning.  */
17934       if ((!use_second && (subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0)
17935            || (use_second && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0))
17936         {
17937           relax_substateT s;
17938           const char *msg;
17939
17940           s = subtype & (RELAX_DELAY_SLOT_16BIT
17941                          | RELAX_DELAY_SLOT_SIZE_FIRST
17942                          | RELAX_DELAY_SLOT_SIZE_SECOND);
17943           msg = macro_warning (s);
17944           if (msg != NULL)
17945             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17946           subtype &= ~s;
17947         }
17948
17949       /* Possibly emit a warning if we've chosen the longer option.  */
17950       if (use_second == second_longer)
17951         {
17952           relax_substateT s;
17953           const char *msg;
17954
17955           s = (subtype
17956                & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT));
17957           msg = macro_warning (s);
17958           if (msg != NULL)
17959             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17960           subtype &= ~s;
17961         }
17962
17963       /* Go through all the fixups for the first sequence.  Disable them
17964          (by marking them as done) if we're going to use the second
17965          sequence instead.  */
17966       while (fixp
17967              && fixp->fx_frag == fragp
17968              && fixp->fx_where < fragp->fr_fix - second)
17969         {
17970           if (subtype & RELAX_USE_SECOND)
17971             fixp->fx_done = 1;
17972           fixp = fixp->fx_next;
17973         }
17974
17975       /* Go through the fixups for the second sequence.  Disable them if
17976          we're going to use the first sequence, otherwise adjust their
17977          addresses to account for the relaxation.  */
17978       while (fixp && fixp->fx_frag == fragp)
17979         {
17980           if (subtype & RELAX_USE_SECOND)
17981             fixp->fx_where -= first;
17982           else
17983             fixp->fx_done = 1;
17984           fixp = fixp->fx_next;
17985         }
17986
17987       /* Now modify the frag contents.  */
17988       if (subtype & RELAX_USE_SECOND)
17989         {
17990           char *start;
17991
17992           start = fragp->fr_literal + fragp->fr_fix - first - second;
17993           memmove (start, start + first, second);
17994           fragp->fr_fix -= first;
17995         }
17996       else
17997         fragp->fr_fix -= second;
17998     }
17999 }
18000
18001 /* This function is called after the relocs have been generated.
18002    We've been storing mips16 text labels as odd.  Here we convert them
18003    back to even for the convenience of the debugger.  */
18004
18005 void
18006 mips_frob_file_after_relocs (void)
18007 {
18008   asymbol **syms;
18009   unsigned int count, i;
18010
18011   syms = bfd_get_outsymbols (stdoutput);
18012   count = bfd_get_symcount (stdoutput);
18013   for (i = 0; i < count; i++, syms++)
18014     if (ELF_ST_IS_COMPRESSED (elf_symbol (*syms)->internal_elf_sym.st_other)
18015         && ((*syms)->value & 1) != 0)
18016       {
18017         (*syms)->value &= ~1;
18018         /* If the symbol has an odd size, it was probably computed
18019            incorrectly, so adjust that as well.  */
18020         if ((elf_symbol (*syms)->internal_elf_sym.st_size & 1) != 0)
18021           ++elf_symbol (*syms)->internal_elf_sym.st_size;
18022       }
18023 }
18024
18025 /* This function is called whenever a label is defined, including fake
18026    labels instantiated off the dot special symbol.  It is used when
18027    handling branch delays; if a branch has a label, we assume we cannot
18028    move it.  This also bumps the value of the symbol by 1 in compressed
18029    code.  */
18030
18031 static void
18032 mips_record_label (symbolS *sym)
18033 {
18034   segment_info_type *si = seg_info (now_seg);
18035   struct insn_label_list *l;
18036
18037   if (free_insn_labels == NULL)
18038     l = XNEW (struct insn_label_list);
18039   else
18040     {
18041       l = free_insn_labels;
18042       free_insn_labels = l->next;
18043     }
18044
18045   l->label = sym;
18046   l->next = si->label_list;
18047   si->label_list = l;
18048 }
18049
18050 /* This function is called as tc_frob_label() whenever a label is defined
18051    and adds a DWARF-2 record we only want for true labels.  */
18052
18053 void
18054 mips_define_label (symbolS *sym)
18055 {
18056   mips_record_label (sym);
18057   dwarf2_emit_label (sym);
18058 }
18059
18060 /* This function is called by tc_new_dot_label whenever a new dot symbol
18061    is defined.  */
18062
18063 void
18064 mips_add_dot_label (symbolS *sym)
18065 {
18066   mips_record_label (sym);
18067   if (mips_assembling_insn && HAVE_CODE_COMPRESSION)
18068     mips_compressed_mark_label (sym);
18069 }
18070 \f
18071 /* Converting ASE flags from internal to .MIPS.abiflags values.  */
18072 static unsigned int
18073 mips_convert_ase_flags (int ase)
18074 {
18075   unsigned int ext_ases = 0;
18076
18077   if (ase & ASE_DSP)
18078     ext_ases |= AFL_ASE_DSP;
18079   if (ase & ASE_DSPR2)
18080     ext_ases |= AFL_ASE_DSPR2;
18081   if (ase & ASE_DSPR3)
18082     ext_ases |= AFL_ASE_DSPR3;
18083   if (ase & ASE_EVA)
18084     ext_ases |= AFL_ASE_EVA;
18085   if (ase & ASE_MCU)
18086     ext_ases |= AFL_ASE_MCU;
18087   if (ase & ASE_MDMX)
18088     ext_ases |= AFL_ASE_MDMX;
18089   if (ase & ASE_MIPS3D)
18090     ext_ases |= AFL_ASE_MIPS3D;
18091   if (ase & ASE_MT)
18092     ext_ases |= AFL_ASE_MT;
18093   if (ase & ASE_SMARTMIPS)
18094     ext_ases |= AFL_ASE_SMARTMIPS;
18095   if (ase & ASE_VIRT)
18096     ext_ases |= AFL_ASE_VIRT;
18097   if (ase & ASE_MSA)
18098     ext_ases |= AFL_ASE_MSA;
18099   if (ase & ASE_XPA)
18100     ext_ases |= AFL_ASE_XPA;
18101
18102   return ext_ases;
18103 }
18104 /* Some special processing for a MIPS ELF file.  */
18105
18106 void
18107 mips_elf_final_processing (void)
18108 {
18109   int fpabi;
18110   Elf_Internal_ABIFlags_v0 flags;
18111
18112   flags.version = 0;
18113   flags.isa_rev = 0;
18114   switch (file_mips_opts.isa)
18115     {
18116     case INSN_ISA1:
18117       flags.isa_level = 1;
18118       break;
18119     case INSN_ISA2:
18120       flags.isa_level = 2;
18121       break;
18122     case INSN_ISA3:
18123       flags.isa_level = 3;
18124       break;
18125     case INSN_ISA4:
18126       flags.isa_level = 4;
18127       break;
18128     case INSN_ISA5:
18129       flags.isa_level = 5;
18130       break;
18131     case INSN_ISA32:
18132       flags.isa_level = 32;
18133       flags.isa_rev = 1;
18134       break;
18135     case INSN_ISA32R2:
18136       flags.isa_level = 32;
18137       flags.isa_rev = 2;
18138       break;
18139     case INSN_ISA32R3:
18140       flags.isa_level = 32;
18141       flags.isa_rev = 3;
18142       break;
18143     case INSN_ISA32R5:
18144       flags.isa_level = 32;
18145       flags.isa_rev = 5;
18146       break;
18147     case INSN_ISA32R6:
18148       flags.isa_level = 32;
18149       flags.isa_rev = 6;
18150       break;
18151     case INSN_ISA64:
18152       flags.isa_level = 64;
18153       flags.isa_rev = 1;
18154       break;
18155     case INSN_ISA64R2:
18156       flags.isa_level = 64;
18157       flags.isa_rev = 2;
18158       break;
18159     case INSN_ISA64R3:
18160       flags.isa_level = 64;
18161       flags.isa_rev = 3;
18162       break;
18163     case INSN_ISA64R5:
18164       flags.isa_level = 64;
18165       flags.isa_rev = 5;
18166       break;
18167     case INSN_ISA64R6:
18168       flags.isa_level = 64;
18169       flags.isa_rev = 6;
18170       break;
18171     }
18172
18173   flags.gpr_size = file_mips_opts.gp == 32 ? AFL_REG_32 : AFL_REG_64;
18174   flags.cpr1_size = file_mips_opts.soft_float ? AFL_REG_NONE
18175                     : (file_mips_opts.ase & ASE_MSA) ? AFL_REG_128
18176                     : (file_mips_opts.fp == 64) ? AFL_REG_64
18177                     : AFL_REG_32;
18178   flags.cpr2_size = AFL_REG_NONE;
18179   flags.fp_abi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
18180                                            Tag_GNU_MIPS_ABI_FP);
18181   flags.isa_ext = bfd_mips_isa_ext (stdoutput);
18182   flags.ases = mips_convert_ase_flags (file_mips_opts.ase);
18183   if (file_ase_mips16)
18184     flags.ases |= AFL_ASE_MIPS16;
18185   if (file_ase_micromips)
18186     flags.ases |= AFL_ASE_MICROMIPS;
18187   flags.flags1 = 0;
18188   if ((ISA_HAS_ODD_SINGLE_FPR (file_mips_opts.isa, file_mips_opts.arch)
18189        || file_mips_opts.fp == 64)
18190       && file_mips_opts.oddspreg)
18191     flags.flags1 |= AFL_FLAGS1_ODDSPREG;
18192   flags.flags2 = 0;
18193
18194   bfd_mips_elf_swap_abiflags_v0_out (stdoutput, &flags,
18195                                      ((Elf_External_ABIFlags_v0 *)
18196                                      mips_flags_frag));
18197
18198   /* Write out the register information.  */
18199   if (mips_abi != N64_ABI)
18200     {
18201       Elf32_RegInfo s;
18202
18203       s.ri_gprmask = mips_gprmask;
18204       s.ri_cprmask[0] = mips_cprmask[0];
18205       s.ri_cprmask[1] = mips_cprmask[1];
18206       s.ri_cprmask[2] = mips_cprmask[2];
18207       s.ri_cprmask[3] = mips_cprmask[3];
18208       /* The gp_value field is set by the MIPS ELF backend.  */
18209
18210       bfd_mips_elf32_swap_reginfo_out (stdoutput, &s,
18211                                        ((Elf32_External_RegInfo *)
18212                                         mips_regmask_frag));
18213     }
18214   else
18215     {
18216       Elf64_Internal_RegInfo s;
18217
18218       s.ri_gprmask = mips_gprmask;
18219       s.ri_pad = 0;
18220       s.ri_cprmask[0] = mips_cprmask[0];
18221       s.ri_cprmask[1] = mips_cprmask[1];
18222       s.ri_cprmask[2] = mips_cprmask[2];
18223       s.ri_cprmask[3] = mips_cprmask[3];
18224       /* The gp_value field is set by the MIPS ELF backend.  */
18225
18226       bfd_mips_elf64_swap_reginfo_out (stdoutput, &s,
18227                                        ((Elf64_External_RegInfo *)
18228                                         mips_regmask_frag));
18229     }
18230
18231   /* Set the MIPS ELF flag bits.  FIXME: There should probably be some
18232      sort of BFD interface for this.  */
18233   if (mips_any_noreorder)
18234     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NOREORDER;
18235   if (mips_pic != NO_PIC)
18236     {
18237       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_PIC;
18238       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
18239     }
18240   if (mips_abicalls)
18241     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
18242
18243   /* Set MIPS ELF flags for ASEs.  Note that not all ASEs have flags
18244      defined at present; this might need to change in future.  */
18245   if (file_ase_mips16)
18246     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_M16;
18247   if (file_ase_micromips)
18248     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MICROMIPS;
18249   if (file_mips_opts.ase & ASE_MDMX)
18250     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MDMX;
18251
18252   /* Set the MIPS ELF ABI flags.  */
18253   if (mips_abi == O32_ABI && USE_E_MIPS_ABI_O32)
18254     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O32;
18255   else if (mips_abi == O64_ABI)
18256     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O64;
18257   else if (mips_abi == EABI_ABI)
18258     {
18259       if (file_mips_opts.gp == 64)
18260         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI64;
18261       else
18262         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI32;
18263     }
18264   else if (mips_abi == N32_ABI)
18265     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ABI2;
18266
18267   /* Nothing to do for N64_ABI.  */
18268
18269   if (mips_32bitmode)
18270     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_32BITMODE;
18271
18272   if (mips_nan2008 == 1)
18273     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NAN2008;
18274
18275   /* 32 bit code with 64 bit FP registers.  */
18276   fpabi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
18277                                     Tag_GNU_MIPS_ABI_FP);
18278   if (fpabi == Val_GNU_MIPS_ABI_FP_OLD_64)
18279     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_FP64;
18280 }
18281 \f
18282 typedef struct proc {
18283   symbolS *func_sym;
18284   symbolS *func_end_sym;
18285   unsigned long reg_mask;
18286   unsigned long reg_offset;
18287   unsigned long fpreg_mask;
18288   unsigned long fpreg_offset;
18289   unsigned long frame_offset;
18290   unsigned long frame_reg;
18291   unsigned long pc_reg;
18292 } procS;
18293
18294 static procS cur_proc;
18295 static procS *cur_proc_ptr;
18296 static int numprocs;
18297
18298 /* Implement NOP_OPCODE.  We encode a MIPS16 nop as "1", a microMIPS nop
18299    as "2", and a normal nop as "0".  */
18300
18301 #define NOP_OPCODE_MIPS         0
18302 #define NOP_OPCODE_MIPS16       1
18303 #define NOP_OPCODE_MICROMIPS    2
18304
18305 char
18306 mips_nop_opcode (void)
18307 {
18308   if (seg_info (now_seg)->tc_segment_info_data.micromips)
18309     return NOP_OPCODE_MICROMIPS;
18310   else if (seg_info (now_seg)->tc_segment_info_data.mips16)
18311     return NOP_OPCODE_MIPS16;
18312   else
18313     return NOP_OPCODE_MIPS;
18314 }
18315
18316 /* Fill in an rs_align_code fragment.  Unlike elsewhere we want to use
18317    32-bit microMIPS NOPs here (if applicable).  */
18318
18319 void
18320 mips_handle_align (fragS *fragp)
18321 {
18322   char nop_opcode;
18323   char *p;
18324   int bytes, size, excess;
18325   valueT opcode;
18326
18327   if (fragp->fr_type != rs_align_code)
18328     return;
18329
18330   p = fragp->fr_literal + fragp->fr_fix;
18331   nop_opcode = *p;
18332   switch (nop_opcode)
18333     {
18334     case NOP_OPCODE_MICROMIPS:
18335       opcode = micromips_nop32_insn.insn_opcode;
18336       size = 4;
18337       break;
18338     case NOP_OPCODE_MIPS16:
18339       opcode = mips16_nop_insn.insn_opcode;
18340       size = 2;
18341       break;
18342     case NOP_OPCODE_MIPS:
18343     default:
18344       opcode = nop_insn.insn_opcode;
18345       size = 4;
18346       break;
18347     }
18348
18349   bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
18350   excess = bytes % size;
18351
18352   /* Handle the leading part if we're not inserting a whole number of
18353      instructions, and make it the end of the fixed part of the frag.
18354      Try to fit in a short microMIPS NOP if applicable and possible,
18355      and use zeroes otherwise.  */
18356   gas_assert (excess < 4);
18357   fragp->fr_fix += excess;
18358   switch (excess)
18359     {
18360     case 3:
18361       *p++ = '\0';
18362       /* Fall through.  */
18363     case 2:
18364       if (nop_opcode == NOP_OPCODE_MICROMIPS && !mips_opts.insn32)
18365         {
18366           p = write_compressed_insn (p, micromips_nop16_insn.insn_opcode, 2);
18367           break;
18368         }
18369       *p++ = '\0';
18370       /* Fall through.  */
18371     case 1:
18372       *p++ = '\0';
18373       /* Fall through.  */
18374     case 0:
18375       break;
18376     }
18377
18378   md_number_to_chars (p, opcode, size);
18379   fragp->fr_var = size;
18380 }
18381
18382 static long
18383 get_number (void)
18384 {
18385   int negative = 0;
18386   long val = 0;
18387
18388   if (*input_line_pointer == '-')
18389     {
18390       ++input_line_pointer;
18391       negative = 1;
18392     }
18393   if (!ISDIGIT (*input_line_pointer))
18394     as_bad (_("expected simple number"));
18395   if (input_line_pointer[0] == '0')
18396     {
18397       if (input_line_pointer[1] == 'x')
18398         {
18399           input_line_pointer += 2;
18400           while (ISXDIGIT (*input_line_pointer))
18401             {
18402               val <<= 4;
18403               val |= hex_value (*input_line_pointer++);
18404             }
18405           return negative ? -val : val;
18406         }
18407       else
18408         {
18409           ++input_line_pointer;
18410           while (ISDIGIT (*input_line_pointer))
18411             {
18412               val <<= 3;
18413               val |= *input_line_pointer++ - '0';
18414             }
18415           return negative ? -val : val;
18416         }
18417     }
18418   if (!ISDIGIT (*input_line_pointer))
18419     {
18420       printf (_(" *input_line_pointer == '%c' 0x%02x\n"),
18421               *input_line_pointer, *input_line_pointer);
18422       as_warn (_("invalid number"));
18423       return -1;
18424     }
18425   while (ISDIGIT (*input_line_pointer))
18426     {
18427       val *= 10;
18428       val += *input_line_pointer++ - '0';
18429     }
18430   return negative ? -val : val;
18431 }
18432
18433 /* The .file directive; just like the usual .file directive, but there
18434    is an initial number which is the ECOFF file index.  In the non-ECOFF
18435    case .file implies DWARF-2.  */
18436
18437 static void
18438 s_mips_file (int x ATTRIBUTE_UNUSED)
18439 {
18440   static int first_file_directive = 0;
18441
18442   if (ECOFF_DEBUGGING)
18443     {
18444       get_number ();
18445       s_app_file (0);
18446     }
18447   else
18448     {
18449       char *filename;
18450
18451       filename = dwarf2_directive_file (0);
18452
18453       /* Versions of GCC up to 3.1 start files with a ".file"
18454          directive even for stabs output.  Make sure that this
18455          ".file" is handled.  Note that you need a version of GCC
18456          after 3.1 in order to support DWARF-2 on MIPS.  */
18457       if (filename != NULL && ! first_file_directive)
18458         {
18459           (void) new_logical_line (filename, -1);
18460           s_app_file_string (filename, 0);
18461         }
18462       first_file_directive = 1;
18463     }
18464 }
18465
18466 /* The .loc directive, implying DWARF-2.  */
18467
18468 static void
18469 s_mips_loc (int x ATTRIBUTE_UNUSED)
18470 {
18471   if (!ECOFF_DEBUGGING)
18472     dwarf2_directive_loc (0);
18473 }
18474
18475 /* The .end directive.  */
18476
18477 static void
18478 s_mips_end (int x ATTRIBUTE_UNUSED)
18479 {
18480   symbolS *p;
18481
18482   /* Following functions need their own .frame and .cprestore directives.  */
18483   mips_frame_reg_valid = 0;
18484   mips_cprestore_valid = 0;
18485
18486   if (!is_end_of_line[(unsigned char) *input_line_pointer])
18487     {
18488       p = get_symbol ();
18489       demand_empty_rest_of_line ();
18490     }
18491   else
18492     p = NULL;
18493
18494   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
18495     as_warn (_(".end not in text section"));
18496
18497   if (!cur_proc_ptr)
18498     {
18499       as_warn (_(".end directive without a preceding .ent directive"));
18500       demand_empty_rest_of_line ();
18501       return;
18502     }
18503
18504   if (p != NULL)
18505     {
18506       gas_assert (S_GET_NAME (p));
18507       if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->func_sym)))
18508         as_warn (_(".end symbol does not match .ent symbol"));
18509
18510       if (debug_type == DEBUG_STABS)
18511         stabs_generate_asm_endfunc (S_GET_NAME (p),
18512                                     S_GET_NAME (p));
18513     }
18514   else
18515     as_warn (_(".end directive missing or unknown symbol"));
18516
18517   /* Create an expression to calculate the size of the function.  */
18518   if (p && cur_proc_ptr)
18519     {
18520       OBJ_SYMFIELD_TYPE *obj = symbol_get_obj (p);
18521       expressionS *exp = XNEW (expressionS);
18522
18523       obj->size = exp;
18524       exp->X_op = O_subtract;
18525       exp->X_add_symbol = symbol_temp_new_now ();
18526       exp->X_op_symbol = p;
18527       exp->X_add_number = 0;
18528
18529       cur_proc_ptr->func_end_sym = exp->X_add_symbol;
18530     }
18531
18532   /* Generate a .pdr section.  */
18533   if (!ECOFF_DEBUGGING && mips_flag_pdr)
18534     {
18535       segT saved_seg = now_seg;
18536       subsegT saved_subseg = now_subseg;
18537       expressionS exp;
18538       char *fragp;
18539
18540 #ifdef md_flush_pending_output
18541       md_flush_pending_output ();
18542 #endif
18543
18544       gas_assert (pdr_seg);
18545       subseg_set (pdr_seg, 0);
18546
18547       /* Write the symbol.  */
18548       exp.X_op = O_symbol;
18549       exp.X_add_symbol = p;
18550       exp.X_add_number = 0;
18551       emit_expr (&exp, 4);
18552
18553       fragp = frag_more (7 * 4);
18554
18555       md_number_to_chars (fragp, cur_proc_ptr->reg_mask, 4);
18556       md_number_to_chars (fragp + 4, cur_proc_ptr->reg_offset, 4);
18557       md_number_to_chars (fragp + 8, cur_proc_ptr->fpreg_mask, 4);
18558       md_number_to_chars (fragp + 12, cur_proc_ptr->fpreg_offset, 4);
18559       md_number_to_chars (fragp + 16, cur_proc_ptr->frame_offset, 4);
18560       md_number_to_chars (fragp + 20, cur_proc_ptr->frame_reg, 4);
18561       md_number_to_chars (fragp + 24, cur_proc_ptr->pc_reg, 4);
18562
18563       subseg_set (saved_seg, saved_subseg);
18564     }
18565
18566   cur_proc_ptr = NULL;
18567 }
18568
18569 /* The .aent and .ent directives.  */
18570
18571 static void
18572 s_mips_ent (int aent)
18573 {
18574   symbolS *symbolP;
18575
18576   symbolP = get_symbol ();
18577   if (*input_line_pointer == ',')
18578     ++input_line_pointer;
18579   SKIP_WHITESPACE ();
18580   if (ISDIGIT (*input_line_pointer)
18581       || *input_line_pointer == '-')
18582     get_number ();
18583
18584   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
18585     as_warn (_(".ent or .aent not in text section"));
18586
18587   if (!aent && cur_proc_ptr)
18588     as_warn (_("missing .end"));
18589
18590   if (!aent)
18591     {
18592       /* This function needs its own .frame and .cprestore directives.  */
18593       mips_frame_reg_valid = 0;
18594       mips_cprestore_valid = 0;
18595
18596       cur_proc_ptr = &cur_proc;
18597       memset (cur_proc_ptr, '\0', sizeof (procS));
18598
18599       cur_proc_ptr->func_sym = symbolP;
18600
18601       ++numprocs;
18602
18603       if (debug_type == DEBUG_STABS)
18604         stabs_generate_asm_func (S_GET_NAME (symbolP),
18605                                  S_GET_NAME (symbolP));
18606     }
18607
18608   symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
18609
18610   demand_empty_rest_of_line ();
18611 }
18612
18613 /* The .frame directive. If the mdebug section is present (IRIX 5 native)
18614    then ecoff.c (ecoff_directive_frame) is used. For embedded targets,
18615    s_mips_frame is used so that we can set the PDR information correctly.
18616    We can't use the ecoff routines because they make reference to the ecoff
18617    symbol table (in the mdebug section).  */
18618
18619 static void
18620 s_mips_frame (int ignore ATTRIBUTE_UNUSED)
18621 {
18622   if (ECOFF_DEBUGGING)
18623     s_ignore (ignore);
18624   else
18625     {
18626       long val;
18627
18628       if (cur_proc_ptr == (procS *) NULL)
18629         {
18630           as_warn (_(".frame outside of .ent"));
18631           demand_empty_rest_of_line ();
18632           return;
18633         }
18634
18635       cur_proc_ptr->frame_reg = tc_get_register (1);
18636
18637       SKIP_WHITESPACE ();
18638       if (*input_line_pointer++ != ','
18639           || get_absolute_expression_and_terminator (&val) != ',')
18640         {
18641           as_warn (_("bad .frame directive"));
18642           --input_line_pointer;
18643           demand_empty_rest_of_line ();
18644           return;
18645         }
18646
18647       cur_proc_ptr->frame_offset = val;
18648       cur_proc_ptr->pc_reg = tc_get_register (0);
18649
18650       demand_empty_rest_of_line ();
18651     }
18652 }
18653
18654 /* The .fmask and .mask directives. If the mdebug section is present
18655    (IRIX 5 native) then ecoff.c (ecoff_directive_mask) is used. For
18656    embedded targets, s_mips_mask is used so that we can set the PDR
18657    information correctly. We can't use the ecoff routines because they
18658    make reference to the ecoff symbol table (in the mdebug section).  */
18659
18660 static void
18661 s_mips_mask (int reg_type)
18662 {
18663   if (ECOFF_DEBUGGING)
18664     s_ignore (reg_type);
18665   else
18666     {
18667       long mask, off;
18668
18669       if (cur_proc_ptr == (procS *) NULL)
18670         {
18671           as_warn (_(".mask/.fmask outside of .ent"));
18672           demand_empty_rest_of_line ();
18673           return;
18674         }
18675
18676       if (get_absolute_expression_and_terminator (&mask) != ',')
18677         {
18678           as_warn (_("bad .mask/.fmask directive"));
18679           --input_line_pointer;
18680           demand_empty_rest_of_line ();
18681           return;
18682         }
18683
18684       off = get_absolute_expression ();
18685
18686       if (reg_type == 'F')
18687         {
18688           cur_proc_ptr->fpreg_mask = mask;
18689           cur_proc_ptr->fpreg_offset = off;
18690         }
18691       else
18692         {
18693           cur_proc_ptr->reg_mask = mask;
18694           cur_proc_ptr->reg_offset = off;
18695         }
18696
18697       demand_empty_rest_of_line ();
18698     }
18699 }
18700
18701 /* A table describing all the processors gas knows about.  Names are
18702    matched in the order listed.
18703
18704    To ease comparison, please keep this table in the same order as
18705    gcc's mips_cpu_info_table[].  */
18706 static const struct mips_cpu_info mips_cpu_info_table[] =
18707 {
18708   /* Entries for generic ISAs */
18709   { "mips1",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS1,    CPU_R3000 },
18710   { "mips2",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS2,    CPU_R6000 },
18711   { "mips3",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS3,    CPU_R4000 },
18712   { "mips4",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS4,    CPU_R8000 },
18713   { "mips5",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS5,    CPU_MIPS5 },
18714   { "mips32",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS32,   CPU_MIPS32 },
18715   { "mips32r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R2, CPU_MIPS32R2 },
18716   { "mips32r3",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R3, CPU_MIPS32R3 },
18717   { "mips32r5",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R5, CPU_MIPS32R5 },
18718   { "mips32r6",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R6, CPU_MIPS32R6 },
18719   { "mips64",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS64,   CPU_MIPS64 },
18720   { "mips64r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R2, CPU_MIPS64R2 },
18721   { "mips64r3",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R3, CPU_MIPS64R3 },
18722   { "mips64r5",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R5, CPU_MIPS64R5 },
18723   { "mips64r6",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R6, CPU_MIPS64R6 },
18724
18725   /* MIPS I */
18726   { "r3000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
18727   { "r2000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
18728   { "r3900",          0, 0,                     ISA_MIPS1,    CPU_R3900 },
18729
18730   /* MIPS II */
18731   { "r6000",          0, 0,                     ISA_MIPS2,    CPU_R6000 },
18732
18733   /* MIPS III */
18734   { "r4000",          0, 0,                     ISA_MIPS3,    CPU_R4000 },
18735   { "r4010",          0, 0,                     ISA_MIPS2,    CPU_R4010 },
18736   { "vr4100",         0, 0,                     ISA_MIPS3,    CPU_VR4100 },
18737   { "vr4111",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
18738   { "vr4120",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
18739   { "vr4130",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
18740   { "vr4181",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
18741   { "vr4300",         0, 0,                     ISA_MIPS3,    CPU_R4300 },
18742   { "r4400",          0, 0,                     ISA_MIPS3,    CPU_R4400 },
18743   { "r4600",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
18744   { "orion",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
18745   { "r4650",          0, 0,                     ISA_MIPS3,    CPU_R4650 },
18746   { "r5900",          0, 0,                     ISA_MIPS3,    CPU_R5900 },
18747   /* ST Microelectronics Loongson 2E and 2F cores */
18748   { "loongson2e",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2E },
18749   { "loongson2f",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2F },
18750
18751   /* MIPS IV */
18752   { "r8000",          0, 0,                     ISA_MIPS4,    CPU_R8000 },
18753   { "r10000",         0, 0,                     ISA_MIPS4,    CPU_R10000 },
18754   { "r12000",         0, 0,                     ISA_MIPS4,    CPU_R12000 },
18755   { "r14000",         0, 0,                     ISA_MIPS4,    CPU_R14000 },
18756   { "r16000",         0, 0,                     ISA_MIPS4,    CPU_R16000 },
18757   { "vr5000",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18758   { "vr5400",         0, 0,                     ISA_MIPS4,    CPU_VR5400 },
18759   { "vr5500",         0, 0,                     ISA_MIPS4,    CPU_VR5500 },
18760   { "rm5200",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18761   { "rm5230",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18762   { "rm5231",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18763   { "rm5261",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18764   { "rm5721",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18765   { "rm7000",         0, 0,                     ISA_MIPS4,    CPU_RM7000 },
18766   { "rm9000",         0, 0,                     ISA_MIPS4,    CPU_RM9000 },
18767
18768   /* MIPS 32 */
18769   { "4kc",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
18770   { "4km",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
18771   { "4kp",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
18772   { "4ksc",           0, ASE_SMARTMIPS,         ISA_MIPS32,   CPU_MIPS32 },
18773
18774   /* MIPS 32 Release 2 */
18775   { "4kec",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18776   { "4kem",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18777   { "4kep",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18778   { "4ksd",           0, ASE_SMARTMIPS,         ISA_MIPS32R2, CPU_MIPS32R2 },
18779   { "m4k",            0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18780   { "m4kp",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18781   { "m14k",           0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
18782   { "m14kc",          0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
18783   { "m14ke",          0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
18784                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
18785   { "m14kec",         0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
18786                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
18787   { "24kc",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18788   { "24kf2_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18789   { "24kf",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18790   { "24kf1_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18791   /* Deprecated forms of the above.  */
18792   { "24kfx",          0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18793   { "24kx",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18794   /* 24KE is a 24K with DSP ASE, other ASEs are optional.  */
18795   { "24kec",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18796   { "24kef2_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18797   { "24kef",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18798   { "24kef1_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18799   /* Deprecated forms of the above.  */
18800   { "24kefx",         0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18801   { "24kex",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18802   /* 34K is a 24K with DSP and MT ASE, other ASEs are optional.  */
18803   { "34kc",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18804   { "34kf2_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18805   { "34kf",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18806   { "34kf1_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18807   /* Deprecated forms of the above.  */
18808   { "34kfx",          0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18809   { "34kx",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18810   /* 34Kn is a 34kc without DSP.  */
18811   { "34kn",           0, ASE_MT,                ISA_MIPS32R2, CPU_MIPS32R2 },
18812   /* 74K with DSP and DSPR2 ASE, other ASEs are optional.  */
18813   { "74kc",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18814   { "74kf2_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18815   { "74kf",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18816   { "74kf1_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18817   { "74kf3_2",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18818   /* Deprecated forms of the above.  */
18819   { "74kfx",          0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18820   { "74kx",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18821   /* 1004K cores are multiprocessor versions of the 34K.  */
18822   { "1004kc",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18823   { "1004kf2_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18824   { "1004kf",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18825   { "1004kf1_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18826   /* interaptiv is the new name for 1004kf */
18827   { "interaptiv",     0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18828   /* M5100 family */
18829   { "m5100",          0, ASE_MCU,               ISA_MIPS32R5, CPU_MIPS32R5 },
18830   { "m5101",          0, ASE_MCU,               ISA_MIPS32R5, CPU_MIPS32R5 },
18831   /* P5600 with EVA and Virtualization ASEs, other ASEs are optional.  */
18832   { "p5600",          0, ASE_VIRT | ASE_EVA | ASE_XPA,  ISA_MIPS32R5, CPU_MIPS32R5 },
18833
18834   /* MIPS 64 */
18835   { "5kc",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
18836   { "5kf",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
18837   { "20kc",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
18838   { "25kf",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
18839
18840   /* Broadcom SB-1 CPU core */
18841   { "sb1",            0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
18842   /* Broadcom SB-1A CPU core */
18843   { "sb1a",           0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
18844
18845   { "loongson3a",     0, 0,                     ISA_MIPS64R2, CPU_LOONGSON_3A },
18846
18847   /* MIPS 64 Release 2 */
18848
18849   /* Cavium Networks Octeon CPU core */
18850   { "octeon",         0, 0,                     ISA_MIPS64R2, CPU_OCTEON },
18851   { "octeon+",        0, 0,                     ISA_MIPS64R2, CPU_OCTEONP },
18852   { "octeon2",        0, 0,                     ISA_MIPS64R2, CPU_OCTEON2 },
18853   { "octeon3",        0, ASE_VIRT | ASE_VIRT64, ISA_MIPS64R5, CPU_OCTEON3 },
18854
18855   /* RMI Xlr */
18856   { "xlr",            0, 0,                     ISA_MIPS64,   CPU_XLR },
18857
18858   /* Broadcom XLP.
18859      XLP is mostly like XLR, with the prominent exception that it is
18860      MIPS64R2 rather than MIPS64.  */
18861   { "xlp",            0, 0,                     ISA_MIPS64R2, CPU_XLR },
18862
18863   /* MIPS 64 Release 6 */
18864   { "i6400",          0, ASE_MSA,               ISA_MIPS64R6, CPU_MIPS64R6},
18865   { "p6600",          0, ASE_VIRT | ASE_MSA,    ISA_MIPS64R6, CPU_MIPS64R6},
18866
18867   /* End marker */
18868   { NULL, 0, 0, 0, 0 }
18869 };
18870
18871
18872 /* Return true if GIVEN is the same as CANONICAL, or if it is CANONICAL
18873    with a final "000" replaced by "k".  Ignore case.
18874
18875    Note: this function is shared between GCC and GAS.  */
18876
18877 static bfd_boolean
18878 mips_strict_matching_cpu_name_p (const char *canonical, const char *given)
18879 {
18880   while (*given != 0 && TOLOWER (*given) == TOLOWER (*canonical))
18881     given++, canonical++;
18882
18883   return ((*given == 0 && *canonical == 0)
18884           || (strcmp (canonical, "000") == 0 && strcasecmp (given, "k") == 0));
18885 }
18886
18887
18888 /* Return true if GIVEN matches CANONICAL, where GIVEN is a user-supplied
18889    CPU name.  We've traditionally allowed a lot of variation here.
18890
18891    Note: this function is shared between GCC and GAS.  */
18892
18893 static bfd_boolean
18894 mips_matching_cpu_name_p (const char *canonical, const char *given)
18895 {
18896   /* First see if the name matches exactly, or with a final "000"
18897      turned into "k".  */
18898   if (mips_strict_matching_cpu_name_p (canonical, given))
18899     return TRUE;
18900
18901   /* If not, try comparing based on numerical designation alone.
18902      See if GIVEN is an unadorned number, or 'r' followed by a number.  */
18903   if (TOLOWER (*given) == 'r')
18904     given++;
18905   if (!ISDIGIT (*given))
18906     return FALSE;
18907
18908   /* Skip over some well-known prefixes in the canonical name,
18909      hoping to find a number there too.  */
18910   if (TOLOWER (canonical[0]) == 'v' && TOLOWER (canonical[1]) == 'r')
18911     canonical += 2;
18912   else if (TOLOWER (canonical[0]) == 'r' && TOLOWER (canonical[1]) == 'm')
18913     canonical += 2;
18914   else if (TOLOWER (canonical[0]) == 'r')
18915     canonical += 1;
18916
18917   return mips_strict_matching_cpu_name_p (canonical, given);
18918 }
18919
18920
18921 /* Parse an option that takes the name of a processor as its argument.
18922    OPTION is the name of the option and CPU_STRING is the argument.
18923    Return the corresponding processor enumeration if the CPU_STRING is
18924    recognized, otherwise report an error and return null.
18925
18926    A similar function exists in GCC.  */
18927
18928 static const struct mips_cpu_info *
18929 mips_parse_cpu (const char *option, const char *cpu_string)
18930 {
18931   const struct mips_cpu_info *p;
18932
18933   /* 'from-abi' selects the most compatible architecture for the given
18934      ABI: MIPS I for 32-bit ABIs and MIPS III for 64-bit ABIs.  For the
18935      EABIs, we have to decide whether we're using the 32-bit or 64-bit
18936      version.  Look first at the -mgp options, if given, otherwise base
18937      the choice on MIPS_DEFAULT_64BIT.
18938
18939      Treat NO_ABI like the EABIs.  One reason to do this is that the
18940      plain 'mips' and 'mips64' configs have 'from-abi' as their default
18941      architecture.  This code picks MIPS I for 'mips' and MIPS III for
18942      'mips64', just as we did in the days before 'from-abi'.  */
18943   if (strcasecmp (cpu_string, "from-abi") == 0)
18944     {
18945       if (ABI_NEEDS_32BIT_REGS (mips_abi))
18946         return mips_cpu_info_from_isa (ISA_MIPS1);
18947
18948       if (ABI_NEEDS_64BIT_REGS (mips_abi))
18949         return mips_cpu_info_from_isa (ISA_MIPS3);
18950
18951       if (file_mips_opts.gp >= 0)
18952         return mips_cpu_info_from_isa (file_mips_opts.gp == 32
18953                                        ? ISA_MIPS1 : ISA_MIPS3);
18954
18955       return mips_cpu_info_from_isa (MIPS_DEFAULT_64BIT
18956                                      ? ISA_MIPS3
18957                                      : ISA_MIPS1);
18958     }
18959
18960   /* 'default' has traditionally been a no-op.  Probably not very useful.  */
18961   if (strcasecmp (cpu_string, "default") == 0)
18962     return 0;
18963
18964   for (p = mips_cpu_info_table; p->name != 0; p++)
18965     if (mips_matching_cpu_name_p (p->name, cpu_string))
18966       return p;
18967
18968   as_bad (_("bad value (%s) for %s"), cpu_string, option);
18969   return 0;
18970 }
18971
18972 /* Return the canonical processor information for ISA (a member of the
18973    ISA_MIPS* enumeration).  */
18974
18975 static const struct mips_cpu_info *
18976 mips_cpu_info_from_isa (int isa)
18977 {
18978   int i;
18979
18980   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18981     if ((mips_cpu_info_table[i].flags & MIPS_CPU_IS_ISA)
18982         && isa == mips_cpu_info_table[i].isa)
18983       return (&mips_cpu_info_table[i]);
18984
18985   return NULL;
18986 }
18987
18988 static const struct mips_cpu_info *
18989 mips_cpu_info_from_arch (int arch)
18990 {
18991   int i;
18992
18993   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18994     if (arch == mips_cpu_info_table[i].cpu)
18995       return (&mips_cpu_info_table[i]);
18996
18997   return NULL;
18998 }
18999 \f
19000 static void
19001 show (FILE *stream, const char *string, int *col_p, int *first_p)
19002 {
19003   if (*first_p)
19004     {
19005       fprintf (stream, "%24s", "");
19006       *col_p = 24;
19007     }
19008   else
19009     {
19010       fprintf (stream, ", ");
19011       *col_p += 2;
19012     }
19013
19014   if (*col_p + strlen (string) > 72)
19015     {
19016       fprintf (stream, "\n%24s", "");
19017       *col_p = 24;
19018     }
19019
19020   fprintf (stream, "%s", string);
19021   *col_p += strlen (string);
19022
19023   *first_p = 0;
19024 }
19025
19026 void
19027 md_show_usage (FILE *stream)
19028 {
19029   int column, first;
19030   size_t i;
19031
19032   fprintf (stream, _("\
19033 MIPS options:\n\
19034 -EB                     generate big endian output\n\
19035 -EL                     generate little endian output\n\
19036 -g, -g2                 do not remove unneeded NOPs or swap branches\n\
19037 -G NUM                  allow referencing objects up to NUM bytes\n\
19038                         implicitly with the gp register [default 8]\n"));
19039   fprintf (stream, _("\
19040 -mips1                  generate MIPS ISA I instructions\n\
19041 -mips2                  generate MIPS ISA II instructions\n\
19042 -mips3                  generate MIPS ISA III instructions\n\
19043 -mips4                  generate MIPS ISA IV instructions\n\
19044 -mips5                  generate MIPS ISA V instructions\n\
19045 -mips32                 generate MIPS32 ISA instructions\n\
19046 -mips32r2               generate MIPS32 release 2 ISA instructions\n\
19047 -mips32r3               generate MIPS32 release 3 ISA instructions\n\
19048 -mips32r5               generate MIPS32 release 5 ISA instructions\n\
19049 -mips32r6               generate MIPS32 release 6 ISA instructions\n\
19050 -mips64                 generate MIPS64 ISA instructions\n\
19051 -mips64r2               generate MIPS64 release 2 ISA instructions\n\
19052 -mips64r3               generate MIPS64 release 3 ISA instructions\n\
19053 -mips64r5               generate MIPS64 release 5 ISA instructions\n\
19054 -mips64r6               generate MIPS64 release 6 ISA instructions\n\
19055 -march=CPU/-mtune=CPU   generate code/schedule for CPU, where CPU is one of:\n"));
19056
19057   first = 1;
19058
19059   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
19060     show (stream, mips_cpu_info_table[i].name, &column, &first);
19061   show (stream, "from-abi", &column, &first);
19062   fputc ('\n', stream);
19063
19064   fprintf (stream, _("\
19065 -mCPU                   equivalent to -march=CPU -mtune=CPU. Deprecated.\n\
19066 -no-mCPU                don't generate code specific to CPU.\n\
19067                         For -mCPU and -no-mCPU, CPU must be one of:\n"));
19068
19069   first = 1;
19070
19071   show (stream, "3900", &column, &first);
19072   show (stream, "4010", &column, &first);
19073   show (stream, "4100", &column, &first);
19074   show (stream, "4650", &column, &first);
19075   fputc ('\n', stream);
19076
19077   fprintf (stream, _("\
19078 -mips16                 generate mips16 instructions\n\
19079 -no-mips16              do not generate mips16 instructions\n"));
19080   fprintf (stream, _("\
19081 -mmicromips             generate microMIPS instructions\n\
19082 -mno-micromips          do not generate microMIPS instructions\n"));
19083   fprintf (stream, _("\
19084 -msmartmips             generate smartmips instructions\n\
19085 -mno-smartmips          do not generate smartmips instructions\n"));
19086   fprintf (stream, _("\
19087 -mdsp                   generate DSP instructions\n\
19088 -mno-dsp                do not generate DSP instructions\n"));
19089   fprintf (stream, _("\
19090 -mdspr2                 generate DSP R2 instructions\n\
19091 -mno-dspr2              do not generate DSP R2 instructions\n"));
19092   fprintf (stream, _("\
19093 -mdspr3                 generate DSP R3 instructions\n\
19094 -mno-dspr3              do not generate DSP R3 instructions\n"));
19095   fprintf (stream, _("\
19096 -mmt                    generate MT instructions\n\
19097 -mno-mt                 do not generate MT instructions\n"));
19098   fprintf (stream, _("\
19099 -mmcu                   generate MCU instructions\n\
19100 -mno-mcu                do not generate MCU instructions\n"));
19101   fprintf (stream, _("\
19102 -mmsa                   generate MSA instructions\n\
19103 -mno-msa                do not generate MSA instructions\n"));
19104   fprintf (stream, _("\
19105 -mxpa                   generate eXtended Physical Address (XPA) instructions\n\
19106 -mno-xpa                do not generate eXtended Physical Address (XPA) instructions\n"));
19107   fprintf (stream, _("\
19108 -mvirt                  generate Virtualization instructions\n\
19109 -mno-virt               do not generate Virtualization instructions\n"));
19110   fprintf (stream, _("\
19111 -minsn32                only generate 32-bit microMIPS instructions\n\
19112 -mno-insn32             generate all microMIPS instructions\n"));
19113   fprintf (stream, _("\
19114 -mfix-loongson2f-jump   work around Loongson2F JUMP instructions\n\
19115 -mfix-loongson2f-nop    work around Loongson2F NOP errata\n\
19116 -mfix-vr4120            work around certain VR4120 errata\n\
19117 -mfix-vr4130            work around VR4130 mflo/mfhi errata\n\
19118 -mfix-24k               insert a nop after ERET and DERET instructions\n\
19119 -mfix-cn63xxp1          work around CN63XXP1 PREF errata\n\
19120 -mgp32                  use 32-bit GPRs, regardless of the chosen ISA\n\
19121 -mfp32                  use 32-bit FPRs, regardless of the chosen ISA\n\
19122 -msym32                 assume all symbols have 32-bit values\n\
19123 -O0                     remove unneeded NOPs, do not swap branches\n\
19124 -O                      remove unneeded NOPs and swap branches\n\
19125 --trap, --no-break      trap exception on div by 0 and mult overflow\n\
19126 --break, --no-trap      break exception on div by 0 and mult overflow\n"));
19127   fprintf (stream, _("\
19128 -mhard-float            allow floating-point instructions\n\
19129 -msoft-float            do not allow floating-point instructions\n\
19130 -msingle-float          only allow 32-bit floating-point operations\n\
19131 -mdouble-float          allow 32-bit and 64-bit floating-point operations\n\
19132 --[no-]construct-floats [dis]allow floating point values to be constructed\n\
19133 --[no-]relax-branch     [dis]allow out-of-range branches to be relaxed\n\
19134 -mnan=ENCODING          select an IEEE 754 NaN encoding convention, either of:\n"));
19135
19136   first = 1;
19137
19138   show (stream, "legacy", &column, &first);
19139   show (stream, "2008", &column, &first);
19140
19141   fputc ('\n', stream);
19142
19143   fprintf (stream, _("\
19144 -KPIC, -call_shared     generate SVR4 position independent code\n\
19145 -call_nonpic            generate non-PIC code that can operate with DSOs\n\
19146 -mvxworks-pic           generate VxWorks position independent code\n\
19147 -non_shared             do not generate code that can operate with DSOs\n\
19148 -xgot                   assume a 32 bit GOT\n\
19149 -mpdr, -mno-pdr         enable/disable creation of .pdr sections\n\
19150 -mshared, -mno-shared   disable/enable .cpload optimization for\n\
19151                         position dependent (non shared) code\n\
19152 -mabi=ABI               create ABI conformant object file for:\n"));
19153
19154   first = 1;
19155
19156   show (stream, "32", &column, &first);
19157   show (stream, "o64", &column, &first);
19158   show (stream, "n32", &column, &first);
19159   show (stream, "64", &column, &first);
19160   show (stream, "eabi", &column, &first);
19161
19162   fputc ('\n', stream);
19163
19164   fprintf (stream, _("\
19165 -32                     create o32 ABI object file (default)\n\
19166 -n32                    create n32 ABI object file\n\
19167 -64                     create 64 ABI object file\n"));
19168 }
19169
19170 #ifdef TE_IRIX
19171 enum dwarf2_format
19172 mips_dwarf2_format (asection *sec ATTRIBUTE_UNUSED)
19173 {
19174   if (HAVE_64BIT_SYMBOLS)
19175     return dwarf2_format_64bit_irix;
19176   else
19177     return dwarf2_format_32bit;
19178 }
19179 #endif
19180
19181 int
19182 mips_dwarf2_addr_size (void)
19183 {
19184   if (HAVE_64BIT_OBJECTS)
19185     return 8;
19186   else
19187     return 4;
19188 }
19189
19190 /* Standard calling conventions leave the CFA at SP on entry.  */
19191 void
19192 mips_cfi_frame_initial_instructions (void)
19193 {
19194   cfi_add_CFA_def_cfa_register (SP);
19195 }
19196
19197 int
19198 tc_mips_regname_to_dw2regnum (char *regname)
19199 {
19200   unsigned int regnum = -1;
19201   unsigned int reg;
19202
19203   if (reg_lookup (&regname, RTYPE_GP | RTYPE_NUM, &reg))
19204     regnum = reg;
19205
19206   return regnum;
19207 }
19208
19209 /* Implement CONVERT_SYMBOLIC_ATTRIBUTE.
19210    Given a symbolic attribute NAME, return the proper integer value.
19211    Returns -1 if the attribute is not known.  */
19212
19213 int
19214 mips_convert_symbolic_attribute (const char *name)
19215 {
19216   static const struct
19217   {
19218     const char * name;
19219     const int    tag;
19220   }
19221   attribute_table[] =
19222     {
19223 #define T(tag) {#tag, tag}
19224       T (Tag_GNU_MIPS_ABI_FP),
19225       T (Tag_GNU_MIPS_ABI_MSA),
19226 #undef T
19227     };
19228   unsigned int i;
19229
19230   if (name == NULL)
19231     return -1;
19232
19233   for (i = 0; i < ARRAY_SIZE (attribute_table); i++)
19234     if (streq (name, attribute_table[i].name))
19235       return attribute_table[i].tag;
19236
19237   return -1;
19238 }
19239
19240 void
19241 md_mips_end (void)
19242 {
19243   int fpabi = Val_GNU_MIPS_ABI_FP_ANY;
19244
19245   mips_emit_delays ();
19246   if (cur_proc_ptr)
19247     as_warn (_("missing .end at end of assembly"));
19248
19249   /* Just in case no code was emitted, do the consistency check.  */
19250   file_mips_check_options ();
19251
19252   /* Set a floating-point ABI if the user did not.  */
19253   if (obj_elf_seen_attribute (OBJ_ATTR_GNU, Tag_GNU_MIPS_ABI_FP))
19254     {
19255       /* Perform consistency checks on the floating-point ABI.  */
19256       fpabi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
19257                                         Tag_GNU_MIPS_ABI_FP);
19258       if (fpabi != Val_GNU_MIPS_ABI_FP_ANY)
19259         check_fpabi (fpabi);
19260     }
19261   else
19262     {
19263       /* Soft-float gets precedence over single-float, the two options should
19264          not be used together so this should not matter.  */
19265       if (file_mips_opts.soft_float == 1)
19266         fpabi = Val_GNU_MIPS_ABI_FP_SOFT;
19267       /* Single-float gets precedence over all double_float cases.  */
19268       else if (file_mips_opts.single_float == 1)
19269         fpabi = Val_GNU_MIPS_ABI_FP_SINGLE;
19270       else
19271         {
19272           switch (file_mips_opts.fp)
19273             {
19274             case 32:
19275               if (file_mips_opts.gp == 32)
19276                 fpabi = Val_GNU_MIPS_ABI_FP_DOUBLE;
19277               break;
19278             case 0:
19279               fpabi = Val_GNU_MIPS_ABI_FP_XX;
19280               break;
19281             case 64:
19282               if (file_mips_opts.gp == 32 && !file_mips_opts.oddspreg)
19283                 fpabi = Val_GNU_MIPS_ABI_FP_64A;
19284               else if (file_mips_opts.gp == 32)
19285                 fpabi = Val_GNU_MIPS_ABI_FP_64;
19286               else
19287                 fpabi = Val_GNU_MIPS_ABI_FP_DOUBLE;
19288               break;
19289             }
19290         }
19291
19292       bfd_elf_add_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
19293                                 Tag_GNU_MIPS_ABI_FP, fpabi);
19294     }
19295 }
19296
19297 /*  Returns the relocation type required for a particular CFI encoding.  */
19298
19299 bfd_reloc_code_real_type
19300 mips_cfi_reloc_for_encoding (int encoding)
19301 {
19302   if (encoding == (DW_EH_PE_sdata4 | DW_EH_PE_pcrel))
19303     return BFD_RELOC_32_PCREL;
19304   else return BFD_RELOC_NONE;
19305 }