MIPS/GAS: Fix an ISA override not lifting ABI restrictions
[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_EVA,
1414     OPTION_NO_EVA,
1415     OPTION_XPA,
1416     OPTION_NO_XPA,
1417     OPTION_MICROMIPS,
1418     OPTION_NO_MICROMIPS,
1419     OPTION_MCU,
1420     OPTION_NO_MCU,
1421     OPTION_COMPAT_ARCH_BASE,
1422     OPTION_M4650,
1423     OPTION_NO_M4650,
1424     OPTION_M4010,
1425     OPTION_NO_M4010,
1426     OPTION_M4100,
1427     OPTION_NO_M4100,
1428     OPTION_M3900,
1429     OPTION_NO_M3900,
1430     OPTION_M7000_HILO_FIX,
1431     OPTION_MNO_7000_HILO_FIX,
1432     OPTION_FIX_24K,
1433     OPTION_NO_FIX_24K,
1434     OPTION_FIX_RM7000,
1435     OPTION_NO_FIX_RM7000,
1436     OPTION_FIX_LOONGSON2F_JUMP,
1437     OPTION_NO_FIX_LOONGSON2F_JUMP,
1438     OPTION_FIX_LOONGSON2F_NOP,
1439     OPTION_NO_FIX_LOONGSON2F_NOP,
1440     OPTION_FIX_VR4120,
1441     OPTION_NO_FIX_VR4120,
1442     OPTION_FIX_VR4130,
1443     OPTION_NO_FIX_VR4130,
1444     OPTION_FIX_CN63XXP1,
1445     OPTION_NO_FIX_CN63XXP1,
1446     OPTION_TRAP,
1447     OPTION_BREAK,
1448     OPTION_EB,
1449     OPTION_EL,
1450     OPTION_FP32,
1451     OPTION_GP32,
1452     OPTION_CONSTRUCT_FLOATS,
1453     OPTION_NO_CONSTRUCT_FLOATS,
1454     OPTION_FP64,
1455     OPTION_FPXX,
1456     OPTION_GP64,
1457     OPTION_RELAX_BRANCH,
1458     OPTION_NO_RELAX_BRANCH,
1459     OPTION_INSN32,
1460     OPTION_NO_INSN32,
1461     OPTION_MSHARED,
1462     OPTION_MNO_SHARED,
1463     OPTION_MSYM32,
1464     OPTION_MNO_SYM32,
1465     OPTION_SOFT_FLOAT,
1466     OPTION_HARD_FLOAT,
1467     OPTION_SINGLE_FLOAT,
1468     OPTION_DOUBLE_FLOAT,
1469     OPTION_32,
1470     OPTION_CALL_SHARED,
1471     OPTION_CALL_NONPIC,
1472     OPTION_NON_SHARED,
1473     OPTION_XGOT,
1474     OPTION_MABI,
1475     OPTION_N32,
1476     OPTION_64,
1477     OPTION_MDEBUG,
1478     OPTION_NO_MDEBUG,
1479     OPTION_PDR,
1480     OPTION_NO_PDR,
1481     OPTION_MVXWORKS_PIC,
1482     OPTION_NAN,
1483     OPTION_ODD_SPREG,
1484     OPTION_NO_ODD_SPREG,
1485     OPTION_END_OF_ENUM
1486   };
1487
1488 struct option md_longopts[] =
1489 {
1490   /* Options which specify architecture.  */
1491   {"march", required_argument, NULL, OPTION_MARCH},
1492   {"mtune", required_argument, NULL, OPTION_MTUNE},
1493   {"mips0", no_argument, NULL, OPTION_MIPS1},
1494   {"mips1", no_argument, NULL, OPTION_MIPS1},
1495   {"mips2", no_argument, NULL, OPTION_MIPS2},
1496   {"mips3", no_argument, NULL, OPTION_MIPS3},
1497   {"mips4", no_argument, NULL, OPTION_MIPS4},
1498   {"mips5", no_argument, NULL, OPTION_MIPS5},
1499   {"mips32", no_argument, NULL, OPTION_MIPS32},
1500   {"mips64", no_argument, NULL, OPTION_MIPS64},
1501   {"mips32r2", no_argument, NULL, OPTION_MIPS32R2},
1502   {"mips32r3", no_argument, NULL, OPTION_MIPS32R3},
1503   {"mips32r5", no_argument, NULL, OPTION_MIPS32R5},
1504   {"mips32r6", no_argument, NULL, OPTION_MIPS32R6},
1505   {"mips64r2", no_argument, NULL, OPTION_MIPS64R2},
1506   {"mips64r3", no_argument, NULL, OPTION_MIPS64R3},
1507   {"mips64r5", no_argument, NULL, OPTION_MIPS64R5},
1508   {"mips64r6", no_argument, NULL, OPTION_MIPS64R6},
1509
1510   /* Options which specify Application Specific Extensions (ASEs).  */
1511   {"mips16", no_argument, NULL, OPTION_MIPS16},
1512   {"no-mips16", no_argument, NULL, OPTION_NO_MIPS16},
1513   {"mips3d", no_argument, NULL, OPTION_MIPS3D},
1514   {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D},
1515   {"mdmx", no_argument, NULL, OPTION_MDMX},
1516   {"no-mdmx", no_argument, NULL, OPTION_NO_MDMX},
1517   {"mdsp", no_argument, NULL, OPTION_DSP},
1518   {"mno-dsp", no_argument, NULL, OPTION_NO_DSP},
1519   {"mmt", no_argument, NULL, OPTION_MT},
1520   {"mno-mt", no_argument, NULL, OPTION_NO_MT},
1521   {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS},
1522   {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS},
1523   {"mdspr2", no_argument, NULL, OPTION_DSPR2},
1524   {"mno-dspr2", no_argument, NULL, OPTION_NO_DSPR2},
1525   {"meva", no_argument, NULL, OPTION_EVA},
1526   {"mno-eva", no_argument, NULL, OPTION_NO_EVA},
1527   {"mmicromips", no_argument, NULL, OPTION_MICROMIPS},
1528   {"mno-micromips", no_argument, NULL, OPTION_NO_MICROMIPS},
1529   {"mmcu", no_argument, NULL, OPTION_MCU},
1530   {"mno-mcu", no_argument, NULL, OPTION_NO_MCU},
1531   {"mvirt", no_argument, NULL, OPTION_VIRT},
1532   {"mno-virt", no_argument, NULL, OPTION_NO_VIRT},
1533   {"mmsa", no_argument, NULL, OPTION_MSA},
1534   {"mno-msa", no_argument, NULL, OPTION_NO_MSA},
1535   {"mxpa", no_argument, NULL, OPTION_XPA},
1536   {"mno-xpa", no_argument, NULL, OPTION_NO_XPA},
1537
1538   /* Old-style architecture options.  Don't add more of these.  */
1539   {"m4650", no_argument, NULL, OPTION_M4650},
1540   {"no-m4650", no_argument, NULL, OPTION_NO_M4650},
1541   {"m4010", no_argument, NULL, OPTION_M4010},
1542   {"no-m4010", no_argument, NULL, OPTION_NO_M4010},
1543   {"m4100", no_argument, NULL, OPTION_M4100},
1544   {"no-m4100", no_argument, NULL, OPTION_NO_M4100},
1545   {"m3900", no_argument, NULL, OPTION_M3900},
1546   {"no-m3900", no_argument, NULL, OPTION_NO_M3900},
1547
1548   /* Options which enable bug fixes.  */
1549   {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX},
1550   {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1551   {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1552   {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP},
1553   {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP},
1554   {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP},
1555   {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP},
1556   {"mfix-vr4120",    no_argument, NULL, OPTION_FIX_VR4120},
1557   {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120},
1558   {"mfix-vr4130",    no_argument, NULL, OPTION_FIX_VR4130},
1559   {"mno-fix-vr4130", no_argument, NULL, OPTION_NO_FIX_VR4130},
1560   {"mfix-24k",    no_argument, NULL, OPTION_FIX_24K},
1561   {"mno-fix-24k", no_argument, NULL, OPTION_NO_FIX_24K},
1562   {"mfix-rm7000",    no_argument, NULL, OPTION_FIX_RM7000},
1563   {"mno-fix-rm7000", no_argument, NULL, OPTION_NO_FIX_RM7000},
1564   {"mfix-cn63xxp1", no_argument, NULL, OPTION_FIX_CN63XXP1},
1565   {"mno-fix-cn63xxp1", no_argument, NULL, OPTION_NO_FIX_CN63XXP1},
1566
1567   /* Miscellaneous options.  */
1568   {"trap", no_argument, NULL, OPTION_TRAP},
1569   {"no-break", no_argument, NULL, OPTION_TRAP},
1570   {"break", no_argument, NULL, OPTION_BREAK},
1571   {"no-trap", no_argument, NULL, OPTION_BREAK},
1572   {"EB", no_argument, NULL, OPTION_EB},
1573   {"EL", no_argument, NULL, OPTION_EL},
1574   {"mfp32", no_argument, NULL, OPTION_FP32},
1575   {"mgp32", no_argument, NULL, OPTION_GP32},
1576   {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS},
1577   {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
1578   {"mfp64", no_argument, NULL, OPTION_FP64},
1579   {"mfpxx", no_argument, NULL, OPTION_FPXX},
1580   {"mgp64", no_argument, NULL, OPTION_GP64},
1581   {"relax-branch", no_argument, NULL, OPTION_RELAX_BRANCH},
1582   {"no-relax-branch", no_argument, NULL, OPTION_NO_RELAX_BRANCH},
1583   {"minsn32", no_argument, NULL, OPTION_INSN32},
1584   {"mno-insn32", no_argument, NULL, OPTION_NO_INSN32},
1585   {"mshared", no_argument, NULL, OPTION_MSHARED},
1586   {"mno-shared", no_argument, NULL, OPTION_MNO_SHARED},
1587   {"msym32", no_argument, NULL, OPTION_MSYM32},
1588   {"mno-sym32", no_argument, NULL, OPTION_MNO_SYM32},
1589   {"msoft-float", no_argument, NULL, OPTION_SOFT_FLOAT},
1590   {"mhard-float", no_argument, NULL, OPTION_HARD_FLOAT},
1591   {"msingle-float", no_argument, NULL, OPTION_SINGLE_FLOAT},
1592   {"mdouble-float", no_argument, NULL, OPTION_DOUBLE_FLOAT},
1593   {"modd-spreg", no_argument, NULL, OPTION_ODD_SPREG},
1594   {"mno-odd-spreg", no_argument, NULL, OPTION_NO_ODD_SPREG},
1595
1596   /* Strictly speaking this next option is ELF specific,
1597      but we allow it for other ports as well in order to
1598      make testing easier.  */
1599   {"32", no_argument, NULL, OPTION_32},
1600
1601   /* ELF-specific options.  */
1602   {"KPIC", no_argument, NULL, OPTION_CALL_SHARED},
1603   {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
1604   {"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC},
1605   {"non_shared",  no_argument, NULL, OPTION_NON_SHARED},
1606   {"xgot", no_argument, NULL, OPTION_XGOT},
1607   {"mabi", required_argument, NULL, OPTION_MABI},
1608   {"n32", no_argument, NULL, OPTION_N32},
1609   {"64", no_argument, NULL, OPTION_64},
1610   {"mdebug", no_argument, NULL, OPTION_MDEBUG},
1611   {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG},
1612   {"mpdr", no_argument, NULL, OPTION_PDR},
1613   {"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
1614   {"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC},
1615   {"mnan", required_argument, NULL, OPTION_NAN},
1616
1617   {NULL, no_argument, NULL, 0}
1618 };
1619 size_t md_longopts_size = sizeof (md_longopts);
1620 \f
1621 /* Information about either an Application Specific Extension or an
1622    optional architecture feature that, for simplicity, we treat in the
1623    same way as an ASE.  */
1624 struct mips_ase
1625 {
1626   /* The name of the ASE, used in both the command-line and .set options.  */
1627   const char *name;
1628
1629   /* The associated ASE_* flags.  If the ASE is available on both 32-bit
1630      and 64-bit architectures, the flags here refer to the subset that
1631      is available on both.  */
1632   unsigned int flags;
1633
1634   /* The ASE_* flag used for instructions that are available on 64-bit
1635      architectures but that are not included in FLAGS.  */
1636   unsigned int flags64;
1637
1638   /* The command-line options that turn the ASE on and off.  */
1639   int option_on;
1640   int option_off;
1641
1642   /* The minimum required architecture revisions for MIPS32, MIPS64,
1643      microMIPS32 and microMIPS64, or -1 if the extension isn't supported.  */
1644   int mips32_rev;
1645   int mips64_rev;
1646   int micromips32_rev;
1647   int micromips64_rev;
1648
1649   /* The architecture where the ASE was removed or -1 if the extension has not
1650      been removed.  */
1651   int rem_rev;
1652 };
1653
1654 /* A table of all supported ASEs.  */
1655 static const struct mips_ase mips_ases[] = {
1656   { "dsp", ASE_DSP, ASE_DSP64,
1657     OPTION_DSP, OPTION_NO_DSP,
1658     2, 2, 2, 2,
1659     -1 },
1660
1661   { "dspr2", ASE_DSP | ASE_DSPR2, 0,
1662     OPTION_DSPR2, OPTION_NO_DSPR2,
1663     2, 2, 2, 2,
1664     -1 },
1665
1666   { "eva", ASE_EVA, 0,
1667     OPTION_EVA, OPTION_NO_EVA,
1668      2,  2,  2,  2,
1669     -1 },
1670
1671   { "mcu", ASE_MCU, 0,
1672     OPTION_MCU, OPTION_NO_MCU,
1673      2,  2,  2,  2,
1674     -1 },
1675
1676   /* Deprecated in MIPS64r5, but we don't implement that yet.  */
1677   { "mdmx", ASE_MDMX, 0,
1678     OPTION_MDMX, OPTION_NO_MDMX,
1679     -1, 1, -1, -1,
1680      6 },
1681
1682   /* Requires 64-bit FPRs, so the minimum MIPS32 revision is 2.  */
1683   { "mips3d", ASE_MIPS3D, 0,
1684     OPTION_MIPS3D, OPTION_NO_MIPS3D,
1685     2, 1, -1, -1,
1686     6 },
1687
1688   { "mt", ASE_MT, 0,
1689     OPTION_MT, OPTION_NO_MT,
1690      2,  2, -1, -1,
1691     -1 },
1692
1693   { "smartmips", ASE_SMARTMIPS, 0,
1694     OPTION_SMARTMIPS, OPTION_NO_SMARTMIPS,
1695     1, -1, -1, -1,
1696     6 },
1697
1698   { "virt", ASE_VIRT, ASE_VIRT64,
1699     OPTION_VIRT, OPTION_NO_VIRT,
1700      2,  2,  2,  2,
1701     -1 },
1702
1703   { "msa", ASE_MSA, ASE_MSA64,
1704     OPTION_MSA, OPTION_NO_MSA,
1705      2,  2,  2,  2,
1706     -1 },
1707
1708   { "xpa", ASE_XPA, 0,
1709     OPTION_XPA, OPTION_NO_XPA,
1710      2,  2, -1, -1,
1711     -1 },
1712 };
1713
1714 /* The set of ASEs that require -mfp64.  */
1715 #define FP64_ASES (ASE_MIPS3D | ASE_MDMX | ASE_MSA)
1716
1717 /* Groups of ASE_* flags that represent different revisions of an ASE.  */
1718 static const unsigned int mips_ase_groups[] = {
1719   ASE_DSP | ASE_DSPR2
1720 };
1721 \f
1722 /* Pseudo-op table.
1723
1724    The following pseudo-ops from the Kane and Heinrich MIPS book
1725    should be defined here, but are currently unsupported: .alias,
1726    .galive, .gjaldef, .gjrlive, .livereg, .noalias.
1727
1728    The following pseudo-ops from the Kane and Heinrich MIPS book are
1729    specific to the type of debugging information being generated, and
1730    should be defined by the object format: .aent, .begin, .bend,
1731    .bgnb, .end, .endb, .ent, .fmask, .frame, .loc, .mask, .verstamp,
1732    .vreg.
1733
1734    The following pseudo-ops from the Kane and Heinrich MIPS book are
1735    not MIPS CPU specific, but are also not specific to the object file
1736    format.  This file is probably the best place to define them, but
1737    they are not currently supported: .asm0, .endr, .lab, .struct.  */
1738
1739 static const pseudo_typeS mips_pseudo_table[] =
1740 {
1741   /* MIPS specific pseudo-ops.  */
1742   {"option", s_option, 0},
1743   {"set", s_mipsset, 0},
1744   {"rdata", s_change_sec, 'r'},
1745   {"sdata", s_change_sec, 's'},
1746   {"livereg", s_ignore, 0},
1747   {"abicalls", s_abicalls, 0},
1748   {"cpload", s_cpload, 0},
1749   {"cpsetup", s_cpsetup, 0},
1750   {"cplocal", s_cplocal, 0},
1751   {"cprestore", s_cprestore, 0},
1752   {"cpreturn", s_cpreturn, 0},
1753   {"dtprelword", s_dtprelword, 0},
1754   {"dtpreldword", s_dtpreldword, 0},
1755   {"tprelword", s_tprelword, 0},
1756   {"tpreldword", s_tpreldword, 0},
1757   {"gpvalue", s_gpvalue, 0},
1758   {"gpword", s_gpword, 0},
1759   {"gpdword", s_gpdword, 0},
1760   {"ehword", s_ehword, 0},
1761   {"cpadd", s_cpadd, 0},
1762   {"insn", s_insn, 0},
1763   {"nan", s_nan, 0},
1764   {"module", s_module, 0},
1765
1766   /* Relatively generic pseudo-ops that happen to be used on MIPS
1767      chips.  */
1768   {"asciiz", stringer, 8 + 1},
1769   {"bss", s_change_sec, 'b'},
1770   {"err", s_err, 0},
1771   {"half", s_cons, 1},
1772   {"dword", s_cons, 3},
1773   {"weakext", s_mips_weakext, 0},
1774   {"origin", s_org, 0},
1775   {"repeat", s_rept, 0},
1776
1777   /* For MIPS this is non-standard, but we define it for consistency.  */
1778   {"sbss", s_change_sec, 'B'},
1779
1780   /* These pseudo-ops are defined in read.c, but must be overridden
1781      here for one reason or another.  */
1782   {"align", s_align, 0},
1783   {"byte", s_cons, 0},
1784   {"data", s_change_sec, 'd'},
1785   {"double", s_float_cons, 'd'},
1786   {"float", s_float_cons, 'f'},
1787   {"globl", s_mips_globl, 0},
1788   {"global", s_mips_globl, 0},
1789   {"hword", s_cons, 1},
1790   {"int", s_cons, 2},
1791   {"long", s_cons, 2},
1792   {"octa", s_cons, 4},
1793   {"quad", s_cons, 3},
1794   {"section", s_change_section, 0},
1795   {"short", s_cons, 1},
1796   {"single", s_float_cons, 'f'},
1797   {"stabd", s_mips_stab, 'd'},
1798   {"stabn", s_mips_stab, 'n'},
1799   {"stabs", s_mips_stab, 's'},
1800   {"text", s_change_sec, 't'},
1801   {"word", s_cons, 2},
1802
1803   { "extern", ecoff_directive_extern, 0},
1804
1805   { NULL, NULL, 0 },
1806 };
1807
1808 static const pseudo_typeS mips_nonecoff_pseudo_table[] =
1809 {
1810   /* These pseudo-ops should be defined by the object file format.
1811      However, a.out doesn't support them, so we have versions here.  */
1812   {"aent", s_mips_ent, 1},
1813   {"bgnb", s_ignore, 0},
1814   {"end", s_mips_end, 0},
1815   {"endb", s_ignore, 0},
1816   {"ent", s_mips_ent, 0},
1817   {"file", s_mips_file, 0},
1818   {"fmask", s_mips_mask, 'F'},
1819   {"frame", s_mips_frame, 0},
1820   {"loc", s_mips_loc, 0},
1821   {"mask", s_mips_mask, 'R'},
1822   {"verstamp", s_ignore, 0},
1823   { NULL, NULL, 0 },
1824 };
1825
1826 /* Export the ABI address size for use by TC_ADDRESS_BYTES for the
1827    purpose of the `.dc.a' internal pseudo-op.  */
1828
1829 int
1830 mips_address_bytes (void)
1831 {
1832   file_mips_check_options ();
1833   return HAVE_64BIT_ADDRESSES ? 8 : 4;
1834 }
1835
1836 extern void pop_insert (const pseudo_typeS *);
1837
1838 void
1839 mips_pop_insert (void)
1840 {
1841   pop_insert (mips_pseudo_table);
1842   if (! ECOFF_DEBUGGING)
1843     pop_insert (mips_nonecoff_pseudo_table);
1844 }
1845 \f
1846 /* Symbols labelling the current insn.  */
1847
1848 struct insn_label_list
1849 {
1850   struct insn_label_list *next;
1851   symbolS *label;
1852 };
1853
1854 static struct insn_label_list *free_insn_labels;
1855 #define label_list tc_segment_info_data.labels
1856
1857 static void mips_clear_insn_labels (void);
1858 static void mips_mark_labels (void);
1859 static void mips_compressed_mark_labels (void);
1860
1861 static inline void
1862 mips_clear_insn_labels (void)
1863 {
1864   struct insn_label_list **pl;
1865   segment_info_type *si;
1866
1867   if (now_seg)
1868     {
1869       for (pl = &free_insn_labels; *pl != NULL; pl = &(*pl)->next)
1870         ;
1871
1872       si = seg_info (now_seg);
1873       *pl = si->label_list;
1874       si->label_list = NULL;
1875     }
1876 }
1877
1878 /* Mark instruction labels in MIPS16/microMIPS mode.  */
1879
1880 static inline void
1881 mips_mark_labels (void)
1882 {
1883   if (HAVE_CODE_COMPRESSION)
1884     mips_compressed_mark_labels ();
1885 }
1886 \f
1887 static char *expr_end;
1888
1889 /* An expression in a macro instruction.  This is set by mips_ip and
1890    mips16_ip and when populated is always an O_constant.  */
1891
1892 static expressionS imm_expr;
1893
1894 /* The relocatable field in an instruction and the relocs associated
1895    with it.  These variables are used for instructions like LUI and
1896    JAL as well as true offsets.  They are also used for address
1897    operands in macros.  */
1898
1899 static expressionS offset_expr;
1900 static bfd_reloc_code_real_type offset_reloc[3]
1901   = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
1902
1903 /* This is set to the resulting size of the instruction to be produced
1904    by mips16_ip if an explicit extension is used or by mips_ip if an
1905    explicit size is supplied.  */
1906
1907 static unsigned int forced_insn_length;
1908
1909 /* True if we are assembling an instruction.  All dot symbols defined during
1910    this time should be treated as code labels.  */
1911
1912 static bfd_boolean mips_assembling_insn;
1913
1914 /* The pdr segment for per procedure frame/regmask info.  Not used for
1915    ECOFF debugging.  */
1916
1917 static segT pdr_seg;
1918
1919 /* The default target format to use.  */
1920
1921 #if defined (TE_FreeBSD)
1922 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips-freebsd"
1923 #elif defined (TE_TMIPS)
1924 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips"
1925 #else
1926 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX ENDIAN "mips"
1927 #endif
1928
1929 const char *
1930 mips_target_format (void)
1931 {
1932   switch (OUTPUT_FLAVOR)
1933     {
1934     case bfd_target_elf_flavour:
1935 #ifdef TE_VXWORKS
1936       if (!HAVE_64BIT_OBJECTS && !HAVE_NEWABI)
1937         return (target_big_endian
1938                 ? "elf32-bigmips-vxworks"
1939                 : "elf32-littlemips-vxworks");
1940 #endif
1941       return (target_big_endian
1942               ? (HAVE_64BIT_OBJECTS
1943                  ? ELF_TARGET ("elf64-", "big")
1944                  : (HAVE_NEWABI
1945                     ? ELF_TARGET ("elf32-n", "big")
1946                     : ELF_TARGET ("elf32-", "big")))
1947               : (HAVE_64BIT_OBJECTS
1948                  ? ELF_TARGET ("elf64-", "little")
1949                  : (HAVE_NEWABI
1950                     ? ELF_TARGET ("elf32-n", "little")
1951                     : ELF_TARGET ("elf32-", "little"))));
1952     default:
1953       abort ();
1954       return NULL;
1955     }
1956 }
1957
1958 /* Return the ISA revision that is currently in use, or 0 if we are
1959    generating code for MIPS V or below.  */
1960
1961 static int
1962 mips_isa_rev (void)
1963 {
1964   if (mips_opts.isa == ISA_MIPS32R2 || mips_opts.isa == ISA_MIPS64R2)
1965     return 2;
1966
1967   if (mips_opts.isa == ISA_MIPS32R3 || mips_opts.isa == ISA_MIPS64R3)
1968     return 3;
1969
1970   if (mips_opts.isa == ISA_MIPS32R5 || mips_opts.isa == ISA_MIPS64R5)
1971     return 5;
1972
1973   if (mips_opts.isa == ISA_MIPS32R6 || mips_opts.isa == ISA_MIPS64R6)
1974     return 6;
1975
1976   /* microMIPS implies revision 2 or above.  */
1977   if (mips_opts.micromips)
1978     return 2;
1979
1980   if (mips_opts.isa == ISA_MIPS32 || mips_opts.isa == ISA_MIPS64)
1981     return 1;
1982
1983   return 0;
1984 }
1985
1986 /* Return the mask of all ASEs that are revisions of those in FLAGS.  */
1987
1988 static unsigned int
1989 mips_ase_mask (unsigned int flags)
1990 {
1991   unsigned int i;
1992
1993   for (i = 0; i < ARRAY_SIZE (mips_ase_groups); i++)
1994     if (flags & mips_ase_groups[i])
1995       flags |= mips_ase_groups[i];
1996   return flags;
1997 }
1998
1999 /* Check whether the current ISA supports ASE.  Issue a warning if
2000    appropriate.  */
2001
2002 static void
2003 mips_check_isa_supports_ase (const struct mips_ase *ase)
2004 {
2005   const char *base;
2006   int min_rev, size;
2007   static unsigned int warned_isa;
2008   static unsigned int warned_fp32;
2009
2010   if (ISA_HAS_64BIT_REGS (mips_opts.isa))
2011     min_rev = mips_opts.micromips ? ase->micromips64_rev : ase->mips64_rev;
2012   else
2013     min_rev = mips_opts.micromips ? ase->micromips32_rev : ase->mips32_rev;
2014   if ((min_rev < 0 || mips_isa_rev () < min_rev)
2015       && (warned_isa & ase->flags) != ase->flags)
2016     {
2017       warned_isa |= ase->flags;
2018       base = mips_opts.micromips ? "microMIPS" : "MIPS";
2019       size = ISA_HAS_64BIT_REGS (mips_opts.isa) ? 64 : 32;
2020       if (min_rev < 0)
2021         as_warn (_("the %d-bit %s architecture does not support the"
2022                    " `%s' extension"), size, base, ase->name);
2023       else
2024         as_warn (_("the `%s' extension requires %s%d revision %d or greater"),
2025                  ase->name, base, size, min_rev);
2026     }
2027   else if ((ase->rem_rev > 0 && mips_isa_rev () >= ase->rem_rev)
2028            && (warned_isa & ase->flags) != ase->flags)
2029     {
2030       warned_isa |= ase->flags;
2031       base = mips_opts.micromips ? "microMIPS" : "MIPS";
2032       size = ISA_HAS_64BIT_REGS (mips_opts.isa) ? 64 : 32;
2033       as_warn (_("the `%s' extension was removed in %s%d revision %d"),
2034                ase->name, base, size, ase->rem_rev);
2035     }
2036
2037   if ((ase->flags & FP64_ASES)
2038       && mips_opts.fp != 64
2039       && (warned_fp32 & ase->flags) != ase->flags)
2040     {
2041       warned_fp32 |= ase->flags;
2042       as_warn (_("the `%s' extension requires 64-bit FPRs"), ase->name);
2043     }
2044 }
2045
2046 /* Check all enabled ASEs to see whether they are supported by the
2047    chosen architecture.  */
2048
2049 static void
2050 mips_check_isa_supports_ases (void)
2051 {
2052   unsigned int i, mask;
2053
2054   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
2055     {
2056       mask = mips_ase_mask (mips_ases[i].flags);
2057       if ((mips_opts.ase & mask) == mips_ases[i].flags)
2058         mips_check_isa_supports_ase (&mips_ases[i]);
2059     }
2060 }
2061
2062 /* Set the state of ASE to ENABLED_P.  Return the mask of ASE_* flags
2063    that were affected.  */
2064
2065 static unsigned int
2066 mips_set_ase (const struct mips_ase *ase, struct mips_set_options *opts,
2067               bfd_boolean enabled_p)
2068 {
2069   unsigned int mask;
2070
2071   mask = mips_ase_mask (ase->flags);
2072   opts->ase &= ~mask;
2073   if (enabled_p)
2074     opts->ase |= ase->flags;
2075   return mask;
2076 }
2077
2078 /* Return the ASE called NAME, or null if none.  */
2079
2080 static const struct mips_ase *
2081 mips_lookup_ase (const char *name)
2082 {
2083   unsigned int i;
2084
2085   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
2086     if (strcmp (name, mips_ases[i].name) == 0)
2087       return &mips_ases[i];
2088   return NULL;
2089 }
2090
2091 /* Return the length of a microMIPS instruction in bytes.  If bits of
2092    the mask beyond the low 16 are 0, then it is a 16-bit instruction,
2093    otherwise it is a 32-bit instruction.  */
2094
2095 static inline unsigned int
2096 micromips_insn_length (const struct mips_opcode *mo)
2097 {
2098   return (mo->mask >> 16) == 0 ? 2 : 4;
2099 }
2100
2101 /* Return the length of MIPS16 instruction OPCODE.  */
2102
2103 static inline unsigned int
2104 mips16_opcode_length (unsigned long opcode)
2105 {
2106   return (opcode >> 16) == 0 ? 2 : 4;
2107 }
2108
2109 /* Return the length of instruction INSN.  */
2110
2111 static inline unsigned int
2112 insn_length (const struct mips_cl_insn *insn)
2113 {
2114   if (mips_opts.micromips)
2115     return micromips_insn_length (insn->insn_mo);
2116   else if (mips_opts.mips16)
2117     return mips16_opcode_length (insn->insn_opcode);
2118   else
2119     return 4;
2120 }
2121
2122 /* Initialise INSN from opcode entry MO.  Leave its position unspecified.  */
2123
2124 static void
2125 create_insn (struct mips_cl_insn *insn, const struct mips_opcode *mo)
2126 {
2127   size_t i;
2128
2129   insn->insn_mo = mo;
2130   insn->insn_opcode = mo->match;
2131   insn->frag = NULL;
2132   insn->where = 0;
2133   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
2134     insn->fixp[i] = NULL;
2135   insn->fixed_p = (mips_opts.noreorder > 0);
2136   insn->noreorder_p = (mips_opts.noreorder > 0);
2137   insn->mips16_absolute_jump_p = 0;
2138   insn->complete_p = 0;
2139   insn->cleared_p = 0;
2140 }
2141
2142 /* Get a list of all the operands in INSN.  */
2143
2144 static const struct mips_operand_array *
2145 insn_operands (const struct mips_cl_insn *insn)
2146 {
2147   if (insn->insn_mo >= &mips_opcodes[0]
2148       && insn->insn_mo < &mips_opcodes[NUMOPCODES])
2149     return &mips_operands[insn->insn_mo - &mips_opcodes[0]];
2150
2151   if (insn->insn_mo >= &mips16_opcodes[0]
2152       && insn->insn_mo < &mips16_opcodes[bfd_mips16_num_opcodes])
2153     return &mips16_operands[insn->insn_mo - &mips16_opcodes[0]];
2154
2155   if (insn->insn_mo >= &micromips_opcodes[0]
2156       && insn->insn_mo < &micromips_opcodes[bfd_micromips_num_opcodes])
2157     return &micromips_operands[insn->insn_mo - &micromips_opcodes[0]];
2158
2159   abort ();
2160 }
2161
2162 /* Get a description of operand OPNO of INSN.  */
2163
2164 static const struct mips_operand *
2165 insn_opno (const struct mips_cl_insn *insn, unsigned opno)
2166 {
2167   const struct mips_operand_array *operands;
2168
2169   operands = insn_operands (insn);
2170   if (opno >= MAX_OPERANDS || !operands->operand[opno])
2171     abort ();
2172   return operands->operand[opno];
2173 }
2174
2175 /* Install UVAL as the value of OPERAND in INSN.  */
2176
2177 static inline void
2178 insn_insert_operand (struct mips_cl_insn *insn,
2179                      const struct mips_operand *operand, unsigned int uval)
2180 {
2181   insn->insn_opcode = mips_insert_operand (operand, insn->insn_opcode, uval);
2182 }
2183
2184 /* Extract the value of OPERAND from INSN.  */
2185
2186 static inline unsigned
2187 insn_extract_operand (const struct mips_cl_insn *insn,
2188                       const struct mips_operand *operand)
2189 {
2190   return mips_extract_operand (operand, insn->insn_opcode);
2191 }
2192
2193 /* Record the current MIPS16/microMIPS mode in now_seg.  */
2194
2195 static void
2196 mips_record_compressed_mode (void)
2197 {
2198   segment_info_type *si;
2199
2200   si = seg_info (now_seg);
2201   if (si->tc_segment_info_data.mips16 != mips_opts.mips16)
2202     si->tc_segment_info_data.mips16 = mips_opts.mips16;
2203   if (si->tc_segment_info_data.micromips != mips_opts.micromips)
2204     si->tc_segment_info_data.micromips = mips_opts.micromips;
2205 }
2206
2207 /* Read a standard MIPS instruction from BUF.  */
2208
2209 static unsigned long
2210 read_insn (char *buf)
2211 {
2212   if (target_big_endian)
2213     return bfd_getb32 ((bfd_byte *) buf);
2214   else
2215     return bfd_getl32 ((bfd_byte *) buf);
2216 }
2217
2218 /* Write standard MIPS instruction INSN to BUF.  Return a pointer to
2219    the next byte.  */
2220
2221 static char *
2222 write_insn (char *buf, unsigned int insn)
2223 {
2224   md_number_to_chars (buf, insn, 4);
2225   return buf + 4;
2226 }
2227
2228 /* Read a microMIPS or MIPS16 opcode from BUF, given that it
2229    has length LENGTH.  */
2230
2231 static unsigned long
2232 read_compressed_insn (char *buf, unsigned int length)
2233 {
2234   unsigned long insn;
2235   unsigned int i;
2236
2237   insn = 0;
2238   for (i = 0; i < length; i += 2)
2239     {
2240       insn <<= 16;
2241       if (target_big_endian)
2242         insn |= bfd_getb16 ((char *) buf);
2243       else
2244         insn |= bfd_getl16 ((char *) buf);
2245       buf += 2;
2246     }
2247   return insn;
2248 }
2249
2250 /* Write microMIPS or MIPS16 instruction INSN to BUF, given that the
2251    instruction is LENGTH bytes long.  Return a pointer to the next byte.  */
2252
2253 static char *
2254 write_compressed_insn (char *buf, unsigned int insn, unsigned int length)
2255 {
2256   unsigned int i;
2257
2258   for (i = 0; i < length; i += 2)
2259     md_number_to_chars (buf + i, insn >> ((length - i - 2) * 8), 2);
2260   return buf + length;
2261 }
2262
2263 /* Install INSN at the location specified by its "frag" and "where" fields.  */
2264
2265 static void
2266 install_insn (const struct mips_cl_insn *insn)
2267 {
2268   char *f = insn->frag->fr_literal + insn->where;
2269   if (HAVE_CODE_COMPRESSION)
2270     write_compressed_insn (f, insn->insn_opcode, insn_length (insn));
2271   else
2272     write_insn (f, insn->insn_opcode);
2273   mips_record_compressed_mode ();
2274 }
2275
2276 /* Move INSN to offset WHERE in FRAG.  Adjust the fixups accordingly
2277    and install the opcode in the new location.  */
2278
2279 static void
2280 move_insn (struct mips_cl_insn *insn, fragS *frag, long where)
2281 {
2282   size_t i;
2283
2284   insn->frag = frag;
2285   insn->where = where;
2286   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
2287     if (insn->fixp[i] != NULL)
2288       {
2289         insn->fixp[i]->fx_frag = frag;
2290         insn->fixp[i]->fx_where = where;
2291       }
2292   install_insn (insn);
2293 }
2294
2295 /* Add INSN to the end of the output.  */
2296
2297 static void
2298 add_fixed_insn (struct mips_cl_insn *insn)
2299 {
2300   char *f = frag_more (insn_length (insn));
2301   move_insn (insn, frag_now, f - frag_now->fr_literal);
2302 }
2303
2304 /* Start a variant frag and move INSN to the start of the variant part,
2305    marking it as fixed.  The other arguments are as for frag_var.  */
2306
2307 static void
2308 add_relaxed_insn (struct mips_cl_insn *insn, int max_chars, int var,
2309                   relax_substateT subtype, symbolS *symbol, offsetT offset)
2310 {
2311   frag_grow (max_chars);
2312   move_insn (insn, frag_now, frag_more (0) - frag_now->fr_literal);
2313   insn->fixed_p = 1;
2314   frag_var (rs_machine_dependent, max_chars, var,
2315             subtype, symbol, offset, NULL);
2316 }
2317
2318 /* Insert N copies of INSN into the history buffer, starting at
2319    position FIRST.  Neither FIRST nor N need to be clipped.  */
2320
2321 static void
2322 insert_into_history (unsigned int first, unsigned int n,
2323                      const struct mips_cl_insn *insn)
2324 {
2325   if (mips_relax.sequence != 2)
2326     {
2327       unsigned int i;
2328
2329       for (i = ARRAY_SIZE (history); i-- > first;)
2330         if (i >= first + n)
2331           history[i] = history[i - n];
2332         else
2333           history[i] = *insn;
2334     }
2335 }
2336
2337 /* Clear the error in insn_error.  */
2338
2339 static void
2340 clear_insn_error (void)
2341 {
2342   memset (&insn_error, 0, sizeof (insn_error));
2343 }
2344
2345 /* Possibly record error message MSG for the current instruction.
2346    If the error is about a particular argument, ARGNUM is the 1-based
2347    number of that argument, otherwise it is 0.  FORMAT is the format
2348    of MSG.  Return true if MSG was used, false if the current message
2349    was kept.  */
2350
2351 static bfd_boolean
2352 set_insn_error_format (int argnum, enum mips_insn_error_format format,
2353                        const char *msg)
2354 {
2355   if (argnum == 0)
2356     {
2357       /* Give priority to errors against specific arguments, and to
2358          the first whole-instruction message.  */
2359       if (insn_error.msg)
2360         return FALSE;
2361     }
2362   else
2363     {
2364       /* Keep insn_error if it is against a later argument.  */
2365       if (argnum < insn_error.min_argnum)
2366         return FALSE;
2367
2368       /* If both errors are against the same argument but are different,
2369          give up on reporting a specific error for this argument.
2370          See the comment about mips_insn_error for details.  */
2371       if (argnum == insn_error.min_argnum
2372           && insn_error.msg
2373           && strcmp (insn_error.msg, msg) != 0)
2374         {
2375           insn_error.msg = 0;
2376           insn_error.min_argnum += 1;
2377           return FALSE;
2378         }
2379     }
2380   insn_error.min_argnum = argnum;
2381   insn_error.format = format;
2382   insn_error.msg = msg;
2383   return TRUE;
2384 }
2385
2386 /* Record an instruction error with no % format fields.  ARGNUM and MSG are
2387    as for set_insn_error_format.  */
2388
2389 static void
2390 set_insn_error (int argnum, const char *msg)
2391 {
2392   set_insn_error_format (argnum, ERR_FMT_PLAIN, msg);
2393 }
2394
2395 /* Record an instruction error with one %d field I.  ARGNUM and MSG are
2396    as for set_insn_error_format.  */
2397
2398 static void
2399 set_insn_error_i (int argnum, const char *msg, int i)
2400 {
2401   if (set_insn_error_format (argnum, ERR_FMT_I, msg))
2402     insn_error.u.i = i;
2403 }
2404
2405 /* Record an instruction error with two %s fields S1 and S2.  ARGNUM and MSG
2406    are as for set_insn_error_format.  */
2407
2408 static void
2409 set_insn_error_ss (int argnum, const char *msg, const char *s1, const char *s2)
2410 {
2411   if (set_insn_error_format (argnum, ERR_FMT_SS, msg))
2412     {
2413       insn_error.u.ss[0] = s1;
2414       insn_error.u.ss[1] = s2;
2415     }
2416 }
2417
2418 /* Report the error in insn_error, which is against assembly code STR.  */
2419
2420 static void
2421 report_insn_error (const char *str)
2422 {
2423   const char *msg = concat (insn_error.msg, " `%s'", NULL);
2424
2425   switch (insn_error.format)
2426     {
2427     case ERR_FMT_PLAIN:
2428       as_bad (msg, str);
2429       break;
2430
2431     case ERR_FMT_I:
2432       as_bad (msg, insn_error.u.i, str);
2433       break;
2434
2435     case ERR_FMT_SS:
2436       as_bad (msg, insn_error.u.ss[0], insn_error.u.ss[1], str);
2437       break;
2438     }
2439
2440   free ((char *) msg);
2441 }
2442
2443 /* Initialize vr4120_conflicts.  There is a bit of duplication here:
2444    the idea is to make it obvious at a glance that each errata is
2445    included.  */
2446
2447 static void
2448 init_vr4120_conflicts (void)
2449 {
2450 #define CONFLICT(FIRST, SECOND) \
2451     vr4120_conflicts[FIX_VR4120_##FIRST] |= 1 << FIX_VR4120_##SECOND
2452
2453   /* Errata 21 - [D]DIV[U] after [D]MACC */
2454   CONFLICT (MACC, DIV);
2455   CONFLICT (DMACC, DIV);
2456
2457   /* Errata 23 - Continuous DMULT[U]/DMACC instructions.  */
2458   CONFLICT (DMULT, DMULT);
2459   CONFLICT (DMULT, DMACC);
2460   CONFLICT (DMACC, DMULT);
2461   CONFLICT (DMACC, DMACC);
2462
2463   /* Errata 24 - MT{LO,HI} after [D]MACC */
2464   CONFLICT (MACC, MTHILO);
2465   CONFLICT (DMACC, MTHILO);
2466
2467   /* VR4181A errata MD(1): "If a MULT, MULTU, DMULT or DMULTU
2468      instruction is executed immediately after a MACC or DMACC
2469      instruction, the result of [either instruction] is incorrect."  */
2470   CONFLICT (MACC, MULT);
2471   CONFLICT (MACC, DMULT);
2472   CONFLICT (DMACC, MULT);
2473   CONFLICT (DMACC, DMULT);
2474
2475   /* VR4181A errata MD(4): "If a MACC or DMACC instruction is
2476      executed immediately after a DMULT, DMULTU, DIV, DIVU,
2477      DDIV or DDIVU instruction, the result of the MACC or
2478      DMACC instruction is incorrect.".  */
2479   CONFLICT (DMULT, MACC);
2480   CONFLICT (DMULT, DMACC);
2481   CONFLICT (DIV, MACC);
2482   CONFLICT (DIV, DMACC);
2483
2484 #undef CONFLICT
2485 }
2486
2487 struct regname {
2488   const char *name;
2489   unsigned int num;
2490 };
2491
2492 #define RNUM_MASK       0x00000ff
2493 #define RTYPE_MASK      0x0ffff00
2494 #define RTYPE_NUM       0x0000100
2495 #define RTYPE_FPU       0x0000200
2496 #define RTYPE_FCC       0x0000400
2497 #define RTYPE_VEC       0x0000800
2498 #define RTYPE_GP        0x0001000
2499 #define RTYPE_CP0       0x0002000
2500 #define RTYPE_PC        0x0004000
2501 #define RTYPE_ACC       0x0008000
2502 #define RTYPE_CCC       0x0010000
2503 #define RTYPE_VI        0x0020000
2504 #define RTYPE_VF        0x0040000
2505 #define RTYPE_R5900_I   0x0080000
2506 #define RTYPE_R5900_Q   0x0100000
2507 #define RTYPE_R5900_R   0x0200000
2508 #define RTYPE_R5900_ACC 0x0400000
2509 #define RTYPE_MSA       0x0800000
2510 #define RWARN           0x8000000
2511
2512 #define GENERIC_REGISTER_NUMBERS \
2513     {"$0",      RTYPE_NUM | 0},  \
2514     {"$1",      RTYPE_NUM | 1},  \
2515     {"$2",      RTYPE_NUM | 2},  \
2516     {"$3",      RTYPE_NUM | 3},  \
2517     {"$4",      RTYPE_NUM | 4},  \
2518     {"$5",      RTYPE_NUM | 5},  \
2519     {"$6",      RTYPE_NUM | 6},  \
2520     {"$7",      RTYPE_NUM | 7},  \
2521     {"$8",      RTYPE_NUM | 8},  \
2522     {"$9",      RTYPE_NUM | 9},  \
2523     {"$10",     RTYPE_NUM | 10}, \
2524     {"$11",     RTYPE_NUM | 11}, \
2525     {"$12",     RTYPE_NUM | 12}, \
2526     {"$13",     RTYPE_NUM | 13}, \
2527     {"$14",     RTYPE_NUM | 14}, \
2528     {"$15",     RTYPE_NUM | 15}, \
2529     {"$16",     RTYPE_NUM | 16}, \
2530     {"$17",     RTYPE_NUM | 17}, \
2531     {"$18",     RTYPE_NUM | 18}, \
2532     {"$19",     RTYPE_NUM | 19}, \
2533     {"$20",     RTYPE_NUM | 20}, \
2534     {"$21",     RTYPE_NUM | 21}, \
2535     {"$22",     RTYPE_NUM | 22}, \
2536     {"$23",     RTYPE_NUM | 23}, \
2537     {"$24",     RTYPE_NUM | 24}, \
2538     {"$25",     RTYPE_NUM | 25}, \
2539     {"$26",     RTYPE_NUM | 26}, \
2540     {"$27",     RTYPE_NUM | 27}, \
2541     {"$28",     RTYPE_NUM | 28}, \
2542     {"$29",     RTYPE_NUM | 29}, \
2543     {"$30",     RTYPE_NUM | 30}, \
2544     {"$31",     RTYPE_NUM | 31}
2545
2546 #define FPU_REGISTER_NAMES       \
2547     {"$f0",     RTYPE_FPU | 0},  \
2548     {"$f1",     RTYPE_FPU | 1},  \
2549     {"$f2",     RTYPE_FPU | 2},  \
2550     {"$f3",     RTYPE_FPU | 3},  \
2551     {"$f4",     RTYPE_FPU | 4},  \
2552     {"$f5",     RTYPE_FPU | 5},  \
2553     {"$f6",     RTYPE_FPU | 6},  \
2554     {"$f7",     RTYPE_FPU | 7},  \
2555     {"$f8",     RTYPE_FPU | 8},  \
2556     {"$f9",     RTYPE_FPU | 9},  \
2557     {"$f10",    RTYPE_FPU | 10}, \
2558     {"$f11",    RTYPE_FPU | 11}, \
2559     {"$f12",    RTYPE_FPU | 12}, \
2560     {"$f13",    RTYPE_FPU | 13}, \
2561     {"$f14",    RTYPE_FPU | 14}, \
2562     {"$f15",    RTYPE_FPU | 15}, \
2563     {"$f16",    RTYPE_FPU | 16}, \
2564     {"$f17",    RTYPE_FPU | 17}, \
2565     {"$f18",    RTYPE_FPU | 18}, \
2566     {"$f19",    RTYPE_FPU | 19}, \
2567     {"$f20",    RTYPE_FPU | 20}, \
2568     {"$f21",    RTYPE_FPU | 21}, \
2569     {"$f22",    RTYPE_FPU | 22}, \
2570     {"$f23",    RTYPE_FPU | 23}, \
2571     {"$f24",    RTYPE_FPU | 24}, \
2572     {"$f25",    RTYPE_FPU | 25}, \
2573     {"$f26",    RTYPE_FPU | 26}, \
2574     {"$f27",    RTYPE_FPU | 27}, \
2575     {"$f28",    RTYPE_FPU | 28}, \
2576     {"$f29",    RTYPE_FPU | 29}, \
2577     {"$f30",    RTYPE_FPU | 30}, \
2578     {"$f31",    RTYPE_FPU | 31}
2579
2580 #define FPU_CONDITION_CODE_NAMES \
2581     {"$fcc0",   RTYPE_FCC | 0},  \
2582     {"$fcc1",   RTYPE_FCC | 1},  \
2583     {"$fcc2",   RTYPE_FCC | 2},  \
2584     {"$fcc3",   RTYPE_FCC | 3},  \
2585     {"$fcc4",   RTYPE_FCC | 4},  \
2586     {"$fcc5",   RTYPE_FCC | 5},  \
2587     {"$fcc6",   RTYPE_FCC | 6},  \
2588     {"$fcc7",   RTYPE_FCC | 7}
2589
2590 #define COPROC_CONDITION_CODE_NAMES         \
2591     {"$cc0",    RTYPE_FCC | RTYPE_CCC | 0}, \
2592     {"$cc1",    RTYPE_FCC | RTYPE_CCC | 1}, \
2593     {"$cc2",    RTYPE_FCC | RTYPE_CCC | 2}, \
2594     {"$cc3",    RTYPE_FCC | RTYPE_CCC | 3}, \
2595     {"$cc4",    RTYPE_FCC | RTYPE_CCC | 4}, \
2596     {"$cc5",    RTYPE_FCC | RTYPE_CCC | 5}, \
2597     {"$cc6",    RTYPE_FCC | RTYPE_CCC | 6}, \
2598     {"$cc7",    RTYPE_FCC | RTYPE_CCC | 7}
2599
2600 #define N32N64_SYMBOLIC_REGISTER_NAMES \
2601     {"$a4",     RTYPE_GP | 8},  \
2602     {"$a5",     RTYPE_GP | 9},  \
2603     {"$a6",     RTYPE_GP | 10}, \
2604     {"$a7",     RTYPE_GP | 11}, \
2605     {"$ta0",    RTYPE_GP | 8},  /* alias for $a4 */ \
2606     {"$ta1",    RTYPE_GP | 9},  /* alias for $a5 */ \
2607     {"$ta2",    RTYPE_GP | 10}, /* alias for $a6 */ \
2608     {"$ta3",    RTYPE_GP | 11}, /* alias for $a7 */ \
2609     {"$t0",     RTYPE_GP | 12}, \
2610     {"$t1",     RTYPE_GP | 13}, \
2611     {"$t2",     RTYPE_GP | 14}, \
2612     {"$t3",     RTYPE_GP | 15}
2613
2614 #define O32_SYMBOLIC_REGISTER_NAMES \
2615     {"$t0",     RTYPE_GP | 8},  \
2616     {"$t1",     RTYPE_GP | 9},  \
2617     {"$t2",     RTYPE_GP | 10}, \
2618     {"$t3",     RTYPE_GP | 11}, \
2619     {"$t4",     RTYPE_GP | 12}, \
2620     {"$t5",     RTYPE_GP | 13}, \
2621     {"$t6",     RTYPE_GP | 14}, \
2622     {"$t7",     RTYPE_GP | 15}, \
2623     {"$ta0",    RTYPE_GP | 12}, /* alias for $t4 */ \
2624     {"$ta1",    RTYPE_GP | 13}, /* alias for $t5 */ \
2625     {"$ta2",    RTYPE_GP | 14}, /* alias for $t6 */ \
2626     {"$ta3",    RTYPE_GP | 15}  /* alias for $t7 */
2627
2628 /* Remaining symbolic register names */
2629 #define SYMBOLIC_REGISTER_NAMES \
2630     {"$zero",   RTYPE_GP | 0},  \
2631     {"$at",     RTYPE_GP | 1},  \
2632     {"$AT",     RTYPE_GP | 1},  \
2633     {"$v0",     RTYPE_GP | 2},  \
2634     {"$v1",     RTYPE_GP | 3},  \
2635     {"$a0",     RTYPE_GP | 4},  \
2636     {"$a1",     RTYPE_GP | 5},  \
2637     {"$a2",     RTYPE_GP | 6},  \
2638     {"$a3",     RTYPE_GP | 7},  \
2639     {"$s0",     RTYPE_GP | 16}, \
2640     {"$s1",     RTYPE_GP | 17}, \
2641     {"$s2",     RTYPE_GP | 18}, \
2642     {"$s3",     RTYPE_GP | 19}, \
2643     {"$s4",     RTYPE_GP | 20}, \
2644     {"$s5",     RTYPE_GP | 21}, \
2645     {"$s6",     RTYPE_GP | 22}, \
2646     {"$s7",     RTYPE_GP | 23}, \
2647     {"$t8",     RTYPE_GP | 24}, \
2648     {"$t9",     RTYPE_GP | 25}, \
2649     {"$k0",     RTYPE_GP | 26}, \
2650     {"$kt0",    RTYPE_GP | 26}, \
2651     {"$k1",     RTYPE_GP | 27}, \
2652     {"$kt1",    RTYPE_GP | 27}, \
2653     {"$gp",     RTYPE_GP | 28}, \
2654     {"$sp",     RTYPE_GP | 29}, \
2655     {"$s8",     RTYPE_GP | 30}, \
2656     {"$fp",     RTYPE_GP | 30}, \
2657     {"$ra",     RTYPE_GP | 31}
2658
2659 #define MIPS16_SPECIAL_REGISTER_NAMES \
2660     {"$pc",     RTYPE_PC | 0}
2661
2662 #define MDMX_VECTOR_REGISTER_NAMES \
2663     /* {"$v0",  RTYPE_VEC | 0},  clash with REG 2 above */ \
2664     /* {"$v1",  RTYPE_VEC | 1},  clash with REG 3 above */ \
2665     {"$v2",     RTYPE_VEC | 2},  \
2666     {"$v3",     RTYPE_VEC | 3},  \
2667     {"$v4",     RTYPE_VEC | 4},  \
2668     {"$v5",     RTYPE_VEC | 5},  \
2669     {"$v6",     RTYPE_VEC | 6},  \
2670     {"$v7",     RTYPE_VEC | 7},  \
2671     {"$v8",     RTYPE_VEC | 8},  \
2672     {"$v9",     RTYPE_VEC | 9},  \
2673     {"$v10",    RTYPE_VEC | 10}, \
2674     {"$v11",    RTYPE_VEC | 11}, \
2675     {"$v12",    RTYPE_VEC | 12}, \
2676     {"$v13",    RTYPE_VEC | 13}, \
2677     {"$v14",    RTYPE_VEC | 14}, \
2678     {"$v15",    RTYPE_VEC | 15}, \
2679     {"$v16",    RTYPE_VEC | 16}, \
2680     {"$v17",    RTYPE_VEC | 17}, \
2681     {"$v18",    RTYPE_VEC | 18}, \
2682     {"$v19",    RTYPE_VEC | 19}, \
2683     {"$v20",    RTYPE_VEC | 20}, \
2684     {"$v21",    RTYPE_VEC | 21}, \
2685     {"$v22",    RTYPE_VEC | 22}, \
2686     {"$v23",    RTYPE_VEC | 23}, \
2687     {"$v24",    RTYPE_VEC | 24}, \
2688     {"$v25",    RTYPE_VEC | 25}, \
2689     {"$v26",    RTYPE_VEC | 26}, \
2690     {"$v27",    RTYPE_VEC | 27}, \
2691     {"$v28",    RTYPE_VEC | 28}, \
2692     {"$v29",    RTYPE_VEC | 29}, \
2693     {"$v30",    RTYPE_VEC | 30}, \
2694     {"$v31",    RTYPE_VEC | 31}
2695
2696 #define R5900_I_NAMES \
2697     {"$I",      RTYPE_R5900_I | 0}
2698
2699 #define R5900_Q_NAMES \
2700     {"$Q",      RTYPE_R5900_Q | 0}
2701
2702 #define R5900_R_NAMES \
2703     {"$R",      RTYPE_R5900_R | 0}
2704
2705 #define R5900_ACC_NAMES \
2706     {"$ACC",    RTYPE_R5900_ACC | 0 }
2707
2708 #define MIPS_DSP_ACCUMULATOR_NAMES \
2709     {"$ac0",    RTYPE_ACC | 0}, \
2710     {"$ac1",    RTYPE_ACC | 1}, \
2711     {"$ac2",    RTYPE_ACC | 2}, \
2712     {"$ac3",    RTYPE_ACC | 3}
2713
2714 static const struct regname reg_names[] = {
2715   GENERIC_REGISTER_NUMBERS,
2716   FPU_REGISTER_NAMES,
2717   FPU_CONDITION_CODE_NAMES,
2718   COPROC_CONDITION_CODE_NAMES,
2719
2720   /* The $txx registers depends on the abi,
2721      these will be added later into the symbol table from
2722      one of the tables below once mips_abi is set after
2723      parsing of arguments from the command line. */
2724   SYMBOLIC_REGISTER_NAMES,
2725
2726   MIPS16_SPECIAL_REGISTER_NAMES,
2727   MDMX_VECTOR_REGISTER_NAMES,
2728   R5900_I_NAMES,
2729   R5900_Q_NAMES,
2730   R5900_R_NAMES,
2731   R5900_ACC_NAMES,
2732   MIPS_DSP_ACCUMULATOR_NAMES,
2733   {0, 0}
2734 };
2735
2736 static const struct regname reg_names_o32[] = {
2737   O32_SYMBOLIC_REGISTER_NAMES,
2738   {0, 0}
2739 };
2740
2741 static const struct regname reg_names_n32n64[] = {
2742   N32N64_SYMBOLIC_REGISTER_NAMES,
2743   {0, 0}
2744 };
2745
2746 /* Register symbols $v0 and $v1 map to GPRs 2 and 3, but they can also be
2747    interpreted as vector registers 0 and 1.  If SYMVAL is the value of one
2748    of these register symbols, return the associated vector register,
2749    otherwise return SYMVAL itself.  */
2750
2751 static unsigned int
2752 mips_prefer_vec_regno (unsigned int symval)
2753 {
2754   if ((symval & -2) == (RTYPE_GP | 2))
2755     return RTYPE_VEC | (symval & 1);
2756   return symval;
2757 }
2758
2759 /* Return true if string [S, E) is a valid register name, storing its
2760    symbol value in *SYMVAL_PTR if so.  */
2761
2762 static bfd_boolean
2763 mips_parse_register_1 (char *s, char *e, unsigned int *symval_ptr)
2764 {
2765   char save_c;
2766   symbolS *symbol;
2767
2768   /* Terminate name.  */
2769   save_c = *e;
2770   *e = '\0';
2771
2772   /* Look up the name.  */
2773   symbol = symbol_find (s);
2774   *e = save_c;
2775
2776   if (!symbol || S_GET_SEGMENT (symbol) != reg_section)
2777     return FALSE;
2778
2779   *symval_ptr = S_GET_VALUE (symbol);
2780   return TRUE;
2781 }
2782
2783 /* Return true if the string at *SPTR is a valid register name.  Allow it
2784    to have a VU0-style channel suffix of the form x?y?z?w? if CHANNELS_PTR
2785    is nonnull.
2786
2787    When returning true, move *SPTR past the register, store the
2788    register's symbol value in *SYMVAL_PTR and the channel mask in
2789    *CHANNELS_PTR (if nonnull).  The symbol value includes the register
2790    number (RNUM_MASK) and register type (RTYPE_MASK).  The channel mask
2791    is a 4-bit value of the form XYZW and is 0 if no suffix was given.  */
2792
2793 static bfd_boolean
2794 mips_parse_register (char **sptr, unsigned int *symval_ptr,
2795                      unsigned int *channels_ptr)
2796 {
2797   char *s, *e, *m;
2798   const char *q;
2799   unsigned int channels, symval, bit;
2800
2801   /* Find end of name.  */
2802   s = e = *sptr;
2803   if (is_name_beginner (*e))
2804     ++e;
2805   while (is_part_of_name (*e))
2806     ++e;
2807
2808   channels = 0;
2809   if (!mips_parse_register_1 (s, e, &symval))
2810     {
2811       if (!channels_ptr)
2812         return FALSE;
2813
2814       /* Eat characters from the end of the string that are valid
2815          channel suffixes.  The preceding register must be $ACC or
2816          end with a digit, so there is no ambiguity.  */
2817       bit = 1;
2818       m = e;
2819       for (q = "wzyx"; *q; q++, bit <<= 1)
2820         if (m > s && m[-1] == *q)
2821           {
2822             --m;
2823             channels |= bit;
2824           }
2825
2826       if (channels == 0
2827           || !mips_parse_register_1 (s, m, &symval)
2828           || (symval & (RTYPE_VI | RTYPE_VF | RTYPE_R5900_ACC)) == 0)
2829         return FALSE;
2830     }
2831
2832   *sptr = e;
2833   *symval_ptr = symval;
2834   if (channels_ptr)
2835     *channels_ptr = channels;
2836   return TRUE;
2837 }
2838
2839 /* Check if SPTR points at a valid register specifier according to TYPES.
2840    If so, then return 1, advance S to consume the specifier and store
2841    the register's number in REGNOP, otherwise return 0.  */
2842
2843 static int
2844 reg_lookup (char **s, unsigned int types, unsigned int *regnop)
2845 {
2846   unsigned int regno;
2847
2848   if (mips_parse_register (s, &regno, NULL))
2849     {
2850       if (types & RTYPE_VEC)
2851         regno = mips_prefer_vec_regno (regno);
2852       if (regno & types)
2853         regno &= RNUM_MASK;
2854       else
2855         regno = ~0;
2856     }
2857   else
2858     {
2859       if (types & RWARN)
2860         as_warn (_("unrecognized register name `%s'"), *s);
2861       regno = ~0;
2862     }
2863   if (regnop)
2864     *regnop = regno;
2865   return regno <= RNUM_MASK;
2866 }
2867
2868 /* Parse a VU0 "x?y?z?w?" channel mask at S and store the associated
2869    mask in *CHANNELS.  Return a pointer to the first unconsumed character.  */
2870
2871 static char *
2872 mips_parse_vu0_channels (char *s, unsigned int *channels)
2873 {
2874   unsigned int i;
2875
2876   *channels = 0;
2877   for (i = 0; i < 4; i++)
2878     if (*s == "xyzw"[i])
2879       {
2880         *channels |= 1 << (3 - i);
2881         ++s;
2882       }
2883   return s;
2884 }
2885
2886 /* Token types for parsed operand lists.  */
2887 enum mips_operand_token_type {
2888   /* A plain register, e.g. $f2.  */
2889   OT_REG,
2890
2891   /* A 4-bit XYZW channel mask.  */
2892   OT_CHANNELS,
2893
2894   /* A constant vector index, e.g. [1].  */
2895   OT_INTEGER_INDEX,
2896
2897   /* A register vector index, e.g. [$2].  */
2898   OT_REG_INDEX,
2899
2900   /* A continuous range of registers, e.g. $s0-$s4.  */
2901   OT_REG_RANGE,
2902
2903   /* A (possibly relocated) expression.  */
2904   OT_INTEGER,
2905
2906   /* A floating-point value.  */
2907   OT_FLOAT,
2908
2909   /* A single character.  This can be '(', ')' or ',', but '(' only appears
2910      before OT_REGs.  */
2911   OT_CHAR,
2912
2913   /* A doubled character, either "--" or "++".  */
2914   OT_DOUBLE_CHAR,
2915
2916   /* The end of the operand list.  */
2917   OT_END
2918 };
2919
2920 /* A parsed operand token.  */
2921 struct mips_operand_token
2922 {
2923   /* The type of token.  */
2924   enum mips_operand_token_type type;
2925   union
2926   {
2927     /* The register symbol value for an OT_REG or OT_REG_INDEX.  */
2928     unsigned int regno;
2929
2930     /* The 4-bit channel mask for an OT_CHANNEL_SUFFIX.  */
2931     unsigned int channels;
2932
2933     /* The integer value of an OT_INTEGER_INDEX.  */
2934     addressT index;
2935
2936     /* The two register symbol values involved in an OT_REG_RANGE.  */
2937     struct {
2938       unsigned int regno1;
2939       unsigned int regno2;
2940     } reg_range;
2941
2942     /* The value of an OT_INTEGER.  The value is represented as an
2943        expression and the relocation operators that were applied to
2944        that expression.  The reloc entries are BFD_RELOC_UNUSED if no
2945        relocation operators were used.  */
2946     struct {
2947       expressionS value;
2948       bfd_reloc_code_real_type relocs[3];
2949     } integer;
2950
2951     /* The binary data for an OT_FLOAT constant, and the number of bytes
2952        in the constant.  */
2953     struct {
2954       unsigned char data[8];
2955       int length;
2956     } flt;
2957
2958     /* The character represented by an OT_CHAR or OT_DOUBLE_CHAR.  */
2959     char ch;
2960   } u;
2961 };
2962
2963 /* An obstack used to construct lists of mips_operand_tokens.  */
2964 static struct obstack mips_operand_tokens;
2965
2966 /* Give TOKEN type TYPE and add it to mips_operand_tokens.  */
2967
2968 static void
2969 mips_add_token (struct mips_operand_token *token,
2970                 enum mips_operand_token_type type)
2971 {
2972   token->type = type;
2973   obstack_grow (&mips_operand_tokens, token, sizeof (*token));
2974 }
2975
2976 /* Check whether S is '(' followed by a register name.  Add OT_CHAR
2977    and OT_REG tokens for them if so, and return a pointer to the first
2978    unconsumed character.  Return null otherwise.  */
2979
2980 static char *
2981 mips_parse_base_start (char *s)
2982 {
2983   struct mips_operand_token token;
2984   unsigned int regno, channels;
2985   bfd_boolean decrement_p;
2986
2987   if (*s != '(')
2988     return 0;
2989
2990   ++s;
2991   SKIP_SPACE_TABS (s);
2992
2993   /* Only match "--" as part of a base expression.  In other contexts "--X"
2994      is a double negative.  */
2995   decrement_p = (s[0] == '-' && s[1] == '-');
2996   if (decrement_p)
2997     {
2998       s += 2;
2999       SKIP_SPACE_TABS (s);
3000     }
3001
3002   /* Allow a channel specifier because that leads to better error messages
3003      than treating something like "$vf0x++" as an expression.  */
3004   if (!mips_parse_register (&s, &regno, &channels))
3005     return 0;
3006
3007   token.u.ch = '(';
3008   mips_add_token (&token, OT_CHAR);
3009
3010   if (decrement_p)
3011     {
3012       token.u.ch = '-';
3013       mips_add_token (&token, OT_DOUBLE_CHAR);
3014     }
3015
3016   token.u.regno = regno;
3017   mips_add_token (&token, OT_REG);
3018
3019   if (channels)
3020     {
3021       token.u.channels = channels;
3022       mips_add_token (&token, OT_CHANNELS);
3023     }
3024
3025   /* For consistency, only match "++" as part of base expressions too.  */
3026   SKIP_SPACE_TABS (s);
3027   if (s[0] == '+' && s[1] == '+')
3028     {
3029       s += 2;
3030       token.u.ch = '+';
3031       mips_add_token (&token, OT_DOUBLE_CHAR);
3032     }
3033
3034   return s;
3035 }
3036
3037 /* Parse one or more tokens from S.  Return a pointer to the first
3038    unconsumed character on success.  Return null if an error was found
3039    and store the error text in insn_error.  FLOAT_FORMAT is as for
3040    mips_parse_arguments.  */
3041
3042 static char *
3043 mips_parse_argument_token (char *s, char float_format)
3044 {
3045   char *end, *save_in;
3046   const char *err;
3047   unsigned int regno1, regno2, channels;
3048   struct mips_operand_token token;
3049
3050   /* First look for "($reg", since we want to treat that as an
3051      OT_CHAR and OT_REG rather than an expression.  */
3052   end = mips_parse_base_start (s);
3053   if (end)
3054     return end;
3055
3056   /* Handle other characters that end up as OT_CHARs.  */
3057   if (*s == ')' || *s == ',')
3058     {
3059       token.u.ch = *s;
3060       mips_add_token (&token, OT_CHAR);
3061       ++s;
3062       return s;
3063     }
3064
3065   /* Handle tokens that start with a register.  */
3066   if (mips_parse_register (&s, &regno1, &channels))
3067     {
3068       if (channels)
3069         {
3070           /* A register and a VU0 channel suffix.  */
3071           token.u.regno = regno1;
3072           mips_add_token (&token, OT_REG);
3073
3074           token.u.channels = channels;
3075           mips_add_token (&token, OT_CHANNELS);
3076           return s;
3077         }
3078
3079       SKIP_SPACE_TABS (s);
3080       if (*s == '-')
3081         {
3082           /* A register range.  */
3083           ++s;
3084           SKIP_SPACE_TABS (s);
3085           if (!mips_parse_register (&s, &regno2, NULL))
3086             {
3087               set_insn_error (0, _("invalid register range"));
3088               return 0;
3089             }
3090
3091           token.u.reg_range.regno1 = regno1;
3092           token.u.reg_range.regno2 = regno2;
3093           mips_add_token (&token, OT_REG_RANGE);
3094           return s;
3095         }
3096
3097       /* Add the register itself.  */
3098       token.u.regno = regno1;
3099       mips_add_token (&token, OT_REG);
3100
3101       /* Check for a vector index.  */
3102       if (*s == '[')
3103         {
3104           ++s;
3105           SKIP_SPACE_TABS (s);
3106           if (mips_parse_register (&s, &token.u.regno, NULL))
3107             mips_add_token (&token, OT_REG_INDEX);
3108           else
3109             {
3110               expressionS element;
3111
3112               my_getExpression (&element, s);
3113               if (element.X_op != O_constant)
3114                 {
3115                   set_insn_error (0, _("vector element must be constant"));
3116                   return 0;
3117                 }
3118               s = expr_end;
3119               token.u.index = element.X_add_number;
3120               mips_add_token (&token, OT_INTEGER_INDEX);
3121             }
3122           SKIP_SPACE_TABS (s);
3123           if (*s != ']')
3124             {
3125               set_insn_error (0, _("missing `]'"));
3126               return 0;
3127             }
3128           ++s;
3129         }
3130       return s;
3131     }
3132
3133   if (float_format)
3134     {
3135       /* First try to treat expressions as floats.  */
3136       save_in = input_line_pointer;
3137       input_line_pointer = s;
3138       err = md_atof (float_format, (char *) token.u.flt.data,
3139                      &token.u.flt.length);
3140       end = input_line_pointer;
3141       input_line_pointer = save_in;
3142       if (err && *err)
3143         {
3144           set_insn_error (0, err);
3145           return 0;
3146         }
3147       if (s != end)
3148         {
3149           mips_add_token (&token, OT_FLOAT);
3150           return end;
3151         }
3152     }
3153
3154   /* Treat everything else as an integer expression.  */
3155   token.u.integer.relocs[0] = BFD_RELOC_UNUSED;
3156   token.u.integer.relocs[1] = BFD_RELOC_UNUSED;
3157   token.u.integer.relocs[2] = BFD_RELOC_UNUSED;
3158   my_getSmallExpression (&token.u.integer.value, token.u.integer.relocs, s);
3159   s = expr_end;
3160   mips_add_token (&token, OT_INTEGER);
3161   return s;
3162 }
3163
3164 /* S points to the operand list for an instruction.  FLOAT_FORMAT is 'f'
3165    if expressions should be treated as 32-bit floating-point constants,
3166    'd' if they should be treated as 64-bit floating-point constants,
3167    or 0 if they should be treated as integer expressions (the usual case).
3168
3169    Return a list of tokens on success, otherwise return 0.  The caller
3170    must obstack_free the list after use.  */
3171
3172 static struct mips_operand_token *
3173 mips_parse_arguments (char *s, char float_format)
3174 {
3175   struct mips_operand_token token;
3176
3177   SKIP_SPACE_TABS (s);
3178   while (*s)
3179     {
3180       s = mips_parse_argument_token (s, float_format);
3181       if (!s)
3182         {
3183           obstack_free (&mips_operand_tokens,
3184                         obstack_finish (&mips_operand_tokens));
3185           return 0;
3186         }
3187       SKIP_SPACE_TABS (s);
3188     }
3189   mips_add_token (&token, OT_END);
3190   return (struct mips_operand_token *) obstack_finish (&mips_operand_tokens);
3191 }
3192
3193 /* Return TRUE if opcode MO is valid on the currently selected ISA, ASE
3194    and architecture.  Use is_opcode_valid_16 for MIPS16 opcodes.  */
3195
3196 static bfd_boolean
3197 is_opcode_valid (const struct mips_opcode *mo)
3198 {
3199   int isa = mips_opts.isa;
3200   int ase = mips_opts.ase;
3201   int fp_s, fp_d;
3202   unsigned int i;
3203
3204   if (ISA_HAS_64BIT_REGS (mips_opts.isa))
3205     for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
3206       if ((ase & mips_ases[i].flags) == mips_ases[i].flags)
3207         ase |= mips_ases[i].flags64;
3208
3209   if (!opcode_is_member (mo, isa, ase, mips_opts.arch))
3210     return FALSE;
3211
3212   /* Check whether the instruction or macro requires single-precision or
3213      double-precision floating-point support.  Note that this information is
3214      stored differently in the opcode table for insns and macros.  */
3215   if (mo->pinfo == INSN_MACRO)
3216     {
3217       fp_s = mo->pinfo2 & INSN2_M_FP_S;
3218       fp_d = mo->pinfo2 & INSN2_M_FP_D;
3219     }
3220   else
3221     {
3222       fp_s = mo->pinfo & FP_S;
3223       fp_d = mo->pinfo & FP_D;
3224     }
3225
3226   if (fp_d && (mips_opts.soft_float || mips_opts.single_float))
3227     return FALSE;
3228
3229   if (fp_s && mips_opts.soft_float)
3230     return FALSE;
3231
3232   return TRUE;
3233 }
3234
3235 /* Return TRUE if the MIPS16 opcode MO is valid on the currently
3236    selected ISA and architecture.  */
3237
3238 static bfd_boolean
3239 is_opcode_valid_16 (const struct mips_opcode *mo)
3240 {
3241   return opcode_is_member (mo, mips_opts.isa, 0, mips_opts.arch);
3242 }
3243
3244 /* Return TRUE if the size of the microMIPS opcode MO matches one
3245    explicitly requested.  Always TRUE in the standard MIPS mode.  */
3246
3247 static bfd_boolean
3248 is_size_valid (const struct mips_opcode *mo)
3249 {
3250   if (!mips_opts.micromips)
3251     return TRUE;
3252
3253   if (mips_opts.insn32)
3254     {
3255       if (mo->pinfo != INSN_MACRO && micromips_insn_length (mo) != 4)
3256         return FALSE;
3257       if ((mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0)
3258         return FALSE;
3259     }
3260   if (!forced_insn_length)
3261     return TRUE;
3262   if (mo->pinfo == INSN_MACRO)
3263     return FALSE;
3264   return forced_insn_length == micromips_insn_length (mo);
3265 }
3266
3267 /* Return TRUE if the microMIPS opcode MO is valid for the delay slot
3268    of the preceding instruction.  Always TRUE in the standard MIPS mode.
3269
3270    We don't accept macros in 16-bit delay slots to avoid a case where
3271    a macro expansion fails because it relies on a preceding 32-bit real
3272    instruction to have matched and does not handle the operands correctly.
3273    The only macros that may expand to 16-bit instructions are JAL that
3274    cannot be placed in a delay slot anyway, and corner cases of BALIGN
3275    and BGT (that likewise cannot be placed in a delay slot) that decay to
3276    a NOP.  In all these cases the macros precede any corresponding real
3277    instruction definitions in the opcode table, so they will match in the
3278    second pass where the size of the delay slot is ignored and therefore
3279    produce correct code.  */
3280
3281 static bfd_boolean
3282 is_delay_slot_valid (const struct mips_opcode *mo)
3283 {
3284   if (!mips_opts.micromips)
3285     return TRUE;
3286
3287   if (mo->pinfo == INSN_MACRO)
3288     return (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) == 0;
3289   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
3290       && micromips_insn_length (mo) != 4)
3291     return FALSE;
3292   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
3293       && micromips_insn_length (mo) != 2)
3294     return FALSE;
3295
3296   return TRUE;
3297 }
3298
3299 /* For consistency checking, verify that all bits of OPCODE are specified
3300    either by the match/mask part of the instruction definition, or by the
3301    operand list.  Also build up a list of operands in OPERANDS.
3302
3303    INSN_BITS says which bits of the instruction are significant.
3304    If OPCODE is a standard or microMIPS instruction, DECODE_OPERAND
3305    provides the mips_operand description of each operand.  DECODE_OPERAND
3306    is null for MIPS16 instructions.  */
3307
3308 static int
3309 validate_mips_insn (const struct mips_opcode *opcode,
3310                     unsigned long insn_bits,
3311                     const struct mips_operand *(*decode_operand) (const char *),
3312                     struct mips_operand_array *operands)
3313 {
3314   const char *s;
3315   unsigned long used_bits, doubled, undefined, opno, mask;
3316   const struct mips_operand *operand;
3317
3318   mask = (opcode->pinfo == INSN_MACRO ? 0 : opcode->mask);
3319   if ((mask & opcode->match) != opcode->match)
3320     {
3321       as_bad (_("internal: bad mips opcode (mask error): %s %s"),
3322               opcode->name, opcode->args);
3323       return 0;
3324     }
3325   used_bits = 0;
3326   opno = 0;
3327   if (opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX)
3328     used_bits = mips_insert_operand (&mips_vu0_channel_mask, used_bits, -1);
3329   for (s = opcode->args; *s; ++s)
3330     switch (*s)
3331       {
3332       case ',':
3333       case '(':
3334       case ')':
3335         break;
3336
3337       case '#':
3338         s++;
3339         break;
3340
3341       default:
3342         if (!decode_operand)
3343           operand = decode_mips16_operand (*s, FALSE);
3344         else
3345           operand = decode_operand (s);
3346         if (!operand && opcode->pinfo != INSN_MACRO)
3347           {
3348             as_bad (_("internal: unknown operand type: %s %s"),
3349                     opcode->name, opcode->args);
3350             return 0;
3351           }
3352         gas_assert (opno < MAX_OPERANDS);
3353         operands->operand[opno] = operand;
3354         if (operand && operand->type != OP_VU0_MATCH_SUFFIX)
3355           {
3356             used_bits = mips_insert_operand (operand, used_bits, -1);
3357             if (operand->type == OP_MDMX_IMM_REG)
3358               /* Bit 5 is the format selector (OB vs QH).  The opcode table
3359                  has separate entries for each format.  */
3360               used_bits &= ~(1 << (operand->lsb + 5));
3361             if (operand->type == OP_ENTRY_EXIT_LIST)
3362               used_bits &= ~(mask & 0x700);
3363           }
3364         /* Skip prefix characters.  */
3365         if (decode_operand && (*s == '+' || *s == 'm' || *s == '-'))
3366           ++s;
3367         opno += 1;
3368         break;
3369       }
3370   doubled = used_bits & mask & insn_bits;
3371   if (doubled)
3372     {
3373       as_bad (_("internal: bad mips opcode (bits 0x%08lx doubly defined):"
3374                 " %s %s"), doubled, opcode->name, opcode->args);
3375       return 0;
3376     }
3377   used_bits |= mask;
3378   undefined = ~used_bits & insn_bits;
3379   if (opcode->pinfo != INSN_MACRO && undefined)
3380     {
3381       as_bad (_("internal: bad mips opcode (bits 0x%08lx undefined): %s %s"),
3382               undefined, opcode->name, opcode->args);
3383       return 0;
3384     }
3385   used_bits &= ~insn_bits;
3386   if (used_bits)
3387     {
3388       as_bad (_("internal: bad mips opcode (bits 0x%08lx defined): %s %s"),
3389               used_bits, opcode->name, opcode->args);
3390       return 0;
3391     }
3392   return 1;
3393 }
3394
3395 /* The MIPS16 version of validate_mips_insn.  */
3396
3397 static int
3398 validate_mips16_insn (const struct mips_opcode *opcode,
3399                       struct mips_operand_array *operands)
3400 {
3401   if (opcode->args[0] == 'a' || opcode->args[0] == 'i')
3402     {
3403       /* In this case OPCODE defines the first 16 bits in a 32-bit jump
3404          instruction.  Use TMP to describe the full instruction.  */
3405       struct mips_opcode tmp;
3406
3407       tmp = *opcode;
3408       tmp.match <<= 16;
3409       tmp.mask <<= 16;
3410       return validate_mips_insn (&tmp, 0xffffffff, 0, operands);
3411     }
3412   return validate_mips_insn (opcode, 0xffff, 0, operands);
3413 }
3414
3415 /* The microMIPS version of validate_mips_insn.  */
3416
3417 static int
3418 validate_micromips_insn (const struct mips_opcode *opc,
3419                          struct mips_operand_array *operands)
3420 {
3421   unsigned long insn_bits;
3422   unsigned long major;
3423   unsigned int length;
3424
3425   if (opc->pinfo == INSN_MACRO)
3426     return validate_mips_insn (opc, 0xffffffff, decode_micromips_operand,
3427                                operands);
3428
3429   length = micromips_insn_length (opc);
3430   if (length != 2 && length != 4)
3431     {
3432       as_bad (_("internal error: bad microMIPS opcode (incorrect length: %u): "
3433                 "%s %s"), length, opc->name, opc->args);
3434       return 0;
3435     }
3436   major = opc->match >> (10 + 8 * (length - 2));
3437   if ((length == 2 && (major & 7) != 1 && (major & 6) != 2)
3438       || (length == 4 && (major & 7) != 0 && (major & 4) != 4))
3439     {
3440       as_bad (_("internal error: bad microMIPS opcode "
3441                 "(opcode/length mismatch): %s %s"), opc->name, opc->args);
3442       return 0;
3443     }
3444
3445   /* Shift piecewise to avoid an overflow where unsigned long is 32-bit.  */
3446   insn_bits = 1 << 4 * length;
3447   insn_bits <<= 4 * length;
3448   insn_bits -= 1;
3449   return validate_mips_insn (opc, insn_bits, decode_micromips_operand,
3450                              operands);
3451 }
3452
3453 /* This function is called once, at assembler startup time.  It should set up
3454    all the tables, etc. that the MD part of the assembler will need.  */
3455
3456 void
3457 md_begin (void)
3458 {
3459   const char *retval = NULL;
3460   int i = 0;
3461   int broken = 0;
3462
3463   if (mips_pic != NO_PIC)
3464     {
3465       if (g_switch_seen && g_switch_value != 0)
3466         as_bad (_("-G may not be used in position-independent code"));
3467       g_switch_value = 0;
3468     }
3469   else if (mips_abicalls)
3470     {
3471       if (g_switch_seen && g_switch_value != 0)
3472         as_bad (_("-G may not be used with abicalls"));
3473       g_switch_value = 0;
3474     }
3475
3476   if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_opts.arch))
3477     as_warn (_("could not set architecture and machine"));
3478
3479   op_hash = hash_new ();
3480
3481   mips_operands = XCNEWVEC (struct mips_operand_array, NUMOPCODES);
3482   for (i = 0; i < NUMOPCODES;)
3483     {
3484       const char *name = mips_opcodes[i].name;
3485
3486       retval = hash_insert (op_hash, name, (void *) &mips_opcodes[i]);
3487       if (retval != NULL)
3488         {
3489           fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
3490                    mips_opcodes[i].name, retval);
3491           /* Probably a memory allocation problem?  Give up now.  */
3492           as_fatal (_("broken assembler, no assembly attempted"));
3493         }
3494       do
3495         {
3496           if (!validate_mips_insn (&mips_opcodes[i], 0xffffffff,
3497                                    decode_mips_operand, &mips_operands[i]))
3498             broken = 1;
3499           if (nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3500             {
3501               create_insn (&nop_insn, mips_opcodes + i);
3502               if (mips_fix_loongson2f_nop)
3503                 nop_insn.insn_opcode = LOONGSON2F_NOP_INSN;
3504               nop_insn.fixed_p = 1;
3505             }
3506           ++i;
3507         }
3508       while ((i < NUMOPCODES) && !strcmp (mips_opcodes[i].name, name));
3509     }
3510
3511   mips16_op_hash = hash_new ();
3512   mips16_operands = XCNEWVEC (struct mips_operand_array,
3513                               bfd_mips16_num_opcodes);
3514
3515   i = 0;
3516   while (i < bfd_mips16_num_opcodes)
3517     {
3518       const char *name = mips16_opcodes[i].name;
3519
3520       retval = hash_insert (mips16_op_hash, name, (void *) &mips16_opcodes[i]);
3521       if (retval != NULL)
3522         as_fatal (_("internal: can't hash `%s': %s"),
3523                   mips16_opcodes[i].name, retval);
3524       do
3525         {
3526           if (!validate_mips16_insn (&mips16_opcodes[i], &mips16_operands[i]))
3527             broken = 1;
3528           if (mips16_nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3529             {
3530               create_insn (&mips16_nop_insn, mips16_opcodes + i);
3531               mips16_nop_insn.fixed_p = 1;
3532             }
3533           ++i;
3534         }
3535       while (i < bfd_mips16_num_opcodes
3536              && strcmp (mips16_opcodes[i].name, name) == 0);
3537     }
3538
3539   micromips_op_hash = hash_new ();
3540   micromips_operands = XCNEWVEC (struct mips_operand_array,
3541                                  bfd_micromips_num_opcodes);
3542
3543   i = 0;
3544   while (i < bfd_micromips_num_opcodes)
3545     {
3546       const char *name = micromips_opcodes[i].name;
3547
3548       retval = hash_insert (micromips_op_hash, name,
3549                             (void *) &micromips_opcodes[i]);
3550       if (retval != NULL)
3551         as_fatal (_("internal: can't hash `%s': %s"),
3552                   micromips_opcodes[i].name, retval);
3553       do
3554         {
3555           struct mips_cl_insn *micromips_nop_insn;
3556
3557           if (!validate_micromips_insn (&micromips_opcodes[i],
3558                                         &micromips_operands[i]))
3559             broken = 1;
3560
3561           if (micromips_opcodes[i].pinfo != INSN_MACRO)
3562             {
3563               if (micromips_insn_length (micromips_opcodes + i) == 2)
3564                 micromips_nop_insn = &micromips_nop16_insn;
3565               else if (micromips_insn_length (micromips_opcodes + i) == 4)
3566                 micromips_nop_insn = &micromips_nop32_insn;
3567               else
3568                 continue;
3569
3570               if (micromips_nop_insn->insn_mo == NULL
3571                   && strcmp (name, "nop") == 0)
3572                 {
3573                   create_insn (micromips_nop_insn, micromips_opcodes + i);
3574                   micromips_nop_insn->fixed_p = 1;
3575                 }
3576             }
3577         }
3578       while (++i < bfd_micromips_num_opcodes
3579              && strcmp (micromips_opcodes[i].name, name) == 0);
3580     }
3581
3582   if (broken)
3583     as_fatal (_("broken assembler, no assembly attempted"));
3584
3585   /* We add all the general register names to the symbol table.  This
3586      helps us detect invalid uses of them.  */
3587   for (i = 0; reg_names[i].name; i++)
3588     symbol_table_insert (symbol_new (reg_names[i].name, reg_section,
3589                                      reg_names[i].num, /* & RNUM_MASK, */
3590                                      &zero_address_frag));
3591   if (HAVE_NEWABI)
3592     for (i = 0; reg_names_n32n64[i].name; i++)
3593       symbol_table_insert (symbol_new (reg_names_n32n64[i].name, reg_section,
3594                                        reg_names_n32n64[i].num, /* & RNUM_MASK, */
3595                                        &zero_address_frag));
3596   else
3597     for (i = 0; reg_names_o32[i].name; i++)
3598       symbol_table_insert (symbol_new (reg_names_o32[i].name, reg_section,
3599                                        reg_names_o32[i].num, /* & RNUM_MASK, */
3600                                        &zero_address_frag));
3601
3602   for (i = 0; i < 32; i++)
3603     {
3604       char regname[6];
3605
3606       /* R5900 VU0 floating-point register.  */
3607       sprintf (regname, "$vf%d", i);
3608       symbol_table_insert (symbol_new (regname, reg_section,
3609                                        RTYPE_VF | i, &zero_address_frag));
3610
3611       /* R5900 VU0 integer register.  */
3612       sprintf (regname, "$vi%d", i);
3613       symbol_table_insert (symbol_new (regname, reg_section,
3614                                        RTYPE_VI | i, &zero_address_frag));
3615
3616       /* MSA register.  */
3617       sprintf (regname, "$w%d", i);
3618       symbol_table_insert (symbol_new (regname, reg_section,
3619                                        RTYPE_MSA | i, &zero_address_frag));
3620     }
3621
3622   obstack_init (&mips_operand_tokens);
3623
3624   mips_no_prev_insn ();
3625
3626   mips_gprmask = 0;
3627   mips_cprmask[0] = 0;
3628   mips_cprmask[1] = 0;
3629   mips_cprmask[2] = 0;
3630   mips_cprmask[3] = 0;
3631
3632   /* set the default alignment for the text section (2**2) */
3633   record_alignment (text_section, 2);
3634
3635   bfd_set_gp_size (stdoutput, g_switch_value);
3636
3637   /* On a native system other than VxWorks, sections must be aligned
3638      to 16 byte boundaries.  When configured for an embedded ELF
3639      target, we don't bother.  */
3640   if (strncmp (TARGET_OS, "elf", 3) != 0
3641       && strncmp (TARGET_OS, "vxworks", 7) != 0)
3642     {
3643       (void) bfd_set_section_alignment (stdoutput, text_section, 4);
3644       (void) bfd_set_section_alignment (stdoutput, data_section, 4);
3645       (void) bfd_set_section_alignment (stdoutput, bss_section, 4);
3646     }
3647
3648   /* Create a .reginfo section for register masks and a .mdebug
3649      section for debugging information.  */
3650   {
3651     segT seg;
3652     subsegT subseg;
3653     flagword flags;
3654     segT sec;
3655
3656     seg = now_seg;
3657     subseg = now_subseg;
3658
3659     /* The ABI says this section should be loaded so that the
3660        running program can access it.  However, we don't load it
3661        if we are configured for an embedded target */
3662     flags = SEC_READONLY | SEC_DATA;
3663     if (strncmp (TARGET_OS, "elf", 3) != 0)
3664       flags |= SEC_ALLOC | SEC_LOAD;
3665
3666     if (mips_abi != N64_ABI)
3667       {
3668         sec = subseg_new (".reginfo", (subsegT) 0);
3669
3670         bfd_set_section_flags (stdoutput, sec, flags);
3671         bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
3672
3673         mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
3674       }
3675     else
3676       {
3677         /* The 64-bit ABI uses a .MIPS.options section rather than
3678            .reginfo section.  */
3679         sec = subseg_new (".MIPS.options", (subsegT) 0);
3680         bfd_set_section_flags (stdoutput, sec, flags);
3681         bfd_set_section_alignment (stdoutput, sec, 3);
3682
3683         /* Set up the option header.  */
3684         {
3685           Elf_Internal_Options opthdr;
3686           char *f;
3687
3688           opthdr.kind = ODK_REGINFO;
3689           opthdr.size = (sizeof (Elf_External_Options)
3690                          + sizeof (Elf64_External_RegInfo));
3691           opthdr.section = 0;
3692           opthdr.info = 0;
3693           f = frag_more (sizeof (Elf_External_Options));
3694           bfd_mips_elf_swap_options_out (stdoutput, &opthdr,
3695                                          (Elf_External_Options *) f);
3696
3697           mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
3698         }
3699       }
3700
3701     sec = subseg_new (".MIPS.abiflags", (subsegT) 0);
3702     bfd_set_section_flags (stdoutput, sec,
3703                            SEC_READONLY | SEC_DATA | SEC_ALLOC | SEC_LOAD);
3704     bfd_set_section_alignment (stdoutput, sec, 3);
3705     mips_flags_frag = frag_more (sizeof (Elf_External_ABIFlags_v0));
3706
3707     if (ECOFF_DEBUGGING)
3708       {
3709         sec = subseg_new (".mdebug", (subsegT) 0);
3710         (void) bfd_set_section_flags (stdoutput, sec,
3711                                       SEC_HAS_CONTENTS | SEC_READONLY);
3712         (void) bfd_set_section_alignment (stdoutput, sec, 2);
3713       }
3714     else if (mips_flag_pdr)
3715       {
3716         pdr_seg = subseg_new (".pdr", (subsegT) 0);
3717         (void) bfd_set_section_flags (stdoutput, pdr_seg,
3718                                       SEC_READONLY | SEC_RELOC
3719                                       | SEC_DEBUGGING);
3720         (void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
3721       }
3722
3723     subseg_set (seg, subseg);
3724   }
3725
3726   if (mips_fix_vr4120)
3727     init_vr4120_conflicts ();
3728 }
3729
3730 static inline void
3731 fpabi_incompatible_with (int fpabi, const char *what)
3732 {
3733   as_warn (_(".gnu_attribute %d,%d is incompatible with `%s'"),
3734            Tag_GNU_MIPS_ABI_FP, fpabi, what);
3735 }
3736
3737 static inline void
3738 fpabi_requires (int fpabi, const char *what)
3739 {
3740   as_warn (_(".gnu_attribute %d,%d requires `%s'"),
3741            Tag_GNU_MIPS_ABI_FP, fpabi, what);
3742 }
3743
3744 /* Check -mabi and register sizes against the specified FP ABI.  */
3745 static void
3746 check_fpabi (int fpabi)
3747 {
3748   switch (fpabi)
3749     {
3750     case Val_GNU_MIPS_ABI_FP_DOUBLE:
3751       if (file_mips_opts.soft_float)
3752         fpabi_incompatible_with (fpabi, "softfloat");
3753       else if (file_mips_opts.single_float)
3754         fpabi_incompatible_with (fpabi, "singlefloat");
3755       if (file_mips_opts.gp == 64 && file_mips_opts.fp == 32)
3756         fpabi_incompatible_with (fpabi, "gp=64 fp=32");
3757       else if (file_mips_opts.gp == 32 && file_mips_opts.fp == 64)
3758         fpabi_incompatible_with (fpabi, "gp=32 fp=64");
3759       break;
3760
3761     case Val_GNU_MIPS_ABI_FP_XX:
3762       if (mips_abi != O32_ABI)
3763         fpabi_requires (fpabi, "-mabi=32");
3764       else if (file_mips_opts.soft_float)
3765         fpabi_incompatible_with (fpabi, "softfloat");
3766       else if (file_mips_opts.single_float)
3767         fpabi_incompatible_with (fpabi, "singlefloat");
3768       else if (file_mips_opts.fp != 0)
3769         fpabi_requires (fpabi, "fp=xx");
3770       break;
3771
3772     case Val_GNU_MIPS_ABI_FP_64A:
3773     case Val_GNU_MIPS_ABI_FP_64:
3774       if (mips_abi != O32_ABI)
3775         fpabi_requires (fpabi, "-mabi=32");
3776       else if (file_mips_opts.soft_float)
3777         fpabi_incompatible_with (fpabi, "softfloat");
3778       else if (file_mips_opts.single_float)
3779         fpabi_incompatible_with (fpabi, "singlefloat");
3780       else if (file_mips_opts.fp != 64)
3781         fpabi_requires (fpabi, "fp=64");
3782       else if (fpabi == Val_GNU_MIPS_ABI_FP_64 && !file_mips_opts.oddspreg)
3783         fpabi_incompatible_with (fpabi, "nooddspreg");
3784       else if (fpabi == Val_GNU_MIPS_ABI_FP_64A && file_mips_opts.oddspreg)
3785         fpabi_requires (fpabi, "nooddspreg");
3786       break;
3787
3788     case Val_GNU_MIPS_ABI_FP_SINGLE:
3789       if (file_mips_opts.soft_float)
3790         fpabi_incompatible_with (fpabi, "softfloat");
3791       else if (!file_mips_opts.single_float)
3792         fpabi_requires (fpabi, "singlefloat");
3793       break;
3794
3795     case Val_GNU_MIPS_ABI_FP_SOFT:
3796       if (!file_mips_opts.soft_float)
3797         fpabi_requires (fpabi, "softfloat");
3798       break;
3799
3800     case Val_GNU_MIPS_ABI_FP_OLD_64:
3801       as_warn (_(".gnu_attribute %d,%d is no longer supported"),
3802                Tag_GNU_MIPS_ABI_FP, fpabi);
3803       break;
3804
3805     case Val_GNU_MIPS_ABI_FP_NAN2008:
3806       /* Silently ignore compatibility value.  */
3807       break;
3808
3809     default:
3810       as_warn (_(".gnu_attribute %d,%d is not a recognized"
3811                  " floating-point ABI"), Tag_GNU_MIPS_ABI_FP, fpabi);
3812       break;
3813     }
3814 }
3815
3816 /* Perform consistency checks on the current options.  */
3817
3818 static void
3819 mips_check_options (struct mips_set_options *opts, bfd_boolean abi_checks)
3820 {
3821   /* Check the size of integer registers agrees with the ABI and ISA.  */
3822   if (opts->gp == 64 && !ISA_HAS_64BIT_REGS (opts->isa))
3823     as_bad (_("`gp=64' used with a 32-bit processor"));
3824   else if (abi_checks
3825            && opts->gp == 32 && ABI_NEEDS_64BIT_REGS (mips_abi))
3826     as_bad (_("`gp=32' used with a 64-bit ABI"));
3827   else if (abi_checks
3828            && opts->gp == 64 && ABI_NEEDS_32BIT_REGS (mips_abi))
3829     as_bad (_("`gp=64' used with a 32-bit ABI"));
3830
3831   /* Check the size of the float registers agrees with the ABI and ISA.  */
3832   switch (opts->fp)
3833     {
3834     case 0:
3835       if (!CPU_HAS_LDC1_SDC1 (opts->arch))
3836         as_bad (_("`fp=xx' used with a cpu lacking ldc1/sdc1 instructions"));
3837       else if (opts->single_float == 1)
3838         as_bad (_("`fp=xx' cannot be used with `singlefloat'"));
3839       break;
3840     case 64:
3841       if (!ISA_HAS_64BIT_FPRS (opts->isa))
3842         as_bad (_("`fp=64' used with a 32-bit fpu"));
3843       else if (abi_checks
3844                && ABI_NEEDS_32BIT_REGS (mips_abi)
3845                && !ISA_HAS_MXHC1 (opts->isa))
3846         as_warn (_("`fp=64' used with a 32-bit ABI"));
3847       break;
3848     case 32:
3849       if (abi_checks
3850           && ABI_NEEDS_64BIT_REGS (mips_abi))
3851         as_warn (_("`fp=32' used with a 64-bit ABI"));
3852       if (ISA_IS_R6 (opts->isa) && opts->single_float == 0)
3853         as_bad (_("`fp=32' used with a MIPS R6 cpu"));
3854       break;
3855     default:
3856       as_bad (_("Unknown size of floating point registers"));
3857       break;
3858     }
3859
3860   if (ABI_NEEDS_64BIT_REGS (mips_abi) && !opts->oddspreg)
3861     as_bad (_("`nooddspreg` cannot be used with a 64-bit ABI"));
3862
3863   if (opts->micromips == 1 && opts->mips16 == 1)
3864     as_bad (_("`%s' cannot be used with `%s'"), "mips16", "micromips");
3865   else if (ISA_IS_R6 (opts->isa)
3866            && (opts->micromips == 1
3867                || opts->mips16 == 1))
3868     as_fatal (_("`%s' cannot be used with `%s'"),
3869               opts->micromips ? "micromips" : "mips16",
3870               mips_cpu_info_from_isa (opts->isa)->name);
3871
3872   if (ISA_IS_R6 (opts->isa) && mips_relax_branch)
3873     as_fatal (_("branch relaxation is not supported in `%s'"),
3874               mips_cpu_info_from_isa (opts->isa)->name);
3875 }
3876
3877 /* Perform consistency checks on the module level options exactly once.
3878    This is a deferred check that happens:
3879      at the first .set directive
3880      or, at the first pseudo op that generates code (inc .dc.a)
3881      or, at the first instruction
3882      or, at the end.  */
3883
3884 static void
3885 file_mips_check_options (void)
3886 {
3887   const struct mips_cpu_info *arch_info = 0;
3888
3889   if (file_mips_opts_checked)
3890     return;
3891
3892   /* The following code determines the register size.
3893      Similar code was added to GCC 3.3 (see override_options() in
3894      config/mips/mips.c).  The GAS and GCC code should be kept in sync
3895      as much as possible.  */
3896
3897   if (file_mips_opts.gp < 0)
3898     {
3899       /* Infer the integer register size from the ABI and processor.
3900          Restrict ourselves to 32-bit registers if that's all the
3901          processor has, or if the ABI cannot handle 64-bit registers.  */
3902       file_mips_opts.gp = (ABI_NEEDS_32BIT_REGS (mips_abi)
3903                            || !ISA_HAS_64BIT_REGS (file_mips_opts.isa))
3904                           ? 32 : 64;
3905     }
3906
3907   if (file_mips_opts.fp < 0)
3908     {
3909       /* No user specified float register size.
3910          ??? GAS treats single-float processors as though they had 64-bit
3911          float registers (although it complains when double-precision
3912          instructions are used).  As things stand, saying they have 32-bit
3913          registers would lead to spurious "register must be even" messages.
3914          So here we assume float registers are never smaller than the
3915          integer ones.  */
3916       if (file_mips_opts.gp == 64)
3917         /* 64-bit integer registers implies 64-bit float registers.  */
3918         file_mips_opts.fp = 64;
3919       else if ((file_mips_opts.ase & FP64_ASES)
3920                && ISA_HAS_64BIT_FPRS (file_mips_opts.isa))
3921         /* Handle ASEs that require 64-bit float registers, if possible.  */
3922         file_mips_opts.fp = 64;
3923       else if (ISA_IS_R6 (mips_opts.isa))
3924         /* R6 implies 64-bit float registers.  */
3925         file_mips_opts.fp = 64;
3926       else
3927         /* 32-bit float registers.  */
3928         file_mips_opts.fp = 32;
3929     }
3930
3931   arch_info = mips_cpu_info_from_arch (file_mips_opts.arch);
3932
3933   /* Disable operations on odd-numbered floating-point registers by default
3934      when using the FPXX ABI.  */
3935   if (file_mips_opts.oddspreg < 0)
3936     {
3937       if (file_mips_opts.fp == 0)
3938         file_mips_opts.oddspreg = 0;
3939       else
3940         file_mips_opts.oddspreg = 1;
3941     }
3942
3943   /* End of GCC-shared inference code.  */
3944
3945   /* This flag is set when we have a 64-bit capable CPU but use only
3946      32-bit wide registers.  Note that EABI does not use it.  */
3947   if (ISA_HAS_64BIT_REGS (file_mips_opts.isa)
3948       && ((mips_abi == NO_ABI && file_mips_opts.gp == 32)
3949           || mips_abi == O32_ABI))
3950     mips_32bitmode = 1;
3951
3952   if (file_mips_opts.isa == ISA_MIPS1 && mips_trap)
3953     as_bad (_("trap exception not supported at ISA 1"));
3954
3955   /* If the selected architecture includes support for ASEs, enable
3956      generation of code for them.  */
3957   if (file_mips_opts.mips16 == -1)
3958     file_mips_opts.mips16 = (CPU_HAS_MIPS16 (file_mips_opts.arch)) ? 1 : 0;
3959   if (file_mips_opts.micromips == -1)
3960     file_mips_opts.micromips = (CPU_HAS_MICROMIPS (file_mips_opts.arch))
3961                                 ? 1 : 0;
3962
3963   if (mips_nan2008 == -1)
3964     mips_nan2008 = (ISA_HAS_LEGACY_NAN (file_mips_opts.isa)) ? 0 : 1;
3965   else if (!ISA_HAS_LEGACY_NAN (file_mips_opts.isa) && mips_nan2008 == 0)
3966     as_fatal (_("`%s' does not support legacy NaN"),
3967               mips_cpu_info_from_arch (file_mips_opts.arch)->name);
3968
3969   /* Some ASEs require 64-bit FPRs, so -mfp32 should stop those ASEs from
3970      being selected implicitly.  */
3971   if (file_mips_opts.fp != 64)
3972     file_ase_explicit |= ASE_MIPS3D | ASE_MDMX | ASE_MSA;
3973
3974   /* If the user didn't explicitly select or deselect a particular ASE,
3975      use the default setting for the CPU.  */
3976   file_mips_opts.ase |= (arch_info->ase & ~file_ase_explicit);
3977
3978   /* Set up the current options.  These may change throughout assembly.  */
3979   mips_opts = file_mips_opts;
3980
3981   mips_check_isa_supports_ases ();
3982   mips_check_options (&file_mips_opts, TRUE);
3983   file_mips_opts_checked = TRUE;
3984
3985   if (!bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_opts.arch))
3986     as_warn (_("could not set architecture and machine"));
3987 }
3988
3989 void
3990 md_assemble (char *str)
3991 {
3992   struct mips_cl_insn insn;
3993   bfd_reloc_code_real_type unused_reloc[3]
3994     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
3995
3996   file_mips_check_options ();
3997
3998   imm_expr.X_op = O_absent;
3999   offset_expr.X_op = O_absent;
4000   offset_reloc[0] = BFD_RELOC_UNUSED;
4001   offset_reloc[1] = BFD_RELOC_UNUSED;
4002   offset_reloc[2] = BFD_RELOC_UNUSED;
4003
4004   mips_mark_labels ();
4005   mips_assembling_insn = TRUE;
4006   clear_insn_error ();
4007
4008   if (mips_opts.mips16)
4009     mips16_ip (str, &insn);
4010   else
4011     {
4012       mips_ip (str, &insn);
4013       DBG ((_("returned from mips_ip(%s) insn_opcode = 0x%x\n"),
4014             str, insn.insn_opcode));
4015     }
4016
4017   if (insn_error.msg)
4018     report_insn_error (str);
4019   else if (insn.insn_mo->pinfo == INSN_MACRO)
4020     {
4021       macro_start ();
4022       if (mips_opts.mips16)
4023         mips16_macro (&insn);
4024       else
4025         macro (&insn, str);
4026       macro_end ();
4027     }
4028   else
4029     {
4030       if (offset_expr.X_op != O_absent)
4031         append_insn (&insn, &offset_expr, offset_reloc, FALSE);
4032       else
4033         append_insn (&insn, NULL, unused_reloc, FALSE);
4034     }
4035
4036   mips_assembling_insn = FALSE;
4037 }
4038
4039 /* Convenience functions for abstracting away the differences between
4040    MIPS16 and non-MIPS16 relocations.  */
4041
4042 static inline bfd_boolean
4043 mips16_reloc_p (bfd_reloc_code_real_type reloc)
4044 {
4045   switch (reloc)
4046     {
4047     case BFD_RELOC_MIPS16_JMP:
4048     case BFD_RELOC_MIPS16_GPREL:
4049     case BFD_RELOC_MIPS16_GOT16:
4050     case BFD_RELOC_MIPS16_CALL16:
4051     case BFD_RELOC_MIPS16_HI16_S:
4052     case BFD_RELOC_MIPS16_HI16:
4053     case BFD_RELOC_MIPS16_LO16:
4054       return TRUE;
4055
4056     default:
4057       return FALSE;
4058     }
4059 }
4060
4061 static inline bfd_boolean
4062 micromips_reloc_p (bfd_reloc_code_real_type reloc)
4063 {
4064   switch (reloc)
4065     {
4066     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
4067     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
4068     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
4069     case BFD_RELOC_MICROMIPS_GPREL16:
4070     case BFD_RELOC_MICROMIPS_JMP:
4071     case BFD_RELOC_MICROMIPS_HI16:
4072     case BFD_RELOC_MICROMIPS_HI16_S:
4073     case BFD_RELOC_MICROMIPS_LO16:
4074     case BFD_RELOC_MICROMIPS_LITERAL:
4075     case BFD_RELOC_MICROMIPS_GOT16:
4076     case BFD_RELOC_MICROMIPS_CALL16:
4077     case BFD_RELOC_MICROMIPS_GOT_HI16:
4078     case BFD_RELOC_MICROMIPS_GOT_LO16:
4079     case BFD_RELOC_MICROMIPS_CALL_HI16:
4080     case BFD_RELOC_MICROMIPS_CALL_LO16:
4081     case BFD_RELOC_MICROMIPS_SUB:
4082     case BFD_RELOC_MICROMIPS_GOT_PAGE:
4083     case BFD_RELOC_MICROMIPS_GOT_OFST:
4084     case BFD_RELOC_MICROMIPS_GOT_DISP:
4085     case BFD_RELOC_MICROMIPS_HIGHEST:
4086     case BFD_RELOC_MICROMIPS_HIGHER:
4087     case BFD_RELOC_MICROMIPS_SCN_DISP:
4088     case BFD_RELOC_MICROMIPS_JALR:
4089       return TRUE;
4090
4091     default:
4092       return FALSE;
4093     }
4094 }
4095
4096 static inline bfd_boolean
4097 jmp_reloc_p (bfd_reloc_code_real_type reloc)
4098 {
4099   return reloc == BFD_RELOC_MIPS_JMP || reloc == BFD_RELOC_MICROMIPS_JMP;
4100 }
4101
4102 static inline bfd_boolean
4103 got16_reloc_p (bfd_reloc_code_real_type reloc)
4104 {
4105   return (reloc == BFD_RELOC_MIPS_GOT16 || reloc == BFD_RELOC_MIPS16_GOT16
4106           || reloc == BFD_RELOC_MICROMIPS_GOT16);
4107 }
4108
4109 static inline bfd_boolean
4110 hi16_reloc_p (bfd_reloc_code_real_type reloc)
4111 {
4112   return (reloc == BFD_RELOC_HI16_S || reloc == BFD_RELOC_MIPS16_HI16_S
4113           || reloc == BFD_RELOC_MICROMIPS_HI16_S);
4114 }
4115
4116 static inline bfd_boolean
4117 lo16_reloc_p (bfd_reloc_code_real_type reloc)
4118 {
4119   return (reloc == BFD_RELOC_LO16 || reloc == BFD_RELOC_MIPS16_LO16
4120           || reloc == BFD_RELOC_MICROMIPS_LO16);
4121 }
4122
4123 static inline bfd_boolean
4124 jalr_reloc_p (bfd_reloc_code_real_type reloc)
4125 {
4126   return reloc == BFD_RELOC_MIPS_JALR || reloc == BFD_RELOC_MICROMIPS_JALR;
4127 }
4128
4129 static inline bfd_boolean
4130 gprel16_reloc_p (bfd_reloc_code_real_type reloc)
4131 {
4132   return (reloc == BFD_RELOC_GPREL16 || reloc == BFD_RELOC_MIPS16_GPREL
4133           || reloc == BFD_RELOC_MICROMIPS_GPREL16);
4134 }
4135
4136 /* Return true if RELOC is a PC-relative relocation that does not have
4137    full address range.  */
4138
4139 static inline bfd_boolean
4140 limited_pcrel_reloc_p (bfd_reloc_code_real_type reloc)
4141 {
4142   switch (reloc)
4143     {
4144     case BFD_RELOC_16_PCREL_S2:
4145     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
4146     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
4147     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
4148     case BFD_RELOC_MIPS_21_PCREL_S2:
4149     case BFD_RELOC_MIPS_26_PCREL_S2:
4150     case BFD_RELOC_MIPS_18_PCREL_S3:
4151     case BFD_RELOC_MIPS_19_PCREL_S2:
4152       return TRUE;
4153
4154     case BFD_RELOC_32_PCREL:
4155     case BFD_RELOC_HI16_S_PCREL:
4156     case BFD_RELOC_LO16_PCREL:
4157       return HAVE_64BIT_ADDRESSES;
4158
4159     default:
4160       return FALSE;
4161     }
4162 }
4163
4164 /* Return true if the given relocation might need a matching %lo().
4165    This is only "might" because SVR4 R_MIPS_GOT16 relocations only
4166    need a matching %lo() when applied to local symbols.  */
4167
4168 static inline bfd_boolean
4169 reloc_needs_lo_p (bfd_reloc_code_real_type reloc)
4170 {
4171   return (HAVE_IN_PLACE_ADDENDS
4172           && (hi16_reloc_p (reloc)
4173               /* VxWorks R_MIPS_GOT16 relocs never need a matching %lo();
4174                  all GOT16 relocations evaluate to "G".  */
4175               || (got16_reloc_p (reloc) && mips_pic != VXWORKS_PIC)));
4176 }
4177
4178 /* Return the type of %lo() reloc needed by RELOC, given that
4179    reloc_needs_lo_p.  */
4180
4181 static inline bfd_reloc_code_real_type
4182 matching_lo_reloc (bfd_reloc_code_real_type reloc)
4183 {
4184   return (mips16_reloc_p (reloc) ? BFD_RELOC_MIPS16_LO16
4185           : (micromips_reloc_p (reloc) ? BFD_RELOC_MICROMIPS_LO16
4186              : BFD_RELOC_LO16));
4187 }
4188
4189 /* Return true if the given fixup is followed by a matching R_MIPS_LO16
4190    relocation.  */
4191
4192 static inline bfd_boolean
4193 fixup_has_matching_lo_p (fixS *fixp)
4194 {
4195   return (fixp->fx_next != NULL
4196           && fixp->fx_next->fx_r_type == matching_lo_reloc (fixp->fx_r_type)
4197           && fixp->fx_addsy == fixp->fx_next->fx_addsy
4198           && fixp->fx_offset == fixp->fx_next->fx_offset);
4199 }
4200
4201 /* Move all labels in LABELS to the current insertion point.  TEXT_P
4202    says whether the labels refer to text or data.  */
4203
4204 static void
4205 mips_move_labels (struct insn_label_list *labels, bfd_boolean text_p)
4206 {
4207   struct insn_label_list *l;
4208   valueT val;
4209
4210   for (l = labels; l != NULL; l = l->next)
4211     {
4212       gas_assert (S_GET_SEGMENT (l->label) == now_seg);
4213       symbol_set_frag (l->label, frag_now);
4214       val = (valueT) frag_now_fix ();
4215       /* MIPS16/microMIPS text labels are stored as odd.  */
4216       if (text_p && HAVE_CODE_COMPRESSION)
4217         ++val;
4218       S_SET_VALUE (l->label, val);
4219     }
4220 }
4221
4222 /* Move all labels in insn_labels to the current insertion point
4223    and treat them as text labels.  */
4224
4225 static void
4226 mips_move_text_labels (void)
4227 {
4228   mips_move_labels (seg_info (now_seg)->label_list, TRUE);
4229 }
4230
4231 static bfd_boolean
4232 s_is_linkonce (symbolS *sym, segT from_seg)
4233 {
4234   bfd_boolean linkonce = FALSE;
4235   segT symseg = S_GET_SEGMENT (sym);
4236
4237   if (symseg != from_seg && !S_IS_LOCAL (sym))
4238     {
4239       if ((bfd_get_section_flags (stdoutput, symseg) & SEC_LINK_ONCE))
4240         linkonce = TRUE;
4241       /* The GNU toolchain uses an extension for ELF: a section
4242          beginning with the magic string .gnu.linkonce is a
4243          linkonce section.  */
4244       if (strncmp (segment_name (symseg), ".gnu.linkonce",
4245                    sizeof ".gnu.linkonce" - 1) == 0)
4246         linkonce = TRUE;
4247     }
4248   return linkonce;
4249 }
4250
4251 /* Mark MIPS16 or microMIPS instruction label LABEL.  This permits the
4252    linker to handle them specially, such as generating jalx instructions
4253    when needed.  We also make them odd for the duration of the assembly,
4254    in order to generate the right sort of code.  We will make them even
4255    in the adjust_symtab routine, while leaving them marked.  This is
4256    convenient for the debugger and the disassembler.  The linker knows
4257    to make them odd again.  */
4258
4259 static void
4260 mips_compressed_mark_label (symbolS *label)
4261 {
4262   gas_assert (HAVE_CODE_COMPRESSION);
4263
4264   if (mips_opts.mips16)
4265     S_SET_OTHER (label, ELF_ST_SET_MIPS16 (S_GET_OTHER (label)));
4266   else
4267     S_SET_OTHER (label, ELF_ST_SET_MICROMIPS (S_GET_OTHER (label)));
4268   if ((S_GET_VALUE (label) & 1) == 0
4269       /* Don't adjust the address if the label is global or weak, or
4270          in a link-once section, since we'll be emitting symbol reloc
4271          references to it which will be patched up by the linker, and
4272          the final value of the symbol may or may not be MIPS16/microMIPS.  */
4273       && !S_IS_WEAK (label)
4274       && !S_IS_EXTERNAL (label)
4275       && !s_is_linkonce (label, now_seg))
4276     S_SET_VALUE (label, S_GET_VALUE (label) | 1);
4277 }
4278
4279 /* Mark preceding MIPS16 or microMIPS instruction labels.  */
4280
4281 static void
4282 mips_compressed_mark_labels (void)
4283 {
4284   struct insn_label_list *l;
4285
4286   for (l = seg_info (now_seg)->label_list; l != NULL; l = l->next)
4287     mips_compressed_mark_label (l->label);
4288 }
4289
4290 /* End the current frag.  Make it a variant frag and record the
4291    relaxation info.  */
4292
4293 static void
4294 relax_close_frag (void)
4295 {
4296   mips_macro_warning.first_frag = frag_now;
4297   frag_var (rs_machine_dependent, 0, 0,
4298             RELAX_ENCODE (mips_relax.sizes[0], mips_relax.sizes[1]),
4299             mips_relax.symbol, 0, (char *) mips_relax.first_fixup);
4300
4301   memset (&mips_relax.sizes, 0, sizeof (mips_relax.sizes));
4302   mips_relax.first_fixup = 0;
4303 }
4304
4305 /* Start a new relaxation sequence whose expansion depends on SYMBOL.
4306    See the comment above RELAX_ENCODE for more details.  */
4307
4308 static void
4309 relax_start (symbolS *symbol)
4310 {
4311   gas_assert (mips_relax.sequence == 0);
4312   mips_relax.sequence = 1;
4313   mips_relax.symbol = symbol;
4314 }
4315
4316 /* Start generating the second version of a relaxable sequence.
4317    See the comment above RELAX_ENCODE for more details.  */
4318
4319 static void
4320 relax_switch (void)
4321 {
4322   gas_assert (mips_relax.sequence == 1);
4323   mips_relax.sequence = 2;
4324 }
4325
4326 /* End the current relaxable sequence.  */
4327
4328 static void
4329 relax_end (void)
4330 {
4331   gas_assert (mips_relax.sequence == 2);
4332   relax_close_frag ();
4333   mips_relax.sequence = 0;
4334 }
4335
4336 /* Return true if IP is a delayed branch or jump.  */
4337
4338 static inline bfd_boolean
4339 delayed_branch_p (const struct mips_cl_insn *ip)
4340 {
4341   return (ip->insn_mo->pinfo & (INSN_UNCOND_BRANCH_DELAY
4342                                 | INSN_COND_BRANCH_DELAY
4343                                 | INSN_COND_BRANCH_LIKELY)) != 0;
4344 }
4345
4346 /* Return true if IP is a compact branch or jump.  */
4347
4348 static inline bfd_boolean
4349 compact_branch_p (const struct mips_cl_insn *ip)
4350 {
4351   return (ip->insn_mo->pinfo2 & (INSN2_UNCOND_BRANCH
4352                                  | INSN2_COND_BRANCH)) != 0;
4353 }
4354
4355 /* Return true if IP is an unconditional branch or jump.  */
4356
4357 static inline bfd_boolean
4358 uncond_branch_p (const struct mips_cl_insn *ip)
4359 {
4360   return ((ip->insn_mo->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0
4361           || (ip->insn_mo->pinfo2 & INSN2_UNCOND_BRANCH) != 0);
4362 }
4363
4364 /* Return true if IP is a branch-likely instruction.  */
4365
4366 static inline bfd_boolean
4367 branch_likely_p (const struct mips_cl_insn *ip)
4368 {
4369   return (ip->insn_mo->pinfo & INSN_COND_BRANCH_LIKELY) != 0;
4370 }
4371
4372 /* Return the type of nop that should be used to fill the delay slot
4373    of delayed branch IP.  */
4374
4375 static struct mips_cl_insn *
4376 get_delay_slot_nop (const struct mips_cl_insn *ip)
4377 {
4378   if (mips_opts.micromips
4379       && (ip->insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
4380     return &micromips_nop32_insn;
4381   return NOP_INSN;
4382 }
4383
4384 /* Return a mask that has bit N set if OPCODE reads the register(s)
4385    in operand N.  */
4386
4387 static unsigned int
4388 insn_read_mask (const struct mips_opcode *opcode)
4389 {
4390   return (opcode->pinfo & INSN_READ_ALL) >> INSN_READ_SHIFT;
4391 }
4392
4393 /* Return a mask that has bit N set if OPCODE writes to the register(s)
4394    in operand N.  */
4395
4396 static unsigned int
4397 insn_write_mask (const struct mips_opcode *opcode)
4398 {
4399   return (opcode->pinfo & INSN_WRITE_ALL) >> INSN_WRITE_SHIFT;
4400 }
4401
4402 /* Return a mask of the registers specified by operand OPERAND of INSN.
4403    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
4404    is set.  */
4405
4406 static unsigned int
4407 operand_reg_mask (const struct mips_cl_insn *insn,
4408                   const struct mips_operand *operand,
4409                   unsigned int type_mask)
4410 {
4411   unsigned int uval, vsel;
4412
4413   switch (operand->type)
4414     {
4415     case OP_INT:
4416     case OP_MAPPED_INT:
4417     case OP_MSB:
4418     case OP_PCREL:
4419     case OP_PERF_REG:
4420     case OP_ADDIUSP_INT:
4421     case OP_ENTRY_EXIT_LIST:
4422     case OP_REPEAT_DEST_REG:
4423     case OP_REPEAT_PREV_REG:
4424     case OP_PC:
4425     case OP_VU0_SUFFIX:
4426     case OP_VU0_MATCH_SUFFIX:
4427     case OP_IMM_INDEX:
4428       abort ();
4429
4430     case OP_REG:
4431     case OP_OPTIONAL_REG:
4432       {
4433         const struct mips_reg_operand *reg_op;
4434
4435         reg_op = (const struct mips_reg_operand *) operand;
4436         if (!(type_mask & (1 << reg_op->reg_type)))
4437           return 0;
4438         uval = insn_extract_operand (insn, operand);
4439         return 1 << mips_decode_reg_operand (reg_op, uval);
4440       }
4441
4442     case OP_REG_PAIR:
4443       {
4444         const struct mips_reg_pair_operand *pair_op;
4445
4446         pair_op = (const struct mips_reg_pair_operand *) operand;
4447         if (!(type_mask & (1 << pair_op->reg_type)))
4448           return 0;
4449         uval = insn_extract_operand (insn, operand);
4450         return (1 << pair_op->reg1_map[uval]) | (1 << pair_op->reg2_map[uval]);
4451       }
4452
4453     case OP_CLO_CLZ_DEST:
4454       if (!(type_mask & (1 << OP_REG_GP)))
4455         return 0;
4456       uval = insn_extract_operand (insn, operand);
4457       return (1 << (uval & 31)) | (1 << (uval >> 5));
4458
4459     case OP_SAME_RS_RT:
4460       if (!(type_mask & (1 << OP_REG_GP)))
4461         return 0;
4462       uval = insn_extract_operand (insn, operand);
4463       gas_assert ((uval & 31) == (uval >> 5));
4464       return 1 << (uval & 31);
4465
4466     case OP_CHECK_PREV:
4467     case OP_NON_ZERO_REG:
4468       if (!(type_mask & (1 << OP_REG_GP)))
4469         return 0;
4470       uval = insn_extract_operand (insn, operand);
4471       return 1 << (uval & 31);
4472
4473     case OP_LWM_SWM_LIST:
4474       abort ();
4475
4476     case OP_SAVE_RESTORE_LIST:
4477       abort ();
4478
4479     case OP_MDMX_IMM_REG:
4480       if (!(type_mask & (1 << OP_REG_VEC)))
4481         return 0;
4482       uval = insn_extract_operand (insn, operand);
4483       vsel = uval >> 5;
4484       if ((vsel & 0x18) == 0x18)
4485         return 0;
4486       return 1 << (uval & 31);
4487
4488     case OP_REG_INDEX:
4489       if (!(type_mask & (1 << OP_REG_GP)))
4490         return 0;
4491       return 1 << insn_extract_operand (insn, operand);
4492     }
4493   abort ();
4494 }
4495
4496 /* Return a mask of the registers specified by operands OPNO_MASK of INSN,
4497    where bit N of OPNO_MASK is set if operand N should be included.
4498    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
4499    is set.  */
4500
4501 static unsigned int
4502 insn_reg_mask (const struct mips_cl_insn *insn,
4503                unsigned int type_mask, unsigned int opno_mask)
4504 {
4505   unsigned int opno, reg_mask;
4506
4507   opno = 0;
4508   reg_mask = 0;
4509   while (opno_mask != 0)
4510     {
4511       if (opno_mask & 1)
4512         reg_mask |= operand_reg_mask (insn, insn_opno (insn, opno), type_mask);
4513       opno_mask >>= 1;
4514       opno += 1;
4515     }
4516   return reg_mask;
4517 }
4518
4519 /* Return the mask of core registers that IP reads.  */
4520
4521 static unsigned int
4522 gpr_read_mask (const struct mips_cl_insn *ip)
4523 {
4524   unsigned long pinfo, pinfo2;
4525   unsigned int mask;
4526
4527   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_read_mask (ip->insn_mo));
4528   pinfo = ip->insn_mo->pinfo;
4529   pinfo2 = ip->insn_mo->pinfo2;
4530   if (pinfo & INSN_UDI)
4531     {
4532       /* UDI instructions have traditionally been assumed to read RS
4533          and RT.  */
4534       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RT, *ip);
4535       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RS, *ip);
4536     }
4537   if (pinfo & INSN_READ_GPR_24)
4538     mask |= 1 << 24;
4539   if (pinfo2 & INSN2_READ_GPR_16)
4540     mask |= 1 << 16;
4541   if (pinfo2 & INSN2_READ_SP)
4542     mask |= 1 << SP;
4543   if (pinfo2 & INSN2_READ_GPR_31)
4544     mask |= 1 << 31;
4545   /* Don't include register 0.  */
4546   return mask & ~1;
4547 }
4548
4549 /* Return the mask of core registers that IP writes.  */
4550
4551 static unsigned int
4552 gpr_write_mask (const struct mips_cl_insn *ip)
4553 {
4554   unsigned long pinfo, pinfo2;
4555   unsigned int mask;
4556
4557   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_write_mask (ip->insn_mo));
4558   pinfo = ip->insn_mo->pinfo;
4559   pinfo2 = ip->insn_mo->pinfo2;
4560   if (pinfo & INSN_WRITE_GPR_24)
4561     mask |= 1 << 24;
4562   if (pinfo & INSN_WRITE_GPR_31)
4563     mask |= 1 << 31;
4564   if (pinfo & INSN_UDI)
4565     /* UDI instructions have traditionally been assumed to write to RD.  */
4566     mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RD, *ip);
4567   if (pinfo2 & INSN2_WRITE_SP)
4568     mask |= 1 << SP;
4569   /* Don't include register 0.  */
4570   return mask & ~1;
4571 }
4572
4573 /* Return the mask of floating-point registers that IP reads.  */
4574
4575 static unsigned int
4576 fpr_read_mask (const struct mips_cl_insn *ip)
4577 {
4578   unsigned long pinfo;
4579   unsigned int mask;
4580
4581   mask = insn_reg_mask (ip, ((1 << OP_REG_FP) | (1 << OP_REG_VEC)
4582                              | (1 << OP_REG_MSA)),
4583                         insn_read_mask (ip->insn_mo));
4584   pinfo = ip->insn_mo->pinfo;
4585   /* Conservatively treat all operands to an FP_D instruction are doubles.
4586      (This is overly pessimistic for things like cvt.d.s.)  */
4587   if (FPR_SIZE != 64 && (pinfo & FP_D))
4588     mask |= mask << 1;
4589   return mask;
4590 }
4591
4592 /* Return the mask of floating-point registers that IP writes.  */
4593
4594 static unsigned int
4595 fpr_write_mask (const struct mips_cl_insn *ip)
4596 {
4597   unsigned long pinfo;
4598   unsigned int mask;
4599
4600   mask = insn_reg_mask (ip, ((1 << OP_REG_FP) | (1 << OP_REG_VEC)
4601                              | (1 << OP_REG_MSA)),
4602                         insn_write_mask (ip->insn_mo));
4603   pinfo = ip->insn_mo->pinfo;
4604   /* Conservatively treat all operands to an FP_D instruction are doubles.
4605      (This is overly pessimistic for things like cvt.s.d.)  */
4606   if (FPR_SIZE != 64 && (pinfo & FP_D))
4607     mask |= mask << 1;
4608   return mask;
4609 }
4610
4611 /* Operand OPNUM of INSN is an odd-numbered floating-point register.
4612    Check whether that is allowed.  */
4613
4614 static bfd_boolean
4615 mips_oddfpreg_ok (const struct mips_opcode *insn, int opnum)
4616 {
4617   const char *s = insn->name;
4618   bfd_boolean oddspreg = (ISA_HAS_ODD_SINGLE_FPR (mips_opts.isa, mips_opts.arch)
4619                           || FPR_SIZE == 64)
4620                          && mips_opts.oddspreg;
4621
4622   if (insn->pinfo == INSN_MACRO)
4623     /* Let a macro pass, we'll catch it later when it is expanded.  */
4624     return TRUE;
4625
4626   /* Single-precision coprocessor loads and moves are OK for 32-bit registers,
4627      otherwise it depends on oddspreg.  */
4628   if ((insn->pinfo & FP_S)
4629       && (insn->pinfo & (INSN_LOAD_MEMORY | INSN_STORE_MEMORY
4630                          | INSN_LOAD_COPROC | INSN_COPROC_MOVE)))
4631     return FPR_SIZE == 32 || oddspreg;
4632
4633   /* Allow odd registers for single-precision ops and double-precision if the
4634      floating-point registers are 64-bit wide.  */
4635   switch (insn->pinfo & (FP_S | FP_D))
4636     {
4637     case FP_S:
4638     case 0:
4639       return oddspreg;
4640     case FP_D:
4641       return FPR_SIZE == 64;
4642     default:
4643       break;
4644     }
4645
4646   /* Cvt.w.x and cvt.x.w allow an odd register for a 'w' or 's' operand.  */
4647   s = strchr (insn->name, '.');
4648   if (s != NULL && opnum == 2)
4649     s = strchr (s + 1, '.');
4650   if (s != NULL && (s[1] == 'w' || s[1] == 's'))
4651     return oddspreg;
4652
4653   return FPR_SIZE == 64;
4654 }
4655
4656 /* Information about an instruction argument that we're trying to match.  */
4657 struct mips_arg_info
4658 {
4659   /* The instruction so far.  */
4660   struct mips_cl_insn *insn;
4661
4662   /* The first unconsumed operand token.  */
4663   struct mips_operand_token *token;
4664
4665   /* The 1-based operand number, in terms of insn->insn_mo->args.  */
4666   int opnum;
4667
4668   /* The 1-based argument number, for error reporting.  This does not
4669      count elided optional registers, etc..  */
4670   int argnum;
4671
4672   /* The last OP_REG operand seen, or ILLEGAL_REG if none.  */
4673   unsigned int last_regno;
4674
4675   /* If the first operand was an OP_REG, this is the register that it
4676      specified, otherwise it is ILLEGAL_REG.  */
4677   unsigned int dest_regno;
4678
4679   /* The value of the last OP_INT operand.  Only used for OP_MSB,
4680      where it gives the lsb position.  */
4681   unsigned int last_op_int;
4682
4683   /* If true, match routines should assume that no later instruction
4684      alternative matches and should therefore be as accomodating as
4685      possible.  Match routines should not report errors if something
4686      is only invalid for !LAX_MATCH.  */
4687   bfd_boolean lax_match;
4688
4689   /* True if a reference to the current AT register was seen.  */
4690   bfd_boolean seen_at;
4691 };
4692
4693 /* Record that the argument is out of range.  */
4694
4695 static void
4696 match_out_of_range (struct mips_arg_info *arg)
4697 {
4698   set_insn_error_i (arg->argnum, _("operand %d out of range"), arg->argnum);
4699 }
4700
4701 /* Record that the argument isn't constant but needs to be.  */
4702
4703 static void
4704 match_not_constant (struct mips_arg_info *arg)
4705 {
4706   set_insn_error_i (arg->argnum, _("operand %d must be constant"),
4707                     arg->argnum);
4708 }
4709
4710 /* Try to match an OT_CHAR token for character CH.  Consume the token
4711    and return true on success, otherwise return false.  */
4712
4713 static bfd_boolean
4714 match_char (struct mips_arg_info *arg, char ch)
4715 {
4716   if (arg->token->type == OT_CHAR && arg->token->u.ch == ch)
4717     {
4718       ++arg->token;
4719       if (ch == ',')
4720         arg->argnum += 1;
4721       return TRUE;
4722     }
4723   return FALSE;
4724 }
4725
4726 /* Try to get an expression from the next tokens in ARG.  Consume the
4727    tokens and return true on success, storing the expression value in
4728    VALUE and relocation types in R.  */
4729
4730 static bfd_boolean
4731 match_expression (struct mips_arg_info *arg, expressionS *value,
4732                   bfd_reloc_code_real_type *r)
4733 {
4734   /* If the next token is a '(' that was parsed as being part of a base
4735      expression, assume we have an elided offset.  The later match will fail
4736      if this turns out to be wrong.  */
4737   if (arg->token->type == OT_CHAR && arg->token->u.ch == '(')
4738     {
4739       value->X_op = O_constant;
4740       value->X_add_number = 0;
4741       r[0] = r[1] = r[2] = BFD_RELOC_UNUSED;
4742       return TRUE;
4743     }
4744
4745   /* Reject register-based expressions such as "0+$2" and "(($2))".
4746      For plain registers the default error seems more appropriate.  */
4747   if (arg->token->type == OT_INTEGER
4748       && arg->token->u.integer.value.X_op == O_register)
4749     {
4750       set_insn_error (arg->argnum, _("register value used as expression"));
4751       return FALSE;
4752     }
4753
4754   if (arg->token->type == OT_INTEGER)
4755     {
4756       *value = arg->token->u.integer.value;
4757       memcpy (r, arg->token->u.integer.relocs, 3 * sizeof (*r));
4758       ++arg->token;
4759       return TRUE;
4760     }
4761
4762   set_insn_error_i
4763     (arg->argnum, _("operand %d must be an immediate expression"),
4764      arg->argnum);
4765   return FALSE;
4766 }
4767
4768 /* Try to get a constant expression from the next tokens in ARG.  Consume
4769    the tokens and return return true on success, storing the constant value
4770    in *VALUE.  Use FALLBACK as the value if the match succeeded with an
4771    error.  */
4772
4773 static bfd_boolean
4774 match_const_int (struct mips_arg_info *arg, offsetT *value)
4775 {
4776   expressionS ex;
4777   bfd_reloc_code_real_type r[3];
4778
4779   if (!match_expression (arg, &ex, r))
4780     return FALSE;
4781
4782   if (r[0] == BFD_RELOC_UNUSED && ex.X_op == O_constant)
4783     *value = ex.X_add_number;
4784   else
4785     {
4786       match_not_constant (arg);
4787       return FALSE;
4788     }
4789   return TRUE;
4790 }
4791
4792 /* Return the RTYPE_* flags for a register operand of type TYPE that
4793    appears in instruction OPCODE.  */
4794
4795 static unsigned int
4796 convert_reg_type (const struct mips_opcode *opcode,
4797                   enum mips_reg_operand_type type)
4798 {
4799   switch (type)
4800     {
4801     case OP_REG_GP:
4802       return RTYPE_NUM | RTYPE_GP;
4803
4804     case OP_REG_FP:
4805       /* Allow vector register names for MDMX if the instruction is a 64-bit
4806          FPR load, store or move (including moves to and from GPRs).  */
4807       if ((mips_opts.ase & ASE_MDMX)
4808           && (opcode->pinfo & FP_D)
4809           && (opcode->pinfo & (INSN_COPROC_MOVE
4810                                | INSN_COPROC_MEMORY_DELAY
4811                                | INSN_LOAD_COPROC
4812                                | INSN_LOAD_MEMORY
4813                                | INSN_STORE_MEMORY)))
4814         return RTYPE_FPU | RTYPE_VEC;
4815       return RTYPE_FPU;
4816
4817     case OP_REG_CCC:
4818       if (opcode->pinfo & (FP_D | FP_S))
4819         return RTYPE_CCC | RTYPE_FCC;
4820       return RTYPE_CCC;
4821
4822     case OP_REG_VEC:
4823       if (opcode->membership & INSN_5400)
4824         return RTYPE_FPU;
4825       return RTYPE_FPU | RTYPE_VEC;
4826
4827     case OP_REG_ACC:
4828       return RTYPE_ACC;
4829
4830     case OP_REG_COPRO:
4831       if (opcode->name[strlen (opcode->name) - 1] == '0')
4832         return RTYPE_NUM | RTYPE_CP0;
4833       return RTYPE_NUM;
4834
4835     case OP_REG_HW:
4836       return RTYPE_NUM;
4837
4838     case OP_REG_VI:
4839       return RTYPE_NUM | RTYPE_VI;
4840
4841     case OP_REG_VF:
4842       return RTYPE_NUM | RTYPE_VF;
4843
4844     case OP_REG_R5900_I:
4845       return RTYPE_R5900_I;
4846
4847     case OP_REG_R5900_Q:
4848       return RTYPE_R5900_Q;
4849
4850     case OP_REG_R5900_R:
4851       return RTYPE_R5900_R;
4852
4853     case OP_REG_R5900_ACC:
4854       return RTYPE_R5900_ACC;
4855
4856     case OP_REG_MSA:
4857       return RTYPE_MSA;
4858
4859     case OP_REG_MSA_CTRL:
4860       return RTYPE_NUM;
4861     }
4862   abort ();
4863 }
4864
4865 /* ARG is register REGNO, of type TYPE.  Warn about any dubious registers.  */
4866
4867 static void
4868 check_regno (struct mips_arg_info *arg,
4869              enum mips_reg_operand_type type, unsigned int regno)
4870 {
4871   if (AT && type == OP_REG_GP && regno == AT)
4872     arg->seen_at = TRUE;
4873
4874   if (type == OP_REG_FP
4875       && (regno & 1) != 0
4876       && !mips_oddfpreg_ok (arg->insn->insn_mo, arg->opnum))
4877     {
4878       /* This was a warning prior to introducing O32 FPXX and FP64 support
4879          so maintain a warning for FP32 but raise an error for the new
4880          cases.  */
4881       if (FPR_SIZE == 32)
4882         as_warn (_("float register should be even, was %d"), regno);
4883       else
4884         as_bad (_("float register should be even, was %d"), regno);
4885     }
4886
4887   if (type == OP_REG_CCC)
4888     {
4889       const char *name;
4890       size_t length;
4891
4892       name = arg->insn->insn_mo->name;
4893       length = strlen (name);
4894       if ((regno & 1) != 0
4895           && ((length >= 3 && strcmp (name + length - 3, ".ps") == 0)
4896               || (length >= 5 && strncmp (name + length - 5, "any2", 4) == 0)))
4897         as_warn (_("condition code register should be even for %s, was %d"),
4898                  name, regno);
4899
4900       if ((regno & 3) != 0
4901           && (length >= 5 && strncmp (name + length - 5, "any4", 4) == 0))
4902         as_warn (_("condition code register should be 0 or 4 for %s, was %d"),
4903                  name, regno);
4904     }
4905 }
4906
4907 /* ARG is a register with symbol value SYMVAL.  Try to interpret it as
4908    a register of type TYPE.  Return true on success, storing the register
4909    number in *REGNO and warning about any dubious uses.  */
4910
4911 static bfd_boolean
4912 match_regno (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4913              unsigned int symval, unsigned int *regno)
4914 {
4915   if (type == OP_REG_VEC)
4916     symval = mips_prefer_vec_regno (symval);
4917   if (!(symval & convert_reg_type (arg->insn->insn_mo, type)))
4918     return FALSE;
4919
4920   *regno = symval & RNUM_MASK;
4921   check_regno (arg, type, *regno);
4922   return TRUE;
4923 }
4924
4925 /* Try to interpret the next token in ARG as a register of type TYPE.
4926    Consume the token and return true on success, storing the register
4927    number in *REGNO.  Return false on failure.  */
4928
4929 static bfd_boolean
4930 match_reg (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4931            unsigned int *regno)
4932 {
4933   if (arg->token->type == OT_REG
4934       && match_regno (arg, type, arg->token->u.regno, regno))
4935     {
4936       ++arg->token;
4937       return TRUE;
4938     }
4939   return FALSE;
4940 }
4941
4942 /* Try to interpret the next token in ARG as a range of registers of type TYPE.
4943    Consume the token and return true on success, storing the register numbers
4944    in *REGNO1 and *REGNO2.  Return false on failure.  */
4945
4946 static bfd_boolean
4947 match_reg_range (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4948                  unsigned int *regno1, unsigned int *regno2)
4949 {
4950   if (match_reg (arg, type, regno1))
4951     {
4952       *regno2 = *regno1;
4953       return TRUE;
4954     }
4955   if (arg->token->type == OT_REG_RANGE
4956       && match_regno (arg, type, arg->token->u.reg_range.regno1, regno1)
4957       && match_regno (arg, type, arg->token->u.reg_range.regno2, regno2)
4958       && *regno1 <= *regno2)
4959     {
4960       ++arg->token;
4961       return TRUE;
4962     }
4963   return FALSE;
4964 }
4965
4966 /* OP_INT matcher.  */
4967
4968 static bfd_boolean
4969 match_int_operand (struct mips_arg_info *arg,
4970                    const struct mips_operand *operand_base)
4971 {
4972   const struct mips_int_operand *operand;
4973   unsigned int uval;
4974   int min_val, max_val, factor;
4975   offsetT sval;
4976
4977   operand = (const struct mips_int_operand *) operand_base;
4978   factor = 1 << operand->shift;
4979   min_val = mips_int_operand_min (operand);
4980   max_val = mips_int_operand_max (operand);
4981
4982   if (operand_base->lsb == 0
4983       && operand_base->size == 16
4984       && operand->shift == 0
4985       && operand->bias == 0
4986       && (operand->max_val == 32767 || operand->max_val == 65535))
4987     {
4988       /* The operand can be relocated.  */
4989       if (!match_expression (arg, &offset_expr, offset_reloc))
4990         return FALSE;
4991
4992       if (offset_reloc[0] != BFD_RELOC_UNUSED)
4993         /* Relocation operators were used.  Accept the arguent and
4994            leave the relocation value in offset_expr and offset_relocs
4995            for the caller to process.  */
4996         return TRUE;
4997
4998       if (offset_expr.X_op != O_constant)
4999         {
5000           /* Accept non-constant operands if no later alternative matches,
5001              leaving it for the caller to process.  */
5002           if (!arg->lax_match)
5003             return FALSE;
5004           offset_reloc[0] = BFD_RELOC_LO16;
5005           return TRUE;
5006         }
5007
5008       /* Clear the global state; we're going to install the operand
5009          ourselves.  */
5010       sval = offset_expr.X_add_number;
5011       offset_expr.X_op = O_absent;
5012
5013       /* For compatibility with older assemblers, we accept
5014          0x8000-0xffff as signed 16-bit numbers when only
5015          signed numbers are allowed.  */
5016       if (sval > max_val)
5017         {
5018           max_val = ((1 << operand_base->size) - 1) << operand->shift;
5019           if (!arg->lax_match && sval <= max_val)
5020             return FALSE;
5021         }
5022     }
5023   else
5024     {
5025       if (!match_const_int (arg, &sval))
5026         return FALSE;
5027     }
5028
5029   arg->last_op_int = sval;
5030
5031   if (sval < min_val || sval > max_val || sval % factor)
5032     {
5033       match_out_of_range (arg);
5034       return FALSE;
5035     }
5036
5037   uval = (unsigned int) sval >> operand->shift;
5038   uval -= operand->bias;
5039
5040   /* Handle -mfix-cn63xxp1.  */
5041   if (arg->opnum == 1
5042       && mips_fix_cn63xxp1
5043       && !mips_opts.micromips
5044       && strcmp ("pref", arg->insn->insn_mo->name) == 0)
5045     switch (uval)
5046       {
5047       case 5:
5048       case 25:
5049       case 26:
5050       case 27:
5051       case 28:
5052       case 29:
5053       case 30:
5054       case 31:
5055         /* These are ok.  */
5056         break;
5057
5058       default:
5059         /* The rest must be changed to 28.  */
5060         uval = 28;
5061         break;
5062       }
5063
5064   insn_insert_operand (arg->insn, operand_base, uval);
5065   return TRUE;
5066 }
5067
5068 /* OP_MAPPED_INT matcher.  */
5069
5070 static bfd_boolean
5071 match_mapped_int_operand (struct mips_arg_info *arg,
5072                           const struct mips_operand *operand_base)
5073 {
5074   const struct mips_mapped_int_operand *operand;
5075   unsigned int uval, num_vals;
5076   offsetT sval;
5077
5078   operand = (const struct mips_mapped_int_operand *) operand_base;
5079   if (!match_const_int (arg, &sval))
5080     return FALSE;
5081
5082   num_vals = 1 << operand_base->size;
5083   for (uval = 0; uval < num_vals; uval++)
5084     if (operand->int_map[uval] == sval)
5085       break;
5086   if (uval == num_vals)
5087     {
5088       match_out_of_range (arg);
5089       return FALSE;
5090     }
5091
5092   insn_insert_operand (arg->insn, operand_base, uval);
5093   return TRUE;
5094 }
5095
5096 /* OP_MSB matcher.  */
5097
5098 static bfd_boolean
5099 match_msb_operand (struct mips_arg_info *arg,
5100                    const struct mips_operand *operand_base)
5101 {
5102   const struct mips_msb_operand *operand;
5103   int min_val, max_val, max_high;
5104   offsetT size, sval, high;
5105
5106   operand = (const struct mips_msb_operand *) operand_base;
5107   min_val = operand->bias;
5108   max_val = min_val + (1 << operand_base->size) - 1;
5109   max_high = operand->opsize;
5110
5111   if (!match_const_int (arg, &size))
5112     return FALSE;
5113
5114   high = size + arg->last_op_int;
5115   sval = operand->add_lsb ? high : size;
5116
5117   if (size < 0 || high > max_high || sval < min_val || sval > max_val)
5118     {
5119       match_out_of_range (arg);
5120       return FALSE;
5121     }
5122   insn_insert_operand (arg->insn, operand_base, sval - min_val);
5123   return TRUE;
5124 }
5125
5126 /* OP_REG matcher.  */
5127
5128 static bfd_boolean
5129 match_reg_operand (struct mips_arg_info *arg,
5130                    const struct mips_operand *operand_base)
5131 {
5132   const struct mips_reg_operand *operand;
5133   unsigned int regno, uval, num_vals;
5134
5135   operand = (const struct mips_reg_operand *) operand_base;
5136   if (!match_reg (arg, operand->reg_type, &regno))
5137     return FALSE;
5138
5139   if (operand->reg_map)
5140     {
5141       num_vals = 1 << operand->root.size;
5142       for (uval = 0; uval < num_vals; uval++)
5143         if (operand->reg_map[uval] == regno)
5144           break;
5145       if (num_vals == uval)
5146         return FALSE;
5147     }
5148   else
5149     uval = regno;
5150
5151   arg->last_regno = regno;
5152   if (arg->opnum == 1)
5153     arg->dest_regno = regno;
5154   insn_insert_operand (arg->insn, operand_base, uval);
5155   return TRUE;
5156 }
5157
5158 /* OP_REG_PAIR matcher.  */
5159
5160 static bfd_boolean
5161 match_reg_pair_operand (struct mips_arg_info *arg,
5162                         const struct mips_operand *operand_base)
5163 {
5164   const struct mips_reg_pair_operand *operand;
5165   unsigned int regno1, regno2, uval, num_vals;
5166
5167   operand = (const struct mips_reg_pair_operand *) operand_base;
5168   if (!match_reg (arg, operand->reg_type, &regno1)
5169       || !match_char (arg, ',')
5170       || !match_reg (arg, operand->reg_type, &regno2))
5171     return FALSE;
5172
5173   num_vals = 1 << operand_base->size;
5174   for (uval = 0; uval < num_vals; uval++)
5175     if (operand->reg1_map[uval] == regno1 && operand->reg2_map[uval] == regno2)
5176       break;
5177   if (uval == num_vals)
5178     return FALSE;
5179
5180   insn_insert_operand (arg->insn, operand_base, uval);
5181   return TRUE;
5182 }
5183
5184 /* OP_PCREL matcher.  The caller chooses the relocation type.  */
5185
5186 static bfd_boolean
5187 match_pcrel_operand (struct mips_arg_info *arg)
5188 {
5189   bfd_reloc_code_real_type r[3];
5190
5191   return match_expression (arg, &offset_expr, r) && r[0] == BFD_RELOC_UNUSED;
5192 }
5193
5194 /* OP_PERF_REG matcher.  */
5195
5196 static bfd_boolean
5197 match_perf_reg_operand (struct mips_arg_info *arg,
5198                         const struct mips_operand *operand)
5199 {
5200   offsetT sval;
5201
5202   if (!match_const_int (arg, &sval))
5203     return FALSE;
5204
5205   if (sval != 0
5206       && (sval != 1
5207           || (mips_opts.arch == CPU_R5900
5208               && (strcmp (arg->insn->insn_mo->name, "mfps") == 0
5209                   || strcmp (arg->insn->insn_mo->name, "mtps") == 0))))
5210     {
5211       set_insn_error (arg->argnum, _("invalid performance register"));
5212       return FALSE;
5213     }
5214
5215   insn_insert_operand (arg->insn, operand, sval);
5216   return TRUE;
5217 }
5218
5219 /* OP_ADDIUSP matcher.  */
5220
5221 static bfd_boolean
5222 match_addiusp_operand (struct mips_arg_info *arg,
5223                        const struct mips_operand *operand)
5224 {
5225   offsetT sval;
5226   unsigned int uval;
5227
5228   if (!match_const_int (arg, &sval))
5229     return FALSE;
5230
5231   if (sval % 4)
5232     {
5233       match_out_of_range (arg);
5234       return FALSE;
5235     }
5236
5237   sval /= 4;
5238   if (!(sval >= -258 && sval <= 257) || (sval >= -2 && sval <= 1))
5239     {
5240       match_out_of_range (arg);
5241       return FALSE;
5242     }
5243
5244   uval = (unsigned int) sval;
5245   uval = ((uval >> 1) & ~0xff) | (uval & 0xff);
5246   insn_insert_operand (arg->insn, operand, uval);
5247   return TRUE;
5248 }
5249
5250 /* OP_CLO_CLZ_DEST matcher.  */
5251
5252 static bfd_boolean
5253 match_clo_clz_dest_operand (struct mips_arg_info *arg,
5254                             const struct mips_operand *operand)
5255 {
5256   unsigned int regno;
5257
5258   if (!match_reg (arg, OP_REG_GP, &regno))
5259     return FALSE;
5260
5261   insn_insert_operand (arg->insn, operand, regno | (regno << 5));
5262   return TRUE;
5263 }
5264
5265 /* OP_CHECK_PREV matcher.  */
5266
5267 static bfd_boolean
5268 match_check_prev_operand (struct mips_arg_info *arg,
5269                           const struct mips_operand *operand_base)
5270 {
5271   const struct mips_check_prev_operand *operand;
5272   unsigned int regno;
5273
5274   operand = (const struct mips_check_prev_operand *) operand_base;
5275
5276   if (!match_reg (arg, OP_REG_GP, &regno))
5277     return FALSE;
5278
5279   if (!operand->zero_ok && regno == 0)
5280     return FALSE;
5281
5282   if ((operand->less_than_ok && regno < arg->last_regno)
5283       || (operand->greater_than_ok && regno > arg->last_regno)
5284       || (operand->equal_ok && regno == arg->last_regno))
5285     {
5286       arg->last_regno = regno;
5287       insn_insert_operand (arg->insn, operand_base, regno);
5288       return TRUE;
5289     }
5290
5291   return FALSE;
5292 }
5293
5294 /* OP_SAME_RS_RT matcher.  */
5295
5296 static bfd_boolean
5297 match_same_rs_rt_operand (struct mips_arg_info *arg,
5298                           const struct mips_operand *operand)
5299 {
5300   unsigned int regno;
5301
5302   if (!match_reg (arg, OP_REG_GP, &regno))
5303     return FALSE;
5304
5305   if (regno == 0)
5306     {
5307       set_insn_error (arg->argnum, _("the source register must not be $0"));
5308       return FALSE;
5309     }
5310
5311   arg->last_regno = regno;
5312
5313   insn_insert_operand (arg->insn, operand, regno | (regno << 5));
5314   return TRUE;
5315 }
5316
5317 /* OP_LWM_SWM_LIST matcher.  */
5318
5319 static bfd_boolean
5320 match_lwm_swm_list_operand (struct mips_arg_info *arg,
5321                             const struct mips_operand *operand)
5322 {
5323   unsigned int reglist, sregs, ra, regno1, regno2;
5324   struct mips_arg_info reset;
5325
5326   reglist = 0;
5327   if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5328     return FALSE;
5329   do
5330     {
5331       if (regno2 == FP && regno1 >= S0 && regno1 <= S7)
5332         {
5333           reglist |= 1 << FP;
5334           regno2 = S7;
5335         }
5336       reglist |= ((1U << regno2 << 1) - 1) & -(1U << regno1);
5337       reset = *arg;
5338     }
5339   while (match_char (arg, ',')
5340          && match_reg_range (arg, OP_REG_GP, &regno1, &regno2));
5341   *arg = reset;
5342
5343   if (operand->size == 2)
5344     {
5345       /* The list must include both ra and s0-sN, for 0 <= N <= 3.  E.g.:
5346
5347          s0, ra
5348          s0, s1, ra, s2, s3
5349          s0-s2, ra
5350
5351          and any permutations of these.  */
5352       if ((reglist & 0xfff1ffff) != 0x80010000)
5353         return FALSE;
5354
5355       sregs = (reglist >> 17) & 7;
5356       ra = 0;
5357     }
5358   else
5359     {
5360       /* The list must include at least one of ra and s0-sN,
5361          for 0 <= N <= 8.  (Note that there is a gap between s7 and s8,
5362          which are $23 and $30 respectively.)  E.g.:
5363
5364          ra
5365          s0
5366          ra, s0, s1, s2
5367          s0-s8
5368          s0-s5, ra
5369
5370          and any permutations of these.  */
5371       if ((reglist & 0x3f00ffff) != 0)
5372         return FALSE;
5373
5374       ra = (reglist >> 27) & 0x10;
5375       sregs = ((reglist >> 22) & 0x100) | ((reglist >> 16) & 0xff);
5376     }
5377   sregs += 1;
5378   if ((sregs & -sregs) != sregs)
5379     return FALSE;
5380
5381   insn_insert_operand (arg->insn, operand, (ffs (sregs) - 1) | ra);
5382   return TRUE;
5383 }
5384
5385 /* OP_ENTRY_EXIT_LIST matcher.  */
5386
5387 static unsigned int
5388 match_entry_exit_operand (struct mips_arg_info *arg,
5389                           const struct mips_operand *operand)
5390 {
5391   unsigned int mask;
5392   bfd_boolean is_exit;
5393
5394   /* The format is the same for both ENTRY and EXIT, but the constraints
5395      are different.  */
5396   is_exit = strcmp (arg->insn->insn_mo->name, "exit") == 0;
5397   mask = (is_exit ? 7 << 3 : 0);
5398   do
5399     {
5400       unsigned int regno1, regno2;
5401       bfd_boolean is_freg;
5402
5403       if (match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5404         is_freg = FALSE;
5405       else if (match_reg_range (arg, OP_REG_FP, &regno1, &regno2))
5406         is_freg = TRUE;
5407       else
5408         return FALSE;
5409
5410       if (is_exit && is_freg && regno1 == 0 && regno2 < 2)
5411         {
5412           mask &= ~(7 << 3);
5413           mask |= (5 + regno2) << 3;
5414         }
5415       else if (!is_exit && regno1 == 4 && regno2 >= 4 && regno2 <= 7)
5416         mask |= (regno2 - 3) << 3;
5417       else if (regno1 == 16 && regno2 >= 16 && regno2 <= 17)
5418         mask |= (regno2 - 15) << 1;
5419       else if (regno1 == RA && regno2 == RA)
5420         mask |= 1;
5421       else
5422         return FALSE;
5423     }
5424   while (match_char (arg, ','));
5425
5426   insn_insert_operand (arg->insn, operand, mask);
5427   return TRUE;
5428 }
5429
5430 /* OP_SAVE_RESTORE_LIST matcher.  */
5431
5432 static bfd_boolean
5433 match_save_restore_list_operand (struct mips_arg_info *arg)
5434 {
5435   unsigned int opcode, args, statics, sregs;
5436   unsigned int num_frame_sizes, num_args, num_statics, num_sregs;
5437   offsetT frame_size;
5438
5439   opcode = arg->insn->insn_opcode;
5440   frame_size = 0;
5441   num_frame_sizes = 0;
5442   args = 0;
5443   statics = 0;
5444   sregs = 0;
5445   do
5446     {
5447       unsigned int regno1, regno2;
5448
5449       if (arg->token->type == OT_INTEGER)
5450         {
5451           /* Handle the frame size.  */
5452           if (!match_const_int (arg, &frame_size))
5453             return FALSE;
5454           num_frame_sizes += 1;
5455         }
5456       else
5457         {
5458           if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
5459             return FALSE;
5460
5461           while (regno1 <= regno2)
5462             {
5463               if (regno1 >= 4 && regno1 <= 7)
5464                 {
5465                   if (num_frame_sizes == 0)
5466                     /* args $a0-$a3 */
5467                     args |= 1 << (regno1 - 4);
5468                   else
5469                     /* statics $a0-$a3 */
5470                     statics |= 1 << (regno1 - 4);
5471                 }
5472               else if (regno1 >= 16 && regno1 <= 23)
5473                 /* $s0-$s7 */
5474                 sregs |= 1 << (regno1 - 16);
5475               else if (regno1 == 30)
5476                 /* $s8 */
5477                 sregs |= 1 << 8;
5478               else if (regno1 == 31)
5479                 /* Add $ra to insn.  */
5480                 opcode |= 0x40;
5481               else
5482                 return FALSE;
5483               regno1 += 1;
5484               if (regno1 == 24)
5485                 regno1 = 30;
5486             }
5487         }
5488     }
5489   while (match_char (arg, ','));
5490
5491   /* Encode args/statics combination.  */
5492   if (args & statics)
5493     return FALSE;
5494   else if (args == 0xf)
5495     /* All $a0-$a3 are args.  */
5496     opcode |= MIPS16_ALL_ARGS << 16;
5497   else if (statics == 0xf)
5498     /* All $a0-$a3 are statics.  */
5499     opcode |= MIPS16_ALL_STATICS << 16;
5500   else
5501     {
5502       /* Count arg registers.  */
5503       num_args = 0;
5504       while (args & 0x1)
5505         {
5506           args >>= 1;
5507           num_args += 1;
5508         }
5509       if (args != 0)
5510         return FALSE;
5511
5512       /* Count static registers.  */
5513       num_statics = 0;
5514       while (statics & 0x8)
5515         {
5516           statics = (statics << 1) & 0xf;
5517           num_statics += 1;
5518         }
5519       if (statics != 0)
5520         return FALSE;
5521
5522       /* Encode args/statics.  */
5523       opcode |= ((num_args << 2) | num_statics) << 16;
5524     }
5525
5526   /* Encode $s0/$s1.  */
5527   if (sregs & (1 << 0))         /* $s0 */
5528     opcode |= 0x20;
5529   if (sregs & (1 << 1))         /* $s1 */
5530     opcode |= 0x10;
5531   sregs >>= 2;
5532
5533   /* Encode $s2-$s8. */
5534   num_sregs = 0;
5535   while (sregs & 1)
5536     {
5537       sregs >>= 1;
5538       num_sregs += 1;
5539     }
5540   if (sregs != 0)
5541     return FALSE;
5542   opcode |= num_sregs << 24;
5543
5544   /* Encode frame size.  */
5545   if (num_frame_sizes == 0)
5546     {
5547       set_insn_error (arg->argnum, _("missing frame size"));
5548       return FALSE;
5549     }
5550   if (num_frame_sizes > 1)
5551     {
5552       set_insn_error (arg->argnum, _("frame size specified twice"));
5553       return FALSE;
5554     }
5555   if ((frame_size & 7) != 0 || frame_size < 0 || frame_size > 0xff * 8)
5556     {
5557       set_insn_error (arg->argnum, _("invalid frame size"));
5558       return FALSE;
5559     }
5560   if (frame_size != 128 || (opcode >> 16) != 0)
5561     {
5562       frame_size /= 8;
5563       opcode |= (((frame_size & 0xf0) << 16)
5564                  | (frame_size & 0x0f));
5565     }
5566
5567   /* Finally build the instruction.  */
5568   if ((opcode >> 16) != 0 || frame_size == 0)
5569     opcode |= MIPS16_EXTEND;
5570   arg->insn->insn_opcode = opcode;
5571   return TRUE;
5572 }
5573
5574 /* OP_MDMX_IMM_REG matcher.  */
5575
5576 static bfd_boolean
5577 match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
5578                             const struct mips_operand *operand)
5579 {
5580   unsigned int regno, uval;
5581   bfd_boolean is_qh;
5582   const struct mips_opcode *opcode;
5583
5584   /* The mips_opcode records whether this is an octobyte or quadhalf
5585      instruction.  Start out with that bit in place.  */
5586   opcode = arg->insn->insn_mo;
5587   uval = mips_extract_operand (operand, opcode->match);
5588   is_qh = (uval != 0);
5589
5590   if (arg->token->type == OT_REG)
5591     {
5592       if ((opcode->membership & INSN_5400)
5593           && strcmp (opcode->name, "rzu.ob") == 0)
5594         {
5595           set_insn_error_i (arg->argnum, _("operand %d must be an immediate"),
5596                             arg->argnum);
5597           return FALSE;
5598         }
5599
5600       if (!match_regno (arg, OP_REG_VEC, arg->token->u.regno, &regno))
5601         return FALSE;
5602       ++arg->token;
5603
5604       /* Check whether this is a vector register or a broadcast of
5605          a single element.  */
5606       if (arg->token->type == OT_INTEGER_INDEX)
5607         {
5608           if (arg->token->u.index > (is_qh ? 3 : 7))
5609             {
5610               set_insn_error (arg->argnum, _("invalid element selector"));
5611               return FALSE;
5612             }
5613           uval |= arg->token->u.index << (is_qh ? 2 : 1) << 5;
5614           ++arg->token;
5615         }
5616       else
5617         {
5618           /* A full vector.  */
5619           if ((opcode->membership & INSN_5400)
5620               && (strcmp (opcode->name, "sll.ob") == 0
5621                   || strcmp (opcode->name, "srl.ob") == 0))
5622             {
5623               set_insn_error_i (arg->argnum, _("operand %d must be scalar"),
5624                                 arg->argnum);
5625               return FALSE;
5626             }
5627
5628           if (is_qh)
5629             uval |= MDMX_FMTSEL_VEC_QH << 5;
5630           else
5631             uval |= MDMX_FMTSEL_VEC_OB << 5;
5632         }
5633       uval |= regno;
5634     }
5635   else
5636     {
5637       offsetT sval;
5638
5639       if (!match_const_int (arg, &sval))
5640         return FALSE;
5641       if (sval < 0 || sval > 31)
5642         {
5643           match_out_of_range (arg);
5644           return FALSE;
5645         }
5646       uval |= (sval & 31);
5647       if (is_qh)
5648         uval |= MDMX_FMTSEL_IMM_QH << 5;
5649       else
5650         uval |= MDMX_FMTSEL_IMM_OB << 5;
5651     }
5652   insn_insert_operand (arg->insn, operand, uval);
5653   return TRUE;
5654 }
5655
5656 /* OP_IMM_INDEX matcher.  */
5657
5658 static bfd_boolean
5659 match_imm_index_operand (struct mips_arg_info *arg,
5660                          const struct mips_operand *operand)
5661 {
5662   unsigned int max_val;
5663
5664   if (arg->token->type != OT_INTEGER_INDEX)
5665     return FALSE;
5666
5667   max_val = (1 << operand->size) - 1;
5668   if (arg->token->u.index > max_val)
5669     {
5670       match_out_of_range (arg);
5671       return FALSE;
5672     }
5673   insn_insert_operand (arg->insn, operand, arg->token->u.index);
5674   ++arg->token;
5675   return TRUE;
5676 }
5677
5678 /* OP_REG_INDEX matcher.  */
5679
5680 static bfd_boolean
5681 match_reg_index_operand (struct mips_arg_info *arg,
5682                          const struct mips_operand *operand)
5683 {
5684   unsigned int regno;
5685
5686   if (arg->token->type != OT_REG_INDEX)
5687     return FALSE;
5688
5689   if (!match_regno (arg, OP_REG_GP, arg->token->u.regno, &regno))
5690     return FALSE;
5691
5692   insn_insert_operand (arg->insn, operand, regno);
5693   ++arg->token;
5694   return TRUE;
5695 }
5696
5697 /* OP_PC matcher.  */
5698
5699 static bfd_boolean
5700 match_pc_operand (struct mips_arg_info *arg)
5701 {
5702   if (arg->token->type == OT_REG && (arg->token->u.regno & RTYPE_PC))
5703     {
5704       ++arg->token;
5705       return TRUE;
5706     }
5707   return FALSE;
5708 }
5709
5710 /* OP_NON_ZERO_REG matcher.  */
5711
5712 static bfd_boolean
5713 match_non_zero_reg_operand (struct mips_arg_info *arg,
5714                             const struct mips_operand *operand)
5715 {
5716   unsigned int regno;
5717
5718   if (!match_reg (arg, OP_REG_GP, &regno))
5719     return FALSE;
5720
5721   if (regno == 0)
5722     return FALSE;
5723
5724   arg->last_regno = regno;
5725   insn_insert_operand (arg->insn, operand, regno);
5726   return TRUE;
5727 }
5728
5729 /* OP_REPEAT_DEST_REG and OP_REPEAT_PREV_REG matcher.  OTHER_REGNO is the
5730    register that we need to match.  */
5731
5732 static bfd_boolean
5733 match_tied_reg_operand (struct mips_arg_info *arg, unsigned int other_regno)
5734 {
5735   unsigned int regno;
5736
5737   return match_reg (arg, OP_REG_GP, &regno) && regno == other_regno;
5738 }
5739
5740 /* Read a floating-point constant from S for LI.S or LI.D.  LENGTH is
5741    the length of the value in bytes (4 for float, 8 for double) and
5742    USING_GPRS says whether the destination is a GPR rather than an FPR.
5743
5744    Return the constant in IMM and OFFSET as follows:
5745
5746    - If the constant should be loaded via memory, set IMM to O_absent and
5747      OFFSET to the memory address.
5748
5749    - Otherwise, if the constant should be loaded into two 32-bit registers,
5750      set IMM to the O_constant to load into the high register and OFFSET
5751      to the corresponding value for the low register.
5752
5753    - Otherwise, set IMM to the full O_constant and set OFFSET to O_absent.
5754
5755    These constants only appear as the last operand in an instruction,
5756    and every instruction that accepts them in any variant accepts them
5757    in all variants.  This means we don't have to worry about backing out
5758    any changes if the instruction does not match.  We just match
5759    unconditionally and report an error if the constant is invalid.  */
5760
5761 static bfd_boolean
5762 match_float_constant (struct mips_arg_info *arg, expressionS *imm,
5763                       expressionS *offset, int length, bfd_boolean using_gprs)
5764 {
5765   char *p;
5766   segT seg, new_seg;
5767   subsegT subseg;
5768   const char *newname;
5769   unsigned char *data;
5770
5771   /* Where the constant is placed is based on how the MIPS assembler
5772      does things:
5773
5774      length == 4 && using_gprs  -- immediate value only
5775      length == 8 && using_gprs  -- .rdata or immediate value
5776      length == 4 && !using_gprs -- .lit4 or immediate value
5777      length == 8 && !using_gprs -- .lit8 or immediate value
5778
5779      The .lit4 and .lit8 sections are only used if permitted by the
5780      -G argument.  */
5781   if (arg->token->type != OT_FLOAT)
5782     {
5783       set_insn_error (arg->argnum, _("floating-point expression required"));
5784       return FALSE;
5785     }
5786
5787   gas_assert (arg->token->u.flt.length == length);
5788   data = arg->token->u.flt.data;
5789   ++arg->token;
5790
5791   /* Handle 32-bit constants for which an immediate value is best.  */
5792   if (length == 4
5793       && (using_gprs
5794           || g_switch_value < 4
5795           || (data[0] == 0 && data[1] == 0)
5796           || (data[2] == 0 && data[3] == 0)))
5797     {
5798       imm->X_op = O_constant;
5799       if (!target_big_endian)
5800         imm->X_add_number = bfd_getl32 (data);
5801       else
5802         imm->X_add_number = bfd_getb32 (data);
5803       offset->X_op = O_absent;
5804       return TRUE;
5805     }
5806
5807   /* Handle 64-bit constants for which an immediate value is best.  */
5808   if (length == 8
5809       && !mips_disable_float_construction
5810       /* Constants can only be constructed in GPRs and copied to FPRs if the
5811          GPRs are at least as wide as the FPRs or MTHC1 is available.
5812          Unlike most tests for 32-bit floating-point registers this check
5813          specifically looks for GPR_SIZE == 32 as the FPXX ABI does not
5814          permit 64-bit moves without MXHC1.
5815          Force the constant into memory otherwise.  */
5816       && (using_gprs
5817           || GPR_SIZE == 64
5818           || ISA_HAS_MXHC1 (mips_opts.isa)
5819           || FPR_SIZE == 32)
5820       && ((data[0] == 0 && data[1] == 0)
5821           || (data[2] == 0 && data[3] == 0))
5822       && ((data[4] == 0 && data[5] == 0)
5823           || (data[6] == 0 && data[7] == 0)))
5824     {
5825       /* The value is simple enough to load with a couple of instructions.
5826          If using 32-bit registers, set IMM to the high order 32 bits and
5827          OFFSET to the low order 32 bits.  Otherwise, set IMM to the entire
5828          64 bit constant.  */
5829       if (GPR_SIZE == 32 || (!using_gprs && FPR_SIZE != 64))
5830         {
5831           imm->X_op = O_constant;
5832           offset->X_op = O_constant;
5833           if (!target_big_endian)
5834             {
5835               imm->X_add_number = bfd_getl32 (data + 4);
5836               offset->X_add_number = bfd_getl32 (data);
5837             }
5838           else
5839             {
5840               imm->X_add_number = bfd_getb32 (data);
5841               offset->X_add_number = bfd_getb32 (data + 4);
5842             }
5843           if (offset->X_add_number == 0)
5844             offset->X_op = O_absent;
5845         }
5846       else
5847         {
5848           imm->X_op = O_constant;
5849           if (!target_big_endian)
5850             imm->X_add_number = bfd_getl64 (data);
5851           else
5852             imm->X_add_number = bfd_getb64 (data);
5853           offset->X_op = O_absent;
5854         }
5855       return TRUE;
5856     }
5857
5858   /* Switch to the right section.  */
5859   seg = now_seg;
5860   subseg = now_subseg;
5861   if (length == 4)
5862     {
5863       gas_assert (!using_gprs && g_switch_value >= 4);
5864       newname = ".lit4";
5865     }
5866   else
5867     {
5868       if (using_gprs || g_switch_value < 8)
5869         newname = RDATA_SECTION_NAME;
5870       else
5871         newname = ".lit8";
5872     }
5873
5874   new_seg = subseg_new (newname, (subsegT) 0);
5875   bfd_set_section_flags (stdoutput, new_seg,
5876                          SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA);
5877   frag_align (length == 4 ? 2 : 3, 0, 0);
5878   if (strncmp (TARGET_OS, "elf", 3) != 0)
5879     record_alignment (new_seg, 4);
5880   else
5881     record_alignment (new_seg, length == 4 ? 2 : 3);
5882   if (seg == now_seg)
5883     as_bad (_("cannot use `%s' in this section"), arg->insn->insn_mo->name);
5884
5885   /* Set the argument to the current address in the section.  */
5886   imm->X_op = O_absent;
5887   offset->X_op = O_symbol;
5888   offset->X_add_symbol = symbol_temp_new_now ();
5889   offset->X_add_number = 0;
5890
5891   /* Put the floating point number into the section.  */
5892   p = frag_more (length);
5893   memcpy (p, data, length);
5894
5895   /* Switch back to the original section.  */
5896   subseg_set (seg, subseg);
5897   return TRUE;
5898 }
5899
5900 /* OP_VU0_SUFFIX and OP_VU0_MATCH_SUFFIX matcher; MATCH_P selects between
5901    them.  */
5902
5903 static bfd_boolean
5904 match_vu0_suffix_operand (struct mips_arg_info *arg,
5905                           const struct mips_operand *operand,
5906                           bfd_boolean match_p)
5907 {
5908   unsigned int uval;
5909
5910   /* The operand can be an XYZW mask or a single 2-bit channel index
5911      (with X being 0).  */
5912   gas_assert (operand->size == 2 || operand->size == 4);
5913
5914   /* The suffix can be omitted when it is already part of the opcode.  */
5915   if (arg->token->type != OT_CHANNELS)
5916     return match_p;
5917
5918   uval = arg->token->u.channels;
5919   if (operand->size == 2)
5920     {
5921       /* Check that a single bit is set and convert it into a 2-bit index.  */
5922       if ((uval & -uval) != uval)
5923         return FALSE;
5924       uval = 4 - ffs (uval);
5925     }
5926
5927   if (match_p && insn_extract_operand (arg->insn, operand) != uval)
5928     return FALSE;
5929
5930   ++arg->token;
5931   if (!match_p)
5932     insn_insert_operand (arg->insn, operand, uval);
5933   return TRUE;
5934 }
5935
5936 /* S is the text seen for ARG.  Match it against OPERAND.  Return the end
5937    of the argument text if the match is successful, otherwise return null.  */
5938
5939 static bfd_boolean
5940 match_operand (struct mips_arg_info *arg,
5941                const struct mips_operand *operand)
5942 {
5943   switch (operand->type)
5944     {
5945     case OP_INT:
5946       return match_int_operand (arg, operand);
5947
5948     case OP_MAPPED_INT:
5949       return match_mapped_int_operand (arg, operand);
5950
5951     case OP_MSB:
5952       return match_msb_operand (arg, operand);
5953
5954     case OP_REG:
5955     case OP_OPTIONAL_REG:
5956       return match_reg_operand (arg, operand);
5957
5958     case OP_REG_PAIR:
5959       return match_reg_pair_operand (arg, operand);
5960
5961     case OP_PCREL:
5962       return match_pcrel_operand (arg);
5963
5964     case OP_PERF_REG:
5965       return match_perf_reg_operand (arg, operand);
5966
5967     case OP_ADDIUSP_INT:
5968       return match_addiusp_operand (arg, operand);
5969
5970     case OP_CLO_CLZ_DEST:
5971       return match_clo_clz_dest_operand (arg, operand);
5972
5973     case OP_LWM_SWM_LIST:
5974       return match_lwm_swm_list_operand (arg, operand);
5975
5976     case OP_ENTRY_EXIT_LIST:
5977       return match_entry_exit_operand (arg, operand);
5978
5979     case OP_SAVE_RESTORE_LIST:
5980       return match_save_restore_list_operand (arg);
5981
5982     case OP_MDMX_IMM_REG:
5983       return match_mdmx_imm_reg_operand (arg, operand);
5984
5985     case OP_REPEAT_DEST_REG:
5986       return match_tied_reg_operand (arg, arg->dest_regno);
5987
5988     case OP_REPEAT_PREV_REG:
5989       return match_tied_reg_operand (arg, arg->last_regno);
5990
5991     case OP_PC:
5992       return match_pc_operand (arg);
5993
5994     case OP_VU0_SUFFIX:
5995       return match_vu0_suffix_operand (arg, operand, FALSE);
5996
5997     case OP_VU0_MATCH_SUFFIX:
5998       return match_vu0_suffix_operand (arg, operand, TRUE);
5999
6000     case OP_IMM_INDEX:
6001       return match_imm_index_operand (arg, operand);
6002
6003     case OP_REG_INDEX:
6004       return match_reg_index_operand (arg, operand);
6005
6006     case OP_SAME_RS_RT:
6007       return match_same_rs_rt_operand (arg, operand);
6008
6009     case OP_CHECK_PREV:
6010       return match_check_prev_operand (arg, operand);
6011
6012     case OP_NON_ZERO_REG:
6013       return match_non_zero_reg_operand (arg, operand);
6014     }
6015   abort ();
6016 }
6017
6018 /* ARG is the state after successfully matching an instruction.
6019    Issue any queued-up warnings.  */
6020
6021 static void
6022 check_completed_insn (struct mips_arg_info *arg)
6023 {
6024   if (arg->seen_at)
6025     {
6026       if (AT == ATREG)
6027         as_warn (_("used $at without \".set noat\""));
6028       else
6029         as_warn (_("used $%u with \".set at=$%u\""), AT, AT);
6030     }
6031 }
6032
6033 /* Return true if modifying general-purpose register REG needs a delay.  */
6034
6035 static bfd_boolean
6036 reg_needs_delay (unsigned int reg)
6037 {
6038   unsigned long prev_pinfo;
6039
6040   prev_pinfo = history[0].insn_mo->pinfo;
6041   if (!mips_opts.noreorder
6042       && (((prev_pinfo & INSN_LOAD_MEMORY) && !gpr_interlocks)
6043           || ((prev_pinfo & INSN_LOAD_COPROC) && !cop_interlocks))
6044       && (gpr_write_mask (&history[0]) & (1 << reg)))
6045     return TRUE;
6046
6047   return FALSE;
6048 }
6049
6050 /* Classify an instruction according to the FIX_VR4120_* enumeration.
6051    Return NUM_FIX_VR4120_CLASSES if the instruction isn't affected
6052    by VR4120 errata.  */
6053
6054 static unsigned int
6055 classify_vr4120_insn (const char *name)
6056 {
6057   if (strncmp (name, "macc", 4) == 0)
6058     return FIX_VR4120_MACC;
6059   if (strncmp (name, "dmacc", 5) == 0)
6060     return FIX_VR4120_DMACC;
6061   if (strncmp (name, "mult", 4) == 0)
6062     return FIX_VR4120_MULT;
6063   if (strncmp (name, "dmult", 5) == 0)
6064     return FIX_VR4120_DMULT;
6065   if (strstr (name, "div"))
6066     return FIX_VR4120_DIV;
6067   if (strcmp (name, "mtlo") == 0 || strcmp (name, "mthi") == 0)
6068     return FIX_VR4120_MTHILO;
6069   return NUM_FIX_VR4120_CLASSES;
6070 }
6071
6072 #define INSN_ERET       0x42000018
6073 #define INSN_DERET      0x4200001f
6074 #define INSN_DMULT      0x1c
6075 #define INSN_DMULTU     0x1d
6076
6077 /* Return the number of instructions that must separate INSN1 and INSN2,
6078    where INSN1 is the earlier instruction.  Return the worst-case value
6079    for any INSN2 if INSN2 is null.  */
6080
6081 static unsigned int
6082 insns_between (const struct mips_cl_insn *insn1,
6083                const struct mips_cl_insn *insn2)
6084 {
6085   unsigned long pinfo1, pinfo2;
6086   unsigned int mask;
6087
6088   /* If INFO2 is null, pessimistically assume that all flags are set for
6089      the second instruction.  */
6090   pinfo1 = insn1->insn_mo->pinfo;
6091   pinfo2 = insn2 ? insn2->insn_mo->pinfo : ~0U;
6092
6093   /* For most targets, write-after-read dependencies on the HI and LO
6094      registers must be separated by at least two instructions.  */
6095   if (!hilo_interlocks)
6096     {
6097       if ((pinfo1 & INSN_READ_LO) && (pinfo2 & INSN_WRITE_LO))
6098         return 2;
6099       if ((pinfo1 & INSN_READ_HI) && (pinfo2 & INSN_WRITE_HI))
6100         return 2;
6101     }
6102
6103   /* If we're working around r7000 errata, there must be two instructions
6104      between an mfhi or mflo and any instruction that uses the result.  */
6105   if (mips_7000_hilo_fix
6106       && !mips_opts.micromips
6107       && MF_HILO_INSN (pinfo1)
6108       && (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1))))
6109     return 2;
6110
6111   /* If we're working around 24K errata, one instruction is required
6112      if an ERET or DERET is followed by a branch instruction.  */
6113   if (mips_fix_24k && !mips_opts.micromips)
6114     {
6115       if (insn1->insn_opcode == INSN_ERET
6116           || insn1->insn_opcode == INSN_DERET)
6117         {
6118           if (insn2 == NULL
6119               || insn2->insn_opcode == INSN_ERET
6120               || insn2->insn_opcode == INSN_DERET
6121               || delayed_branch_p (insn2))
6122             return 1;
6123         }
6124     }
6125
6126   /* If we're working around PMC RM7000 errata, there must be three
6127      nops between a dmult and a load instruction.  */
6128   if (mips_fix_rm7000 && !mips_opts.micromips)
6129     {
6130       if ((insn1->insn_opcode & insn1->insn_mo->mask) == INSN_DMULT
6131           || (insn1->insn_opcode & insn1->insn_mo->mask) == INSN_DMULTU)
6132         {
6133           if (pinfo2 & INSN_LOAD_MEMORY)
6134            return 3;
6135         }
6136     }
6137
6138   /* If working around VR4120 errata, check for combinations that need
6139      a single intervening instruction.  */
6140   if (mips_fix_vr4120 && !mips_opts.micromips)
6141     {
6142       unsigned int class1, class2;
6143
6144       class1 = classify_vr4120_insn (insn1->insn_mo->name);
6145       if (class1 != NUM_FIX_VR4120_CLASSES && vr4120_conflicts[class1] != 0)
6146         {
6147           if (insn2 == NULL)
6148             return 1;
6149           class2 = classify_vr4120_insn (insn2->insn_mo->name);
6150           if (vr4120_conflicts[class1] & (1 << class2))
6151             return 1;
6152         }
6153     }
6154
6155   if (!HAVE_CODE_COMPRESSION)
6156     {
6157       /* Check for GPR or coprocessor load delays.  All such delays
6158          are on the RT register.  */
6159       /* Itbl support may require additional care here.  */
6160       if ((!gpr_interlocks && (pinfo1 & INSN_LOAD_MEMORY))
6161           || (!cop_interlocks && (pinfo1 & INSN_LOAD_COPROC)))
6162         {
6163           if (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1)))
6164             return 1;
6165         }
6166
6167       /* Check for generic coprocessor hazards.
6168
6169          This case is not handled very well.  There is no special
6170          knowledge of CP0 handling, and the coprocessors other than
6171          the floating point unit are not distinguished at all.  */
6172       /* Itbl support may require additional care here. FIXME!
6173          Need to modify this to include knowledge about
6174          user specified delays!  */
6175       else if ((!cop_interlocks && (pinfo1 & INSN_COPROC_MOVE))
6176                || (!cop_mem_interlocks && (pinfo1 & INSN_COPROC_MEMORY_DELAY)))
6177         {
6178           /* Handle cases where INSN1 writes to a known general coprocessor
6179              register.  There must be a one instruction delay before INSN2
6180              if INSN2 reads that register, otherwise no delay is needed.  */
6181           mask = fpr_write_mask (insn1);
6182           if (mask != 0)
6183             {
6184               if (!insn2 || (mask & fpr_read_mask (insn2)) != 0)
6185                 return 1;
6186             }
6187           else
6188             {
6189               /* Read-after-write dependencies on the control registers
6190                  require a two-instruction gap.  */
6191               if ((pinfo1 & INSN_WRITE_COND_CODE)
6192                   && (pinfo2 & INSN_READ_COND_CODE))
6193                 return 2;
6194
6195               /* We don't know exactly what INSN1 does.  If INSN2 is
6196                  also a coprocessor instruction, assume there must be
6197                  a one instruction gap.  */
6198               if (pinfo2 & INSN_COP)
6199                 return 1;
6200             }
6201         }
6202
6203       /* Check for read-after-write dependencies on the coprocessor
6204          control registers in cases where INSN1 does not need a general
6205          coprocessor delay.  This means that INSN1 is a floating point
6206          comparison instruction.  */
6207       /* Itbl support may require additional care here.  */
6208       else if (!cop_interlocks
6209                && (pinfo1 & INSN_WRITE_COND_CODE)
6210                && (pinfo2 & INSN_READ_COND_CODE))
6211         return 1;
6212     }
6213
6214   /* Forbidden slots can not contain Control Transfer Instructions (CTIs)
6215      CTIs include all branches and jumps, nal, eret, eretnc, deret, wait
6216      and pause.  */
6217   if ((insn1->insn_mo->pinfo2 & INSN2_FORBIDDEN_SLOT)
6218       && ((pinfo2 & INSN_NO_DELAY_SLOT)
6219           || (insn2 && delayed_branch_p (insn2))))
6220     return 1;
6221
6222   return 0;
6223 }
6224
6225 /* Return the number of nops that would be needed to work around the
6226    VR4130 mflo/mfhi errata if instruction INSN immediately followed
6227    the MAX_VR4130_NOPS instructions described by HIST.  Ignore hazards
6228    that are contained within the first IGNORE instructions of HIST.  */
6229
6230 static int
6231 nops_for_vr4130 (int ignore, const struct mips_cl_insn *hist,
6232                  const struct mips_cl_insn *insn)
6233 {
6234   int i, j;
6235   unsigned int mask;
6236
6237   /* Check if the instruction writes to HI or LO.  MTHI and MTLO
6238      are not affected by the errata.  */
6239   if (insn != 0
6240       && ((insn->insn_mo->pinfo & (INSN_WRITE_HI | INSN_WRITE_LO)) == 0
6241           || strcmp (insn->insn_mo->name, "mtlo") == 0
6242           || strcmp (insn->insn_mo->name, "mthi") == 0))
6243     return 0;
6244
6245   /* Search for the first MFLO or MFHI.  */
6246   for (i = 0; i < MAX_VR4130_NOPS; i++)
6247     if (MF_HILO_INSN (hist[i].insn_mo->pinfo))
6248       {
6249         /* Extract the destination register.  */
6250         mask = gpr_write_mask (&hist[i]);
6251
6252         /* No nops are needed if INSN reads that register.  */
6253         if (insn != NULL && (gpr_read_mask (insn) & mask) != 0)
6254           return 0;
6255
6256         /* ...or if any of the intervening instructions do.  */
6257         for (j = 0; j < i; j++)
6258           if (gpr_read_mask (&hist[j]) & mask)
6259             return 0;
6260
6261         if (i >= ignore)
6262           return MAX_VR4130_NOPS - i;
6263       }
6264   return 0;
6265 }
6266
6267 #define BASE_REG_EQ(INSN1, INSN2)       \
6268   ((((INSN1) >> OP_SH_RS) & OP_MASK_RS) \
6269       == (((INSN2) >> OP_SH_RS) & OP_MASK_RS))
6270
6271 /* Return the minimum alignment for this store instruction.  */
6272
6273 static int
6274 fix_24k_align_to (const struct mips_opcode *mo)
6275 {
6276   if (strcmp (mo->name, "sh") == 0)
6277     return 2;
6278
6279   if (strcmp (mo->name, "swc1") == 0
6280       || strcmp (mo->name, "swc2") == 0
6281       || strcmp (mo->name, "sw") == 0
6282       || strcmp (mo->name, "sc") == 0
6283       || strcmp (mo->name, "s.s") == 0)
6284     return 4;
6285
6286   if (strcmp (mo->name, "sdc1") == 0
6287       || strcmp (mo->name, "sdc2") == 0
6288       || strcmp (mo->name, "s.d") == 0)
6289     return 8;
6290
6291   /* sb, swl, swr */
6292   return 1;
6293 }
6294
6295 struct fix_24k_store_info
6296   {
6297     /* Immediate offset, if any, for this store instruction.  */
6298     short off;
6299     /* Alignment required by this store instruction.  */
6300     int align_to;
6301     /* True for register offsets.  */
6302     int register_offset;
6303   };
6304
6305 /* Comparison function used by qsort.  */
6306
6307 static int
6308 fix_24k_sort (const void *a, const void *b)
6309 {
6310   const struct fix_24k_store_info *pos1 = a;
6311   const struct fix_24k_store_info *pos2 = b;
6312
6313   return (pos1->off - pos2->off);
6314 }
6315
6316 /* INSN is a store instruction.  Try to record the store information
6317    in STINFO.  Return false if the information isn't known.  */
6318
6319 static bfd_boolean
6320 fix_24k_record_store_info (struct fix_24k_store_info *stinfo,
6321                            const struct mips_cl_insn *insn)
6322 {
6323   /* The instruction must have a known offset.  */
6324   if (!insn->complete_p || !strstr (insn->insn_mo->args, "o("))
6325     return FALSE;
6326
6327   stinfo->off = (insn->insn_opcode >> OP_SH_IMMEDIATE) & OP_MASK_IMMEDIATE;
6328   stinfo->align_to = fix_24k_align_to (insn->insn_mo);
6329   return TRUE;
6330 }
6331
6332 /* Return the number of nops that would be needed to work around the 24k
6333    "lost data on stores during refill" errata if instruction INSN
6334    immediately followed the 2 instructions described by HIST.
6335    Ignore hazards that are contained within the first IGNORE
6336    instructions of HIST.
6337
6338    Problem: The FSB (fetch store buffer) acts as an intermediate buffer
6339    for the data cache refills and store data. The following describes
6340    the scenario where the store data could be lost.
6341
6342    * A data cache miss, due to either a load or a store, causing fill
6343      data to be supplied by the memory subsystem
6344    * The first three doublewords of fill data are returned and written
6345      into the cache
6346    * A sequence of four stores occurs in consecutive cycles around the
6347      final doubleword of the fill:
6348    * Store A
6349    * Store B
6350    * Store C
6351    * Zero, One or more instructions
6352    * Store D
6353
6354    The four stores A-D must be to different doublewords of the line that
6355    is being filled. The fourth instruction in the sequence above permits
6356    the fill of the final doubleword to be transferred from the FSB into
6357    the cache. In the sequence above, the stores may be either integer
6358    (sb, sh, sw, swr, swl, sc) or coprocessor (swc1/swc2, sdc1/sdc2,
6359    swxc1, sdxc1, suxc1) stores, as long as the four stores are to
6360    different doublewords on the line. If the floating point unit is
6361    running in 1:2 mode, it is not possible to create the sequence above
6362    using only floating point store instructions.
6363
6364    In this case, the cache line being filled is incorrectly marked
6365    invalid, thereby losing the data from any store to the line that
6366    occurs between the original miss and the completion of the five
6367    cycle sequence shown above.
6368
6369    The workarounds are:
6370
6371    * Run the data cache in write-through mode.
6372    * Insert a non-store instruction between
6373      Store A and Store B or Store B and Store C.  */
6374
6375 static int
6376 nops_for_24k (int ignore, const struct mips_cl_insn *hist,
6377               const struct mips_cl_insn *insn)
6378 {
6379   struct fix_24k_store_info pos[3];
6380   int align, i, base_offset;
6381
6382   if (ignore >= 2)
6383     return 0;
6384
6385   /* If the previous instruction wasn't a store, there's nothing to
6386      worry about.  */
6387   if ((hist[0].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
6388     return 0;
6389
6390   /* If the instructions after the previous one are unknown, we have
6391      to assume the worst.  */
6392   if (!insn)
6393     return 1;
6394
6395   /* Check whether we are dealing with three consecutive stores.  */
6396   if ((insn->insn_mo->pinfo & INSN_STORE_MEMORY) == 0
6397       || (hist[1].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
6398     return 0;
6399
6400   /* If we don't know the relationship between the store addresses,
6401      assume the worst.  */
6402   if (!BASE_REG_EQ (insn->insn_opcode, hist[0].insn_opcode)
6403       || !BASE_REG_EQ (insn->insn_opcode, hist[1].insn_opcode))
6404     return 1;
6405
6406   if (!fix_24k_record_store_info (&pos[0], insn)
6407       || !fix_24k_record_store_info (&pos[1], &hist[0])
6408       || !fix_24k_record_store_info (&pos[2], &hist[1]))
6409     return 1;
6410
6411   qsort (&pos, 3, sizeof (struct fix_24k_store_info), fix_24k_sort);
6412
6413   /* Pick a value of ALIGN and X such that all offsets are adjusted by
6414      X bytes and such that the base register + X is known to be aligned
6415      to align bytes.  */
6416
6417   if (((insn->insn_opcode >> OP_SH_RS) & OP_MASK_RS) == SP)
6418     align = 8;
6419   else
6420     {
6421       align = pos[0].align_to;
6422       base_offset = pos[0].off;
6423       for (i = 1; i < 3; i++)
6424         if (align < pos[i].align_to)
6425           {
6426             align = pos[i].align_to;
6427             base_offset = pos[i].off;
6428           }
6429       for (i = 0; i < 3; i++)
6430         pos[i].off -= base_offset;
6431     }
6432
6433   pos[0].off &= ~align + 1;
6434   pos[1].off &= ~align + 1;
6435   pos[2].off &= ~align + 1;
6436
6437   /* If any two stores write to the same chunk, they also write to the
6438      same doubleword.  The offsets are still sorted at this point.  */
6439   if (pos[0].off == pos[1].off || pos[1].off == pos[2].off)
6440     return 0;
6441
6442   /* A range of at least 9 bytes is needed for the stores to be in
6443      non-overlapping doublewords.  */
6444   if (pos[2].off - pos[0].off <= 8)
6445     return 0;
6446
6447   if (pos[2].off - pos[1].off >= 24
6448       || pos[1].off - pos[0].off >= 24
6449       || pos[2].off - pos[0].off >= 32)
6450     return 0;
6451
6452   return 1;
6453 }
6454
6455 /* Return the number of nops that would be needed if instruction INSN
6456    immediately followed the MAX_NOPS instructions given by HIST,
6457    where HIST[0] is the most recent instruction.  Ignore hazards
6458    between INSN and the first IGNORE instructions in HIST.
6459
6460    If INSN is null, return the worse-case number of nops for any
6461    instruction.  */
6462
6463 static int
6464 nops_for_insn (int ignore, const struct mips_cl_insn *hist,
6465                const struct mips_cl_insn *insn)
6466 {
6467   int i, nops, tmp_nops;
6468
6469   nops = 0;
6470   for (i = ignore; i < MAX_DELAY_NOPS; i++)
6471     {
6472       tmp_nops = insns_between (hist + i, insn) - i;
6473       if (tmp_nops > nops)
6474         nops = tmp_nops;
6475     }
6476
6477   if (mips_fix_vr4130 && !mips_opts.micromips)
6478     {
6479       tmp_nops = nops_for_vr4130 (ignore, hist, insn);
6480       if (tmp_nops > nops)
6481         nops = tmp_nops;
6482     }
6483
6484   if (mips_fix_24k && !mips_opts.micromips)
6485     {
6486       tmp_nops = nops_for_24k (ignore, hist, insn);
6487       if (tmp_nops > nops)
6488         nops = tmp_nops;
6489     }
6490
6491   return nops;
6492 }
6493
6494 /* The variable arguments provide NUM_INSNS extra instructions that
6495    might be added to HIST.  Return the largest number of nops that
6496    would be needed after the extended sequence, ignoring hazards
6497    in the first IGNORE instructions.  */
6498
6499 static int
6500 nops_for_sequence (int num_insns, int ignore,
6501                    const struct mips_cl_insn *hist, ...)
6502 {
6503   va_list args;
6504   struct mips_cl_insn buffer[MAX_NOPS];
6505   struct mips_cl_insn *cursor;
6506   int nops;
6507
6508   va_start (args, hist);
6509   cursor = buffer + num_insns;
6510   memcpy (cursor, hist, (MAX_NOPS - num_insns) * sizeof (*cursor));
6511   while (cursor > buffer)
6512     *--cursor = *va_arg (args, const struct mips_cl_insn *);
6513
6514   nops = nops_for_insn (ignore, buffer, NULL);
6515   va_end (args);
6516   return nops;
6517 }
6518
6519 /* Like nops_for_insn, but if INSN is a branch, take into account the
6520    worst-case delay for the branch target.  */
6521
6522 static int
6523 nops_for_insn_or_target (int ignore, const struct mips_cl_insn *hist,
6524                          const struct mips_cl_insn *insn)
6525 {
6526   int nops, tmp_nops;
6527
6528   nops = nops_for_insn (ignore, hist, insn);
6529   if (delayed_branch_p (insn))
6530     {
6531       tmp_nops = nops_for_sequence (2, ignore ? ignore + 2 : 0,
6532                                     hist, insn, get_delay_slot_nop (insn));
6533       if (tmp_nops > nops)
6534         nops = tmp_nops;
6535     }
6536   else if (compact_branch_p (insn))
6537     {
6538       tmp_nops = nops_for_sequence (1, ignore ? ignore + 1 : 0, hist, insn);
6539       if (tmp_nops > nops)
6540         nops = tmp_nops;
6541     }
6542   return nops;
6543 }
6544
6545 /* Fix NOP issue: Replace nops by "or at,at,zero".  */
6546
6547 static void
6548 fix_loongson2f_nop (struct mips_cl_insn * ip)
6549 {
6550   gas_assert (!HAVE_CODE_COMPRESSION);
6551   if (strcmp (ip->insn_mo->name, "nop") == 0)
6552     ip->insn_opcode = LOONGSON2F_NOP_INSN;
6553 }
6554
6555 /* Fix Jump Issue: Eliminate instruction fetch from outside 256M region
6556                    jr target pc &= 'hffff_ffff_cfff_ffff.  */
6557
6558 static void
6559 fix_loongson2f_jump (struct mips_cl_insn * ip)
6560 {
6561   gas_assert (!HAVE_CODE_COMPRESSION);
6562   if (strcmp (ip->insn_mo->name, "j") == 0
6563       || strcmp (ip->insn_mo->name, "jr") == 0
6564       || strcmp (ip->insn_mo->name, "jalr") == 0)
6565     {
6566       int sreg;
6567       expressionS ep;
6568
6569       if (! mips_opts.at)
6570         return;
6571
6572       sreg = EXTRACT_OPERAND (0, RS, *ip);
6573       if (sreg == ZERO || sreg == KT0 || sreg == KT1 || sreg == ATREG)
6574         return;
6575
6576       ep.X_op = O_constant;
6577       ep.X_add_number = 0xcfff0000;
6578       macro_build (&ep, "lui", "t,u", ATREG, BFD_RELOC_HI16);
6579       ep.X_add_number = 0xffff;
6580       macro_build (&ep, "ori", "t,r,i", ATREG, ATREG, BFD_RELOC_LO16);
6581       macro_build (NULL, "and", "d,v,t", sreg, sreg, ATREG);
6582     }
6583 }
6584
6585 static void
6586 fix_loongson2f (struct mips_cl_insn * ip)
6587 {
6588   if (mips_fix_loongson2f_nop)
6589     fix_loongson2f_nop (ip);
6590
6591   if (mips_fix_loongson2f_jump)
6592     fix_loongson2f_jump (ip);
6593 }
6594
6595 /* IP is a branch that has a delay slot, and we need to fill it
6596    automatically.   Return true if we can do that by swapping IP
6597    with the previous instruction.
6598    ADDRESS_EXPR is an operand of the instruction to be used with
6599    RELOC_TYPE.  */
6600
6601 static bfd_boolean
6602 can_swap_branch_p (struct mips_cl_insn *ip, expressionS *address_expr,
6603                    bfd_reloc_code_real_type *reloc_type)
6604 {
6605   unsigned long pinfo, pinfo2, prev_pinfo, prev_pinfo2;
6606   unsigned int gpr_read, gpr_write, prev_gpr_read, prev_gpr_write;
6607   unsigned int fpr_read, prev_fpr_write;
6608
6609   /* -O2 and above is required for this optimization.  */
6610   if (mips_optimize < 2)
6611     return FALSE;
6612
6613   /* If we have seen .set volatile or .set nomove, don't optimize.  */
6614   if (mips_opts.nomove)
6615     return FALSE;
6616
6617   /* We can't swap if the previous instruction's position is fixed.  */
6618   if (history[0].fixed_p)
6619     return FALSE;
6620
6621   /* If the previous previous insn was in a .set noreorder, we can't
6622      swap.  Actually, the MIPS assembler will swap in this situation.
6623      However, gcc configured -with-gnu-as will generate code like
6624
6625         .set    noreorder
6626         lw      $4,XXX
6627         .set    reorder
6628         INSN
6629         bne     $4,$0,foo
6630
6631      in which we can not swap the bne and INSN.  If gcc is not configured
6632      -with-gnu-as, it does not output the .set pseudo-ops.  */
6633   if (history[1].noreorder_p)
6634     return FALSE;
6635
6636   /* If the previous instruction had a fixup in mips16 mode, we can not swap.
6637      This means that the previous instruction was a 4-byte one anyhow.  */
6638   if (mips_opts.mips16 && history[0].fixp[0])
6639     return FALSE;
6640
6641   /* If the branch is itself the target of a branch, we can not swap.
6642      We cheat on this; all we check for is whether there is a label on
6643      this instruction.  If there are any branches to anything other than
6644      a label, users must use .set noreorder.  */
6645   if (seg_info (now_seg)->label_list)
6646     return FALSE;
6647
6648   /* If the previous instruction is in a variant frag other than this
6649      branch's one, we cannot do the swap.  This does not apply to
6650      MIPS16 code, which uses variant frags for different purposes.  */
6651   if (!mips_opts.mips16
6652       && history[0].frag
6653       && history[0].frag->fr_type == rs_machine_dependent)
6654     return FALSE;
6655
6656   /* We do not swap with instructions that cannot architecturally
6657      be placed in a branch delay slot, such as SYNC or ERET.  We
6658      also refrain from swapping with a trap instruction, since it
6659      complicates trap handlers to have the trap instruction be in
6660      a delay slot.  */
6661   prev_pinfo = history[0].insn_mo->pinfo;
6662   if (prev_pinfo & INSN_NO_DELAY_SLOT)
6663     return FALSE;
6664
6665   /* Check for conflicts between the branch and the instructions
6666      before the candidate delay slot.  */
6667   if (nops_for_insn (0, history + 1, ip) > 0)
6668     return FALSE;
6669
6670   /* Check for conflicts between the swapped sequence and the
6671      target of the branch.  */
6672   if (nops_for_sequence (2, 0, history + 1, ip, history) > 0)
6673     return FALSE;
6674
6675   /* If the branch reads a register that the previous
6676      instruction sets, we can not swap.  */
6677   gpr_read = gpr_read_mask (ip);
6678   prev_gpr_write = gpr_write_mask (&history[0]);
6679   if (gpr_read & prev_gpr_write)
6680     return FALSE;
6681
6682   fpr_read = fpr_read_mask (ip);
6683   prev_fpr_write = fpr_write_mask (&history[0]);
6684   if (fpr_read & prev_fpr_write)
6685     return FALSE;
6686
6687   /* If the branch writes a register that the previous
6688      instruction sets, we can not swap.  */
6689   gpr_write = gpr_write_mask (ip);
6690   if (gpr_write & prev_gpr_write)
6691     return FALSE;
6692
6693   /* If the branch writes a register that the previous
6694      instruction reads, we can not swap.  */
6695   prev_gpr_read = gpr_read_mask (&history[0]);
6696   if (gpr_write & prev_gpr_read)
6697     return FALSE;
6698
6699   /* If one instruction sets a condition code and the
6700      other one uses a condition code, we can not swap.  */
6701   pinfo = ip->insn_mo->pinfo;
6702   if ((pinfo & INSN_READ_COND_CODE)
6703       && (prev_pinfo & INSN_WRITE_COND_CODE))
6704     return FALSE;
6705   if ((pinfo & INSN_WRITE_COND_CODE)
6706       && (prev_pinfo & INSN_READ_COND_CODE))
6707     return FALSE;
6708
6709   /* If the previous instruction uses the PC, we can not swap.  */
6710   prev_pinfo2 = history[0].insn_mo->pinfo2;
6711   if (prev_pinfo2 & INSN2_READ_PC)
6712     return FALSE;
6713
6714   /* If the previous instruction has an incorrect size for a fixed
6715      branch delay slot in microMIPS mode, we cannot swap.  */
6716   pinfo2 = ip->insn_mo->pinfo2;
6717   if (mips_opts.micromips
6718       && (pinfo2 & INSN2_BRANCH_DELAY_16BIT)
6719       && insn_length (history) != 2)
6720     return FALSE;
6721   if (mips_opts.micromips
6722       && (pinfo2 & INSN2_BRANCH_DELAY_32BIT)
6723       && insn_length (history) != 4)
6724     return FALSE;
6725
6726   /* On R5900 short loops need to be fixed by inserting a nop in
6727      the branch delay slots.
6728      A short loop can be terminated too early.  */
6729   if (mips_opts.arch == CPU_R5900
6730       /* Check if instruction has a parameter, ignore "j $31". */
6731       && (address_expr != NULL)
6732       /* Parameter must be 16 bit. */
6733       && (*reloc_type == BFD_RELOC_16_PCREL_S2)
6734       /* Branch to same segment. */
6735       && (S_GET_SEGMENT (address_expr->X_add_symbol) == now_seg)
6736       /* Branch to same code fragment. */
6737       && (symbol_get_frag (address_expr->X_add_symbol) == frag_now)
6738       /* Can only calculate branch offset if value is known. */
6739       && symbol_constant_p (address_expr->X_add_symbol)
6740       /* Check if branch is really conditional. */
6741       && !((ip->insn_opcode & 0xffff0000) == 0x10000000   /* beq $0,$0 */
6742         || (ip->insn_opcode & 0xffff0000) == 0x04010000   /* bgez $0 */
6743         || (ip->insn_opcode & 0xffff0000) == 0x04110000)) /* bgezal $0 */
6744     {
6745       int distance;
6746       /* Check if loop is shorter than 6 instructions including
6747          branch and delay slot.  */
6748       distance = frag_now_fix () - S_GET_VALUE (address_expr->X_add_symbol);
6749       if (distance <= 20)
6750         {
6751           int i;
6752           int rv;
6753
6754           rv = FALSE;
6755           /* When the loop includes branches or jumps,
6756              it is not a short loop. */
6757           for (i = 0; i < (distance / 4); i++)
6758             {
6759               if ((history[i].cleared_p)
6760                   || delayed_branch_p (&history[i]))
6761                 {
6762                   rv = TRUE;
6763                   break;
6764                 }
6765             }
6766           if (rv == FALSE)
6767             {
6768               /* Insert nop after branch to fix short loop. */
6769               return FALSE;
6770             }
6771         }
6772     }
6773
6774   return TRUE;
6775 }
6776
6777 /* Decide how we should add IP to the instruction stream.
6778    ADDRESS_EXPR is an operand of the instruction to be used with
6779    RELOC_TYPE.  */
6780
6781 static enum append_method
6782 get_append_method (struct mips_cl_insn *ip, expressionS *address_expr,
6783                    bfd_reloc_code_real_type *reloc_type)
6784 {
6785   /* The relaxed version of a macro sequence must be inherently
6786      hazard-free.  */
6787   if (mips_relax.sequence == 2)
6788     return APPEND_ADD;
6789
6790   /* We must not dabble with instructions in a ".set norerorder" block.  */
6791   if (mips_opts.noreorder)
6792     return APPEND_ADD;
6793
6794   /* Otherwise, it's our responsibility to fill branch delay slots.  */
6795   if (delayed_branch_p (ip))
6796     {
6797       if (!branch_likely_p (ip)
6798           && can_swap_branch_p (ip, address_expr, reloc_type))
6799         return APPEND_SWAP;
6800
6801       if (mips_opts.mips16
6802           && ISA_SUPPORTS_MIPS16E
6803           && gpr_read_mask (ip) != 0)
6804         return APPEND_ADD_COMPACT;
6805
6806       return APPEND_ADD_WITH_NOP;
6807     }
6808
6809   return APPEND_ADD;
6810 }
6811
6812 /* IP is a MIPS16 instruction whose opcode we have just changed.
6813    Point IP->insn_mo to the new opcode's definition.  */
6814
6815 static void
6816 find_altered_mips16_opcode (struct mips_cl_insn *ip)
6817 {
6818   const struct mips_opcode *mo, *end;
6819
6820   end = &mips16_opcodes[bfd_mips16_num_opcodes];
6821   for (mo = ip->insn_mo; mo < end; mo++)
6822     if ((ip->insn_opcode & mo->mask) == mo->match)
6823       {
6824         ip->insn_mo = mo;
6825         return;
6826       }
6827   abort ();
6828 }
6829
6830 /* For microMIPS macros, we need to generate a local number label
6831    as the target of branches.  */
6832 #define MICROMIPS_LABEL_CHAR            '\037'
6833 static unsigned long micromips_target_label;
6834 static char micromips_target_name[32];
6835
6836 static char *
6837 micromips_label_name (void)
6838 {
6839   char *p = micromips_target_name;
6840   char symbol_name_temporary[24];
6841   unsigned long l;
6842   int i;
6843
6844   if (*p)
6845     return p;
6846
6847   i = 0;
6848   l = micromips_target_label;
6849 #ifdef LOCAL_LABEL_PREFIX
6850   *p++ = LOCAL_LABEL_PREFIX;
6851 #endif
6852   *p++ = 'L';
6853   *p++ = MICROMIPS_LABEL_CHAR;
6854   do
6855     {
6856       symbol_name_temporary[i++] = l % 10 + '0';
6857       l /= 10;
6858     }
6859   while (l != 0);
6860   while (i > 0)
6861     *p++ = symbol_name_temporary[--i];
6862   *p = '\0';
6863
6864   return micromips_target_name;
6865 }
6866
6867 static void
6868 micromips_label_expr (expressionS *label_expr)
6869 {
6870   label_expr->X_op = O_symbol;
6871   label_expr->X_add_symbol = symbol_find_or_make (micromips_label_name ());
6872   label_expr->X_add_number = 0;
6873 }
6874
6875 static void
6876 micromips_label_inc (void)
6877 {
6878   micromips_target_label++;
6879   *micromips_target_name = '\0';
6880 }
6881
6882 static void
6883 micromips_add_label (void)
6884 {
6885   symbolS *s;
6886
6887   s = colon (micromips_label_name ());
6888   micromips_label_inc ();
6889   S_SET_OTHER (s, ELF_ST_SET_MICROMIPS (S_GET_OTHER (s)));
6890 }
6891
6892 /* If assembling microMIPS code, then return the microMIPS reloc
6893    corresponding to the requested one if any.  Otherwise return
6894    the reloc unchanged.  */
6895
6896 static bfd_reloc_code_real_type
6897 micromips_map_reloc (bfd_reloc_code_real_type reloc)
6898 {
6899   static const bfd_reloc_code_real_type relocs[][2] =
6900     {
6901       /* Keep sorted incrementally by the left-hand key.  */
6902       { BFD_RELOC_16_PCREL_S2, BFD_RELOC_MICROMIPS_16_PCREL_S1 },
6903       { BFD_RELOC_GPREL16, BFD_RELOC_MICROMIPS_GPREL16 },
6904       { BFD_RELOC_MIPS_JMP, BFD_RELOC_MICROMIPS_JMP },
6905       { BFD_RELOC_HI16, BFD_RELOC_MICROMIPS_HI16 },
6906       { BFD_RELOC_HI16_S, BFD_RELOC_MICROMIPS_HI16_S },
6907       { BFD_RELOC_LO16, BFD_RELOC_MICROMIPS_LO16 },
6908       { BFD_RELOC_MIPS_LITERAL, BFD_RELOC_MICROMIPS_LITERAL },
6909       { BFD_RELOC_MIPS_GOT16, BFD_RELOC_MICROMIPS_GOT16 },
6910       { BFD_RELOC_MIPS_CALL16, BFD_RELOC_MICROMIPS_CALL16 },
6911       { BFD_RELOC_MIPS_GOT_HI16, BFD_RELOC_MICROMIPS_GOT_HI16 },
6912       { BFD_RELOC_MIPS_GOT_LO16, BFD_RELOC_MICROMIPS_GOT_LO16 },
6913       { BFD_RELOC_MIPS_CALL_HI16, BFD_RELOC_MICROMIPS_CALL_HI16 },
6914       { BFD_RELOC_MIPS_CALL_LO16, BFD_RELOC_MICROMIPS_CALL_LO16 },
6915       { BFD_RELOC_MIPS_SUB, BFD_RELOC_MICROMIPS_SUB },
6916       { BFD_RELOC_MIPS_GOT_PAGE, BFD_RELOC_MICROMIPS_GOT_PAGE },
6917       { BFD_RELOC_MIPS_GOT_OFST, BFD_RELOC_MICROMIPS_GOT_OFST },
6918       { BFD_RELOC_MIPS_GOT_DISP, BFD_RELOC_MICROMIPS_GOT_DISP },
6919       { BFD_RELOC_MIPS_HIGHEST, BFD_RELOC_MICROMIPS_HIGHEST },
6920       { BFD_RELOC_MIPS_HIGHER, BFD_RELOC_MICROMIPS_HIGHER },
6921       { BFD_RELOC_MIPS_SCN_DISP, BFD_RELOC_MICROMIPS_SCN_DISP },
6922       { BFD_RELOC_MIPS_TLS_GD, BFD_RELOC_MICROMIPS_TLS_GD },
6923       { BFD_RELOC_MIPS_TLS_LDM, BFD_RELOC_MICROMIPS_TLS_LDM },
6924       { BFD_RELOC_MIPS_TLS_DTPREL_HI16, BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16 },
6925       { BFD_RELOC_MIPS_TLS_DTPREL_LO16, BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16 },
6926       { BFD_RELOC_MIPS_TLS_GOTTPREL, BFD_RELOC_MICROMIPS_TLS_GOTTPREL },
6927       { BFD_RELOC_MIPS_TLS_TPREL_HI16, BFD_RELOC_MICROMIPS_TLS_TPREL_HI16 },
6928       { BFD_RELOC_MIPS_TLS_TPREL_LO16, BFD_RELOC_MICROMIPS_TLS_TPREL_LO16 }
6929     };
6930   bfd_reloc_code_real_type r;
6931   size_t i;
6932
6933   if (!mips_opts.micromips)
6934     return reloc;
6935   for (i = 0; i < ARRAY_SIZE (relocs); i++)
6936     {
6937       r = relocs[i][0];
6938       if (r > reloc)
6939         return reloc;
6940       if (r == reloc)
6941         return relocs[i][1];
6942     }
6943   return reloc;
6944 }
6945
6946 /* Try to resolve relocation RELOC against constant OPERAND at assembly time.
6947    Return true on success, storing the resolved value in RESULT.  */
6948
6949 static bfd_boolean
6950 calculate_reloc (bfd_reloc_code_real_type reloc, offsetT operand,
6951                  offsetT *result)
6952 {
6953   switch (reloc)
6954     {
6955     case BFD_RELOC_MIPS_HIGHEST:
6956     case BFD_RELOC_MICROMIPS_HIGHEST:
6957       *result = ((operand + 0x800080008000ull) >> 48) & 0xffff;
6958       return TRUE;
6959
6960     case BFD_RELOC_MIPS_HIGHER:
6961     case BFD_RELOC_MICROMIPS_HIGHER:
6962       *result = ((operand + 0x80008000ull) >> 32) & 0xffff;
6963       return TRUE;
6964
6965     case BFD_RELOC_HI16_S:
6966     case BFD_RELOC_MICROMIPS_HI16_S:
6967     case BFD_RELOC_MIPS16_HI16_S:
6968       *result = ((operand + 0x8000) >> 16) & 0xffff;
6969       return TRUE;
6970
6971     case BFD_RELOC_HI16:
6972     case BFD_RELOC_MICROMIPS_HI16:
6973     case BFD_RELOC_MIPS16_HI16:
6974       *result = (operand >> 16) & 0xffff;
6975       return TRUE;
6976
6977     case BFD_RELOC_LO16:
6978     case BFD_RELOC_MICROMIPS_LO16:
6979     case BFD_RELOC_MIPS16_LO16:
6980       *result = operand & 0xffff;
6981       return TRUE;
6982
6983     case BFD_RELOC_UNUSED:
6984       *result = operand;
6985       return TRUE;
6986
6987     default:
6988       return FALSE;
6989     }
6990 }
6991
6992 /* Output an instruction.  IP is the instruction information.
6993    ADDRESS_EXPR is an operand of the instruction to be used with
6994    RELOC_TYPE.  EXPANSIONP is true if the instruction is part of
6995    a macro expansion.  */
6996
6997 static void
6998 append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
6999              bfd_reloc_code_real_type *reloc_type, bfd_boolean expansionp)
7000 {
7001   unsigned long prev_pinfo2, pinfo;
7002   bfd_boolean relaxed_branch = FALSE;
7003   enum append_method method;
7004   bfd_boolean relax32;
7005   int branch_disp;
7006
7007   if (mips_fix_loongson2f && !HAVE_CODE_COMPRESSION)
7008     fix_loongson2f (ip);
7009
7010   file_ase_mips16 |= mips_opts.mips16;
7011   file_ase_micromips |= mips_opts.micromips;
7012
7013   prev_pinfo2 = history[0].insn_mo->pinfo2;
7014   pinfo = ip->insn_mo->pinfo;
7015
7016   if (mips_opts.micromips
7017       && !expansionp
7018       && (((prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
7019            && micromips_insn_length (ip->insn_mo) != 2)
7020           || ((prev_pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
7021               && micromips_insn_length (ip->insn_mo) != 4)))
7022     as_warn (_("wrong size instruction in a %u-bit branch delay slot"),
7023              (prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0 ? 16 : 32);
7024
7025   if (address_expr == NULL)
7026     ip->complete_p = 1;
7027   else if (reloc_type[0] <= BFD_RELOC_UNUSED
7028            && reloc_type[1] == BFD_RELOC_UNUSED
7029            && reloc_type[2] == BFD_RELOC_UNUSED
7030            && address_expr->X_op == O_constant)
7031     {
7032       switch (*reloc_type)
7033         {
7034         case BFD_RELOC_MIPS_JMP:
7035           {
7036             int shift;
7037
7038             shift = mips_opts.micromips ? 1 : 2;
7039             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7040               as_bad (_("jump to misaligned address (0x%lx)"),
7041                       (unsigned long) address_expr->X_add_number);
7042             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7043                                 & 0x3ffffff);
7044             ip->complete_p = 1;
7045           }
7046           break;
7047
7048         case BFD_RELOC_MIPS16_JMP:
7049           if ((address_expr->X_add_number & 3) != 0)
7050             as_bad (_("jump to misaligned address (0x%lx)"),
7051                     (unsigned long) address_expr->X_add_number);
7052           ip->insn_opcode |=
7053             (((address_expr->X_add_number & 0x7c0000) << 3)
7054                | ((address_expr->X_add_number & 0xf800000) >> 7)
7055                | ((address_expr->X_add_number & 0x3fffc) >> 2));
7056           ip->complete_p = 1;
7057           break;
7058
7059         case BFD_RELOC_16_PCREL_S2:
7060           {
7061             int shift;
7062
7063             shift = mips_opts.micromips ? 1 : 2;
7064             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7065               as_bad (_("branch to misaligned address (0x%lx)"),
7066                       (unsigned long) address_expr->X_add_number);
7067             if (!mips_relax_branch)
7068               {
7069                 if ((address_expr->X_add_number + (1 << (shift + 15)))
7070                     & ~((1 << (shift + 16)) - 1))
7071                   as_bad (_("branch address range overflow (0x%lx)"),
7072                           (unsigned long) address_expr->X_add_number);
7073                 ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7074                                     & 0xffff);
7075               }
7076           }
7077           break;
7078
7079         case BFD_RELOC_MIPS_21_PCREL_S2:
7080           {
7081             int shift;
7082
7083             shift = 2;
7084             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7085               as_bad (_("branch to misaligned address (0x%lx)"),
7086                       (unsigned long) address_expr->X_add_number);
7087             if ((address_expr->X_add_number + (1 << (shift + 20)))
7088                 & ~((1 << (shift + 21)) - 1))
7089               as_bad (_("branch address range overflow (0x%lx)"),
7090                       (unsigned long) address_expr->X_add_number);
7091             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7092                                 & 0x1fffff);
7093           }
7094           break;
7095
7096         case BFD_RELOC_MIPS_26_PCREL_S2:
7097           {
7098             int shift;
7099
7100             shift = 2;
7101             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
7102               as_bad (_("branch to misaligned address (0x%lx)"),
7103                       (unsigned long) address_expr->X_add_number);
7104             if ((address_expr->X_add_number + (1 << (shift + 25)))
7105                 & ~((1 << (shift + 26)) - 1))
7106               as_bad (_("branch address range overflow (0x%lx)"),
7107                       (unsigned long) address_expr->X_add_number);
7108             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
7109                                 & 0x3ffffff);
7110           }
7111           break;
7112
7113         default:
7114           {
7115             offsetT value;
7116
7117             if (calculate_reloc (*reloc_type, address_expr->X_add_number,
7118                                  &value))
7119               {
7120                 ip->insn_opcode |= value & 0xffff;
7121                 ip->complete_p = 1;
7122               }
7123           }
7124           break;
7125         }
7126     }
7127
7128   if (mips_relax.sequence != 2 && !mips_opts.noreorder)
7129     {
7130       /* There are a lot of optimizations we could do that we don't.
7131          In particular, we do not, in general, reorder instructions.
7132          If you use gcc with optimization, it will reorder
7133          instructions and generally do much more optimization then we
7134          do here; repeating all that work in the assembler would only
7135          benefit hand written assembly code, and does not seem worth
7136          it.  */
7137       int nops = (mips_optimize == 0
7138                   ? nops_for_insn (0, history, NULL)
7139                   : nops_for_insn_or_target (0, history, ip));
7140       if (nops > 0)
7141         {
7142           fragS *old_frag;
7143           unsigned long old_frag_offset;
7144           int i;
7145
7146           old_frag = frag_now;
7147           old_frag_offset = frag_now_fix ();
7148
7149           for (i = 0; i < nops; i++)
7150             add_fixed_insn (NOP_INSN);
7151           insert_into_history (0, nops, NOP_INSN);
7152
7153           if (listing)
7154             {
7155               listing_prev_line ();
7156               /* We may be at the start of a variant frag.  In case we
7157                  are, make sure there is enough space for the frag
7158                  after the frags created by listing_prev_line.  The
7159                  argument to frag_grow here must be at least as large
7160                  as the argument to all other calls to frag_grow in
7161                  this file.  We don't have to worry about being in the
7162                  middle of a variant frag, because the variants insert
7163                  all needed nop instructions themselves.  */
7164               frag_grow (40);
7165             }
7166
7167           mips_move_text_labels ();
7168
7169 #ifndef NO_ECOFF_DEBUGGING
7170           if (ECOFF_DEBUGGING)
7171             ecoff_fix_loc (old_frag, old_frag_offset);
7172 #endif
7173         }
7174     }
7175   else if (mips_relax.sequence != 2 && prev_nop_frag != NULL)
7176     {
7177       int nops;
7178
7179       /* Work out how many nops in prev_nop_frag are needed by IP,
7180          ignoring hazards generated by the first prev_nop_frag_since
7181          instructions.  */
7182       nops = nops_for_insn_or_target (prev_nop_frag_since, history, ip);
7183       gas_assert (nops <= prev_nop_frag_holds);
7184
7185       /* Enforce NOPS as a minimum.  */
7186       if (nops > prev_nop_frag_required)
7187         prev_nop_frag_required = nops;
7188
7189       if (prev_nop_frag_holds == prev_nop_frag_required)
7190         {
7191           /* Settle for the current number of nops.  Update the history
7192              accordingly (for the benefit of any future .set reorder code).  */
7193           prev_nop_frag = NULL;
7194           insert_into_history (prev_nop_frag_since,
7195                                prev_nop_frag_holds, NOP_INSN);
7196         }
7197       else
7198         {
7199           /* Allow this instruction to replace one of the nops that was
7200              tentatively added to prev_nop_frag.  */
7201           prev_nop_frag->fr_fix -= NOP_INSN_SIZE;
7202           prev_nop_frag_holds--;
7203           prev_nop_frag_since++;
7204         }
7205     }
7206
7207   method = get_append_method (ip, address_expr, reloc_type);
7208   branch_disp = method == APPEND_SWAP ? insn_length (history) : 0;
7209
7210   dwarf2_emit_insn (0);
7211   /* We want MIPS16 and microMIPS debug info to use ISA-encoded addresses,
7212      so "move" the instruction address accordingly.
7213
7214      Also, it doesn't seem appropriate for the assembler to reorder .loc
7215      entries.  If this instruction is a branch that we are going to swap
7216      with the previous instruction, the two instructions should be
7217      treated as a unit, and the debug information for both instructions
7218      should refer to the start of the branch sequence.  Using the
7219      current position is certainly wrong when swapping a 32-bit branch
7220      and a 16-bit delay slot, since the current position would then be
7221      in the middle of a branch.  */
7222   dwarf2_move_insn ((HAVE_CODE_COMPRESSION ? 1 : 0) - branch_disp);
7223
7224   relax32 = (mips_relax_branch
7225              /* Don't try branch relaxation within .set nomacro, or within
7226                 .set noat if we use $at for PIC computations.  If it turns
7227                 out that the branch was out-of-range, we'll get an error.  */
7228              && !mips_opts.warn_about_macros
7229              && (mips_opts.at || mips_pic == NO_PIC)
7230              /* Don't relax BPOSGE32/64 or BC1ANY2T/F and BC1ANY4T/F
7231                 as they have no complementing branches.  */
7232              && !(ip->insn_mo->ase & (ASE_MIPS3D | ASE_DSP64 | ASE_DSP)));
7233
7234   if (!HAVE_CODE_COMPRESSION
7235       && address_expr
7236       && relax32
7237       && *reloc_type == BFD_RELOC_16_PCREL_S2
7238       && delayed_branch_p (ip))
7239     {
7240       relaxed_branch = TRUE;
7241       add_relaxed_insn (ip, (relaxed_branch_length
7242                              (NULL, NULL,
7243                               uncond_branch_p (ip) ? -1
7244                               : branch_likely_p (ip) ? 1
7245                               : 0)), 4,
7246                         RELAX_BRANCH_ENCODE
7247                         (AT,
7248                          uncond_branch_p (ip),
7249                          branch_likely_p (ip),
7250                          pinfo & INSN_WRITE_GPR_31,
7251                          0),
7252                         address_expr->X_add_symbol,
7253                         address_expr->X_add_number);
7254       *reloc_type = BFD_RELOC_UNUSED;
7255     }
7256   else if (mips_opts.micromips
7257            && address_expr
7258            && ((relax32 && *reloc_type == BFD_RELOC_16_PCREL_S2)
7259                || *reloc_type > BFD_RELOC_UNUSED)
7260            && (delayed_branch_p (ip) || compact_branch_p (ip))
7261            /* Don't try branch relaxation when users specify
7262               16-bit/32-bit instructions.  */
7263            && !forced_insn_length)
7264     {
7265       bfd_boolean relax16 = *reloc_type > BFD_RELOC_UNUSED;
7266       int type = relax16 ? *reloc_type - BFD_RELOC_UNUSED : 0;
7267       int uncond = uncond_branch_p (ip) ? -1 : 0;
7268       int compact = compact_branch_p (ip);
7269       int al = pinfo & INSN_WRITE_GPR_31;
7270       int length32;
7271
7272       gas_assert (address_expr != NULL);
7273       gas_assert (!mips_relax.sequence);
7274
7275       relaxed_branch = TRUE;
7276       length32 = relaxed_micromips_32bit_branch_length (NULL, NULL, uncond);
7277       add_relaxed_insn (ip, relax32 ? length32 : 4, relax16 ? 2 : 4,
7278                         RELAX_MICROMIPS_ENCODE (type, AT, uncond, compact, al,
7279                                                 relax32, 0, 0),
7280                         address_expr->X_add_symbol,
7281                         address_expr->X_add_number);
7282       *reloc_type = BFD_RELOC_UNUSED;
7283     }
7284   else if (mips_opts.mips16 && *reloc_type > BFD_RELOC_UNUSED)
7285     {
7286       /* We need to set up a variant frag.  */
7287       gas_assert (address_expr != NULL);
7288       add_relaxed_insn (ip, 4, 0,
7289                         RELAX_MIPS16_ENCODE
7290                         (*reloc_type - BFD_RELOC_UNUSED,
7291                          forced_insn_length == 2, forced_insn_length == 4,
7292                          delayed_branch_p (&history[0]),
7293                          history[0].mips16_absolute_jump_p),
7294                         make_expr_symbol (address_expr), 0);
7295     }
7296   else if (mips_opts.mips16 && insn_length (ip) == 2)
7297     {
7298       if (!delayed_branch_p (ip))
7299         /* Make sure there is enough room to swap this instruction with
7300            a following jump instruction.  */
7301         frag_grow (6);
7302       add_fixed_insn (ip);
7303     }
7304   else
7305     {
7306       if (mips_opts.mips16
7307           && mips_opts.noreorder
7308           && delayed_branch_p (&history[0]))
7309         as_warn (_("extended instruction in delay slot"));
7310
7311       if (mips_relax.sequence)
7312         {
7313           /* If we've reached the end of this frag, turn it into a variant
7314              frag and record the information for the instructions we've
7315              written so far.  */
7316           if (frag_room () < 4)
7317             relax_close_frag ();
7318           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (ip);
7319         }
7320
7321       if (mips_relax.sequence != 2)
7322         {
7323           if (mips_macro_warning.first_insn_sizes[0] == 0)
7324             mips_macro_warning.first_insn_sizes[0] = insn_length (ip);
7325           mips_macro_warning.sizes[0] += insn_length (ip);
7326           mips_macro_warning.insns[0]++;
7327         }
7328       if (mips_relax.sequence != 1)
7329         {
7330           if (mips_macro_warning.first_insn_sizes[1] == 0)
7331             mips_macro_warning.first_insn_sizes[1] = insn_length (ip);
7332           mips_macro_warning.sizes[1] += insn_length (ip);
7333           mips_macro_warning.insns[1]++;
7334         }
7335
7336       if (mips_opts.mips16)
7337         {
7338           ip->fixed_p = 1;
7339           ip->mips16_absolute_jump_p = (*reloc_type == BFD_RELOC_MIPS16_JMP);
7340         }
7341       add_fixed_insn (ip);
7342     }
7343
7344   if (!ip->complete_p && *reloc_type < BFD_RELOC_UNUSED)
7345     {
7346       bfd_reloc_code_real_type final_type[3];
7347       reloc_howto_type *howto0;
7348       reloc_howto_type *howto;
7349       int i;
7350
7351       /* Perform any necessary conversion to microMIPS relocations
7352          and find out how many relocations there actually are.  */
7353       for (i = 0; i < 3 && reloc_type[i] != BFD_RELOC_UNUSED; i++)
7354         final_type[i] = micromips_map_reloc (reloc_type[i]);
7355
7356       /* In a compound relocation, it is the final (outermost)
7357          operator that determines the relocated field.  */
7358       howto = howto0 = bfd_reloc_type_lookup (stdoutput, final_type[i - 1]);
7359       if (!howto)
7360         abort ();
7361
7362       if (i > 1)
7363         howto0 = bfd_reloc_type_lookup (stdoutput, final_type[0]);
7364       ip->fixp[0] = fix_new_exp (ip->frag, ip->where,
7365                                  bfd_get_reloc_size (howto),
7366                                  address_expr,
7367                                  howto0 && howto0->pc_relative,
7368                                  final_type[0]);
7369
7370       /* Tag symbols that have a R_MIPS16_26 relocation against them.  */
7371       if (final_type[0] == BFD_RELOC_MIPS16_JMP && ip->fixp[0]->fx_addsy)
7372         *symbol_get_tc (ip->fixp[0]->fx_addsy) = 1;
7373
7374       /* These relocations can have an addend that won't fit in
7375          4 octets for 64bit assembly.  */
7376       if (GPR_SIZE == 64
7377           && ! howto->partial_inplace
7378           && (reloc_type[0] == BFD_RELOC_16
7379               || reloc_type[0] == BFD_RELOC_32
7380               || reloc_type[0] == BFD_RELOC_MIPS_JMP
7381               || reloc_type[0] == BFD_RELOC_GPREL16
7382               || reloc_type[0] == BFD_RELOC_MIPS_LITERAL
7383               || reloc_type[0] == BFD_RELOC_GPREL32
7384               || reloc_type[0] == BFD_RELOC_64
7385               || reloc_type[0] == BFD_RELOC_CTOR
7386               || reloc_type[0] == BFD_RELOC_MIPS_SUB
7387               || reloc_type[0] == BFD_RELOC_MIPS_HIGHEST
7388               || reloc_type[0] == BFD_RELOC_MIPS_HIGHER
7389               || reloc_type[0] == BFD_RELOC_MIPS_SCN_DISP
7390               || reloc_type[0] == BFD_RELOC_MIPS_REL16
7391               || reloc_type[0] == BFD_RELOC_MIPS_RELGOT
7392               || reloc_type[0] == BFD_RELOC_MIPS16_GPREL
7393               || hi16_reloc_p (reloc_type[0])
7394               || lo16_reloc_p (reloc_type[0])))
7395         ip->fixp[0]->fx_no_overflow = 1;
7396
7397       /* These relocations can have an addend that won't fit in 2 octets.  */
7398       if (reloc_type[0] == BFD_RELOC_MICROMIPS_7_PCREL_S1
7399           || reloc_type[0] == BFD_RELOC_MICROMIPS_10_PCREL_S1)
7400         ip->fixp[0]->fx_no_overflow = 1;
7401
7402       if (mips_relax.sequence)
7403         {
7404           if (mips_relax.first_fixup == 0)
7405             mips_relax.first_fixup = ip->fixp[0];
7406         }
7407       else if (reloc_needs_lo_p (*reloc_type))
7408         {
7409           struct mips_hi_fixup *hi_fixup;
7410
7411           /* Reuse the last entry if it already has a matching %lo.  */
7412           hi_fixup = mips_hi_fixup_list;
7413           if (hi_fixup == 0
7414               || !fixup_has_matching_lo_p (hi_fixup->fixp))
7415             {
7416               hi_fixup = XNEW (struct mips_hi_fixup);
7417               hi_fixup->next = mips_hi_fixup_list;
7418               mips_hi_fixup_list = hi_fixup;
7419             }
7420           hi_fixup->fixp = ip->fixp[0];
7421           hi_fixup->seg = now_seg;
7422         }
7423
7424       /* Add fixups for the second and third relocations, if given.
7425          Note that the ABI allows the second relocation to be
7426          against RSS_UNDEF, RSS_GP, RSS_GP0 or RSS_LOC.  At the
7427          moment we only use RSS_UNDEF, but we could add support
7428          for the others if it ever becomes necessary.  */
7429       for (i = 1; i < 3; i++)
7430         if (reloc_type[i] != BFD_RELOC_UNUSED)
7431           {
7432             ip->fixp[i] = fix_new (ip->frag, ip->where,
7433                                    ip->fixp[0]->fx_size, NULL, 0,
7434                                    FALSE, final_type[i]);
7435
7436             /* Use fx_tcbit to mark compound relocs.  */
7437             ip->fixp[0]->fx_tcbit = 1;
7438             ip->fixp[i]->fx_tcbit = 1;
7439           }
7440     }
7441   install_insn (ip);
7442
7443   /* Update the register mask information.  */
7444   mips_gprmask |= gpr_read_mask (ip) | gpr_write_mask (ip);
7445   mips_cprmask[1] |= fpr_read_mask (ip) | fpr_write_mask (ip);
7446
7447   switch (method)
7448     {
7449     case APPEND_ADD:
7450       insert_into_history (0, 1, ip);
7451       break;
7452
7453     case APPEND_ADD_WITH_NOP:
7454       {
7455         struct mips_cl_insn *nop;
7456
7457         insert_into_history (0, 1, ip);
7458         nop = get_delay_slot_nop (ip);
7459         add_fixed_insn (nop);
7460         insert_into_history (0, 1, nop);
7461         if (mips_relax.sequence)
7462           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (nop);
7463       }
7464       break;
7465
7466     case APPEND_ADD_COMPACT:
7467       /* Convert MIPS16 jr/jalr into a "compact" jump.  */
7468       gas_assert (mips_opts.mips16);
7469       ip->insn_opcode |= 0x0080;
7470       find_altered_mips16_opcode (ip);
7471       install_insn (ip);
7472       insert_into_history (0, 1, ip);
7473       break;
7474
7475     case APPEND_SWAP:
7476       {
7477         struct mips_cl_insn delay = history[0];
7478         if (mips_opts.mips16)
7479           {
7480             know (delay.frag == ip->frag);
7481             move_insn (ip, delay.frag, delay.where);
7482             move_insn (&delay, ip->frag, ip->where + insn_length (ip));
7483           }
7484         else if (relaxed_branch || delay.frag != ip->frag)
7485           {
7486             /* Add the delay slot instruction to the end of the
7487                current frag and shrink the fixed part of the
7488                original frag.  If the branch occupies the tail of
7489                the latter, move it backwards to cover the gap.  */
7490             delay.frag->fr_fix -= branch_disp;
7491             if (delay.frag == ip->frag)
7492               move_insn (ip, ip->frag, ip->where - branch_disp);
7493             add_fixed_insn (&delay);
7494           }
7495         else
7496           {
7497             move_insn (&delay, ip->frag,
7498                        ip->where - branch_disp + insn_length (ip));
7499             move_insn (ip, history[0].frag, history[0].where);
7500           }
7501         history[0] = *ip;
7502         delay.fixed_p = 1;
7503         insert_into_history (0, 1, &delay);
7504       }
7505       break;
7506     }
7507
7508   /* If we have just completed an unconditional branch, clear the history.  */
7509   if ((delayed_branch_p (&history[1]) && uncond_branch_p (&history[1]))
7510       || (compact_branch_p (&history[0]) && uncond_branch_p (&history[0])))
7511     {
7512       unsigned int i;
7513
7514       mips_no_prev_insn ();
7515
7516       for (i = 0; i < ARRAY_SIZE (history); i++)
7517         history[i].cleared_p = 1;
7518     }
7519
7520   /* We need to emit a label at the end of branch-likely macros.  */
7521   if (emit_branch_likely_macro)
7522     {
7523       emit_branch_likely_macro = FALSE;
7524       micromips_add_label ();
7525     }
7526
7527   /* We just output an insn, so the next one doesn't have a label.  */
7528   mips_clear_insn_labels ();
7529 }
7530
7531 /* Forget that there was any previous instruction or label.
7532    When BRANCH is true, the branch history is also flushed.  */
7533
7534 static void
7535 mips_no_prev_insn (void)
7536 {
7537   prev_nop_frag = NULL;
7538   insert_into_history (0, ARRAY_SIZE (history), NOP_INSN);
7539   mips_clear_insn_labels ();
7540 }
7541
7542 /* This function must be called before we emit something other than
7543    instructions.  It is like mips_no_prev_insn except that it inserts
7544    any NOPS that might be needed by previous instructions.  */
7545
7546 void
7547 mips_emit_delays (void)
7548 {
7549   if (! mips_opts.noreorder)
7550     {
7551       int nops = nops_for_insn (0, history, NULL);
7552       if (nops > 0)
7553         {
7554           while (nops-- > 0)
7555             add_fixed_insn (NOP_INSN);
7556           mips_move_text_labels ();
7557         }
7558     }
7559   mips_no_prev_insn ();
7560 }
7561
7562 /* Start a (possibly nested) noreorder block.  */
7563
7564 static void
7565 start_noreorder (void)
7566 {
7567   if (mips_opts.noreorder == 0)
7568     {
7569       unsigned int i;
7570       int nops;
7571
7572       /* None of the instructions before the .set noreorder can be moved.  */
7573       for (i = 0; i < ARRAY_SIZE (history); i++)
7574         history[i].fixed_p = 1;
7575
7576       /* Insert any nops that might be needed between the .set noreorder
7577          block and the previous instructions.  We will later remove any
7578          nops that turn out not to be needed.  */
7579       nops = nops_for_insn (0, history, NULL);
7580       if (nops > 0)
7581         {
7582           if (mips_optimize != 0)
7583             {
7584               /* Record the frag which holds the nop instructions, so
7585                  that we can remove them if we don't need them.  */
7586               frag_grow (nops * NOP_INSN_SIZE);
7587               prev_nop_frag = frag_now;
7588               prev_nop_frag_holds = nops;
7589               prev_nop_frag_required = 0;
7590               prev_nop_frag_since = 0;
7591             }
7592
7593           for (; nops > 0; --nops)
7594             add_fixed_insn (NOP_INSN);
7595
7596           /* Move on to a new frag, so that it is safe to simply
7597              decrease the size of prev_nop_frag.  */
7598           frag_wane (frag_now);
7599           frag_new (0);
7600           mips_move_text_labels ();
7601         }
7602       mips_mark_labels ();
7603       mips_clear_insn_labels ();
7604     }
7605   mips_opts.noreorder++;
7606   mips_any_noreorder = 1;
7607 }
7608
7609 /* End a nested noreorder block.  */
7610
7611 static void
7612 end_noreorder (void)
7613 {
7614   mips_opts.noreorder--;
7615   if (mips_opts.noreorder == 0 && prev_nop_frag != NULL)
7616     {
7617       /* Commit to inserting prev_nop_frag_required nops and go back to
7618          handling nop insertion the .set reorder way.  */
7619       prev_nop_frag->fr_fix -= ((prev_nop_frag_holds - prev_nop_frag_required)
7620                                 * NOP_INSN_SIZE);
7621       insert_into_history (prev_nop_frag_since,
7622                            prev_nop_frag_required, NOP_INSN);
7623       prev_nop_frag = NULL;
7624     }
7625 }
7626
7627 /* Sign-extend 32-bit mode constants that have bit 31 set and all
7628    higher bits unset.  */
7629
7630 static void
7631 normalize_constant_expr (expressionS *ex)
7632 {
7633   if (ex->X_op == O_constant
7634       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7635     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7636                         - 0x80000000);
7637 }
7638
7639 /* Sign-extend 32-bit mode address offsets that have bit 31 set and
7640    all higher bits unset.  */
7641
7642 static void
7643 normalize_address_expr (expressionS *ex)
7644 {
7645   if (((ex->X_op == O_constant && HAVE_32BIT_ADDRESSES)
7646         || (ex->X_op == O_symbol && HAVE_32BIT_SYMBOLS))
7647       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7648     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7649                         - 0x80000000);
7650 }
7651
7652 /* Try to match TOKENS against OPCODE, storing the result in INSN.
7653    Return true if the match was successful.
7654
7655    OPCODE_EXTRA is a value that should be ORed into the opcode
7656    (used for VU0 channel suffixes, etc.).  MORE_ALTS is true if
7657    there are more alternatives after OPCODE and SOFT_MATCH is
7658    as for mips_arg_info.  */
7659
7660 static bfd_boolean
7661 match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
7662             struct mips_operand_token *tokens, unsigned int opcode_extra,
7663             bfd_boolean lax_match, bfd_boolean complete_p)
7664 {
7665   const char *args;
7666   struct mips_arg_info arg;
7667   const struct mips_operand *operand;
7668   char c;
7669
7670   imm_expr.X_op = O_absent;
7671   offset_expr.X_op = O_absent;
7672   offset_reloc[0] = BFD_RELOC_UNUSED;
7673   offset_reloc[1] = BFD_RELOC_UNUSED;
7674   offset_reloc[2] = BFD_RELOC_UNUSED;
7675
7676   create_insn (insn, opcode);
7677   /* When no opcode suffix is specified, assume ".xyzw". */
7678   if ((opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0 && opcode_extra == 0)
7679     insn->insn_opcode |= 0xf << mips_vu0_channel_mask.lsb;
7680   else
7681     insn->insn_opcode |= opcode_extra;
7682   memset (&arg, 0, sizeof (arg));
7683   arg.insn = insn;
7684   arg.token = tokens;
7685   arg.argnum = 1;
7686   arg.last_regno = ILLEGAL_REG;
7687   arg.dest_regno = ILLEGAL_REG;
7688   arg.lax_match = lax_match;
7689   for (args = opcode->args;; ++args)
7690     {
7691       if (arg.token->type == OT_END)
7692         {
7693           /* Handle unary instructions in which only one operand is given.
7694              The source is then the same as the destination.  */
7695           if (arg.opnum == 1 && *args == ',')
7696             {
7697               operand = (mips_opts.micromips
7698                          ? decode_micromips_operand (args + 1)
7699                          : decode_mips_operand (args + 1));
7700               if (operand && mips_optional_operand_p (operand))
7701                 {
7702                   arg.token = tokens;
7703                   arg.argnum = 1;
7704                   continue;
7705                 }
7706             }
7707
7708           /* Treat elided base registers as $0.  */
7709           if (strcmp (args, "(b)") == 0)
7710             args += 3;
7711
7712           if (args[0] == '+')
7713             switch (args[1])
7714               {
7715               case 'K':
7716               case 'N':
7717                 /* The register suffix is optional. */
7718                 args += 2;
7719                 break;
7720               }
7721
7722           /* Fail the match if there were too few operands.  */
7723           if (*args)
7724             return FALSE;
7725
7726           /* Successful match.  */
7727           if (!complete_p)
7728             return TRUE;
7729           clear_insn_error ();
7730           if (arg.dest_regno == arg.last_regno
7731               && strncmp (insn->insn_mo->name, "jalr", 4) == 0)
7732             {
7733               if (arg.opnum == 2)
7734                 set_insn_error
7735                   (0, _("source and destination must be different"));
7736               else if (arg.last_regno == 31)
7737                 set_insn_error
7738                   (0, _("a destination register must be supplied"));
7739             }
7740           else if (arg.last_regno == 31
7741                    && (strncmp (insn->insn_mo->name, "bltzal", 6) == 0
7742                        || strncmp (insn->insn_mo->name, "bgezal", 6) == 0))
7743             set_insn_error (0, _("the source register must not be $31"));
7744           check_completed_insn (&arg);
7745           return TRUE;
7746         }
7747
7748       /* Fail the match if the line has too many operands.   */
7749       if (*args == 0)
7750         return FALSE;
7751
7752       /* Handle characters that need to match exactly.  */
7753       if (*args == '(' || *args == ')' || *args == ',')
7754         {
7755           if (match_char (&arg, *args))
7756             continue;
7757           return FALSE;
7758         }
7759       if (*args == '#')
7760         {
7761           ++args;
7762           if (arg.token->type == OT_DOUBLE_CHAR
7763               && arg.token->u.ch == *args)
7764             {
7765               ++arg.token;
7766               continue;
7767             }
7768           return FALSE;
7769         }
7770
7771       /* Handle special macro operands.  Work out the properties of
7772          other operands.  */
7773       arg.opnum += 1;
7774       switch (*args)
7775         {
7776         case '-':
7777           switch (args[1])
7778             {
7779             case 'A':
7780               *offset_reloc = BFD_RELOC_MIPS_19_PCREL_S2;
7781               break;
7782
7783             case 'B':
7784               *offset_reloc = BFD_RELOC_MIPS_18_PCREL_S3;
7785               break;
7786             }
7787           break;
7788
7789         case '+':
7790           switch (args[1])
7791             {
7792             case 'i':
7793               *offset_reloc = BFD_RELOC_MIPS_JMP;
7794               break;
7795
7796             case '\'':
7797               *offset_reloc = BFD_RELOC_MIPS_26_PCREL_S2;
7798               break;
7799
7800             case '\"':
7801               *offset_reloc = BFD_RELOC_MIPS_21_PCREL_S2;
7802               break;
7803             }
7804           break;
7805
7806         case 'I':
7807           if (!match_const_int (&arg, &imm_expr.X_add_number))
7808             return FALSE;
7809           imm_expr.X_op = O_constant;
7810           if (GPR_SIZE == 32)
7811             normalize_constant_expr (&imm_expr);
7812           continue;
7813
7814         case 'A':
7815           if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
7816             {
7817               /* Assume that the offset has been elided and that what
7818                  we saw was a base register.  The match will fail later
7819                  if that assumption turns out to be wrong.  */
7820               offset_expr.X_op = O_constant;
7821               offset_expr.X_add_number = 0;
7822             }
7823           else
7824             {
7825               if (!match_expression (&arg, &offset_expr, offset_reloc))
7826                 return FALSE;
7827               normalize_address_expr (&offset_expr);
7828             }
7829           continue;
7830
7831         case 'F':
7832           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7833                                      8, TRUE))
7834             return FALSE;
7835           continue;
7836
7837         case 'L':
7838           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7839                                      8, FALSE))
7840             return FALSE;
7841           continue;
7842
7843         case 'f':
7844           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7845                                      4, TRUE))
7846             return FALSE;
7847           continue;
7848
7849         case 'l':
7850           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7851                                      4, FALSE))
7852             return FALSE;
7853           continue;
7854
7855         case 'p':
7856           *offset_reloc = BFD_RELOC_16_PCREL_S2;
7857           break;
7858
7859         case 'a':
7860           *offset_reloc = BFD_RELOC_MIPS_JMP;
7861           break;
7862
7863         case 'm':
7864           gas_assert (mips_opts.micromips);
7865           c = args[1];
7866           switch (c)
7867             {
7868             case 'D':
7869             case 'E':
7870               if (!forced_insn_length)
7871                 *offset_reloc = (int) BFD_RELOC_UNUSED + c;
7872               else if (c == 'D')
7873                 *offset_reloc = BFD_RELOC_MICROMIPS_10_PCREL_S1;
7874               else
7875                 *offset_reloc = BFD_RELOC_MICROMIPS_7_PCREL_S1;
7876               break;
7877             }
7878           break;
7879         }
7880
7881       operand = (mips_opts.micromips
7882                  ? decode_micromips_operand (args)
7883                  : decode_mips_operand (args));
7884       if (!operand)
7885         abort ();
7886
7887       /* Skip prefixes.  */
7888       if (*args == '+' || *args == 'm' || *args == '-')
7889         args++;
7890
7891       if (mips_optional_operand_p (operand)
7892           && args[1] == ','
7893           && (arg.token[0].type != OT_REG
7894               || arg.token[1].type == OT_END))
7895         {
7896           /* Assume that the register has been elided and is the
7897              same as the first operand.  */
7898           arg.token = tokens;
7899           arg.argnum = 1;
7900         }
7901
7902       if (!match_operand (&arg, operand))
7903         return FALSE;
7904     }
7905 }
7906
7907 /* Like match_insn, but for MIPS16.  */
7908
7909 static bfd_boolean
7910 match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
7911                    struct mips_operand_token *tokens)
7912 {
7913   const char *args;
7914   const struct mips_operand *operand;
7915   const struct mips_operand *ext_operand;
7916   struct mips_arg_info arg;
7917   int relax_char;
7918
7919   create_insn (insn, opcode);
7920   imm_expr.X_op = O_absent;
7921   offset_expr.X_op = O_absent;
7922   offset_reloc[0] = BFD_RELOC_UNUSED;
7923   offset_reloc[1] = BFD_RELOC_UNUSED;
7924   offset_reloc[2] = BFD_RELOC_UNUSED;
7925   relax_char = 0;
7926
7927   memset (&arg, 0, sizeof (arg));
7928   arg.insn = insn;
7929   arg.token = tokens;
7930   arg.argnum = 1;
7931   arg.last_regno = ILLEGAL_REG;
7932   arg.dest_regno = ILLEGAL_REG;
7933   relax_char = 0;
7934   for (args = opcode->args;; ++args)
7935     {
7936       int c;
7937
7938       if (arg.token->type == OT_END)
7939         {
7940           offsetT value;
7941
7942           /* Handle unary instructions in which only one operand is given.
7943              The source is then the same as the destination.  */
7944           if (arg.opnum == 1 && *args == ',')
7945             {
7946               operand = decode_mips16_operand (args[1], FALSE);
7947               if (operand && mips_optional_operand_p (operand))
7948                 {
7949                   arg.token = tokens;
7950                   arg.argnum = 1;
7951                   continue;
7952                 }
7953             }
7954
7955           /* Fail the match if there were too few operands.  */
7956           if (*args)
7957             return FALSE;
7958
7959           /* Successful match.  Stuff the immediate value in now, if
7960              we can.  */
7961           clear_insn_error ();
7962           if (opcode->pinfo == INSN_MACRO)
7963             {
7964               gas_assert (relax_char == 0 || relax_char == 'p');
7965               gas_assert (*offset_reloc == BFD_RELOC_UNUSED);
7966             }
7967           else if (relax_char
7968                    && offset_expr.X_op == O_constant
7969                    && calculate_reloc (*offset_reloc,
7970                                        offset_expr.X_add_number,
7971                                        &value))
7972             {
7973               mips16_immed (NULL, 0, relax_char, *offset_reloc, value,
7974                             forced_insn_length, &insn->insn_opcode);
7975               offset_expr.X_op = O_absent;
7976               *offset_reloc = BFD_RELOC_UNUSED;
7977             }
7978           else if (relax_char && *offset_reloc != BFD_RELOC_UNUSED)
7979             {
7980               if (forced_insn_length == 2)
7981                 set_insn_error (0, _("invalid unextended operand value"));
7982               forced_insn_length = 4;
7983               insn->insn_opcode |= MIPS16_EXTEND;
7984             }
7985           else if (relax_char)
7986             *offset_reloc = (int) BFD_RELOC_UNUSED + relax_char;
7987
7988           check_completed_insn (&arg);
7989           return TRUE;
7990         }
7991
7992       /* Fail the match if the line has too many operands.   */
7993       if (*args == 0)
7994         return FALSE;
7995
7996       /* Handle characters that need to match exactly.  */
7997       if (*args == '(' || *args == ')' || *args == ',')
7998         {
7999           if (match_char (&arg, *args))
8000             continue;
8001           return FALSE;
8002         }
8003
8004       arg.opnum += 1;
8005       c = *args;
8006       switch (c)
8007         {
8008         case 'p':
8009         case 'q':
8010         case 'A':
8011         case 'B':
8012         case 'E':
8013           relax_char = c;
8014           break;
8015
8016         case 'I':
8017           if (!match_const_int (&arg, &imm_expr.X_add_number))
8018             return FALSE;
8019           imm_expr.X_op = O_constant;
8020           if (GPR_SIZE == 32)
8021             normalize_constant_expr (&imm_expr);
8022           continue;
8023
8024         case 'a':
8025         case 'i':
8026           *offset_reloc = BFD_RELOC_MIPS16_JMP;
8027           insn->insn_opcode <<= 16;
8028           break;
8029         }
8030
8031       operand = decode_mips16_operand (c, FALSE);
8032       if (!operand)
8033         abort ();
8034
8035       /* '6' is a special case.  It is used for BREAK and SDBBP,
8036          whose operands are only meaningful to the software that decodes
8037          them.  This means that there is no architectural reason why
8038          they cannot be prefixed by EXTEND, but in practice,
8039          exception handlers will only look at the instruction
8040          itself.  We therefore allow '6' to be extended when
8041          disassembling but not when assembling.  */
8042       if (operand->type != OP_PCREL && c != '6')
8043         {
8044           ext_operand = decode_mips16_operand (c, TRUE);
8045           if (operand != ext_operand)
8046             {
8047               if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
8048                 {
8049                   offset_expr.X_op = O_constant;
8050                   offset_expr.X_add_number = 0;
8051                   relax_char = c;
8052                   continue;
8053                 }
8054
8055               /* We need the OT_INTEGER check because some MIPS16
8056                  immediate variants are listed before the register ones.  */
8057               if (arg.token->type != OT_INTEGER
8058                   || !match_expression (&arg, &offset_expr, offset_reloc))
8059                 return FALSE;
8060
8061               /* '8' is used for SLTI(U) and has traditionally not
8062                  been allowed to take relocation operators.  */
8063               if (offset_reloc[0] != BFD_RELOC_UNUSED
8064                   && (ext_operand->size != 16 || c == '8'))
8065                 return FALSE;
8066
8067               relax_char = c;
8068               continue;
8069             }
8070         }
8071
8072       if (mips_optional_operand_p (operand)
8073           && args[1] == ','
8074           && (arg.token[0].type != OT_REG
8075               || arg.token[1].type == OT_END))
8076         {
8077           /* Assume that the register has been elided and is the
8078              same as the first operand.  */
8079           arg.token = tokens;
8080           arg.argnum = 1;
8081         }
8082
8083       if (!match_operand (&arg, operand))
8084         return FALSE;
8085     }
8086 }
8087
8088 /* Record that the current instruction is invalid for the current ISA.  */
8089
8090 static void
8091 match_invalid_for_isa (void)
8092 {
8093   set_insn_error_ss
8094     (0, _("opcode not supported on this processor: %s (%s)"),
8095      mips_cpu_info_from_arch (mips_opts.arch)->name,
8096      mips_cpu_info_from_isa (mips_opts.isa)->name);
8097 }
8098
8099 /* Try to match TOKENS against a series of opcode entries, starting at FIRST.
8100    Return true if a definite match or failure was found, storing any match
8101    in INSN.  OPCODE_EXTRA is a value that should be ORed into the opcode
8102    (to handle things like VU0 suffixes).  LAX_MATCH is true if we have already
8103    tried and failed to match under normal conditions and now want to try a
8104    more relaxed match.  */
8105
8106 static bfd_boolean
8107 match_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
8108              const struct mips_opcode *past, struct mips_operand_token *tokens,
8109              int opcode_extra, bfd_boolean lax_match)
8110 {
8111   const struct mips_opcode *opcode;
8112   const struct mips_opcode *invalid_delay_slot;
8113   bfd_boolean seen_valid_for_isa, seen_valid_for_size;
8114
8115   /* Search for a match, ignoring alternatives that don't satisfy the
8116      current ISA or forced_length.  */
8117   invalid_delay_slot = 0;
8118   seen_valid_for_isa = FALSE;
8119   seen_valid_for_size = FALSE;
8120   opcode = first;
8121   do
8122     {
8123       gas_assert (strcmp (opcode->name, first->name) == 0);
8124       if (is_opcode_valid (opcode))
8125         {
8126           seen_valid_for_isa = TRUE;
8127           if (is_size_valid (opcode))
8128             {
8129               bfd_boolean delay_slot_ok;
8130
8131               seen_valid_for_size = TRUE;
8132               delay_slot_ok = is_delay_slot_valid (opcode);
8133               if (match_insn (insn, opcode, tokens, opcode_extra,
8134                               lax_match, delay_slot_ok))
8135                 {
8136                   if (!delay_slot_ok)
8137                     {
8138                       if (!invalid_delay_slot)
8139                         invalid_delay_slot = opcode;
8140                     }
8141                   else
8142                     return TRUE;
8143                 }
8144             }
8145         }
8146       ++opcode;
8147     }
8148   while (opcode < past && strcmp (opcode->name, first->name) == 0);
8149
8150   /* If the only matches we found had the wrong length for the delay slot,
8151      pick the first such match.  We'll issue an appropriate warning later.  */
8152   if (invalid_delay_slot)
8153     {
8154       if (match_insn (insn, invalid_delay_slot, tokens, opcode_extra,
8155                       lax_match, TRUE))
8156         return TRUE;
8157       abort ();
8158     }
8159
8160   /* Handle the case where we didn't try to match an instruction because
8161      all the alternatives were incompatible with the current ISA.  */
8162   if (!seen_valid_for_isa)
8163     {
8164       match_invalid_for_isa ();
8165       return TRUE;
8166     }
8167
8168   /* Handle the case where we didn't try to match an instruction because
8169      all the alternatives were of the wrong size.  */
8170   if (!seen_valid_for_size)
8171     {
8172       if (mips_opts.insn32)
8173         set_insn_error (0, _("opcode not supported in the `insn32' mode"));
8174       else
8175         set_insn_error_i
8176           (0, _("unrecognized %d-bit version of microMIPS opcode"),
8177            8 * forced_insn_length);
8178       return TRUE;
8179     }
8180
8181   return FALSE;
8182 }
8183
8184 /* Like match_insns, but for MIPS16.  */
8185
8186 static bfd_boolean
8187 match_mips16_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
8188                     struct mips_operand_token *tokens)
8189 {
8190   const struct mips_opcode *opcode;
8191   bfd_boolean seen_valid_for_isa;
8192
8193   /* Search for a match, ignoring alternatives that don't satisfy the
8194      current ISA.  There are no separate entries for extended forms so
8195      we deal with forced_length later.  */
8196   seen_valid_for_isa = FALSE;
8197   opcode = first;
8198   do
8199     {
8200       gas_assert (strcmp (opcode->name, first->name) == 0);
8201       if (is_opcode_valid_16 (opcode))
8202         {
8203           seen_valid_for_isa = TRUE;
8204           if (match_mips16_insn (insn, opcode, tokens))
8205             return TRUE;
8206         }
8207       ++opcode;
8208     }
8209   while (opcode < &mips16_opcodes[bfd_mips16_num_opcodes]
8210          && strcmp (opcode->name, first->name) == 0);
8211
8212   /* Handle the case where we didn't try to match an instruction because
8213      all the alternatives were incompatible with the current ISA.  */
8214   if (!seen_valid_for_isa)
8215     {
8216       match_invalid_for_isa ();
8217       return TRUE;
8218     }
8219
8220   return FALSE;
8221 }
8222
8223 /* Set up global variables for the start of a new macro.  */
8224
8225 static void
8226 macro_start (void)
8227 {
8228   memset (&mips_macro_warning.sizes, 0, sizeof (mips_macro_warning.sizes));
8229   memset (&mips_macro_warning.first_insn_sizes, 0,
8230           sizeof (mips_macro_warning.first_insn_sizes));
8231   memset (&mips_macro_warning.insns, 0, sizeof (mips_macro_warning.insns));
8232   mips_macro_warning.delay_slot_p = (mips_opts.noreorder
8233                                      && delayed_branch_p (&history[0]));
8234   switch (history[0].insn_mo->pinfo2
8235           & (INSN2_BRANCH_DELAY_32BIT | INSN2_BRANCH_DELAY_16BIT))
8236     {
8237     case INSN2_BRANCH_DELAY_32BIT:
8238       mips_macro_warning.delay_slot_length = 4;
8239       break;
8240     case INSN2_BRANCH_DELAY_16BIT:
8241       mips_macro_warning.delay_slot_length = 2;
8242       break;
8243     default:
8244       mips_macro_warning.delay_slot_length = 0;
8245       break;
8246     }
8247   mips_macro_warning.first_frag = NULL;
8248 }
8249
8250 /* Given that a macro is longer than one instruction or of the wrong size,
8251    return the appropriate warning for it.  Return null if no warning is
8252    needed.  SUBTYPE is a bitmask of RELAX_DELAY_SLOT, RELAX_DELAY_SLOT_16BIT,
8253    RELAX_DELAY_SLOT_SIZE_FIRST, RELAX_DELAY_SLOT_SIZE_SECOND,
8254    and RELAX_NOMACRO.  */
8255
8256 static const char *
8257 macro_warning (relax_substateT subtype)
8258 {
8259   if (subtype & RELAX_DELAY_SLOT)
8260     return _("macro instruction expanded into multiple instructions"
8261              " in a branch delay slot");
8262   else if (subtype & RELAX_NOMACRO)
8263     return _("macro instruction expanded into multiple instructions");
8264   else if (subtype & (RELAX_DELAY_SLOT_SIZE_FIRST
8265                       | RELAX_DELAY_SLOT_SIZE_SECOND))
8266     return ((subtype & RELAX_DELAY_SLOT_16BIT)
8267             ? _("macro instruction expanded into a wrong size instruction"
8268                 " in a 16-bit branch delay slot")
8269             : _("macro instruction expanded into a wrong size instruction"
8270                 " in a 32-bit branch delay slot"));
8271   else
8272     return 0;
8273 }
8274
8275 /* Finish up a macro.  Emit warnings as appropriate.  */
8276
8277 static void
8278 macro_end (void)
8279 {
8280   /* Relaxation warning flags.  */
8281   relax_substateT subtype = 0;
8282
8283   /* Check delay slot size requirements.  */
8284   if (mips_macro_warning.delay_slot_length == 2)
8285     subtype |= RELAX_DELAY_SLOT_16BIT;
8286   if (mips_macro_warning.delay_slot_length != 0)
8287     {
8288       if (mips_macro_warning.delay_slot_length
8289           != mips_macro_warning.first_insn_sizes[0])
8290         subtype |= RELAX_DELAY_SLOT_SIZE_FIRST;
8291       if (mips_macro_warning.delay_slot_length
8292           != mips_macro_warning.first_insn_sizes[1])
8293         subtype |= RELAX_DELAY_SLOT_SIZE_SECOND;
8294     }
8295
8296   /* Check instruction count requirements.  */
8297   if (mips_macro_warning.insns[0] > 1 || mips_macro_warning.insns[1] > 1)
8298     {
8299       if (mips_macro_warning.insns[1] > mips_macro_warning.insns[0])
8300         subtype |= RELAX_SECOND_LONGER;
8301       if (mips_opts.warn_about_macros)
8302         subtype |= RELAX_NOMACRO;
8303       if (mips_macro_warning.delay_slot_p)
8304         subtype |= RELAX_DELAY_SLOT;
8305     }
8306
8307   /* If both alternatives fail to fill a delay slot correctly,
8308      emit the warning now.  */
8309   if ((subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0
8310       && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0)
8311     {
8312       relax_substateT s;
8313       const char *msg;
8314
8315       s = subtype & (RELAX_DELAY_SLOT_16BIT
8316                      | RELAX_DELAY_SLOT_SIZE_FIRST
8317                      | RELAX_DELAY_SLOT_SIZE_SECOND);
8318       msg = macro_warning (s);
8319       if (msg != NULL)
8320         as_warn ("%s", msg);
8321       subtype &= ~s;
8322     }
8323
8324   /* If both implementations are longer than 1 instruction, then emit the
8325      warning now.  */
8326   if (mips_macro_warning.insns[0] > 1 && mips_macro_warning.insns[1] > 1)
8327     {
8328       relax_substateT s;
8329       const char *msg;
8330
8331       s = subtype & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT);
8332       msg = macro_warning (s);
8333       if (msg != NULL)
8334         as_warn ("%s", msg);
8335       subtype &= ~s;
8336     }
8337
8338   /* If any flags still set, then one implementation might need a warning
8339      and the other either will need one of a different kind or none at all.
8340      Pass any remaining flags over to relaxation.  */
8341   if (mips_macro_warning.first_frag != NULL)
8342     mips_macro_warning.first_frag->fr_subtype |= subtype;
8343 }
8344
8345 /* Instruction operand formats used in macros that vary between
8346    standard MIPS and microMIPS code.  */
8347
8348 static const char * const brk_fmt[2][2] = { { "c", "c" }, { "mF", "c" } };
8349 static const char * const cop12_fmt[2] = { "E,o(b)", "E,~(b)" };
8350 static const char * const jalr_fmt[2] = { "d,s", "t,s" };
8351 static const char * const lui_fmt[2] = { "t,u", "s,u" };
8352 static const char * const mem12_fmt[2] = { "t,o(b)", "t,~(b)" };
8353 static const char * const mfhl_fmt[2][2] = { { "d", "d" }, { "mj", "s" } };
8354 static const char * const shft_fmt[2] = { "d,w,<", "t,r,<" };
8355 static const char * const trap_fmt[2] = { "s,t,q", "s,t,|" };
8356
8357 #define BRK_FMT (brk_fmt[mips_opts.micromips][mips_opts.insn32])
8358 #define COP12_FMT (ISA_IS_R6 (mips_opts.isa) ? "E,+:(d)" \
8359                                              : cop12_fmt[mips_opts.micromips])
8360 #define JALR_FMT (jalr_fmt[mips_opts.micromips])
8361 #define LUI_FMT (lui_fmt[mips_opts.micromips])
8362 #define MEM12_FMT (mem12_fmt[mips_opts.micromips])
8363 #define LL_SC_FMT (ISA_IS_R6 (mips_opts.isa) ? "t,+j(b)" \
8364                                              : mem12_fmt[mips_opts.micromips])
8365 #define MFHL_FMT (mfhl_fmt[mips_opts.micromips][mips_opts.insn32])
8366 #define SHFT_FMT (shft_fmt[mips_opts.micromips])
8367 #define TRAP_FMT (trap_fmt[mips_opts.micromips])
8368
8369 /* Read a macro's relocation codes from *ARGS and store them in *R.
8370    The first argument in *ARGS will be either the code for a single
8371    relocation or -1 followed by the three codes that make up a
8372    composite relocation.  */
8373
8374 static void
8375 macro_read_relocs (va_list *args, bfd_reloc_code_real_type *r)
8376 {
8377   int i, next;
8378
8379   next = va_arg (*args, int);
8380   if (next >= 0)
8381     r[0] = (bfd_reloc_code_real_type) next;
8382   else
8383     {
8384       for (i = 0; i < 3; i++)
8385         r[i] = (bfd_reloc_code_real_type) va_arg (*args, int);
8386       /* This function is only used for 16-bit relocation fields.
8387          To make the macro code simpler, treat an unrelocated value
8388          in the same way as BFD_RELOC_LO16.  */
8389       if (r[0] == BFD_RELOC_UNUSED)
8390         r[0] = BFD_RELOC_LO16;
8391     }
8392 }
8393
8394 /* Build an instruction created by a macro expansion.  This is passed
8395    a pointer to the count of instructions created so far, an
8396    expression, the name of the instruction to build, an operand format
8397    string, and corresponding arguments.  */
8398
8399 static void
8400 macro_build (expressionS *ep, const char *name, const char *fmt, ...)
8401 {
8402   const struct mips_opcode *mo = NULL;
8403   bfd_reloc_code_real_type r[3];
8404   const struct mips_opcode *amo;
8405   const struct mips_operand *operand;
8406   struct hash_control *hash;
8407   struct mips_cl_insn insn;
8408   va_list args;
8409   unsigned int uval;
8410
8411   va_start (args, fmt);
8412
8413   if (mips_opts.mips16)
8414     {
8415       mips16_macro_build (ep, name, fmt, &args);
8416       va_end (args);
8417       return;
8418     }
8419
8420   r[0] = BFD_RELOC_UNUSED;
8421   r[1] = BFD_RELOC_UNUSED;
8422   r[2] = BFD_RELOC_UNUSED;
8423   hash = mips_opts.micromips ? micromips_op_hash : op_hash;
8424   amo = (struct mips_opcode *) hash_find (hash, name);
8425   gas_assert (amo);
8426   gas_assert (strcmp (name, amo->name) == 0);
8427
8428   do
8429     {
8430       /* Search until we get a match for NAME.  It is assumed here that
8431          macros will never generate MDMX, MIPS-3D, or MT instructions.
8432          We try to match an instruction that fulfils the branch delay
8433          slot instruction length requirement (if any) of the previous
8434          instruction.  While doing this we record the first instruction
8435          seen that matches all the other conditions and use it anyway
8436          if the requirement cannot be met; we will issue an appropriate
8437          warning later on.  */
8438       if (strcmp (fmt, amo->args) == 0
8439           && amo->pinfo != INSN_MACRO
8440           && is_opcode_valid (amo)
8441           && is_size_valid (amo))
8442         {
8443           if (is_delay_slot_valid (amo))
8444             {
8445               mo = amo;
8446               break;
8447             }
8448           else if (!mo)
8449             mo = amo;
8450         }
8451
8452       ++amo;
8453       gas_assert (amo->name);
8454     }
8455   while (strcmp (name, amo->name) == 0);
8456
8457   gas_assert (mo);
8458   create_insn (&insn, mo);
8459   for (; *fmt; ++fmt)
8460     {
8461       switch (*fmt)
8462         {
8463         case ',':
8464         case '(':
8465         case ')':
8466         case 'z':
8467           break;
8468
8469         case 'i':
8470         case 'j':
8471           macro_read_relocs (&args, r);
8472           gas_assert (*r == BFD_RELOC_GPREL16
8473                       || *r == BFD_RELOC_MIPS_HIGHER
8474                       || *r == BFD_RELOC_HI16_S
8475                       || *r == BFD_RELOC_LO16
8476                       || *r == BFD_RELOC_MIPS_GOT_OFST);
8477           break;
8478
8479         case 'o':
8480           macro_read_relocs (&args, r);
8481           break;
8482
8483         case 'u':
8484           macro_read_relocs (&args, r);
8485           gas_assert (ep != NULL
8486                       && (ep->X_op == O_constant
8487                           || (ep->X_op == O_symbol
8488                               && (*r == BFD_RELOC_MIPS_HIGHEST
8489                                   || *r == BFD_RELOC_HI16_S
8490                                   || *r == BFD_RELOC_HI16
8491                                   || *r == BFD_RELOC_GPREL16
8492                                   || *r == BFD_RELOC_MIPS_GOT_HI16
8493                                   || *r == BFD_RELOC_MIPS_CALL_HI16))));
8494           break;
8495
8496         case 'p':
8497           gas_assert (ep != NULL);
8498
8499           /*
8500            * This allows macro() to pass an immediate expression for
8501            * creating short branches without creating a symbol.
8502            *
8503            * We don't allow branch relaxation for these branches, as
8504            * they should only appear in ".set nomacro" anyway.
8505            */
8506           if (ep->X_op == O_constant)
8507             {
8508               /* For microMIPS we always use relocations for branches.
8509                  So we should not resolve immediate values.  */
8510               gas_assert (!mips_opts.micromips);
8511
8512               if ((ep->X_add_number & 3) != 0)
8513                 as_bad (_("branch to misaligned address (0x%lx)"),
8514                         (unsigned long) ep->X_add_number);
8515               if ((ep->X_add_number + 0x20000) & ~0x3ffff)
8516                 as_bad (_("branch address range overflow (0x%lx)"),
8517                         (unsigned long) ep->X_add_number);
8518               insn.insn_opcode |= (ep->X_add_number >> 2) & 0xffff;
8519               ep = NULL;
8520             }
8521           else
8522             *r = BFD_RELOC_16_PCREL_S2;
8523           break;
8524
8525         case 'a':
8526           gas_assert (ep != NULL);
8527           *r = BFD_RELOC_MIPS_JMP;
8528           break;
8529
8530         default:
8531           operand = (mips_opts.micromips
8532                      ? decode_micromips_operand (fmt)
8533                      : decode_mips_operand (fmt));
8534           if (!operand)
8535             abort ();
8536
8537           uval = va_arg (args, int);
8538           if (operand->type == OP_CLO_CLZ_DEST)
8539             uval |= (uval << 5);
8540           insn_insert_operand (&insn, operand, uval);
8541
8542           if (*fmt == '+' || *fmt == 'm' || *fmt == '-')
8543             ++fmt;
8544           break;
8545         }
8546     }
8547   va_end (args);
8548   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
8549
8550   append_insn (&insn, ep, r, TRUE);
8551 }
8552
8553 static void
8554 mips16_macro_build (expressionS *ep, const char *name, const char *fmt,
8555                     va_list *args)
8556 {
8557   struct mips_opcode *mo;
8558   struct mips_cl_insn insn;
8559   const struct mips_operand *operand;
8560   bfd_reloc_code_real_type r[3]
8561     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
8562
8563   mo = (struct mips_opcode *) hash_find (mips16_op_hash, name);
8564   gas_assert (mo);
8565   gas_assert (strcmp (name, mo->name) == 0);
8566
8567   while (strcmp (fmt, mo->args) != 0 || mo->pinfo == INSN_MACRO)
8568     {
8569       ++mo;
8570       gas_assert (mo->name);
8571       gas_assert (strcmp (name, mo->name) == 0);
8572     }
8573
8574   create_insn (&insn, mo);
8575   for (; *fmt; ++fmt)
8576     {
8577       int c;
8578
8579       c = *fmt;
8580       switch (c)
8581         {
8582         case ',':
8583         case '(':
8584         case ')':
8585           break;
8586
8587         case '0':
8588         case 'S':
8589         case 'P':
8590         case 'R':
8591           break;
8592
8593         case '<':
8594         case '>':
8595         case '4':
8596         case '5':
8597         case 'H':
8598         case 'W':
8599         case 'D':
8600         case 'j':
8601         case '8':
8602         case 'V':
8603         case 'C':
8604         case 'U':
8605         case 'k':
8606         case 'K':
8607         case 'p':
8608         case 'q':
8609           {
8610             offsetT value;
8611
8612             gas_assert (ep != NULL);
8613
8614             if (ep->X_op != O_constant)
8615               *r = (int) BFD_RELOC_UNUSED + c;
8616             else if (calculate_reloc (*r, ep->X_add_number, &value))
8617               {
8618                 mips16_immed (NULL, 0, c, *r, value, 0, &insn.insn_opcode);
8619                 ep = NULL;
8620                 *r = BFD_RELOC_UNUSED;
8621               }
8622           }
8623           break;
8624
8625         default:
8626           operand = decode_mips16_operand (c, FALSE);
8627           if (!operand)
8628             abort ();
8629
8630           insn_insert_operand (&insn, operand, va_arg (*args, int));
8631           break;
8632         }
8633     }
8634
8635   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
8636
8637   append_insn (&insn, ep, r, TRUE);
8638 }
8639
8640 /*
8641  * Generate a "jalr" instruction with a relocation hint to the called
8642  * function.  This occurs in NewABI PIC code.
8643  */
8644 static void
8645 macro_build_jalr (expressionS *ep, int cprestore)
8646 {
8647   static const bfd_reloc_code_real_type jalr_relocs[2]
8648     = { BFD_RELOC_MIPS_JALR, BFD_RELOC_MICROMIPS_JALR };
8649   bfd_reloc_code_real_type jalr_reloc = jalr_relocs[mips_opts.micromips];
8650   const char *jalr;
8651   char *f = NULL;
8652
8653   if (MIPS_JALR_HINT_P (ep))
8654     {
8655       frag_grow (8);
8656       f = frag_more (0);
8657     }
8658   if (mips_opts.micromips)
8659     {
8660       jalr = ((mips_opts.noreorder && !cprestore) || mips_opts.insn32
8661               ? "jalr" : "jalrs");
8662       if (MIPS_JALR_HINT_P (ep)
8663           || mips_opts.insn32
8664           || (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
8665         macro_build (NULL, jalr, "t,s", RA, PIC_CALL_REG);
8666       else
8667         macro_build (NULL, jalr, "mj", PIC_CALL_REG);
8668     }
8669   else
8670     macro_build (NULL, "jalr", "d,s", RA, PIC_CALL_REG);
8671   if (MIPS_JALR_HINT_P (ep))
8672     fix_new_exp (frag_now, f - frag_now->fr_literal, 4, ep, FALSE, jalr_reloc);
8673 }
8674
8675 /*
8676  * Generate a "lui" instruction.
8677  */
8678 static void
8679 macro_build_lui (expressionS *ep, int regnum)
8680 {
8681   gas_assert (! mips_opts.mips16);
8682
8683   if (ep->X_op != O_constant)
8684     {
8685       gas_assert (ep->X_op == O_symbol);
8686       /* _gp_disp is a special case, used from s_cpload.
8687          __gnu_local_gp is used if mips_no_shared.  */
8688       gas_assert (mips_pic == NO_PIC
8689               || (! HAVE_NEWABI
8690                   && strcmp (S_GET_NAME (ep->X_add_symbol), "_gp_disp") == 0)
8691               || (! mips_in_shared
8692                   && strcmp (S_GET_NAME (ep->X_add_symbol),
8693                              "__gnu_local_gp") == 0));
8694     }
8695
8696   macro_build (ep, "lui", LUI_FMT, regnum, BFD_RELOC_HI16_S);
8697 }
8698
8699 /* Generate a sequence of instructions to do a load or store from a constant
8700    offset off of a base register (breg) into/from a target register (treg),
8701    using AT if necessary.  */
8702 static void
8703 macro_build_ldst_constoffset (expressionS *ep, const char *op,
8704                               int treg, int breg, int dbl)
8705 {
8706   gas_assert (ep->X_op == O_constant);
8707
8708   /* Sign-extending 32-bit constants makes their handling easier.  */
8709   if (!dbl)
8710     normalize_constant_expr (ep);
8711
8712   /* Right now, this routine can only handle signed 32-bit constants.  */
8713   if (! IS_SEXT_32BIT_NUM(ep->X_add_number + 0x8000))
8714     as_warn (_("operand overflow"));
8715
8716   if (IS_SEXT_16BIT_NUM(ep->X_add_number))
8717     {
8718       /* Signed 16-bit offset will fit in the op.  Easy!  */
8719       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, breg);
8720     }
8721   else
8722     {
8723       /* 32-bit offset, need multiple instructions and AT, like:
8724            lui      $tempreg,const_hi       (BFD_RELOC_HI16_S)
8725            addu     $tempreg,$tempreg,$breg
8726            <op>     $treg,const_lo($tempreg)   (BFD_RELOC_LO16)
8727          to handle the complete offset.  */
8728       macro_build_lui (ep, AT);
8729       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
8730       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, AT);
8731
8732       if (!mips_opts.at)
8733         as_bad (_("macro used $at after \".set noat\""));
8734     }
8735 }
8736
8737 /*                      set_at()
8738  * Generates code to set the $at register to true (one)
8739  * if reg is less than the immediate expression.
8740  */
8741 static void
8742 set_at (int reg, int unsignedp)
8743 {
8744   if (imm_expr.X_add_number >= -0x8000
8745       && imm_expr.X_add_number < 0x8000)
8746     macro_build (&imm_expr, unsignedp ? "sltiu" : "slti", "t,r,j",
8747                  AT, reg, BFD_RELOC_LO16);
8748   else
8749     {
8750       load_register (AT, &imm_expr, GPR_SIZE == 64);
8751       macro_build (NULL, unsignedp ? "sltu" : "slt", "d,v,t", AT, reg, AT);
8752     }
8753 }
8754
8755 /* Count the leading zeroes by performing a binary chop. This is a
8756    bulky bit of source, but performance is a LOT better for the
8757    majority of values than a simple loop to count the bits:
8758        for (lcnt = 0; (lcnt < 32); lcnt++)
8759          if ((v) & (1 << (31 - lcnt)))
8760            break;
8761   However it is not code size friendly, and the gain will drop a bit
8762   on certain cached systems.
8763 */
8764 #define COUNT_TOP_ZEROES(v)             \
8765   (((v) & ~0xffff) == 0                 \
8766    ? ((v) & ~0xff) == 0                 \
8767      ? ((v) & ~0xf) == 0                \
8768        ? ((v) & ~0x3) == 0              \
8769          ? ((v) & ~0x1) == 0            \
8770            ? !(v)                       \
8771              ? 32                       \
8772              : 31                       \
8773            : 30                         \
8774          : ((v) & ~0x7) == 0            \
8775            ? 29                         \
8776            : 28                         \
8777        : ((v) & ~0x3f) == 0             \
8778          ? ((v) & ~0x1f) == 0           \
8779            ? 27                         \
8780            : 26                         \
8781          : ((v) & ~0x7f) == 0           \
8782            ? 25                         \
8783            : 24                         \
8784      : ((v) & ~0xfff) == 0              \
8785        ? ((v) & ~0x3ff) == 0            \
8786          ? ((v) & ~0x1ff) == 0          \
8787            ? 23                         \
8788            : 22                         \
8789          : ((v) & ~0x7ff) == 0          \
8790            ? 21                         \
8791            : 20                         \
8792        : ((v) & ~0x3fff) == 0           \
8793          ? ((v) & ~0x1fff) == 0         \
8794            ? 19                         \
8795            : 18                         \
8796          : ((v) & ~0x7fff) == 0         \
8797            ? 17                         \
8798            : 16                         \
8799    : ((v) & ~0xffffff) == 0             \
8800      ? ((v) & ~0xfffff) == 0            \
8801        ? ((v) & ~0x3ffff) == 0          \
8802          ? ((v) & ~0x1ffff) == 0        \
8803            ? 15                         \
8804            : 14                         \
8805          : ((v) & ~0x7ffff) == 0        \
8806            ? 13                         \
8807            : 12                         \
8808        : ((v) & ~0x3fffff) == 0         \
8809          ? ((v) & ~0x1fffff) == 0       \
8810            ? 11                         \
8811            : 10                         \
8812          : ((v) & ~0x7fffff) == 0       \
8813            ? 9                          \
8814            : 8                          \
8815      : ((v) & ~0xfffffff) == 0          \
8816        ? ((v) & ~0x3ffffff) == 0        \
8817          ? ((v) & ~0x1ffffff) == 0      \
8818            ? 7                          \
8819            : 6                          \
8820          : ((v) & ~0x7ffffff) == 0      \
8821            ? 5                          \
8822            : 4                          \
8823        : ((v) & ~0x3fffffff) == 0       \
8824          ? ((v) & ~0x1fffffff) == 0     \
8825            ? 3                          \
8826            : 2                          \
8827          : ((v) & ~0x7fffffff) == 0     \
8828            ? 1                          \
8829            : 0)
8830
8831 /*                      load_register()
8832  *  This routine generates the least number of instructions necessary to load
8833  *  an absolute expression value into a register.
8834  */
8835 static void
8836 load_register (int reg, expressionS *ep, int dbl)
8837 {
8838   int freg;
8839   expressionS hi32, lo32;
8840
8841   if (ep->X_op != O_big)
8842     {
8843       gas_assert (ep->X_op == O_constant);
8844
8845       /* Sign-extending 32-bit constants makes their handling easier.  */
8846       if (!dbl)
8847         normalize_constant_expr (ep);
8848
8849       if (IS_SEXT_16BIT_NUM (ep->X_add_number))
8850         {
8851           /* We can handle 16 bit signed values with an addiu to
8852              $zero.  No need to ever use daddiu here, since $zero and
8853              the result are always correct in 32 bit mode.  */
8854           macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8855           return;
8856         }
8857       else if (ep->X_add_number >= 0 && ep->X_add_number < 0x10000)
8858         {
8859           /* We can handle 16 bit unsigned values with an ori to
8860              $zero.  */
8861           macro_build (ep, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
8862           return;
8863         }
8864       else if ((IS_SEXT_32BIT_NUM (ep->X_add_number)))
8865         {
8866           /* 32 bit values require an lui.  */
8867           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
8868           if ((ep->X_add_number & 0xffff) != 0)
8869             macro_build (ep, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
8870           return;
8871         }
8872     }
8873
8874   /* The value is larger than 32 bits.  */
8875
8876   if (!dbl || GPR_SIZE == 32)
8877     {
8878       char value[32];
8879
8880       sprintf_vma (value, ep->X_add_number);
8881       as_bad (_("number (0x%s) larger than 32 bits"), value);
8882       macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8883       return;
8884     }
8885
8886   if (ep->X_op != O_big)
8887     {
8888       hi32 = *ep;
8889       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
8890       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
8891       hi32.X_add_number &= 0xffffffff;
8892       lo32 = *ep;
8893       lo32.X_add_number &= 0xffffffff;
8894     }
8895   else
8896     {
8897       gas_assert (ep->X_add_number > 2);
8898       if (ep->X_add_number == 3)
8899         generic_bignum[3] = 0;
8900       else if (ep->X_add_number > 4)
8901         as_bad (_("number larger than 64 bits"));
8902       lo32.X_op = O_constant;
8903       lo32.X_add_number = generic_bignum[0] + (generic_bignum[1] << 16);
8904       hi32.X_op = O_constant;
8905       hi32.X_add_number = generic_bignum[2] + (generic_bignum[3] << 16);
8906     }
8907
8908   if (hi32.X_add_number == 0)
8909     freg = 0;
8910   else
8911     {
8912       int shift, bit;
8913       unsigned long hi, lo;
8914
8915       if (hi32.X_add_number == (offsetT) 0xffffffff)
8916         {
8917           if ((lo32.X_add_number & 0xffff8000) == 0xffff8000)
8918             {
8919               macro_build (&lo32, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8920               return;
8921             }
8922           if (lo32.X_add_number & 0x80000000)
8923             {
8924               macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
8925               if (lo32.X_add_number & 0xffff)
8926                 macro_build (&lo32, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
8927               return;
8928             }
8929         }
8930
8931       /* Check for 16bit shifted constant.  We know that hi32 is
8932          non-zero, so start the mask on the first bit of the hi32
8933          value.  */
8934       shift = 17;
8935       do
8936         {
8937           unsigned long himask, lomask;
8938
8939           if (shift < 32)
8940             {
8941               himask = 0xffff >> (32 - shift);
8942               lomask = (0xffff << shift) & 0xffffffff;
8943             }
8944           else
8945             {
8946               himask = 0xffff << (shift - 32);
8947               lomask = 0;
8948             }
8949           if ((hi32.X_add_number & ~(offsetT) himask) == 0
8950               && (lo32.X_add_number & ~(offsetT) lomask) == 0)
8951             {
8952               expressionS tmp;
8953
8954               tmp.X_op = O_constant;
8955               if (shift < 32)
8956                 tmp.X_add_number = ((hi32.X_add_number << (32 - shift))
8957                                     | (lo32.X_add_number >> shift));
8958               else
8959                 tmp.X_add_number = hi32.X_add_number >> (shift - 32);
8960               macro_build (&tmp, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
8961               macro_build (NULL, (shift >= 32) ? "dsll32" : "dsll", SHFT_FMT,
8962                            reg, reg, (shift >= 32) ? shift - 32 : shift);
8963               return;
8964             }
8965           ++shift;
8966         }
8967       while (shift <= (64 - 16));
8968
8969       /* Find the bit number of the lowest one bit, and store the
8970          shifted value in hi/lo.  */
8971       hi = (unsigned long) (hi32.X_add_number & 0xffffffff);
8972       lo = (unsigned long) (lo32.X_add_number & 0xffffffff);
8973       if (lo != 0)
8974         {
8975           bit = 0;
8976           while ((lo & 1) == 0)
8977             {
8978               lo >>= 1;
8979               ++bit;
8980             }
8981           lo |= (hi & (((unsigned long) 1 << bit) - 1)) << (32 - bit);
8982           hi >>= bit;
8983         }
8984       else
8985         {
8986           bit = 32;
8987           while ((hi & 1) == 0)
8988             {
8989               hi >>= 1;
8990               ++bit;
8991             }
8992           lo = hi;
8993           hi = 0;
8994         }
8995
8996       /* Optimize if the shifted value is a (power of 2) - 1.  */
8997       if ((hi == 0 && ((lo + 1) & lo) == 0)
8998           || (lo == 0xffffffff && ((hi + 1) & hi) == 0))
8999         {
9000           shift = COUNT_TOP_ZEROES ((unsigned int) hi32.X_add_number);
9001           if (shift != 0)
9002             {
9003               expressionS tmp;
9004
9005               /* This instruction will set the register to be all
9006                  ones.  */
9007               tmp.X_op = O_constant;
9008               tmp.X_add_number = (offsetT) -1;
9009               macro_build (&tmp, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
9010               if (bit != 0)
9011                 {
9012                   bit += shift;
9013                   macro_build (NULL, (bit >= 32) ? "dsll32" : "dsll", SHFT_FMT,
9014                                reg, reg, (bit >= 32) ? bit - 32 : bit);
9015                 }
9016               macro_build (NULL, (shift >= 32) ? "dsrl32" : "dsrl", SHFT_FMT,
9017                            reg, reg, (shift >= 32) ? shift - 32 : shift);
9018               return;
9019             }
9020         }
9021
9022       /* Sign extend hi32 before calling load_register, because we can
9023          generally get better code when we load a sign extended value.  */
9024       if ((hi32.X_add_number & 0x80000000) != 0)
9025         hi32.X_add_number |= ~(offsetT) 0xffffffff;
9026       load_register (reg, &hi32, 0);
9027       freg = reg;
9028     }
9029   if ((lo32.X_add_number & 0xffff0000) == 0)
9030     {
9031       if (freg != 0)
9032         {
9033           macro_build (NULL, "dsll32", SHFT_FMT, reg, freg, 0);
9034           freg = reg;
9035         }
9036     }
9037   else
9038     {
9039       expressionS mid16;
9040
9041       if ((freg == 0) && (lo32.X_add_number == (offsetT) 0xffffffff))
9042         {
9043           macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
9044           macro_build (NULL, "dsrl32", SHFT_FMT, reg, reg, 0);
9045           return;
9046         }
9047
9048       if (freg != 0)
9049         {
9050           macro_build (NULL, "dsll", SHFT_FMT, reg, freg, 16);
9051           freg = reg;
9052         }
9053       mid16 = lo32;
9054       mid16.X_add_number >>= 16;
9055       macro_build (&mid16, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
9056       macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9057       freg = reg;
9058     }
9059   if ((lo32.X_add_number & 0xffff) != 0)
9060     macro_build (&lo32, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
9061 }
9062
9063 static inline void
9064 load_delay_nop (void)
9065 {
9066   if (!gpr_interlocks)
9067     macro_build (NULL, "nop", "");
9068 }
9069
9070 /* Load an address into a register.  */
9071
9072 static void
9073 load_address (int reg, expressionS *ep, int *used_at)
9074 {
9075   if (ep->X_op != O_constant
9076       && ep->X_op != O_symbol)
9077     {
9078       as_bad (_("expression too complex"));
9079       ep->X_op = O_constant;
9080     }
9081
9082   if (ep->X_op == O_constant)
9083     {
9084       load_register (reg, ep, HAVE_64BIT_ADDRESSES);
9085       return;
9086     }
9087
9088   if (mips_pic == NO_PIC)
9089     {
9090       /* If this is a reference to a GP relative symbol, we want
9091            addiu        $reg,$gp,<sym>          (BFD_RELOC_GPREL16)
9092          Otherwise we want
9093            lui          $reg,<sym>              (BFD_RELOC_HI16_S)
9094            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9095          If we have an addend, we always use the latter form.
9096
9097          With 64bit address space and a usable $at we want
9098            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
9099            lui          $at,<sym>               (BFD_RELOC_HI16_S)
9100            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
9101            daddiu       $at,<sym>               (BFD_RELOC_LO16)
9102            dsll32       $reg,0
9103            daddu        $reg,$reg,$at
9104
9105          If $at is already in use, we use a path which is suboptimal
9106          on superscalar processors.
9107            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
9108            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
9109            dsll         $reg,16
9110            daddiu       $reg,<sym>              (BFD_RELOC_HI16_S)
9111            dsll         $reg,16
9112            daddiu       $reg,<sym>              (BFD_RELOC_LO16)
9113
9114          For GP relative symbols in 64bit address space we can use
9115          the same sequence as in 32bit address space.  */
9116       if (HAVE_64BIT_SYMBOLS)
9117         {
9118           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
9119               && !nopic_need_relax (ep->X_add_symbol, 1))
9120             {
9121               relax_start (ep->X_add_symbol);
9122               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
9123                            mips_gp_register, BFD_RELOC_GPREL16);
9124               relax_switch ();
9125             }
9126
9127           if (*used_at == 0 && mips_opts.at)
9128             {
9129               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
9130               macro_build (ep, "lui", LUI_FMT, AT, BFD_RELOC_HI16_S);
9131               macro_build (ep, "daddiu", "t,r,j", reg, reg,
9132                            BFD_RELOC_MIPS_HIGHER);
9133               macro_build (ep, "daddiu", "t,r,j", AT, AT, BFD_RELOC_LO16);
9134               macro_build (NULL, "dsll32", SHFT_FMT, reg, reg, 0);
9135               macro_build (NULL, "daddu", "d,v,t", reg, reg, AT);
9136               *used_at = 1;
9137             }
9138           else
9139             {
9140               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
9141               macro_build (ep, "daddiu", "t,r,j", reg, reg,
9142                            BFD_RELOC_MIPS_HIGHER);
9143               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9144               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_HI16_S);
9145               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
9146               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_LO16);
9147             }
9148
9149           if (mips_relax.sequence)
9150             relax_end ();
9151         }
9152       else
9153         {
9154           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
9155               && !nopic_need_relax (ep->X_add_symbol, 1))
9156             {
9157               relax_start (ep->X_add_symbol);
9158               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
9159                            mips_gp_register, BFD_RELOC_GPREL16);
9160               relax_switch ();
9161             }
9162           macro_build_lui (ep, reg);
9163           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j",
9164                        reg, reg, BFD_RELOC_LO16);
9165           if (mips_relax.sequence)
9166             relax_end ();
9167         }
9168     }
9169   else if (!mips_big_got)
9170     {
9171       expressionS ex;
9172
9173       /* If this is a reference to an external symbol, we want
9174            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9175          Otherwise we want
9176            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9177            nop
9178            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9179          If there is a constant, it must be added in after.
9180
9181          If we have NewABI, we want
9182            lw           $reg,<sym+cst>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
9183          unless we're referencing a global symbol with a non-zero
9184          offset, in which case cst must be added separately.  */
9185       if (HAVE_NEWABI)
9186         {
9187           if (ep->X_add_number)
9188             {
9189               ex.X_add_number = ep->X_add_number;
9190               ep->X_add_number = 0;
9191               relax_start (ep->X_add_symbol);
9192               macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9193                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
9194               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9195                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9196               ex.X_op = O_constant;
9197               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
9198                            reg, reg, BFD_RELOC_LO16);
9199               ep->X_add_number = ex.X_add_number;
9200               relax_switch ();
9201             }
9202           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9203                        BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
9204           if (mips_relax.sequence)
9205             relax_end ();
9206         }
9207       else
9208         {
9209           ex.X_add_number = ep->X_add_number;
9210           ep->X_add_number = 0;
9211           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9212                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
9213           load_delay_nop ();
9214           relax_start (ep->X_add_symbol);
9215           relax_switch ();
9216           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9217                        BFD_RELOC_LO16);
9218           relax_end ();
9219
9220           if (ex.X_add_number != 0)
9221             {
9222               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9223                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9224               ex.X_op = O_constant;
9225               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
9226                            reg, reg, BFD_RELOC_LO16);
9227             }
9228         }
9229     }
9230   else if (mips_big_got)
9231     {
9232       expressionS ex;
9233
9234       /* This is the large GOT case.  If this is a reference to an
9235          external symbol, we want
9236            lui          $reg,<sym>              (BFD_RELOC_MIPS_GOT_HI16)
9237            addu         $reg,$reg,$gp
9238            lw           $reg,<sym>($reg)        (BFD_RELOC_MIPS_GOT_LO16)
9239
9240          Otherwise, for a reference to a local symbol in old ABI, we want
9241            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
9242            nop
9243            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
9244          If there is a constant, it must be added in after.
9245
9246          In the NewABI, for local symbols, with or without offsets, we want:
9247            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
9248            addiu        $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
9249       */
9250       if (HAVE_NEWABI)
9251         {
9252           ex.X_add_number = ep->X_add_number;
9253           ep->X_add_number = 0;
9254           relax_start (ep->X_add_symbol);
9255           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
9256           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
9257                        reg, reg, mips_gp_register);
9258           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
9259                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
9260           if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9261             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9262           else if (ex.X_add_number)
9263             {
9264               ex.X_op = O_constant;
9265               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9266                            BFD_RELOC_LO16);
9267             }
9268
9269           ep->X_add_number = ex.X_add_number;
9270           relax_switch ();
9271           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9272                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
9273           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9274                        BFD_RELOC_MIPS_GOT_OFST);
9275           relax_end ();
9276         }
9277       else
9278         {
9279           ex.X_add_number = ep->X_add_number;
9280           ep->X_add_number = 0;
9281           relax_start (ep->X_add_symbol);
9282           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
9283           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
9284                        reg, reg, mips_gp_register);
9285           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
9286                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
9287           relax_switch ();
9288           if (reg_needs_delay (mips_gp_register))
9289             {
9290               /* We need a nop before loading from $gp.  This special
9291                  check is required because the lui which starts the main
9292                  instruction stream does not refer to $gp, and so will not
9293                  insert the nop which may be required.  */
9294               macro_build (NULL, "nop", "");
9295             }
9296           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
9297                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
9298           load_delay_nop ();
9299           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9300                        BFD_RELOC_LO16);
9301           relax_end ();
9302
9303           if (ex.X_add_number != 0)
9304             {
9305               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
9306                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
9307               ex.X_op = O_constant;
9308               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
9309                            BFD_RELOC_LO16);
9310             }
9311         }
9312     }
9313   else
9314     abort ();
9315
9316   if (!mips_opts.at && *used_at == 1)
9317     as_bad (_("macro used $at after \".set noat\""));
9318 }
9319
9320 /* Move the contents of register SOURCE into register DEST.  */
9321
9322 static void
9323 move_register (int dest, int source)
9324 {
9325   /* Prefer to use a 16-bit microMIPS instruction unless the previous
9326      instruction specifically requires a 32-bit one.  */
9327   if (mips_opts.micromips
9328       && !mips_opts.insn32
9329       && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
9330     macro_build (NULL, "move", "mp,mj", dest, source);
9331   else
9332     macro_build (NULL, "or", "d,v,t", dest, source, 0);
9333 }
9334
9335 /* Emit an SVR4 PIC sequence to load address LOCAL into DEST, where
9336    LOCAL is the sum of a symbol and a 16-bit or 32-bit displacement.
9337    The two alternatives are:
9338
9339    Global symbol                Local sybmol
9340    -------------                ------------
9341    lw DEST,%got(SYMBOL)         lw DEST,%got(SYMBOL + OFFSET)
9342    ...                          ...
9343    addiu DEST,DEST,OFFSET       addiu DEST,DEST,%lo(SYMBOL + OFFSET)
9344
9345    load_got_offset emits the first instruction and add_got_offset
9346    emits the second for a 16-bit offset or add_got_offset_hilo emits
9347    a sequence to add a 32-bit offset using a scratch register.  */
9348
9349 static void
9350 load_got_offset (int dest, expressionS *local)
9351 {
9352   expressionS global;
9353
9354   global = *local;
9355   global.X_add_number = 0;
9356
9357   relax_start (local->X_add_symbol);
9358   macro_build (&global, ADDRESS_LOAD_INSN, "t,o(b)", dest,
9359                BFD_RELOC_MIPS_GOT16, mips_gp_register);
9360   relax_switch ();
9361   macro_build (local, ADDRESS_LOAD_INSN, "t,o(b)", dest,
9362                BFD_RELOC_MIPS_GOT16, mips_gp_register);
9363   relax_end ();
9364 }
9365
9366 static void
9367 add_got_offset (int dest, expressionS *local)
9368 {
9369   expressionS global;
9370
9371   global.X_op = O_constant;
9372   global.X_op_symbol = NULL;
9373   global.X_add_symbol = NULL;
9374   global.X_add_number = local->X_add_number;
9375
9376   relax_start (local->X_add_symbol);
9377   macro_build (&global, ADDRESS_ADDI_INSN, "t,r,j",
9378                dest, dest, BFD_RELOC_LO16);
9379   relax_switch ();
9380   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", dest, dest, BFD_RELOC_LO16);
9381   relax_end ();
9382 }
9383
9384 static void
9385 add_got_offset_hilo (int dest, expressionS *local, int tmp)
9386 {
9387   expressionS global;
9388   int hold_mips_optimize;
9389
9390   global.X_op = O_constant;
9391   global.X_op_symbol = NULL;
9392   global.X_add_symbol = NULL;
9393   global.X_add_number = local->X_add_number;
9394
9395   relax_start (local->X_add_symbol);
9396   load_register (tmp, &global, HAVE_64BIT_ADDRESSES);
9397   relax_switch ();
9398   /* Set mips_optimize around the lui instruction to avoid
9399      inserting an unnecessary nop after the lw.  */
9400   hold_mips_optimize = mips_optimize;
9401   mips_optimize = 2;
9402   macro_build_lui (&global, tmp);
9403   mips_optimize = hold_mips_optimize;
9404   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", tmp, tmp, BFD_RELOC_LO16);
9405   relax_end ();
9406
9407   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dest, dest, tmp);
9408 }
9409
9410 /* Emit a sequence of instructions to emulate a branch likely operation.
9411    BR is an ordinary branch corresponding to one to be emulated.  BRNEG
9412    is its complementing branch with the original condition negated.
9413    CALL is set if the original branch specified the link operation.
9414    EP, FMT, SREG and TREG specify the usual macro_build() parameters.
9415
9416    Code like this is produced in the noreorder mode:
9417
9418         BRNEG   <args>, 1f
9419          nop
9420         b       <sym>
9421          delay slot (executed only if branch taken)
9422     1:
9423
9424    or, if CALL is set:
9425
9426         BRNEG   <args>, 1f
9427          nop
9428         bal     <sym>
9429          delay slot (executed only if branch taken)
9430     1:
9431
9432    In the reorder mode the delay slot would be filled with a nop anyway,
9433    so code produced is simply:
9434
9435         BR      <args>, <sym>
9436          nop
9437
9438    This function is used when producing code for the microMIPS ASE that
9439    does not implement branch likely instructions in hardware.  */
9440
9441 static void
9442 macro_build_branch_likely (const char *br, const char *brneg,
9443                            int call, expressionS *ep, const char *fmt,
9444                            unsigned int sreg, unsigned int treg)
9445 {
9446   int noreorder = mips_opts.noreorder;
9447   expressionS expr1;
9448
9449   gas_assert (mips_opts.micromips);
9450   start_noreorder ();
9451   if (noreorder)
9452     {
9453       micromips_label_expr (&expr1);
9454       macro_build (&expr1, brneg, fmt, sreg, treg);
9455       macro_build (NULL, "nop", "");
9456       macro_build (ep, call ? "bal" : "b", "p");
9457
9458       /* Set to true so that append_insn adds a label.  */
9459       emit_branch_likely_macro = TRUE;
9460     }
9461   else
9462     {
9463       macro_build (ep, br, fmt, sreg, treg);
9464       macro_build (NULL, "nop", "");
9465     }
9466   end_noreorder ();
9467 }
9468
9469 /* Emit a coprocessor branch-likely macro specified by TYPE, using CC as
9470    the condition code tested.  EP specifies the branch target.  */
9471
9472 static void
9473 macro_build_branch_ccl (int type, expressionS *ep, unsigned int cc)
9474 {
9475   const int call = 0;
9476   const char *brneg;
9477   const char *br;
9478
9479   switch (type)
9480     {
9481     case M_BC1FL:
9482       br = "bc1f";
9483       brneg = "bc1t";
9484       break;
9485     case M_BC1TL:
9486       br = "bc1t";
9487       brneg = "bc1f";
9488       break;
9489     case M_BC2FL:
9490       br = "bc2f";
9491       brneg = "bc2t";
9492       break;
9493     case M_BC2TL:
9494       br = "bc2t";
9495       brneg = "bc2f";
9496       break;
9497     default:
9498       abort ();
9499     }
9500   macro_build_branch_likely (br, brneg, call, ep, "N,p", cc, ZERO);
9501 }
9502
9503 /* Emit a two-argument branch macro specified by TYPE, using SREG as
9504    the register tested.  EP specifies the branch target.  */
9505
9506 static void
9507 macro_build_branch_rs (int type, expressionS *ep, unsigned int sreg)
9508 {
9509   const char *brneg = NULL;
9510   const char *br;
9511   int call = 0;
9512
9513   switch (type)
9514     {
9515     case M_BGEZ:
9516       br = "bgez";
9517       break;
9518     case M_BGEZL:
9519       br = mips_opts.micromips ? "bgez" : "bgezl";
9520       brneg = "bltz";
9521       break;
9522     case M_BGEZALL:
9523       gas_assert (mips_opts.micromips);
9524       br = mips_opts.insn32 ? "bgezal" : "bgezals";
9525       brneg = "bltz";
9526       call = 1;
9527       break;
9528     case M_BGTZ:
9529       br = "bgtz";
9530       break;
9531     case M_BGTZL:
9532       br = mips_opts.micromips ? "bgtz" : "bgtzl";
9533       brneg = "blez";
9534       break;
9535     case M_BLEZ:
9536       br = "blez";
9537       break;
9538     case M_BLEZL:
9539       br = mips_opts.micromips ? "blez" : "blezl";
9540       brneg = "bgtz";
9541       break;
9542     case M_BLTZ:
9543       br = "bltz";
9544       break;
9545     case M_BLTZL:
9546       br = mips_opts.micromips ? "bltz" : "bltzl";
9547       brneg = "bgez";
9548       break;
9549     case M_BLTZALL:
9550       gas_assert (mips_opts.micromips);
9551       br = mips_opts.insn32 ? "bltzal" : "bltzals";
9552       brneg = "bgez";
9553       call = 1;
9554       break;
9555     default:
9556       abort ();
9557     }
9558   if (mips_opts.micromips && brneg)
9559     macro_build_branch_likely (br, brneg, call, ep, "s,p", sreg, ZERO);
9560   else
9561     macro_build (ep, br, "s,p", sreg);
9562 }
9563
9564 /* Emit a three-argument branch macro specified by TYPE, using SREG and
9565    TREG as the registers tested.  EP specifies the branch target.  */
9566
9567 static void
9568 macro_build_branch_rsrt (int type, expressionS *ep,
9569                          unsigned int sreg, unsigned int treg)
9570 {
9571   const char *brneg = NULL;
9572   const int call = 0;
9573   const char *br;
9574
9575   switch (type)
9576     {
9577     case M_BEQ:
9578     case M_BEQ_I:
9579       br = "beq";
9580       break;
9581     case M_BEQL:
9582     case M_BEQL_I:
9583       br = mips_opts.micromips ? "beq" : "beql";
9584       brneg = "bne";
9585       break;
9586     case M_BNE:
9587     case M_BNE_I:
9588       br = "bne";
9589       break;
9590     case M_BNEL:
9591     case M_BNEL_I:
9592       br = mips_opts.micromips ? "bne" : "bnel";
9593       brneg = "beq";
9594       break;
9595     default:
9596       abort ();
9597     }
9598   if (mips_opts.micromips && brneg)
9599     macro_build_branch_likely (br, brneg, call, ep, "s,t,p", sreg, treg);
9600   else
9601     macro_build (ep, br, "s,t,p", sreg, treg);
9602 }
9603
9604 /* Return the high part that should be loaded in order to make the low
9605    part of VALUE accessible using an offset of OFFBITS bits.  */
9606
9607 static offsetT
9608 offset_high_part (offsetT value, unsigned int offbits)
9609 {
9610   offsetT bias;
9611   addressT low_mask;
9612
9613   if (offbits == 0)
9614     return value;
9615   bias = 1 << (offbits - 1);
9616   low_mask = bias * 2 - 1;
9617   return (value + bias) & ~low_mask;
9618 }
9619
9620 /* Return true if the value stored in offset_expr and offset_reloc
9621    fits into a signed offset of OFFBITS bits.  RANGE is the maximum
9622    amount that the caller wants to add without inducing overflow
9623    and ALIGN is the known alignment of the value in bytes.  */
9624
9625 static bfd_boolean
9626 small_offset_p (unsigned int range, unsigned int align, unsigned int offbits)
9627 {
9628   if (offbits == 16)
9629     {
9630       /* Accept any relocation operator if overflow isn't a concern.  */
9631       if (range < align && *offset_reloc != BFD_RELOC_UNUSED)
9632         return TRUE;
9633
9634       /* These relocations are guaranteed not to overflow in correct links.  */
9635       if (*offset_reloc == BFD_RELOC_MIPS_LITERAL
9636           || gprel16_reloc_p (*offset_reloc))
9637         return TRUE;
9638     }
9639   if (offset_expr.X_op == O_constant
9640       && offset_high_part (offset_expr.X_add_number, offbits) == 0
9641       && offset_high_part (offset_expr.X_add_number + range, offbits) == 0)
9642     return TRUE;
9643   return FALSE;
9644 }
9645
9646 /*
9647  *                      Build macros
9648  *   This routine implements the seemingly endless macro or synthesized
9649  * instructions and addressing modes in the mips assembly language. Many
9650  * of these macros are simple and are similar to each other. These could
9651  * probably be handled by some kind of table or grammar approach instead of
9652  * this verbose method. Others are not simple macros but are more like
9653  * optimizing code generation.
9654  *   One interesting optimization is when several store macros appear
9655  * consecutively that would load AT with the upper half of the same address.
9656  * The ensuing load upper instructions are ommited. This implies some kind
9657  * of global optimization. We currently only optimize within a single macro.
9658  *   For many of the load and store macros if the address is specified as a
9659  * constant expression in the first 64k of memory (ie ld $2,0x4000c) we
9660  * first load register 'at' with zero and use it as the base register. The
9661  * mips assembler simply uses register $zero. Just one tiny optimization
9662  * we're missing.
9663  */
9664 static void
9665 macro (struct mips_cl_insn *ip, char *str)
9666 {
9667   const struct mips_operand_array *operands;
9668   unsigned int breg, i;
9669   unsigned int tempreg;
9670   int mask;
9671   int used_at = 0;
9672   expressionS label_expr;
9673   expressionS expr1;
9674   expressionS *ep;
9675   const char *s;
9676   const char *s2;
9677   const char *fmt;
9678   int likely = 0;
9679   int coproc = 0;
9680   int offbits = 16;
9681   int call = 0;
9682   int jals = 0;
9683   int dbl = 0;
9684   int imm = 0;
9685   int ust = 0;
9686   int lp = 0;
9687   bfd_boolean large_offset;
9688   int off;
9689   int hold_mips_optimize;
9690   unsigned int align;
9691   unsigned int op[MAX_OPERANDS];
9692
9693   gas_assert (! mips_opts.mips16);
9694
9695   operands = insn_operands (ip);
9696   for (i = 0; i < MAX_OPERANDS; i++)
9697     if (operands->operand[i])
9698       op[i] = insn_extract_operand (ip, operands->operand[i]);
9699     else
9700       op[i] = -1;
9701
9702   mask = ip->insn_mo->mask;
9703
9704   label_expr.X_op = O_constant;
9705   label_expr.X_op_symbol = NULL;
9706   label_expr.X_add_symbol = NULL;
9707   label_expr.X_add_number = 0;
9708
9709   expr1.X_op = O_constant;
9710   expr1.X_op_symbol = NULL;
9711   expr1.X_add_symbol = NULL;
9712   expr1.X_add_number = 1;
9713   align = 1;
9714
9715   switch (mask)
9716     {
9717     case M_DABS:
9718       dbl = 1;
9719     case M_ABS:
9720       /*    bgez    $a0,1f
9721             move    v0,$a0
9722             sub     v0,$zero,$a0
9723          1:
9724        */
9725
9726       start_noreorder ();
9727
9728       if (mips_opts.micromips)
9729         micromips_label_expr (&label_expr);
9730       else
9731         label_expr.X_add_number = 8;
9732       macro_build (&label_expr, "bgez", "s,p", op[1]);
9733       if (op[0] == op[1])
9734         macro_build (NULL, "nop", "");
9735       else
9736         move_register (op[0], op[1]);
9737       macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", op[0], 0, op[1]);
9738       if (mips_opts.micromips)
9739         micromips_add_label ();
9740
9741       end_noreorder ();
9742       break;
9743
9744     case M_ADD_I:
9745       s = "addi";
9746       s2 = "add";
9747       goto do_addi;
9748     case M_ADDU_I:
9749       s = "addiu";
9750       s2 = "addu";
9751       goto do_addi;
9752     case M_DADD_I:
9753       dbl = 1;
9754       s = "daddi";
9755       s2 = "dadd";
9756       if (!mips_opts.micromips)
9757         goto do_addi;
9758       if (imm_expr.X_add_number >= -0x200
9759           && imm_expr.X_add_number < 0x200)
9760         {
9761           macro_build (NULL, s, "t,r,.", op[0], op[1],
9762                        (int) imm_expr.X_add_number);
9763           break;
9764         }
9765       goto do_addi_i;
9766     case M_DADDU_I:
9767       dbl = 1;
9768       s = "daddiu";
9769       s2 = "daddu";
9770     do_addi:
9771       if (imm_expr.X_add_number >= -0x8000
9772           && imm_expr.X_add_number < 0x8000)
9773         {
9774           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
9775           break;
9776         }
9777     do_addi_i:
9778       used_at = 1;
9779       load_register (AT, &imm_expr, dbl);
9780       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9781       break;
9782
9783     case M_AND_I:
9784       s = "andi";
9785       s2 = "and";
9786       goto do_bit;
9787     case M_OR_I:
9788       s = "ori";
9789       s2 = "or";
9790       goto do_bit;
9791     case M_NOR_I:
9792       s = "";
9793       s2 = "nor";
9794       goto do_bit;
9795     case M_XOR_I:
9796       s = "xori";
9797       s2 = "xor";
9798     do_bit:
9799       if (imm_expr.X_add_number >= 0
9800           && imm_expr.X_add_number < 0x10000)
9801         {
9802           if (mask != M_NOR_I)
9803             macro_build (&imm_expr, s, "t,r,i", op[0], op[1], BFD_RELOC_LO16);
9804           else
9805             {
9806               macro_build (&imm_expr, "ori", "t,r,i",
9807                            op[0], op[1], BFD_RELOC_LO16);
9808               macro_build (NULL, "nor", "d,v,t", op[0], op[0], 0);
9809             }
9810           break;
9811         }
9812
9813       used_at = 1;
9814       load_register (AT, &imm_expr, GPR_SIZE == 64);
9815       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9816       break;
9817
9818     case M_BALIGN:
9819       switch (imm_expr.X_add_number)
9820         {
9821         case 0:
9822           macro_build (NULL, "nop", "");
9823           break;
9824         case 2:
9825           macro_build (NULL, "packrl.ph", "d,s,t", op[0], op[0], op[1]);
9826           break;
9827         case 1:
9828         case 3:
9829           macro_build (NULL, "balign", "t,s,2", op[0], op[1],
9830                        (int) imm_expr.X_add_number);
9831           break;
9832         default:
9833           as_bad (_("BALIGN immediate not 0, 1, 2 or 3 (%lu)"),
9834                   (unsigned long) imm_expr.X_add_number);
9835           break;
9836         }
9837       break;
9838
9839     case M_BC1FL:
9840     case M_BC1TL:
9841     case M_BC2FL:
9842     case M_BC2TL:
9843       gas_assert (mips_opts.micromips);
9844       macro_build_branch_ccl (mask, &offset_expr,
9845                               EXTRACT_OPERAND (1, BCC, *ip));
9846       break;
9847
9848     case M_BEQ_I:
9849     case M_BEQL_I:
9850     case M_BNE_I:
9851     case M_BNEL_I:
9852       if (imm_expr.X_add_number == 0)
9853         op[1] = 0;
9854       else
9855         {
9856           op[1] = AT;
9857           used_at = 1;
9858           load_register (op[1], &imm_expr, GPR_SIZE == 64);
9859         }
9860       /* Fall through.  */
9861     case M_BEQL:
9862     case M_BNEL:
9863       macro_build_branch_rsrt (mask, &offset_expr, op[0], op[1]);
9864       break;
9865
9866     case M_BGEL:
9867       likely = 1;
9868     case M_BGE:
9869       if (op[1] == 0)
9870         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[0]);
9871       else if (op[0] == 0)
9872         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[1]);
9873       else
9874         {
9875           used_at = 1;
9876           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
9877           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9878                                    &offset_expr, AT, ZERO);
9879         }
9880       break;
9881
9882     case M_BGEZL:
9883     case M_BGEZALL:
9884     case M_BGTZL:
9885     case M_BLEZL:
9886     case M_BLTZL:
9887     case M_BLTZALL:
9888       macro_build_branch_rs (mask, &offset_expr, op[0]);
9889       break;
9890
9891     case M_BGTL_I:
9892       likely = 1;
9893     case M_BGT_I:
9894       /* Check for > max integer.  */
9895       if (imm_expr.X_add_number >= GPR_SMAX)
9896         {
9897         do_false:
9898           /* Result is always false.  */
9899           if (! likely)
9900             macro_build (NULL, "nop", "");
9901           else
9902             macro_build_branch_rsrt (M_BNEL, &offset_expr, ZERO, ZERO);
9903           break;
9904         }
9905       ++imm_expr.X_add_number;
9906       /* FALLTHROUGH */
9907     case M_BGE_I:
9908     case M_BGEL_I:
9909       if (mask == M_BGEL_I)
9910         likely = 1;
9911       if (imm_expr.X_add_number == 0)
9912         {
9913           macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ,
9914                                  &offset_expr, op[0]);
9915           break;
9916         }
9917       if (imm_expr.X_add_number == 1)
9918         {
9919           macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ,
9920                                  &offset_expr, op[0]);
9921           break;
9922         }
9923       if (imm_expr.X_add_number <= GPR_SMIN)
9924         {
9925         do_true:
9926           /* result is always true */
9927           as_warn (_("branch %s is always true"), ip->insn_mo->name);
9928           macro_build (&offset_expr, "b", "p");
9929           break;
9930         }
9931       used_at = 1;
9932       set_at (op[0], 0);
9933       macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9934                                &offset_expr, AT, ZERO);
9935       break;
9936
9937     case M_BGEUL:
9938       likely = 1;
9939     case M_BGEU:
9940       if (op[1] == 0)
9941         goto do_true;
9942       else if (op[0] == 0)
9943         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9944                                  &offset_expr, ZERO, op[1]);
9945       else
9946         {
9947           used_at = 1;
9948           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
9949           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9950                                    &offset_expr, AT, ZERO);
9951         }
9952       break;
9953
9954     case M_BGTUL_I:
9955       likely = 1;
9956     case M_BGTU_I:
9957       if (op[0] == 0
9958           || (GPR_SIZE == 32
9959               && imm_expr.X_add_number == -1))
9960         goto do_false;
9961       ++imm_expr.X_add_number;
9962       /* FALLTHROUGH */
9963     case M_BGEU_I:
9964     case M_BGEUL_I:
9965       if (mask == M_BGEUL_I)
9966         likely = 1;
9967       if (imm_expr.X_add_number == 0)
9968         goto do_true;
9969       else if (imm_expr.X_add_number == 1)
9970         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9971                                  &offset_expr, op[0], ZERO);
9972       else
9973         {
9974           used_at = 1;
9975           set_at (op[0], 1);
9976           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9977                                    &offset_expr, AT, ZERO);
9978         }
9979       break;
9980
9981     case M_BGTL:
9982       likely = 1;
9983     case M_BGT:
9984       if (op[1] == 0)
9985         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[0]);
9986       else if (op[0] == 0)
9987         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[1]);
9988       else
9989         {
9990           used_at = 1;
9991           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
9992           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9993                                    &offset_expr, AT, ZERO);
9994         }
9995       break;
9996
9997     case M_BGTUL:
9998       likely = 1;
9999     case M_BGTU:
10000       if (op[1] == 0)
10001         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10002                                  &offset_expr, op[0], ZERO);
10003       else if (op[0] == 0)
10004         goto do_false;
10005       else
10006         {
10007           used_at = 1;
10008           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
10009           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10010                                    &offset_expr, AT, ZERO);
10011         }
10012       break;
10013
10014     case M_BLEL:
10015       likely = 1;
10016     case M_BLE:
10017       if (op[1] == 0)
10018         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
10019       else if (op[0] == 0)
10020         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[1]);
10021       else
10022         {
10023           used_at = 1;
10024           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
10025           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10026                                    &offset_expr, AT, ZERO);
10027         }
10028       break;
10029
10030     case M_BLEL_I:
10031       likely = 1;
10032     case M_BLE_I:
10033       if (imm_expr.X_add_number >= GPR_SMAX)
10034         goto do_true;
10035       ++imm_expr.X_add_number;
10036       /* FALLTHROUGH */
10037     case M_BLT_I:
10038     case M_BLTL_I:
10039       if (mask == M_BLTL_I)
10040         likely = 1;
10041       if (imm_expr.X_add_number == 0)
10042         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
10043       else if (imm_expr.X_add_number == 1)
10044         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
10045       else
10046         {
10047           used_at = 1;
10048           set_at (op[0], 0);
10049           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10050                                    &offset_expr, AT, ZERO);
10051         }
10052       break;
10053
10054     case M_BLEUL:
10055       likely = 1;
10056     case M_BLEU:
10057       if (op[1] == 0)
10058         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10059                                  &offset_expr, op[0], ZERO);
10060       else if (op[0] == 0)
10061         goto do_true;
10062       else
10063         {
10064           used_at = 1;
10065           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
10066           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10067                                    &offset_expr, AT, ZERO);
10068         }
10069       break;
10070
10071     case M_BLEUL_I:
10072       likely = 1;
10073     case M_BLEU_I:
10074       if (op[0] == 0
10075           || (GPR_SIZE == 32
10076               && imm_expr.X_add_number == -1))
10077         goto do_true;
10078       ++imm_expr.X_add_number;
10079       /* FALLTHROUGH */
10080     case M_BLTU_I:
10081     case M_BLTUL_I:
10082       if (mask == M_BLTUL_I)
10083         likely = 1;
10084       if (imm_expr.X_add_number == 0)
10085         goto do_false;
10086       else if (imm_expr.X_add_number == 1)
10087         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
10088                                  &offset_expr, op[0], ZERO);
10089       else
10090         {
10091           used_at = 1;
10092           set_at (op[0], 1);
10093           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10094                                    &offset_expr, AT, ZERO);
10095         }
10096       break;
10097
10098     case M_BLTL:
10099       likely = 1;
10100     case M_BLT:
10101       if (op[1] == 0)
10102         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
10103       else if (op[0] == 0)
10104         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[1]);
10105       else
10106         {
10107           used_at = 1;
10108           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
10109           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10110                                    &offset_expr, AT, ZERO);
10111         }
10112       break;
10113
10114     case M_BLTUL:
10115       likely = 1;
10116     case M_BLTU:
10117       if (op[1] == 0)
10118         goto do_false;
10119       else if (op[0] == 0)
10120         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10121                                  &offset_expr, ZERO, op[1]);
10122       else
10123         {
10124           used_at = 1;
10125           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
10126           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
10127                                    &offset_expr, AT, ZERO);
10128         }
10129       break;
10130
10131     case M_DDIV_3:
10132       dbl = 1;
10133     case M_DIV_3:
10134       s = "mflo";
10135       goto do_div3;
10136     case M_DREM_3:
10137       dbl = 1;
10138     case M_REM_3:
10139       s = "mfhi";
10140     do_div3:
10141       if (op[2] == 0)
10142         {
10143           as_warn (_("divide by zero"));
10144           if (mips_trap)
10145             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
10146           else
10147             macro_build (NULL, "break", BRK_FMT, 7);
10148           break;
10149         }
10150
10151       start_noreorder ();
10152       if (mips_trap)
10153         {
10154           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
10155           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
10156         }
10157       else
10158         {
10159           if (mips_opts.micromips)
10160             micromips_label_expr (&label_expr);
10161           else
10162             label_expr.X_add_number = 8;
10163           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
10164           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
10165           macro_build (NULL, "break", BRK_FMT, 7);
10166           if (mips_opts.micromips)
10167             micromips_add_label ();
10168         }
10169       expr1.X_add_number = -1;
10170       used_at = 1;
10171       load_register (AT, &expr1, dbl);
10172       if (mips_opts.micromips)
10173         micromips_label_expr (&label_expr);
10174       else
10175         label_expr.X_add_number = mips_trap ? (dbl ? 12 : 8) : (dbl ? 20 : 16);
10176       macro_build (&label_expr, "bne", "s,t,p", op[2], AT);
10177       if (dbl)
10178         {
10179           expr1.X_add_number = 1;
10180           load_register (AT, &expr1, dbl);
10181           macro_build (NULL, "dsll32", SHFT_FMT, AT, AT, 31);
10182         }
10183       else
10184         {
10185           expr1.X_add_number = 0x80000000;
10186           macro_build (&expr1, "lui", LUI_FMT, AT, BFD_RELOC_HI16);
10187         }
10188       if (mips_trap)
10189         {
10190           macro_build (NULL, "teq", TRAP_FMT, op[1], AT, 6);
10191           /* We want to close the noreorder block as soon as possible, so
10192              that later insns are available for delay slot filling.  */
10193           end_noreorder ();
10194         }
10195       else
10196         {
10197           if (mips_opts.micromips)
10198             micromips_label_expr (&label_expr);
10199           else
10200             label_expr.X_add_number = 8;
10201           macro_build (&label_expr, "bne", "s,t,p", op[1], AT);
10202           macro_build (NULL, "nop", "");
10203
10204           /* We want to close the noreorder block as soon as possible, so
10205              that later insns are available for delay slot filling.  */
10206           end_noreorder ();
10207
10208           macro_build (NULL, "break", BRK_FMT, 6);
10209         }
10210       if (mips_opts.micromips)
10211         micromips_add_label ();
10212       macro_build (NULL, s, MFHL_FMT, op[0]);
10213       break;
10214
10215     case M_DIV_3I:
10216       s = "div";
10217       s2 = "mflo";
10218       goto do_divi;
10219     case M_DIVU_3I:
10220       s = "divu";
10221       s2 = "mflo";
10222       goto do_divi;
10223     case M_REM_3I:
10224       s = "div";
10225       s2 = "mfhi";
10226       goto do_divi;
10227     case M_REMU_3I:
10228       s = "divu";
10229       s2 = "mfhi";
10230       goto do_divi;
10231     case M_DDIV_3I:
10232       dbl = 1;
10233       s = "ddiv";
10234       s2 = "mflo";
10235       goto do_divi;
10236     case M_DDIVU_3I:
10237       dbl = 1;
10238       s = "ddivu";
10239       s2 = "mflo";
10240       goto do_divi;
10241     case M_DREM_3I:
10242       dbl = 1;
10243       s = "ddiv";
10244       s2 = "mfhi";
10245       goto do_divi;
10246     case M_DREMU_3I:
10247       dbl = 1;
10248       s = "ddivu";
10249       s2 = "mfhi";
10250     do_divi:
10251       if (imm_expr.X_add_number == 0)
10252         {
10253           as_warn (_("divide by zero"));
10254           if (mips_trap)
10255             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
10256           else
10257             macro_build (NULL, "break", BRK_FMT, 7);
10258           break;
10259         }
10260       if (imm_expr.X_add_number == 1)
10261         {
10262           if (strcmp (s2, "mflo") == 0)
10263             move_register (op[0], op[1]);
10264           else
10265             move_register (op[0], ZERO);
10266           break;
10267         }
10268       if (imm_expr.X_add_number == -1 && s[strlen (s) - 1] != 'u')
10269         {
10270           if (strcmp (s2, "mflo") == 0)
10271             macro_build (NULL, dbl ? "dneg" : "neg", "d,w", op[0], op[1]);
10272           else
10273             move_register (op[0], ZERO);
10274           break;
10275         }
10276
10277       used_at = 1;
10278       load_register (AT, &imm_expr, dbl);
10279       macro_build (NULL, s, "z,s,t", op[1], AT);
10280       macro_build (NULL, s2, MFHL_FMT, op[0]);
10281       break;
10282
10283     case M_DIVU_3:
10284       s = "divu";
10285       s2 = "mflo";
10286       goto do_divu3;
10287     case M_REMU_3:
10288       s = "divu";
10289       s2 = "mfhi";
10290       goto do_divu3;
10291     case M_DDIVU_3:
10292       s = "ddivu";
10293       s2 = "mflo";
10294       goto do_divu3;
10295     case M_DREMU_3:
10296       s = "ddivu";
10297       s2 = "mfhi";
10298     do_divu3:
10299       start_noreorder ();
10300       if (mips_trap)
10301         {
10302           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
10303           macro_build (NULL, s, "z,s,t", op[1], op[2]);
10304           /* We want to close the noreorder block as soon as possible, so
10305              that later insns are available for delay slot filling.  */
10306           end_noreorder ();
10307         }
10308       else
10309         {
10310           if (mips_opts.micromips)
10311             micromips_label_expr (&label_expr);
10312           else
10313             label_expr.X_add_number = 8;
10314           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
10315           macro_build (NULL, s, "z,s,t", op[1], op[2]);
10316
10317           /* We want to close the noreorder block as soon as possible, so
10318              that later insns are available for delay slot filling.  */
10319           end_noreorder ();
10320           macro_build (NULL, "break", BRK_FMT, 7);
10321           if (mips_opts.micromips)
10322             micromips_add_label ();
10323         }
10324       macro_build (NULL, s2, MFHL_FMT, op[0]);
10325       break;
10326
10327     case M_DLCA_AB:
10328       dbl = 1;
10329     case M_LCA_AB:
10330       call = 1;
10331       goto do_la;
10332     case M_DLA_AB:
10333       dbl = 1;
10334     case M_LA_AB:
10335     do_la:
10336       /* Load the address of a symbol into a register.  If breg is not
10337          zero, we then add a base register to it.  */
10338
10339       breg = op[2];
10340       if (dbl && GPR_SIZE == 32)
10341         as_warn (_("dla used to load 32-bit register; recommend using la "
10342                    "instead"));
10343
10344       if (!dbl && HAVE_64BIT_OBJECTS)
10345         as_warn (_("la used to load 64-bit address; recommend using dla "
10346                    "instead"));
10347
10348       if (small_offset_p (0, align, 16))
10349         {
10350           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", op[0], breg,
10351                        -1, offset_reloc[0], offset_reloc[1], offset_reloc[2]);
10352           break;
10353         }
10354
10355       if (mips_opts.at && (op[0] == breg))
10356         {
10357           tempreg = AT;
10358           used_at = 1;
10359         }
10360       else
10361         tempreg = op[0];
10362
10363       if (offset_expr.X_op != O_symbol
10364           && offset_expr.X_op != O_constant)
10365         {
10366           as_bad (_("expression too complex"));
10367           offset_expr.X_op = O_constant;
10368         }
10369
10370       if (offset_expr.X_op == O_constant)
10371         load_register (tempreg, &offset_expr, HAVE_64BIT_ADDRESSES);
10372       else if (mips_pic == NO_PIC)
10373         {
10374           /* If this is a reference to a GP relative symbol, we want
10375                addiu    $tempreg,$gp,<sym>      (BFD_RELOC_GPREL16)
10376              Otherwise we want
10377                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
10378                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10379              If we have a constant, we need two instructions anyhow,
10380              so we may as well always use the latter form.
10381
10382              With 64bit address space and a usable $at we want
10383                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
10384                lui      $at,<sym>               (BFD_RELOC_HI16_S)
10385                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
10386                daddiu   $at,<sym>               (BFD_RELOC_LO16)
10387                dsll32   $tempreg,0
10388                daddu    $tempreg,$tempreg,$at
10389
10390              If $at is already in use, we use a path which is suboptimal
10391              on superscalar processors.
10392                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
10393                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
10394                dsll     $tempreg,16
10395                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
10396                dsll     $tempreg,16
10397                daddiu   $tempreg,<sym>          (BFD_RELOC_LO16)
10398
10399              For GP relative symbols in 64bit address space we can use
10400              the same sequence as in 32bit address space.  */
10401           if (HAVE_64BIT_SYMBOLS)
10402             {
10403               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
10404                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
10405                 {
10406                   relax_start (offset_expr.X_add_symbol);
10407                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10408                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
10409                   relax_switch ();
10410                 }
10411
10412               if (used_at == 0 && mips_opts.at)
10413                 {
10414                   macro_build (&offset_expr, "lui", LUI_FMT,
10415                                tempreg, BFD_RELOC_MIPS_HIGHEST);
10416                   macro_build (&offset_expr, "lui", LUI_FMT,
10417                                AT, BFD_RELOC_HI16_S);
10418                   macro_build (&offset_expr, "daddiu", "t,r,j",
10419                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
10420                   macro_build (&offset_expr, "daddiu", "t,r,j",
10421                                AT, AT, BFD_RELOC_LO16);
10422                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
10423                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
10424                   used_at = 1;
10425                 }
10426               else
10427                 {
10428                   macro_build (&offset_expr, "lui", LUI_FMT,
10429                                tempreg, BFD_RELOC_MIPS_HIGHEST);
10430                   macro_build (&offset_expr, "daddiu", "t,r,j",
10431                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
10432                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
10433                   macro_build (&offset_expr, "daddiu", "t,r,j",
10434                                tempreg, tempreg, BFD_RELOC_HI16_S);
10435                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
10436                   macro_build (&offset_expr, "daddiu", "t,r,j",
10437                                tempreg, tempreg, BFD_RELOC_LO16);
10438                 }
10439
10440               if (mips_relax.sequence)
10441                 relax_end ();
10442             }
10443           else
10444             {
10445               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
10446                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
10447                 {
10448                   relax_start (offset_expr.X_add_symbol);
10449                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10450                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
10451                   relax_switch ();
10452                 }
10453               if (!IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
10454                 as_bad (_("offset too large"));
10455               macro_build_lui (&offset_expr, tempreg);
10456               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10457                            tempreg, tempreg, BFD_RELOC_LO16);
10458               if (mips_relax.sequence)
10459                 relax_end ();
10460             }
10461         }
10462       else if (!mips_big_got && !HAVE_NEWABI)
10463         {
10464           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
10465
10466           /* If this is a reference to an external symbol, and there
10467              is no constant, we want
10468                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10469              or for lca or if tempreg is PIC_CALL_REG
10470                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
10471              For a local symbol, we want
10472                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10473                nop
10474                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10475
10476              If we have a small constant, and this is a reference to
10477              an external symbol, we want
10478                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10479                nop
10480                addiu    $tempreg,$tempreg,<constant>
10481              For a local symbol, we want the same instruction
10482              sequence, but we output a BFD_RELOC_LO16 reloc on the
10483              addiu instruction.
10484
10485              If we have a large constant, and this is a reference to
10486              an external symbol, we want
10487                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10488                lui      $at,<hiconstant>
10489                addiu    $at,$at,<loconstant>
10490                addu     $tempreg,$tempreg,$at
10491              For a local symbol, we want the same instruction
10492              sequence, but we output a BFD_RELOC_LO16 reloc on the
10493              addiu instruction.
10494            */
10495
10496           if (offset_expr.X_add_number == 0)
10497             {
10498               if (mips_pic == SVR4_PIC
10499                   && breg == 0
10500                   && (call || tempreg == PIC_CALL_REG))
10501                 lw_reloc_type = (int) BFD_RELOC_MIPS_CALL16;
10502
10503               relax_start (offset_expr.X_add_symbol);
10504               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10505                            lw_reloc_type, mips_gp_register);
10506               if (breg != 0)
10507                 {
10508                   /* We're going to put in an addu instruction using
10509                      tempreg, so we may as well insert the nop right
10510                      now.  */
10511                   load_delay_nop ();
10512                 }
10513               relax_switch ();
10514               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10515                            tempreg, BFD_RELOC_MIPS_GOT16, mips_gp_register);
10516               load_delay_nop ();
10517               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10518                            tempreg, tempreg, BFD_RELOC_LO16);
10519               relax_end ();
10520               /* FIXME: If breg == 0, and the next instruction uses
10521                  $tempreg, then if this variant case is used an extra
10522                  nop will be generated.  */
10523             }
10524           else if (offset_expr.X_add_number >= -0x8000
10525                    && offset_expr.X_add_number < 0x8000)
10526             {
10527               load_got_offset (tempreg, &offset_expr);
10528               load_delay_nop ();
10529               add_got_offset (tempreg, &offset_expr);
10530             }
10531           else
10532             {
10533               expr1.X_add_number = offset_expr.X_add_number;
10534               offset_expr.X_add_number =
10535                 SEXT_16BIT (offset_expr.X_add_number);
10536               load_got_offset (tempreg, &offset_expr);
10537               offset_expr.X_add_number = expr1.X_add_number;
10538               /* If we are going to add in a base register, and the
10539                  target register and the base register are the same,
10540                  then we are using AT as a temporary register.  Since
10541                  we want to load the constant into AT, we add our
10542                  current AT (from the global offset table) and the
10543                  register into the register now, and pretend we were
10544                  not using a base register.  */
10545               if (breg == op[0])
10546                 {
10547                   load_delay_nop ();
10548                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10549                                op[0], AT, breg);
10550                   breg = 0;
10551                   tempreg = op[0];
10552                 }
10553               add_got_offset_hilo (tempreg, &offset_expr, AT);
10554               used_at = 1;
10555             }
10556         }
10557       else if (!mips_big_got && HAVE_NEWABI)
10558         {
10559           int add_breg_early = 0;
10560
10561           /* If this is a reference to an external, and there is no
10562              constant, or local symbol (*), with or without a
10563              constant, we want
10564                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10565              or for lca or if tempreg is PIC_CALL_REG
10566                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
10567
10568              If we have a small constant, and this is a reference to
10569              an external symbol, we want
10570                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10571                addiu    $tempreg,$tempreg,<constant>
10572
10573              If we have a large constant, and this is a reference to
10574              an external symbol, we want
10575                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10576                lui      $at,<hiconstant>
10577                addiu    $at,$at,<loconstant>
10578                addu     $tempreg,$tempreg,$at
10579
10580              (*) Other assemblers seem to prefer GOT_PAGE/GOT_OFST for
10581              local symbols, even though it introduces an additional
10582              instruction.  */
10583
10584           if (offset_expr.X_add_number)
10585             {
10586               expr1.X_add_number = offset_expr.X_add_number;
10587               offset_expr.X_add_number = 0;
10588
10589               relax_start (offset_expr.X_add_symbol);
10590               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10591                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10592
10593               if (expr1.X_add_number >= -0x8000
10594                   && expr1.X_add_number < 0x8000)
10595                 {
10596                   macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10597                                tempreg, tempreg, BFD_RELOC_LO16);
10598                 }
10599               else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
10600                 {
10601                   unsigned int dreg;
10602
10603                   /* If we are going to add in a base register, and the
10604                      target register and the base register are the same,
10605                      then we are using AT as a temporary register.  Since
10606                      we want to load the constant into AT, we add our
10607                      current AT (from the global offset table) and the
10608                      register into the register now, and pretend we were
10609                      not using a base register.  */
10610                   if (breg != op[0])
10611                     dreg = tempreg;
10612                   else
10613                     {
10614                       gas_assert (tempreg == AT);
10615                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10616                                    op[0], AT, breg);
10617                       dreg = op[0];
10618                       add_breg_early = 1;
10619                     }
10620
10621                   load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10622                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10623                                dreg, dreg, AT);
10624
10625                   used_at = 1;
10626                 }
10627               else
10628                 as_bad (_("PIC code offset overflow (max 32 signed bits)"));
10629
10630               relax_switch ();
10631               offset_expr.X_add_number = expr1.X_add_number;
10632
10633               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10634                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10635               if (add_breg_early)
10636                 {
10637                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10638                                op[0], tempreg, breg);
10639                   breg = 0;
10640                   tempreg = op[0];
10641                 }
10642               relax_end ();
10643             }
10644           else if (breg == 0 && (call || tempreg == PIC_CALL_REG))
10645             {
10646               relax_start (offset_expr.X_add_symbol);
10647               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10648                            BFD_RELOC_MIPS_CALL16, mips_gp_register);
10649               relax_switch ();
10650               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10651                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10652               relax_end ();
10653             }
10654           else
10655             {
10656               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10657                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10658             }
10659         }
10660       else if (mips_big_got && !HAVE_NEWABI)
10661         {
10662           int gpdelay;
10663           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
10664           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
10665           int local_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
10666
10667           /* This is the large GOT case.  If this is a reference to an
10668              external symbol, and there is no constant, we want
10669                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10670                addu     $tempreg,$tempreg,$gp
10671                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10672              or for lca or if tempreg is PIC_CALL_REG
10673                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
10674                addu     $tempreg,$tempreg,$gp
10675                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
10676              For a local symbol, we want
10677                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10678                nop
10679                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10680
10681              If we have a small constant, and this is a reference to
10682              an external symbol, we want
10683                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10684                addu     $tempreg,$tempreg,$gp
10685                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10686                nop
10687                addiu    $tempreg,$tempreg,<constant>
10688              For a local symbol, we want
10689                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10690                nop
10691                addiu    $tempreg,$tempreg,<constant> (BFD_RELOC_LO16)
10692
10693              If we have a large constant, and this is a reference to
10694              an external symbol, we want
10695                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10696                addu     $tempreg,$tempreg,$gp
10697                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10698                lui      $at,<hiconstant>
10699                addiu    $at,$at,<loconstant>
10700                addu     $tempreg,$tempreg,$at
10701              For a local symbol, we want
10702                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10703                lui      $at,<hiconstant>
10704                addiu    $at,$at,<loconstant>    (BFD_RELOC_LO16)
10705                addu     $tempreg,$tempreg,$at
10706           */
10707
10708           expr1.X_add_number = offset_expr.X_add_number;
10709           offset_expr.X_add_number = 0;
10710           relax_start (offset_expr.X_add_symbol);
10711           gpdelay = reg_needs_delay (mips_gp_register);
10712           if (expr1.X_add_number == 0 && breg == 0
10713               && (call || tempreg == PIC_CALL_REG))
10714             {
10715               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
10716               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
10717             }
10718           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
10719           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10720                        tempreg, tempreg, mips_gp_register);
10721           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10722                        tempreg, lw_reloc_type, tempreg);
10723           if (expr1.X_add_number == 0)
10724             {
10725               if (breg != 0)
10726                 {
10727                   /* We're going to put in an addu instruction using
10728                      tempreg, so we may as well insert the nop right
10729                      now.  */
10730                   load_delay_nop ();
10731                 }
10732             }
10733           else if (expr1.X_add_number >= -0x8000
10734                    && expr1.X_add_number < 0x8000)
10735             {
10736               load_delay_nop ();
10737               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10738                            tempreg, tempreg, BFD_RELOC_LO16);
10739             }
10740           else
10741             {
10742               unsigned int dreg;
10743
10744               /* If we are going to add in a base register, and the
10745                  target register and the base register are the same,
10746                  then we are using AT as a temporary register.  Since
10747                  we want to load the constant into AT, we add our
10748                  current AT (from the global offset table) and the
10749                  register into the register now, and pretend we were
10750                  not using a base register.  */
10751               if (breg != op[0])
10752                 dreg = tempreg;
10753               else
10754                 {
10755                   gas_assert (tempreg == AT);
10756                   load_delay_nop ();
10757                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10758                                op[0], AT, breg);
10759                   dreg = op[0];
10760                 }
10761
10762               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10763               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
10764
10765               used_at = 1;
10766             }
10767           offset_expr.X_add_number = SEXT_16BIT (expr1.X_add_number);
10768           relax_switch ();
10769
10770           if (gpdelay)
10771             {
10772               /* This is needed because this instruction uses $gp, but
10773                  the first instruction on the main stream does not.  */
10774               macro_build (NULL, "nop", "");
10775             }
10776
10777           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10778                        local_reloc_type, mips_gp_register);
10779           if (expr1.X_add_number >= -0x8000
10780               && expr1.X_add_number < 0x8000)
10781             {
10782               load_delay_nop ();
10783               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10784                            tempreg, tempreg, BFD_RELOC_LO16);
10785               /* FIXME: If add_number is 0, and there was no base
10786                  register, the external symbol case ended with a load,
10787                  so if the symbol turns out to not be external, and
10788                  the next instruction uses tempreg, an unnecessary nop
10789                  will be inserted.  */
10790             }
10791           else
10792             {
10793               if (breg == op[0])
10794                 {
10795                   /* We must add in the base register now, as in the
10796                      external symbol case.  */
10797                   gas_assert (tempreg == AT);
10798                   load_delay_nop ();
10799                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10800                                op[0], AT, breg);
10801                   tempreg = op[0];
10802                   /* We set breg to 0 because we have arranged to add
10803                      it in in both cases.  */
10804                   breg = 0;
10805                 }
10806
10807               macro_build_lui (&expr1, AT);
10808               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10809                            AT, AT, BFD_RELOC_LO16);
10810               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10811                            tempreg, tempreg, AT);
10812               used_at = 1;
10813             }
10814           relax_end ();
10815         }
10816       else if (mips_big_got && HAVE_NEWABI)
10817         {
10818           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
10819           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
10820           int add_breg_early = 0;
10821
10822           /* This is the large GOT case.  If this is a reference to an
10823              external symbol, and there is no constant, we want
10824                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10825                add      $tempreg,$tempreg,$gp
10826                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10827              or for lca or if tempreg is PIC_CALL_REG
10828                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
10829                add      $tempreg,$tempreg,$gp
10830                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
10831
10832              If we have a small constant, and this is a reference to
10833              an external symbol, we want
10834                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10835                add      $tempreg,$tempreg,$gp
10836                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10837                addi     $tempreg,$tempreg,<constant>
10838
10839              If we have a large constant, and this is a reference to
10840              an external symbol, we want
10841                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10842                addu     $tempreg,$tempreg,$gp
10843                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10844                lui      $at,<hiconstant>
10845                addi     $at,$at,<loconstant>
10846                add      $tempreg,$tempreg,$at
10847
10848              If we have NewABI, and we know it's a local symbol, we want
10849                lw       $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
10850                addiu    $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
10851              otherwise we have to resort to GOT_HI16/GOT_LO16.  */
10852
10853           relax_start (offset_expr.X_add_symbol);
10854
10855           expr1.X_add_number = offset_expr.X_add_number;
10856           offset_expr.X_add_number = 0;
10857
10858           if (expr1.X_add_number == 0 && breg == 0
10859               && (call || tempreg == PIC_CALL_REG))
10860             {
10861               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
10862               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
10863             }
10864           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
10865           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10866                        tempreg, tempreg, mips_gp_register);
10867           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10868                        tempreg, lw_reloc_type, tempreg);
10869
10870           if (expr1.X_add_number == 0)
10871             ;
10872           else if (expr1.X_add_number >= -0x8000
10873                    && expr1.X_add_number < 0x8000)
10874             {
10875               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10876                            tempreg, tempreg, BFD_RELOC_LO16);
10877             }
10878           else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
10879             {
10880               unsigned int dreg;
10881
10882               /* If we are going to add in a base register, and the
10883                  target register and the base register are the same,
10884                  then we are using AT as a temporary register.  Since
10885                  we want to load the constant into AT, we add our
10886                  current AT (from the global offset table) and the
10887                  register into the register now, and pretend we were
10888                  not using a base register.  */
10889               if (breg != op[0])
10890                 dreg = tempreg;
10891               else
10892                 {
10893                   gas_assert (tempreg == AT);
10894                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10895                                op[0], AT, breg);
10896                   dreg = op[0];
10897                   add_breg_early = 1;
10898                 }
10899
10900               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10901               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
10902
10903               used_at = 1;
10904             }
10905           else
10906             as_bad (_("PIC code offset overflow (max 32 signed bits)"));
10907
10908           relax_switch ();
10909           offset_expr.X_add_number = expr1.X_add_number;
10910           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10911                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
10912           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
10913                        tempreg, BFD_RELOC_MIPS_GOT_OFST);
10914           if (add_breg_early)
10915             {
10916               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10917                            op[0], tempreg, breg);
10918               breg = 0;
10919               tempreg = op[0];
10920             }
10921           relax_end ();
10922         }
10923       else
10924         abort ();
10925
10926       if (breg != 0)
10927         macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", op[0], tempreg, breg);
10928       break;
10929
10930     case M_MSGSND:
10931       gas_assert (!mips_opts.micromips);
10932       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x01);
10933       break;
10934
10935     case M_MSGLD:
10936       gas_assert (!mips_opts.micromips);
10937       macro_build (NULL, "c2", "C", 0x02);
10938       break;
10939
10940     case M_MSGLD_T:
10941       gas_assert (!mips_opts.micromips);
10942       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x02);
10943       break;
10944
10945     case M_MSGWAIT:
10946       gas_assert (!mips_opts.micromips);
10947       macro_build (NULL, "c2", "C", 3);
10948       break;
10949
10950     case M_MSGWAIT_T:
10951       gas_assert (!mips_opts.micromips);
10952       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x03);
10953       break;
10954
10955     case M_J_A:
10956       /* The j instruction may not be used in PIC code, since it
10957          requires an absolute address.  We convert it to a b
10958          instruction.  */
10959       if (mips_pic == NO_PIC)
10960         macro_build (&offset_expr, "j", "a");
10961       else
10962         macro_build (&offset_expr, "b", "p");
10963       break;
10964
10965       /* The jal instructions must be handled as macros because when
10966          generating PIC code they expand to multi-instruction
10967          sequences.  Normally they are simple instructions.  */
10968     case M_JALS_1:
10969       op[1] = op[0];
10970       op[0] = RA;
10971       /* Fall through.  */
10972     case M_JALS_2:
10973       gas_assert (mips_opts.micromips);
10974       if (mips_opts.insn32)
10975         {
10976           as_bad (_("opcode not supported in the `insn32' mode `%s'"), str);
10977           break;
10978         }
10979       jals = 1;
10980       goto jal;
10981     case M_JAL_1:
10982       op[1] = op[0];
10983       op[0] = RA;
10984       /* Fall through.  */
10985     case M_JAL_2:
10986     jal:
10987       if (mips_pic == NO_PIC)
10988         {
10989           s = jals ? "jalrs" : "jalr";
10990           if (mips_opts.micromips
10991               && !mips_opts.insn32
10992               && op[0] == RA
10993               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
10994             macro_build (NULL, s, "mj", op[1]);
10995           else
10996             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
10997         }
10998       else
10999         {
11000           int cprestore = (mips_pic == SVR4_PIC && !HAVE_NEWABI
11001                            && mips_cprestore_offset >= 0);
11002
11003           if (op[1] != PIC_CALL_REG)
11004             as_warn (_("MIPS PIC call to register other than $25"));
11005
11006           s = ((mips_opts.micromips
11007                 && !mips_opts.insn32
11008                 && (!mips_opts.noreorder || cprestore))
11009                ? "jalrs" : "jalr");
11010           if (mips_opts.micromips
11011               && !mips_opts.insn32
11012               && op[0] == RA
11013               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
11014             macro_build (NULL, s, "mj", op[1]);
11015           else
11016             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
11017           if (mips_pic == SVR4_PIC && !HAVE_NEWABI)
11018             {
11019               if (mips_cprestore_offset < 0)
11020                 as_warn (_("no .cprestore pseudo-op used in PIC code"));
11021               else
11022                 {
11023                   if (!mips_frame_reg_valid)
11024                     {
11025                       as_warn (_("no .frame pseudo-op used in PIC code"));
11026                       /* Quiet this warning.  */
11027                       mips_frame_reg_valid = 1;
11028                     }
11029                   if (!mips_cprestore_valid)
11030                     {
11031                       as_warn (_("no .cprestore pseudo-op used in PIC code"));
11032                       /* Quiet this warning.  */
11033                       mips_cprestore_valid = 1;
11034                     }
11035                   if (mips_opts.noreorder)
11036                     macro_build (NULL, "nop", "");
11037                   expr1.X_add_number = mips_cprestore_offset;
11038                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
11039                                                 mips_gp_register,
11040                                                 mips_frame_reg,
11041                                                 HAVE_64BIT_ADDRESSES);
11042                 }
11043             }
11044         }
11045
11046       break;
11047
11048     case M_JALS_A:
11049       gas_assert (mips_opts.micromips);
11050       if (mips_opts.insn32)
11051         {
11052           as_bad (_("opcode not supported in the `insn32' mode `%s'"), str);
11053           break;
11054         }
11055       jals = 1;
11056       /* Fall through.  */
11057     case M_JAL_A:
11058       if (mips_pic == NO_PIC)
11059         macro_build (&offset_expr, jals ? "jals" : "jal", "a");
11060       else if (mips_pic == SVR4_PIC)
11061         {
11062           /* If this is a reference to an external symbol, and we are
11063              using a small GOT, we want
11064                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_CALL16)
11065                nop
11066                jalr     $ra,$25
11067                nop
11068                lw       $gp,cprestore($sp)
11069              The cprestore value is set using the .cprestore
11070              pseudo-op.  If we are using a big GOT, we want
11071                lui      $25,<sym>               (BFD_RELOC_MIPS_CALL_HI16)
11072                addu     $25,$25,$gp
11073                lw       $25,<sym>($25)          (BFD_RELOC_MIPS_CALL_LO16)
11074                nop
11075                jalr     $ra,$25
11076                nop
11077                lw       $gp,cprestore($sp)
11078              If the symbol is not external, we want
11079                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
11080                nop
11081                addiu    $25,$25,<sym>           (BFD_RELOC_LO16)
11082                jalr     $ra,$25
11083                nop
11084                lw $gp,cprestore($sp)
11085
11086              For NewABI, we use the same CALL16 or CALL_HI16/CALL_LO16
11087              sequences above, minus nops, unless the symbol is local,
11088              which enables us to use GOT_PAGE/GOT_OFST (big got) or
11089              GOT_DISP.  */
11090           if (HAVE_NEWABI)
11091             {
11092               if (!mips_big_got)
11093                 {
11094                   relax_start (offset_expr.X_add_symbol);
11095                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11096                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
11097                                mips_gp_register);
11098                   relax_switch ();
11099                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11100                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_DISP,
11101                                mips_gp_register);
11102                   relax_end ();
11103                 }
11104               else
11105                 {
11106                   relax_start (offset_expr.X_add_symbol);
11107                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
11108                                BFD_RELOC_MIPS_CALL_HI16);
11109                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
11110                                PIC_CALL_REG, mips_gp_register);
11111                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11112                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
11113                                PIC_CALL_REG);
11114                   relax_switch ();
11115                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11116                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_PAGE,
11117                                mips_gp_register);
11118                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11119                                PIC_CALL_REG, PIC_CALL_REG,
11120                                BFD_RELOC_MIPS_GOT_OFST);
11121                   relax_end ();
11122                 }
11123
11124               macro_build_jalr (&offset_expr, 0);
11125             }
11126           else
11127             {
11128               relax_start (offset_expr.X_add_symbol);
11129               if (!mips_big_got)
11130                 {
11131                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11132                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
11133                                mips_gp_register);
11134                   load_delay_nop ();
11135                   relax_switch ();
11136                 }
11137               else
11138                 {
11139                   int gpdelay;
11140
11141                   gpdelay = reg_needs_delay (mips_gp_register);
11142                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
11143                                BFD_RELOC_MIPS_CALL_HI16);
11144                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
11145                                PIC_CALL_REG, mips_gp_register);
11146                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11147                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
11148                                PIC_CALL_REG);
11149                   load_delay_nop ();
11150                   relax_switch ();
11151                   if (gpdelay)
11152                     macro_build (NULL, "nop", "");
11153                 }
11154               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11155                            PIC_CALL_REG, BFD_RELOC_MIPS_GOT16,
11156                            mips_gp_register);
11157               load_delay_nop ();
11158               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11159                            PIC_CALL_REG, PIC_CALL_REG, BFD_RELOC_LO16);
11160               relax_end ();
11161               macro_build_jalr (&offset_expr, mips_cprestore_offset >= 0);
11162
11163               if (mips_cprestore_offset < 0)
11164                 as_warn (_("no .cprestore pseudo-op used in PIC code"));
11165               else
11166                 {
11167                   if (!mips_frame_reg_valid)
11168                     {
11169                       as_warn (_("no .frame pseudo-op used in PIC code"));
11170                       /* Quiet this warning.  */
11171                       mips_frame_reg_valid = 1;
11172                     }
11173                   if (!mips_cprestore_valid)
11174                     {
11175                       as_warn (_("no .cprestore pseudo-op used in PIC code"));
11176                       /* Quiet this warning.  */
11177                       mips_cprestore_valid = 1;
11178                     }
11179                   if (mips_opts.noreorder)
11180                     macro_build (NULL, "nop", "");
11181                   expr1.X_add_number = mips_cprestore_offset;
11182                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
11183                                                 mips_gp_register,
11184                                                 mips_frame_reg,
11185                                                 HAVE_64BIT_ADDRESSES);
11186                 }
11187             }
11188         }
11189       else if (mips_pic == VXWORKS_PIC)
11190         as_bad (_("non-PIC jump used in PIC library"));
11191       else
11192         abort ();
11193
11194       break;
11195
11196     case M_LBUE_AB:
11197       s = "lbue";
11198       fmt = "t,+j(b)";
11199       offbits = 9;
11200       goto ld_st;
11201     case M_LHUE_AB:
11202       s = "lhue";
11203       fmt = "t,+j(b)";
11204       offbits = 9;
11205       goto ld_st;
11206     case M_LBE_AB:
11207       s = "lbe";
11208       fmt = "t,+j(b)";
11209       offbits = 9;
11210       goto ld_st;
11211     case M_LHE_AB:
11212       s = "lhe";
11213       fmt = "t,+j(b)";
11214       offbits = 9;
11215       goto ld_st;
11216     case M_LLE_AB:
11217       s = "lle";
11218       fmt = "t,+j(b)";
11219       offbits = 9;
11220       goto ld_st;
11221     case M_LWE_AB:
11222       s = "lwe";
11223       fmt = "t,+j(b)";
11224       offbits = 9;
11225       goto ld_st;
11226     case M_LWLE_AB:
11227       s = "lwle";
11228       fmt = "t,+j(b)";
11229       offbits = 9;
11230       goto ld_st;
11231     case M_LWRE_AB:
11232       s = "lwre";
11233       fmt = "t,+j(b)";
11234       offbits = 9;
11235       goto ld_st;
11236     case M_SBE_AB:
11237       s = "sbe";
11238       fmt = "t,+j(b)";
11239       offbits = 9;
11240       goto ld_st;
11241     case M_SCE_AB:
11242       s = "sce";
11243       fmt = "t,+j(b)";
11244       offbits = 9;
11245       goto ld_st;
11246     case M_SHE_AB:
11247       s = "she";
11248       fmt = "t,+j(b)";
11249       offbits = 9;
11250       goto ld_st;
11251     case M_SWE_AB:
11252       s = "swe";
11253       fmt = "t,+j(b)";
11254       offbits = 9;
11255       goto ld_st;
11256     case M_SWLE_AB:
11257       s = "swle";
11258       fmt = "t,+j(b)";
11259       offbits = 9;
11260       goto ld_st;
11261     case M_SWRE_AB:
11262       s = "swre";
11263       fmt = "t,+j(b)";
11264       offbits = 9;
11265       goto ld_st;
11266     case M_ACLR_AB:
11267       s = "aclr";
11268       fmt = "\\,~(b)";
11269       offbits = 12;
11270       goto ld_st;
11271     case M_ASET_AB:
11272       s = "aset";
11273       fmt = "\\,~(b)";
11274       offbits = 12;
11275       goto ld_st;
11276     case M_LB_AB:
11277       s = "lb";
11278       fmt = "t,o(b)";
11279       goto ld;
11280     case M_LBU_AB:
11281       s = "lbu";
11282       fmt = "t,o(b)";
11283       goto ld;
11284     case M_LH_AB:
11285       s = "lh";
11286       fmt = "t,o(b)";
11287       goto ld;
11288     case M_LHU_AB:
11289       s = "lhu";
11290       fmt = "t,o(b)";
11291       goto ld;
11292     case M_LW_AB:
11293       s = "lw";
11294       fmt = "t,o(b)";
11295       goto ld;
11296     case M_LWC0_AB:
11297       gas_assert (!mips_opts.micromips);
11298       s = "lwc0";
11299       fmt = "E,o(b)";
11300       /* Itbl support may require additional care here.  */
11301       coproc = 1;
11302       goto ld_st;
11303     case M_LWC1_AB:
11304       s = "lwc1";
11305       fmt = "T,o(b)";
11306       /* Itbl support may require additional care here.  */
11307       coproc = 1;
11308       goto ld_st;
11309     case M_LWC2_AB:
11310       s = "lwc2";
11311       fmt = COP12_FMT;
11312       offbits = (mips_opts.micromips ? 12
11313                  : ISA_IS_R6 (mips_opts.isa) ? 11
11314                  : 16);
11315       /* Itbl support may require additional care here.  */
11316       coproc = 1;
11317       goto ld_st;
11318     case M_LWC3_AB:
11319       gas_assert (!mips_opts.micromips);
11320       s = "lwc3";
11321       fmt = "E,o(b)";
11322       /* Itbl support may require additional care here.  */
11323       coproc = 1;
11324       goto ld_st;
11325     case M_LWL_AB:
11326       s = "lwl";
11327       fmt = MEM12_FMT;
11328       offbits = (mips_opts.micromips ? 12 : 16);
11329       goto ld_st;
11330     case M_LWR_AB:
11331       s = "lwr";
11332       fmt = MEM12_FMT;
11333       offbits = (mips_opts.micromips ? 12 : 16);
11334       goto ld_st;
11335     case M_LDC1_AB:
11336       s = "ldc1";
11337       fmt = "T,o(b)";
11338       /* Itbl support may require additional care here.  */
11339       coproc = 1;
11340       goto ld_st;
11341     case M_LDC2_AB:
11342       s = "ldc2";
11343       fmt = COP12_FMT;
11344       offbits = (mips_opts.micromips ? 12
11345                  : ISA_IS_R6 (mips_opts.isa) ? 11
11346                  : 16);
11347       /* Itbl support may require additional care here.  */
11348       coproc = 1;
11349       goto ld_st;
11350     case M_LQC2_AB:
11351       s = "lqc2";
11352       fmt = "+7,o(b)";
11353       /* Itbl support may require additional care here.  */
11354       coproc = 1;
11355       goto ld_st;
11356     case M_LDC3_AB:
11357       s = "ldc3";
11358       fmt = "E,o(b)";
11359       /* Itbl support may require additional care here.  */
11360       coproc = 1;
11361       goto ld_st;
11362     case M_LDL_AB:
11363       s = "ldl";
11364       fmt = MEM12_FMT;
11365       offbits = (mips_opts.micromips ? 12 : 16);
11366       goto ld_st;
11367     case M_LDR_AB:
11368       s = "ldr";
11369       fmt = MEM12_FMT;
11370       offbits = (mips_opts.micromips ? 12 : 16);
11371       goto ld_st;
11372     case M_LL_AB:
11373       s = "ll";
11374       fmt = LL_SC_FMT;
11375       offbits = (mips_opts.micromips ? 12
11376                  : ISA_IS_R6 (mips_opts.isa) ? 9
11377                  : 16);
11378       goto ld;
11379     case M_LLD_AB:
11380       s = "lld";
11381       fmt = LL_SC_FMT;
11382       offbits = (mips_opts.micromips ? 12
11383                  : ISA_IS_R6 (mips_opts.isa) ? 9
11384                  : 16);
11385       goto ld;
11386     case M_LWU_AB:
11387       s = "lwu";
11388       fmt = MEM12_FMT;
11389       offbits = (mips_opts.micromips ? 12 : 16);
11390       goto ld;
11391     case M_LWP_AB:
11392       gas_assert (mips_opts.micromips);
11393       s = "lwp";
11394       fmt = "t,~(b)";
11395       offbits = 12;
11396       lp = 1;
11397       goto ld;
11398     case M_LDP_AB:
11399       gas_assert (mips_opts.micromips);
11400       s = "ldp";
11401       fmt = "t,~(b)";
11402       offbits = 12;
11403       lp = 1;
11404       goto ld;
11405     case M_LWM_AB:
11406       gas_assert (mips_opts.micromips);
11407       s = "lwm";
11408       fmt = "n,~(b)";
11409       offbits = 12;
11410       goto ld_st;
11411     case M_LDM_AB:
11412       gas_assert (mips_opts.micromips);
11413       s = "ldm";
11414       fmt = "n,~(b)";
11415       offbits = 12;
11416       goto ld_st;
11417
11418     ld:
11419       /* We don't want to use $0 as tempreg.  */
11420       if (op[2] == op[0] + lp || op[0] + lp == ZERO)
11421         goto ld_st;
11422       else
11423         tempreg = op[0] + lp;
11424       goto ld_noat;
11425
11426     case M_SB_AB:
11427       s = "sb";
11428       fmt = "t,o(b)";
11429       goto ld_st;
11430     case M_SH_AB:
11431       s = "sh";
11432       fmt = "t,o(b)";
11433       goto ld_st;
11434     case M_SW_AB:
11435       s = "sw";
11436       fmt = "t,o(b)";
11437       goto ld_st;
11438     case M_SWC0_AB:
11439       gas_assert (!mips_opts.micromips);
11440       s = "swc0";
11441       fmt = "E,o(b)";
11442       /* Itbl support may require additional care here.  */
11443       coproc = 1;
11444       goto ld_st;
11445     case M_SWC1_AB:
11446       s = "swc1";
11447       fmt = "T,o(b)";
11448       /* Itbl support may require additional care here.  */
11449       coproc = 1;
11450       goto ld_st;
11451     case M_SWC2_AB:
11452       s = "swc2";
11453       fmt = COP12_FMT;
11454       offbits = (mips_opts.micromips ? 12
11455                  : ISA_IS_R6 (mips_opts.isa) ? 11
11456                  : 16);
11457       /* Itbl support may require additional care here.  */
11458       coproc = 1;
11459       goto ld_st;
11460     case M_SWC3_AB:
11461       gas_assert (!mips_opts.micromips);
11462       s = "swc3";
11463       fmt = "E,o(b)";
11464       /* Itbl support may require additional care here.  */
11465       coproc = 1;
11466       goto ld_st;
11467     case M_SWL_AB:
11468       s = "swl";
11469       fmt = MEM12_FMT;
11470       offbits = (mips_opts.micromips ? 12 : 16);
11471       goto ld_st;
11472     case M_SWR_AB:
11473       s = "swr";
11474       fmt = MEM12_FMT;
11475       offbits = (mips_opts.micromips ? 12 : 16);
11476       goto ld_st;
11477     case M_SC_AB:
11478       s = "sc";
11479       fmt = LL_SC_FMT;
11480       offbits = (mips_opts.micromips ? 12
11481                  : ISA_IS_R6 (mips_opts.isa) ? 9
11482                  : 16);
11483       goto ld_st;
11484     case M_SCD_AB:
11485       s = "scd";
11486       fmt = LL_SC_FMT;
11487       offbits = (mips_opts.micromips ? 12
11488                  : ISA_IS_R6 (mips_opts.isa) ? 9
11489                  : 16);
11490       goto ld_st;
11491     case M_CACHE_AB:
11492       s = "cache";
11493       fmt = (mips_opts.micromips ? "k,~(b)"
11494              : ISA_IS_R6 (mips_opts.isa) ? "k,+j(b)"
11495              : "k,o(b)");
11496       offbits = (mips_opts.micromips ? 12
11497                  : ISA_IS_R6 (mips_opts.isa) ? 9
11498                  : 16);
11499       goto ld_st;
11500     case M_CACHEE_AB:
11501       s = "cachee";
11502       fmt = "k,+j(b)";
11503       offbits = 9;
11504       goto ld_st;
11505     case M_PREF_AB:
11506       s = "pref";
11507       fmt = (mips_opts.micromips ? "k,~(b)"
11508              : ISA_IS_R6 (mips_opts.isa) ? "k,+j(b)"
11509              : "k,o(b)");
11510       offbits = (mips_opts.micromips ? 12
11511                  : ISA_IS_R6 (mips_opts.isa) ? 9
11512                  : 16);
11513       goto ld_st;
11514     case M_PREFE_AB:
11515       s = "prefe";
11516       fmt = "k,+j(b)";
11517       offbits = 9;
11518       goto ld_st;
11519     case M_SDC1_AB:
11520       s = "sdc1";
11521       fmt = "T,o(b)";
11522       coproc = 1;
11523       /* Itbl support may require additional care here.  */
11524       goto ld_st;
11525     case M_SDC2_AB:
11526       s = "sdc2";
11527       fmt = COP12_FMT;
11528       offbits = (mips_opts.micromips ? 12
11529                  : ISA_IS_R6 (mips_opts.isa) ? 11
11530                  : 16);
11531       /* Itbl support may require additional care here.  */
11532       coproc = 1;
11533       goto ld_st;
11534     case M_SQC2_AB:
11535       s = "sqc2";
11536       fmt = "+7,o(b)";
11537       /* Itbl support may require additional care here.  */
11538       coproc = 1;
11539       goto ld_st;
11540     case M_SDC3_AB:
11541       gas_assert (!mips_opts.micromips);
11542       s = "sdc3";
11543       fmt = "E,o(b)";
11544       /* Itbl support may require additional care here.  */
11545       coproc = 1;
11546       goto ld_st;
11547     case M_SDL_AB:
11548       s = "sdl";
11549       fmt = MEM12_FMT;
11550       offbits = (mips_opts.micromips ? 12 : 16);
11551       goto ld_st;
11552     case M_SDR_AB:
11553       s = "sdr";
11554       fmt = MEM12_FMT;
11555       offbits = (mips_opts.micromips ? 12 : 16);
11556       goto ld_st;
11557     case M_SWP_AB:
11558       gas_assert (mips_opts.micromips);
11559       s = "swp";
11560       fmt = "t,~(b)";
11561       offbits = 12;
11562       goto ld_st;
11563     case M_SDP_AB:
11564       gas_assert (mips_opts.micromips);
11565       s = "sdp";
11566       fmt = "t,~(b)";
11567       offbits = 12;
11568       goto ld_st;
11569     case M_SWM_AB:
11570       gas_assert (mips_opts.micromips);
11571       s = "swm";
11572       fmt = "n,~(b)";
11573       offbits = 12;
11574       goto ld_st;
11575     case M_SDM_AB:
11576       gas_assert (mips_opts.micromips);
11577       s = "sdm";
11578       fmt = "n,~(b)";
11579       offbits = 12;
11580
11581     ld_st:
11582       tempreg = AT;
11583     ld_noat:
11584       breg = op[2];
11585       if (small_offset_p (0, align, 16))
11586         {
11587           /* The first case exists for M_LD_AB and M_SD_AB, which are
11588              macros for o32 but which should act like normal instructions
11589              otherwise.  */
11590           if (offbits == 16)
11591             macro_build (&offset_expr, s, fmt, op[0], -1, offset_reloc[0],
11592                          offset_reloc[1], offset_reloc[2], breg);
11593           else if (small_offset_p (0, align, offbits))
11594             {
11595               if (offbits == 0)
11596                 macro_build (NULL, s, fmt, op[0], breg);
11597               else
11598                 macro_build (NULL, s, fmt, op[0],
11599                              (int) offset_expr.X_add_number, breg);
11600             }
11601           else
11602             {
11603               if (tempreg == AT)
11604                 used_at = 1;
11605               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11606                            tempreg, breg, -1, offset_reloc[0],
11607                            offset_reloc[1], offset_reloc[2]);
11608               if (offbits == 0)
11609                 macro_build (NULL, s, fmt, op[0], tempreg);
11610               else
11611                 macro_build (NULL, s, fmt, op[0], 0, tempreg);
11612             }
11613           break;
11614         }
11615
11616       if (tempreg == AT)
11617         used_at = 1;
11618
11619       if (offset_expr.X_op != O_constant
11620           && offset_expr.X_op != O_symbol)
11621         {
11622           as_bad (_("expression too complex"));
11623           offset_expr.X_op = O_constant;
11624         }
11625
11626       if (HAVE_32BIT_ADDRESSES
11627           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
11628         {
11629           char value [32];
11630
11631           sprintf_vma (value, offset_expr.X_add_number);
11632           as_bad (_("number (0x%s) larger than 32 bits"), value);
11633         }
11634
11635       /* A constant expression in PIC code can be handled just as it
11636          is in non PIC code.  */
11637       if (offset_expr.X_op == O_constant)
11638         {
11639           expr1.X_add_number = offset_high_part (offset_expr.X_add_number,
11640                                                  offbits == 0 ? 16 : offbits);
11641           offset_expr.X_add_number -= expr1.X_add_number;
11642
11643           load_register (tempreg, &expr1, HAVE_64BIT_ADDRESSES);
11644           if (breg != 0)
11645             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11646                          tempreg, tempreg, breg);
11647           if (offbits == 0)
11648             {
11649               if (offset_expr.X_add_number != 0)
11650                 macro_build (&offset_expr, ADDRESS_ADDI_INSN,
11651                              "t,r,j", tempreg, tempreg, BFD_RELOC_LO16);
11652               macro_build (NULL, s, fmt, op[0], tempreg);
11653             }
11654           else if (offbits == 16)
11655             macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11656           else
11657             macro_build (NULL, s, fmt, op[0],
11658                          (int) offset_expr.X_add_number, tempreg);
11659         }
11660       else if (offbits != 16)
11661         {
11662           /* The offset field is too narrow to be used for a low-part
11663              relocation, so load the whole address into the auxillary
11664              register.  */
11665           load_address (tempreg, &offset_expr, &used_at);
11666           if (breg != 0)
11667             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11668                          tempreg, tempreg, breg);
11669           if (offbits == 0)
11670             macro_build (NULL, s, fmt, op[0], tempreg);
11671           else
11672             macro_build (NULL, s, fmt, op[0], 0, tempreg);
11673         }
11674       else if (mips_pic == NO_PIC)
11675         {
11676           /* If this is a reference to a GP relative symbol, and there
11677              is no base register, we want
11678                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
11679              Otherwise, if there is no base register, we want
11680                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11681                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11682              If we have a constant, we need two instructions anyhow,
11683              so we always use the latter form.
11684
11685              If we have a base register, and this is a reference to a
11686              GP relative symbol, we want
11687                addu     $tempreg,$breg,$gp
11688                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_GPREL16)
11689              Otherwise we want
11690                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11691                addu     $tempreg,$tempreg,$breg
11692                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11693              With a constant we always use the latter case.
11694
11695              With 64bit address space and no base register and $at usable,
11696              we want
11697                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11698                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11699                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11700                dsll32   $tempreg,0
11701                daddu    $tempreg,$at
11702                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11703              If we have a base register, we want
11704                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11705                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11706                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11707                daddu    $at,$breg
11708                dsll32   $tempreg,0
11709                daddu    $tempreg,$at
11710                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11711
11712              Without $at we can't generate the optimal path for superscalar
11713              processors here since this would require two temporary registers.
11714                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11715                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11716                dsll     $tempreg,16
11717                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11718                dsll     $tempreg,16
11719                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11720              If we have a base register, we want
11721                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11722                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11723                dsll     $tempreg,16
11724                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11725                dsll     $tempreg,16
11726                daddu    $tempreg,$tempreg,$breg
11727                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11728
11729              For GP relative symbols in 64bit address space we can use
11730              the same sequence as in 32bit address space.  */
11731           if (HAVE_64BIT_SYMBOLS)
11732             {
11733               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11734                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11735                 {
11736                   relax_start (offset_expr.X_add_symbol);
11737                   if (breg == 0)
11738                     {
11739                       macro_build (&offset_expr, s, fmt, op[0],
11740                                    BFD_RELOC_GPREL16, mips_gp_register);
11741                     }
11742                   else
11743                     {
11744                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11745                                    tempreg, breg, mips_gp_register);
11746                       macro_build (&offset_expr, s, fmt, op[0],
11747                                    BFD_RELOC_GPREL16, tempreg);
11748                     }
11749                   relax_switch ();
11750                 }
11751
11752               if (used_at == 0 && mips_opts.at)
11753                 {
11754                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11755                                BFD_RELOC_MIPS_HIGHEST);
11756                   macro_build (&offset_expr, "lui", LUI_FMT, AT,
11757                                BFD_RELOC_HI16_S);
11758                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11759                                tempreg, BFD_RELOC_MIPS_HIGHER);
11760                   if (breg != 0)
11761                     macro_build (NULL, "daddu", "d,v,t", AT, AT, breg);
11762                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
11763                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
11764                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16,
11765                                tempreg);
11766                   used_at = 1;
11767                 }
11768               else
11769                 {
11770                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11771                                BFD_RELOC_MIPS_HIGHEST);
11772                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11773                                tempreg, BFD_RELOC_MIPS_HIGHER);
11774                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11775                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11776                                tempreg, BFD_RELOC_HI16_S);
11777                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11778                   if (breg != 0)
11779                     macro_build (NULL, "daddu", "d,v,t",
11780                                  tempreg, tempreg, breg);
11781                   macro_build (&offset_expr, s, fmt, op[0],
11782                                BFD_RELOC_LO16, tempreg);
11783                 }
11784
11785               if (mips_relax.sequence)
11786                 relax_end ();
11787               break;
11788             }
11789
11790           if (breg == 0)
11791             {
11792               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11793                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11794                 {
11795                   relax_start (offset_expr.X_add_symbol);
11796                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_GPREL16,
11797                                mips_gp_register);
11798                   relax_switch ();
11799                 }
11800               macro_build_lui (&offset_expr, tempreg);
11801               macro_build (&offset_expr, s, fmt, op[0],
11802                            BFD_RELOC_LO16, tempreg);
11803               if (mips_relax.sequence)
11804                 relax_end ();
11805             }
11806           else
11807             {
11808               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11809                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11810                 {
11811                   relax_start (offset_expr.X_add_symbol);
11812                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11813                                tempreg, breg, mips_gp_register);
11814                   macro_build (&offset_expr, s, fmt, op[0],
11815                                BFD_RELOC_GPREL16, tempreg);
11816                   relax_switch ();
11817                 }
11818               macro_build_lui (&offset_expr, tempreg);
11819               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11820                            tempreg, tempreg, breg);
11821               macro_build (&offset_expr, s, fmt, op[0],
11822                            BFD_RELOC_LO16, tempreg);
11823               if (mips_relax.sequence)
11824                 relax_end ();
11825             }
11826         }
11827       else if (!mips_big_got)
11828         {
11829           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
11830
11831           /* If this is a reference to an external symbol, we want
11832                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11833                nop
11834                <op>     op[0],0($tempreg)
11835              Otherwise we want
11836                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11837                nop
11838                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
11839                <op>     op[0],0($tempreg)
11840
11841              For NewABI, we want
11842                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
11843                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)
11844
11845              If there is a base register, we add it to $tempreg before
11846              the <op>.  If there is a constant, we stick it in the
11847              <op> instruction.  We don't handle constants larger than
11848              16 bits, because we have no way to load the upper 16 bits
11849              (actually, we could handle them for the subset of cases
11850              in which we are not using $at).  */
11851           gas_assert (offset_expr.X_op == O_symbol);
11852           if (HAVE_NEWABI)
11853             {
11854               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11855                            BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
11856               if (breg != 0)
11857                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11858                              tempreg, tempreg, breg);
11859               macro_build (&offset_expr, s, fmt, op[0],
11860                            BFD_RELOC_MIPS_GOT_OFST, tempreg);
11861               break;
11862             }
11863           expr1.X_add_number = offset_expr.X_add_number;
11864           offset_expr.X_add_number = 0;
11865           if (expr1.X_add_number < -0x8000
11866               || expr1.X_add_number >= 0x8000)
11867             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11868           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11869                        lw_reloc_type, mips_gp_register);
11870           load_delay_nop ();
11871           relax_start (offset_expr.X_add_symbol);
11872           relax_switch ();
11873           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
11874                        tempreg, BFD_RELOC_LO16);
11875           relax_end ();
11876           if (breg != 0)
11877             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11878                          tempreg, tempreg, breg);
11879           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11880         }
11881       else if (mips_big_got && !HAVE_NEWABI)
11882         {
11883           int gpdelay;
11884
11885           /* If this is a reference to an external symbol, we want
11886                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11887                addu     $tempreg,$tempreg,$gp
11888                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11889                <op>     op[0],0($tempreg)
11890              Otherwise we want
11891                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11892                nop
11893                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
11894                <op>     op[0],0($tempreg)
11895              If there is a base register, we add it to $tempreg before
11896              the <op>.  If there is a constant, we stick it in the
11897              <op> instruction.  We don't handle constants larger than
11898              16 bits, because we have no way to load the upper 16 bits
11899              (actually, we could handle them for the subset of cases
11900              in which we are not using $at).  */
11901           gas_assert (offset_expr.X_op == O_symbol);
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           gpdelay = reg_needs_delay (mips_gp_register);
11908           relax_start (offset_expr.X_add_symbol);
11909           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11910                        BFD_RELOC_MIPS_GOT_HI16);
11911           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
11912                        mips_gp_register);
11913           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11914                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
11915           relax_switch ();
11916           if (gpdelay)
11917             macro_build (NULL, "nop", "");
11918           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11919                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
11920           load_delay_nop ();
11921           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
11922                        tempreg, BFD_RELOC_LO16);
11923           relax_end ();
11924
11925           if (breg != 0)
11926             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11927                          tempreg, tempreg, breg);
11928           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11929         }
11930       else if (mips_big_got && HAVE_NEWABI)
11931         {
11932           /* If this is a reference to an external symbol, we want
11933                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11934                add      $tempreg,$tempreg,$gp
11935                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11936                <op>     op[0],<ofst>($tempreg)
11937              Otherwise, for local symbols, we want:
11938                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
11939                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)  */
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           relax_start (offset_expr.X_add_symbol);
11947           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11948                        BFD_RELOC_MIPS_GOT_HI16);
11949           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
11950                        mips_gp_register);
11951           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11952                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
11953           if (breg != 0)
11954             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11955                          tempreg, tempreg, breg);
11956           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11957
11958           relax_switch ();
11959           offset_expr.X_add_number = expr1.X_add_number;
11960           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11961                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
11962           if (breg != 0)
11963             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11964                          tempreg, tempreg, breg);
11965           macro_build (&offset_expr, s, fmt, op[0],
11966                        BFD_RELOC_MIPS_GOT_OFST, tempreg);
11967           relax_end ();
11968         }
11969       else
11970         abort ();
11971
11972       break;
11973
11974     case M_JRADDIUSP:
11975       gas_assert (mips_opts.micromips);
11976       gas_assert (mips_opts.insn32);
11977       start_noreorder ();
11978       macro_build (NULL, "jr", "s", RA);
11979       expr1.X_add_number = op[0] << 2;
11980       macro_build (&expr1, "addiu", "t,r,j", SP, SP, BFD_RELOC_LO16);
11981       end_noreorder ();
11982       break;
11983
11984     case M_JRC:
11985       gas_assert (mips_opts.micromips);
11986       gas_assert (mips_opts.insn32);
11987       macro_build (NULL, "jr", "s", op[0]);
11988       if (mips_opts.noreorder)
11989         macro_build (NULL, "nop", "");
11990       break;
11991
11992     case M_LI:
11993     case M_LI_S:
11994       load_register (op[0], &imm_expr, 0);
11995       break;
11996
11997     case M_DLI:
11998       load_register (op[0], &imm_expr, 1);
11999       break;
12000
12001     case M_LI_SS:
12002       if (imm_expr.X_op == O_constant)
12003         {
12004           used_at = 1;
12005           load_register (AT, &imm_expr, 0);
12006           macro_build (NULL, "mtc1", "t,G", AT, op[0]);
12007           break;
12008         }
12009       else
12010         {
12011           gas_assert (imm_expr.X_op == O_absent
12012                       && offset_expr.X_op == O_symbol
12013                       && strcmp (segment_name (S_GET_SEGMENT
12014                                                (offset_expr.X_add_symbol)),
12015                                  ".lit4") == 0
12016                       && offset_expr.X_add_number == 0);
12017           macro_build (&offset_expr, "lwc1", "T,o(b)", op[0],
12018                        BFD_RELOC_MIPS_LITERAL, mips_gp_register);
12019           break;
12020         }
12021
12022     case M_LI_D:
12023       /* Check if we have a constant in IMM_EXPR.  If the GPRs are 64 bits
12024          wide, IMM_EXPR is the entire value.  Otherwise IMM_EXPR is the high
12025          order 32 bits of the value and the low order 32 bits are either
12026          zero or in OFFSET_EXPR.  */
12027       if (imm_expr.X_op == O_constant)
12028         {
12029           if (GPR_SIZE == 64)
12030             load_register (op[0], &imm_expr, 1);
12031           else
12032             {
12033               int hreg, lreg;
12034
12035               if (target_big_endian)
12036                 {
12037                   hreg = op[0];
12038                   lreg = op[0] + 1;
12039                 }
12040               else
12041                 {
12042                   hreg = op[0] + 1;
12043                   lreg = op[0];
12044                 }
12045
12046               if (hreg <= 31)
12047                 load_register (hreg, &imm_expr, 0);
12048               if (lreg <= 31)
12049                 {
12050                   if (offset_expr.X_op == O_absent)
12051                     move_register (lreg, 0);
12052                   else
12053                     {
12054                       gas_assert (offset_expr.X_op == O_constant);
12055                       load_register (lreg, &offset_expr, 0);
12056                     }
12057                 }
12058             }
12059           break;
12060         }
12061       gas_assert (imm_expr.X_op == O_absent);
12062
12063       /* We know that sym is in the .rdata section.  First we get the
12064          upper 16 bits of the address.  */
12065       if (mips_pic == NO_PIC)
12066         {
12067           macro_build_lui (&offset_expr, AT);
12068           used_at = 1;
12069         }
12070       else
12071         {
12072           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12073                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
12074           used_at = 1;
12075         }
12076
12077       /* Now we load the register(s).  */
12078       if (GPR_SIZE == 64)
12079         {
12080           used_at = 1;
12081           macro_build (&offset_expr, "ld", "t,o(b)", op[0],
12082                        BFD_RELOC_LO16, AT);
12083         }
12084       else
12085         {
12086           used_at = 1;
12087           macro_build (&offset_expr, "lw", "t,o(b)", op[0],
12088                        BFD_RELOC_LO16, AT);
12089           if (op[0] != RA)
12090             {
12091               /* FIXME: How in the world do we deal with the possible
12092                  overflow here?  */
12093               offset_expr.X_add_number += 4;
12094               macro_build (&offset_expr, "lw", "t,o(b)",
12095                            op[0] + 1, BFD_RELOC_LO16, AT);
12096             }
12097         }
12098       break;
12099
12100     case M_LI_DD:
12101       /* Check if we have a constant in IMM_EXPR.  If the FPRs are 64 bits
12102          wide, IMM_EXPR is the entire value and the GPRs are known to be 64
12103          bits wide as well.  Otherwise IMM_EXPR is the high order 32 bits of
12104          the value and the low order 32 bits are either zero or in
12105          OFFSET_EXPR.  */
12106       if (imm_expr.X_op == O_constant)
12107         {
12108           used_at = 1;
12109           load_register (AT, &imm_expr, FPR_SIZE == 64);
12110           if (FPR_SIZE == 64 && GPR_SIZE == 64)
12111             macro_build (NULL, "dmtc1", "t,S", AT, op[0]);
12112           else
12113             {
12114               if (ISA_HAS_MXHC1 (mips_opts.isa))
12115                 macro_build (NULL, "mthc1", "t,G", AT, op[0]);
12116               else if (FPR_SIZE != 32)
12117                 as_bad (_("Unable to generate `%s' compliant code "
12118                           "without mthc1"),
12119                         (FPR_SIZE == 64) ? "fp64" : "fpxx");
12120               else
12121                 macro_build (NULL, "mtc1", "t,G", AT, op[0] + 1);
12122               if (offset_expr.X_op == O_absent)
12123                 macro_build (NULL, "mtc1", "t,G", 0, op[0]);
12124               else
12125                 {
12126                   gas_assert (offset_expr.X_op == O_constant);
12127                   load_register (AT, &offset_expr, 0);
12128                   macro_build (NULL, "mtc1", "t,G", AT, op[0]);
12129                 }
12130             }
12131           break;
12132         }
12133
12134       gas_assert (imm_expr.X_op == O_absent
12135                   && offset_expr.X_op == O_symbol
12136                   && offset_expr.X_add_number == 0);
12137       s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
12138       if (strcmp (s, ".lit8") == 0)
12139         {
12140           op[2] = mips_gp_register;
12141           offset_reloc[0] = BFD_RELOC_MIPS_LITERAL;
12142           offset_reloc[1] = BFD_RELOC_UNUSED;
12143           offset_reloc[2] = BFD_RELOC_UNUSED;
12144         }
12145       else
12146         {
12147           gas_assert (strcmp (s, RDATA_SECTION_NAME) == 0);
12148           used_at = 1;
12149           if (mips_pic != NO_PIC)
12150             macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12151                          BFD_RELOC_MIPS_GOT16, mips_gp_register);
12152           else
12153             {
12154               /* FIXME: This won't work for a 64 bit address.  */
12155               macro_build_lui (&offset_expr, AT);
12156             }
12157
12158           op[2] = AT;
12159           offset_reloc[0] = BFD_RELOC_LO16;
12160           offset_reloc[1] = BFD_RELOC_UNUSED;
12161           offset_reloc[2] = BFD_RELOC_UNUSED;
12162         }
12163       align = 8;
12164       /* Fall through */
12165
12166     case M_L_DAB:
12167       /*
12168        * The MIPS assembler seems to check for X_add_number not
12169        * being double aligned and generating:
12170        *        lui     at,%hi(foo+1)
12171        *        addu    at,at,v1
12172        *        addiu   at,at,%lo(foo+1)
12173        *        lwc1    f2,0(at)
12174        *        lwc1    f3,4(at)
12175        * But, the resulting address is the same after relocation so why
12176        * generate the extra instruction?
12177        */
12178       /* Itbl support may require additional care here.  */
12179       coproc = 1;
12180       fmt = "T,o(b)";
12181       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
12182         {
12183           s = "ldc1";
12184           goto ld_st;
12185         }
12186       s = "lwc1";
12187       goto ldd_std;
12188
12189     case M_S_DAB:
12190       gas_assert (!mips_opts.micromips);
12191       /* Itbl support may require additional care here.  */
12192       coproc = 1;
12193       fmt = "T,o(b)";
12194       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
12195         {
12196           s = "sdc1";
12197           goto ld_st;
12198         }
12199       s = "swc1";
12200       goto ldd_std;
12201
12202     case M_LQ_AB:
12203       fmt = "t,o(b)";
12204       s = "lq";
12205       goto ld;
12206
12207     case M_SQ_AB:
12208       fmt = "t,o(b)";
12209       s = "sq";
12210       goto ld_st;
12211
12212     case M_LD_AB:
12213       fmt = "t,o(b)";
12214       if (GPR_SIZE == 64)
12215         {
12216           s = "ld";
12217           goto ld;
12218         }
12219       s = "lw";
12220       goto ldd_std;
12221
12222     case M_SD_AB:
12223       fmt = "t,o(b)";
12224       if (GPR_SIZE == 64)
12225         {
12226           s = "sd";
12227           goto ld_st;
12228         }
12229       s = "sw";
12230
12231     ldd_std:
12232       /* Even on a big endian machine $fn comes before $fn+1.  We have
12233          to adjust when loading from memory.  We set coproc if we must
12234          load $fn+1 first.  */
12235       /* Itbl support may require additional care here.  */
12236       if (!target_big_endian)
12237         coproc = 0;
12238
12239       breg = op[2];
12240       if (small_offset_p (0, align, 16))
12241         {
12242           ep = &offset_expr;
12243           if (!small_offset_p (4, align, 16))
12244             {
12245               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", AT, breg,
12246                            -1, offset_reloc[0], offset_reloc[1],
12247                            offset_reloc[2]);
12248               expr1.X_add_number = 0;
12249               ep = &expr1;
12250               breg = AT;
12251               used_at = 1;
12252               offset_reloc[0] = BFD_RELOC_LO16;
12253               offset_reloc[1] = BFD_RELOC_UNUSED;
12254               offset_reloc[2] = BFD_RELOC_UNUSED;
12255             }
12256           if (strcmp (s, "lw") == 0 && op[0] == breg)
12257             {
12258               ep->X_add_number += 4;
12259               macro_build (ep, s, fmt, op[0] + 1, -1, offset_reloc[0],
12260                            offset_reloc[1], offset_reloc[2], breg);
12261               ep->X_add_number -= 4;
12262               macro_build (ep, s, fmt, op[0], -1, offset_reloc[0],
12263                            offset_reloc[1], offset_reloc[2], breg);
12264             }
12265           else
12266             {
12267               macro_build (ep, s, fmt, coproc ? op[0] + 1 : op[0], -1,
12268                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
12269                            breg);
12270               ep->X_add_number += 4;
12271               macro_build (ep, s, fmt, coproc ? op[0] : op[0] + 1, -1,
12272                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
12273                            breg);
12274             }
12275           break;
12276         }
12277
12278       if (offset_expr.X_op != O_symbol
12279           && offset_expr.X_op != O_constant)
12280         {
12281           as_bad (_("expression too complex"));
12282           offset_expr.X_op = O_constant;
12283         }
12284
12285       if (HAVE_32BIT_ADDRESSES
12286           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
12287         {
12288           char value [32];
12289
12290           sprintf_vma (value, offset_expr.X_add_number);
12291           as_bad (_("number (0x%s) larger than 32 bits"), value);
12292         }
12293
12294       if (mips_pic == NO_PIC || offset_expr.X_op == O_constant)
12295         {
12296           /* If this is a reference to a GP relative symbol, we want
12297                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
12298                <op>     op[0]+1,<sym>+4($gp)    (BFD_RELOC_GPREL16)
12299              If we have a base register, we use this
12300                addu     $at,$breg,$gp
12301                <op>     op[0],<sym>($at)        (BFD_RELOC_GPREL16)
12302                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_GPREL16)
12303              If this is not a GP relative symbol, we want
12304                lui      $at,<sym>               (BFD_RELOC_HI16_S)
12305                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12306                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12307              If there is a base register, we add it to $at after the
12308              lui instruction.  If there is a constant, we always use
12309              the last case.  */
12310           if (offset_expr.X_op == O_symbol
12311               && (valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
12312               && !nopic_need_relax (offset_expr.X_add_symbol, 1))
12313             {
12314               relax_start (offset_expr.X_add_symbol);
12315               if (breg == 0)
12316                 {
12317                   tempreg = mips_gp_register;
12318                 }
12319               else
12320                 {
12321                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12322                                AT, breg, mips_gp_register);
12323                   tempreg = AT;
12324                   used_at = 1;
12325                 }
12326
12327               /* Itbl support may require additional care here.  */
12328               macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12329                            BFD_RELOC_GPREL16, tempreg);
12330               offset_expr.X_add_number += 4;
12331
12332               /* Set mips_optimize to 2 to avoid inserting an
12333                  undesired nop.  */
12334               hold_mips_optimize = mips_optimize;
12335               mips_optimize = 2;
12336               /* Itbl support may require additional care here.  */
12337               macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12338                            BFD_RELOC_GPREL16, tempreg);
12339               mips_optimize = hold_mips_optimize;
12340
12341               relax_switch ();
12342
12343               offset_expr.X_add_number -= 4;
12344             }
12345           used_at = 1;
12346           if (offset_high_part (offset_expr.X_add_number, 16)
12347               != offset_high_part (offset_expr.X_add_number + 4, 16))
12348             {
12349               load_address (AT, &offset_expr, &used_at);
12350               offset_expr.X_op = O_constant;
12351               offset_expr.X_add_number = 0;
12352             }
12353           else
12354             macro_build_lui (&offset_expr, AT);
12355           if (breg != 0)
12356             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12357           /* Itbl support may require additional care here.  */
12358           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12359                        BFD_RELOC_LO16, AT);
12360           /* FIXME: How do we handle overflow here?  */
12361           offset_expr.X_add_number += 4;
12362           /* Itbl support may require additional care here.  */
12363           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12364                        BFD_RELOC_LO16, AT);
12365           if (mips_relax.sequence)
12366             relax_end ();
12367         }
12368       else if (!mips_big_got)
12369         {
12370           /* If this is a reference to an external symbol, we want
12371                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12372                nop
12373                <op>     op[0],0($at)
12374                <op>     op[0]+1,4($at)
12375              Otherwise we want
12376                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12377                nop
12378                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12379                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12380              If there is a base register we add it to $at before the
12381              lwc1 instructions.  If there is a constant we include it
12382              in the lwc1 instructions.  */
12383           used_at = 1;
12384           expr1.X_add_number = offset_expr.X_add_number;
12385           if (expr1.X_add_number < -0x8000
12386               || expr1.X_add_number >= 0x8000 - 4)
12387             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12388           load_got_offset (AT, &offset_expr);
12389           load_delay_nop ();
12390           if (breg != 0)
12391             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12392
12393           /* Set mips_optimize to 2 to avoid inserting an undesired
12394              nop.  */
12395           hold_mips_optimize = mips_optimize;
12396           mips_optimize = 2;
12397
12398           /* Itbl support may require additional care here.  */
12399           relax_start (offset_expr.X_add_symbol);
12400           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
12401                        BFD_RELOC_LO16, AT);
12402           expr1.X_add_number += 4;
12403           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
12404                        BFD_RELOC_LO16, AT);
12405           relax_switch ();
12406           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12407                        BFD_RELOC_LO16, AT);
12408           offset_expr.X_add_number += 4;
12409           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12410                        BFD_RELOC_LO16, AT);
12411           relax_end ();
12412
12413           mips_optimize = hold_mips_optimize;
12414         }
12415       else if (mips_big_got)
12416         {
12417           int gpdelay;
12418
12419           /* If this is a reference to an external symbol, we want
12420                lui      $at,<sym>               (BFD_RELOC_MIPS_GOT_HI16)
12421                addu     $at,$at,$gp
12422                lw       $at,<sym>($at)          (BFD_RELOC_MIPS_GOT_LO16)
12423                nop
12424                <op>     op[0],0($at)
12425                <op>     op[0]+1,4($at)
12426              Otherwise we want
12427                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
12428                nop
12429                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
12430                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
12431              If there is a base register we add it to $at before the
12432              lwc1 instructions.  If there is a constant we include it
12433              in the lwc1 instructions.  */
12434           used_at = 1;
12435           expr1.X_add_number = offset_expr.X_add_number;
12436           offset_expr.X_add_number = 0;
12437           if (expr1.X_add_number < -0x8000
12438               || expr1.X_add_number >= 0x8000 - 4)
12439             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
12440           gpdelay = reg_needs_delay (mips_gp_register);
12441           relax_start (offset_expr.X_add_symbol);
12442           macro_build (&offset_expr, "lui", LUI_FMT,
12443                        AT, BFD_RELOC_MIPS_GOT_HI16);
12444           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12445                        AT, AT, mips_gp_register);
12446           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
12447                        AT, BFD_RELOC_MIPS_GOT_LO16, AT);
12448           load_delay_nop ();
12449           if (breg != 0)
12450             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12451           /* Itbl support may require additional care here.  */
12452           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
12453                        BFD_RELOC_LO16, AT);
12454           expr1.X_add_number += 4;
12455
12456           /* Set mips_optimize to 2 to avoid inserting an undesired
12457              nop.  */
12458           hold_mips_optimize = mips_optimize;
12459           mips_optimize = 2;
12460           /* Itbl support may require additional care here.  */
12461           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
12462                        BFD_RELOC_LO16, AT);
12463           mips_optimize = hold_mips_optimize;
12464           expr1.X_add_number -= 4;
12465
12466           relax_switch ();
12467           offset_expr.X_add_number = expr1.X_add_number;
12468           if (gpdelay)
12469             macro_build (NULL, "nop", "");
12470           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
12471                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
12472           load_delay_nop ();
12473           if (breg != 0)
12474             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
12475           /* Itbl support may require additional care here.  */
12476           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
12477                        BFD_RELOC_LO16, AT);
12478           offset_expr.X_add_number += 4;
12479
12480           /* Set mips_optimize to 2 to avoid inserting an undesired
12481              nop.  */
12482           hold_mips_optimize = mips_optimize;
12483           mips_optimize = 2;
12484           /* Itbl support may require additional care here.  */
12485           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
12486                        BFD_RELOC_LO16, AT);
12487           mips_optimize = hold_mips_optimize;
12488           relax_end ();
12489         }
12490       else
12491         abort ();
12492
12493       break;
12494
12495     case M_SAA_AB:
12496       s = "saa";
12497       goto saa_saad;
12498     case M_SAAD_AB:
12499       s = "saad";
12500     saa_saad:
12501       gas_assert (!mips_opts.micromips);
12502       offbits = 0;
12503       fmt = "t,(b)";
12504       goto ld_st;
12505
12506    /* New code added to support COPZ instructions.
12507       This code builds table entries out of the macros in mip_opcodes.
12508       R4000 uses interlocks to handle coproc delays.
12509       Other chips (like the R3000) require nops to be inserted for delays.
12510
12511       FIXME: Currently, we require that the user handle delays.
12512       In order to fill delay slots for non-interlocked chips,
12513       we must have a way to specify delays based on the coprocessor.
12514       Eg. 4 cycles if load coproc reg from memory, 1 if in cache, etc.
12515       What are the side-effects of the cop instruction?
12516       What cache support might we have and what are its effects?
12517       Both coprocessor & memory require delays. how long???
12518       What registers are read/set/modified?
12519
12520       If an itbl is provided to interpret cop instructions,
12521       this knowledge can be encoded in the itbl spec.  */
12522
12523     case M_COP0:
12524       s = "c0";
12525       goto copz;
12526     case M_COP1:
12527       s = "c1";
12528       goto copz;
12529     case M_COP2:
12530       s = "c2";
12531       goto copz;
12532     case M_COP3:
12533       s = "c3";
12534     copz:
12535       gas_assert (!mips_opts.micromips);
12536       /* For now we just do C (same as Cz).  The parameter will be
12537          stored in insn_opcode by mips_ip.  */
12538       macro_build (NULL, s, "C", (int) ip->insn_opcode);
12539       break;
12540
12541     case M_MOVE:
12542       move_register (op[0], op[1]);
12543       break;
12544
12545     case M_MOVEP:
12546       gas_assert (mips_opts.micromips);
12547       gas_assert (mips_opts.insn32);
12548       move_register (micromips_to_32_reg_h_map1[op[0]],
12549                      micromips_to_32_reg_m_map[op[1]]);
12550       move_register (micromips_to_32_reg_h_map2[op[0]],
12551                      micromips_to_32_reg_n_map[op[2]]);
12552       break;
12553
12554     case M_DMUL:
12555       dbl = 1;
12556     case M_MUL:
12557       if (mips_opts.arch == CPU_R5900)
12558         macro_build (NULL, dbl ? "dmultu" : "multu", "d,s,t", op[0], op[1],
12559                      op[2]);
12560       else
12561         {
12562           macro_build (NULL, dbl ? "dmultu" : "multu", "s,t", op[1], op[2]);
12563           macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12564         }
12565       break;
12566
12567     case M_DMUL_I:
12568       dbl = 1;
12569     case M_MUL_I:
12570       /* The MIPS assembler some times generates shifts and adds.  I'm
12571          not trying to be that fancy. GCC should do this for us
12572          anyway.  */
12573       used_at = 1;
12574       load_register (AT, &imm_expr, dbl);
12575       macro_build (NULL, dbl ? "dmult" : "mult", "s,t", op[1], AT);
12576       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12577       break;
12578
12579     case M_DMULO_I:
12580       dbl = 1;
12581     case M_MULO_I:
12582       imm = 1;
12583       goto do_mulo;
12584
12585     case M_DMULO:
12586       dbl = 1;
12587     case M_MULO:
12588     do_mulo:
12589       start_noreorder ();
12590       used_at = 1;
12591       if (imm)
12592         load_register (AT, &imm_expr, dbl);
12593       macro_build (NULL, dbl ? "dmult" : "mult", "s,t",
12594                    op[1], imm ? AT : op[2]);
12595       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12596       macro_build (NULL, dbl ? "dsra32" : "sra", SHFT_FMT, op[0], op[0], 31);
12597       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12598       if (mips_trap)
12599         macro_build (NULL, "tne", TRAP_FMT, op[0], AT, 6);
12600       else
12601         {
12602           if (mips_opts.micromips)
12603             micromips_label_expr (&label_expr);
12604           else
12605             label_expr.X_add_number = 8;
12606           macro_build (&label_expr, "beq", "s,t,p", op[0], AT);
12607           macro_build (NULL, "nop", "");
12608           macro_build (NULL, "break", BRK_FMT, 6);
12609           if (mips_opts.micromips)
12610             micromips_add_label ();
12611         }
12612       end_noreorder ();
12613       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12614       break;
12615
12616     case M_DMULOU_I:
12617       dbl = 1;
12618     case M_MULOU_I:
12619       imm = 1;
12620       goto do_mulou;
12621
12622     case M_DMULOU:
12623       dbl = 1;
12624     case M_MULOU:
12625     do_mulou:
12626       start_noreorder ();
12627       used_at = 1;
12628       if (imm)
12629         load_register (AT, &imm_expr, dbl);
12630       macro_build (NULL, dbl ? "dmultu" : "multu", "s,t",
12631                    op[1], imm ? AT : op[2]);
12632       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12633       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12634       if (mips_trap)
12635         macro_build (NULL, "tne", TRAP_FMT, AT, ZERO, 6);
12636       else
12637         {
12638           if (mips_opts.micromips)
12639             micromips_label_expr (&label_expr);
12640           else
12641             label_expr.X_add_number = 8;
12642           macro_build (&label_expr, "beq", "s,t,p", AT, ZERO);
12643           macro_build (NULL, "nop", "");
12644           macro_build (NULL, "break", BRK_FMT, 6);
12645           if (mips_opts.micromips)
12646             micromips_add_label ();
12647         }
12648       end_noreorder ();
12649       break;
12650
12651     case M_DROL:
12652       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12653         {
12654           if (op[0] == op[1])
12655             {
12656               tempreg = AT;
12657               used_at = 1;
12658             }
12659           else
12660             tempreg = op[0];
12661           macro_build (NULL, "dnegu", "d,w", tempreg, op[2]);
12662           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], tempreg);
12663           break;
12664         }
12665       used_at = 1;
12666       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12667       macro_build (NULL, "dsrlv", "d,t,s", AT, op[1], AT);
12668       macro_build (NULL, "dsllv", "d,t,s", op[0], op[1], op[2]);
12669       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12670       break;
12671
12672     case M_ROL:
12673       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12674         {
12675           if (op[0] == op[1])
12676             {
12677               tempreg = AT;
12678               used_at = 1;
12679             }
12680           else
12681             tempreg = op[0];
12682           macro_build (NULL, "negu", "d,w", tempreg, op[2]);
12683           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], tempreg);
12684           break;
12685         }
12686       used_at = 1;
12687       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12688       macro_build (NULL, "srlv", "d,t,s", AT, op[1], AT);
12689       macro_build (NULL, "sllv", "d,t,s", op[0], op[1], op[2]);
12690       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12691       break;
12692
12693     case M_DROL_I:
12694       {
12695         unsigned int rot;
12696         const char *l;
12697         const char *rr;
12698
12699         rot = imm_expr.X_add_number & 0x3f;
12700         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12701           {
12702             rot = (64 - rot) & 0x3f;
12703             if (rot >= 32)
12704               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12705             else
12706               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12707             break;
12708           }
12709         if (rot == 0)
12710           {
12711             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12712             break;
12713           }
12714         l = (rot < 0x20) ? "dsll" : "dsll32";
12715         rr = ((0x40 - rot) < 0x20) ? "dsrl" : "dsrl32";
12716         rot &= 0x1f;
12717         used_at = 1;
12718         macro_build (NULL, l, SHFT_FMT, AT, op[1], rot);
12719         macro_build (NULL, rr, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12720         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12721       }
12722       break;
12723
12724     case M_ROL_I:
12725       {
12726         unsigned int rot;
12727
12728         rot = imm_expr.X_add_number & 0x1f;
12729         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12730           {
12731             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1],
12732                          (32 - rot) & 0x1f);
12733             break;
12734           }
12735         if (rot == 0)
12736           {
12737             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
12738             break;
12739           }
12740         used_at = 1;
12741         macro_build (NULL, "sll", SHFT_FMT, AT, op[1], rot);
12742         macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12743         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12744       }
12745       break;
12746
12747     case M_DROR:
12748       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12749         {
12750           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], op[2]);
12751           break;
12752         }
12753       used_at = 1;
12754       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12755       macro_build (NULL, "dsllv", "d,t,s", AT, op[1], AT);
12756       macro_build (NULL, "dsrlv", "d,t,s", op[0], op[1], op[2]);
12757       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12758       break;
12759
12760     case M_ROR:
12761       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12762         {
12763           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], op[2]);
12764           break;
12765         }
12766       used_at = 1;
12767       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12768       macro_build (NULL, "sllv", "d,t,s", AT, op[1], AT);
12769       macro_build (NULL, "srlv", "d,t,s", op[0], op[1], op[2]);
12770       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12771       break;
12772
12773     case M_DROR_I:
12774       {
12775         unsigned int rot;
12776         const char *l;
12777         const char *rr;
12778
12779         rot = imm_expr.X_add_number & 0x3f;
12780         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12781           {
12782             if (rot >= 32)
12783               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12784             else
12785               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12786             break;
12787           }
12788         if (rot == 0)
12789           {
12790             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12791             break;
12792           }
12793         rr = (rot < 0x20) ? "dsrl" : "dsrl32";
12794         l = ((0x40 - rot) < 0x20) ? "dsll" : "dsll32";
12795         rot &= 0x1f;
12796         used_at = 1;
12797         macro_build (NULL, rr, SHFT_FMT, AT, op[1], rot);
12798         macro_build (NULL, l, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12799         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12800       }
12801       break;
12802
12803     case M_ROR_I:
12804       {
12805         unsigned int rot;
12806
12807         rot = imm_expr.X_add_number & 0x1f;
12808         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12809           {
12810             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1], rot);
12811             break;
12812           }
12813         if (rot == 0)
12814           {
12815             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
12816             break;
12817           }
12818         used_at = 1;
12819         macro_build (NULL, "srl", SHFT_FMT, AT, op[1], rot);
12820         macro_build (NULL, "sll", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12821         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12822       }
12823       break;
12824
12825     case M_SEQ:
12826       if (op[1] == 0)
12827         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[2], BFD_RELOC_LO16);
12828       else if (op[2] == 0)
12829         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12830       else
12831         {
12832           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
12833           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
12834         }
12835       break;
12836
12837     case M_SEQ_I:
12838       if (imm_expr.X_add_number == 0)
12839         {
12840           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12841           break;
12842         }
12843       if (op[1] == 0)
12844         {
12845           as_warn (_("instruction %s: result is always false"),
12846                    ip->insn_mo->name);
12847           move_register (op[0], 0);
12848           break;
12849         }
12850       if (CPU_HAS_SEQ (mips_opts.arch)
12851           && -512 <= imm_expr.X_add_number
12852           && imm_expr.X_add_number < 512)
12853         {
12854           macro_build (NULL, "seqi", "t,r,+Q", op[0], op[1],
12855                        (int) imm_expr.X_add_number);
12856           break;
12857         }
12858       if (imm_expr.X_add_number >= 0
12859           && imm_expr.X_add_number < 0x10000)
12860         macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1], BFD_RELOC_LO16);
12861       else if (imm_expr.X_add_number > -0x8000
12862                && imm_expr.X_add_number < 0)
12863         {
12864           imm_expr.X_add_number = -imm_expr.X_add_number;
12865           macro_build (&imm_expr, GPR_SIZE == 32 ? "addiu" : "daddiu",
12866                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12867         }
12868       else if (CPU_HAS_SEQ (mips_opts.arch))
12869         {
12870           used_at = 1;
12871           load_register (AT, &imm_expr, GPR_SIZE == 64);
12872           macro_build (NULL, "seq", "d,v,t", op[0], op[1], AT);
12873           break;
12874         }
12875       else
12876         {
12877           load_register (AT, &imm_expr, GPR_SIZE == 64);
12878           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
12879           used_at = 1;
12880         }
12881       macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
12882       break;
12883
12884     case M_SGE:         /* X >= Y  <==>  not (X < Y) */
12885       s = "slt";
12886       goto sge;
12887     case M_SGEU:
12888       s = "sltu";
12889     sge:
12890       macro_build (NULL, s, "d,v,t", op[0], op[1], op[2]);
12891       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12892       break;
12893
12894     case M_SGE_I:       /* X >= I  <==>  not (X < I) */
12895     case M_SGEU_I:
12896       if (imm_expr.X_add_number >= -0x8000
12897           && imm_expr.X_add_number < 0x8000)
12898         macro_build (&imm_expr, mask == M_SGE_I ? "slti" : "sltiu", "t,r,j",
12899                      op[0], op[1], BFD_RELOC_LO16);
12900       else
12901         {
12902           load_register (AT, &imm_expr, GPR_SIZE == 64);
12903           macro_build (NULL, mask == M_SGE_I ? "slt" : "sltu", "d,v,t",
12904                        op[0], op[1], AT);
12905           used_at = 1;
12906         }
12907       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12908       break;
12909
12910     case M_SGT:         /* X > Y  <==>  Y < X */
12911       s = "slt";
12912       goto sgt;
12913     case M_SGTU:
12914       s = "sltu";
12915     sgt:
12916       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
12917       break;
12918
12919     case M_SGT_I:       /* X > I  <==>  I < X */
12920       s = "slt";
12921       goto sgti;
12922     case M_SGTU_I:
12923       s = "sltu";
12924     sgti:
12925       used_at = 1;
12926       load_register (AT, &imm_expr, GPR_SIZE == 64);
12927       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
12928       break;
12929
12930     case M_SLE:         /* X <= Y  <==>  Y >= X  <==>  not (Y < X) */
12931       s = "slt";
12932       goto sle;
12933     case M_SLEU:
12934       s = "sltu";
12935     sle:
12936       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
12937       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12938       break;
12939
12940     case M_SLE_I:       /* X <= I  <==>  I >= X  <==>  not (I < X) */
12941       s = "slt";
12942       goto slei;
12943     case M_SLEU_I:
12944       s = "sltu";
12945     slei:
12946       used_at = 1;
12947       load_register (AT, &imm_expr, GPR_SIZE == 64);
12948       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
12949       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12950       break;
12951
12952     case M_SLT_I:
12953       if (imm_expr.X_add_number >= -0x8000
12954           && imm_expr.X_add_number < 0x8000)
12955         {
12956           macro_build (&imm_expr, "slti", "t,r,j", op[0], op[1],
12957                        BFD_RELOC_LO16);
12958           break;
12959         }
12960       used_at = 1;
12961       load_register (AT, &imm_expr, GPR_SIZE == 64);
12962       macro_build (NULL, "slt", "d,v,t", op[0], op[1], AT);
12963       break;
12964
12965     case M_SLTU_I:
12966       if (imm_expr.X_add_number >= -0x8000
12967           && imm_expr.X_add_number < 0x8000)
12968         {
12969           macro_build (&imm_expr, "sltiu", "t,r,j", op[0], op[1],
12970                        BFD_RELOC_LO16);
12971           break;
12972         }
12973       used_at = 1;
12974       load_register (AT, &imm_expr, GPR_SIZE == 64);
12975       macro_build (NULL, "sltu", "d,v,t", op[0], op[1], AT);
12976       break;
12977
12978     case M_SNE:
12979       if (op[1] == 0)
12980         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[2]);
12981       else if (op[2] == 0)
12982         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
12983       else
12984         {
12985           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
12986           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
12987         }
12988       break;
12989
12990     case M_SNE_I:
12991       if (imm_expr.X_add_number == 0)
12992         {
12993           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
12994           break;
12995         }
12996       if (op[1] == 0)
12997         {
12998           as_warn (_("instruction %s: result is always true"),
12999                    ip->insn_mo->name);
13000           macro_build (&expr1, GPR_SIZE == 32 ? "addiu" : "daddiu", "t,r,j",
13001                        op[0], 0, BFD_RELOC_LO16);
13002           break;
13003         }
13004       if (CPU_HAS_SEQ (mips_opts.arch)
13005           && -512 <= imm_expr.X_add_number
13006           && imm_expr.X_add_number < 512)
13007         {
13008           macro_build (NULL, "snei", "t,r,+Q", op[0], op[1],
13009                        (int) imm_expr.X_add_number);
13010           break;
13011         }
13012       if (imm_expr.X_add_number >= 0
13013           && imm_expr.X_add_number < 0x10000)
13014         {
13015           macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1],
13016                        BFD_RELOC_LO16);
13017         }
13018       else if (imm_expr.X_add_number > -0x8000
13019                && imm_expr.X_add_number < 0)
13020         {
13021           imm_expr.X_add_number = -imm_expr.X_add_number;
13022           macro_build (&imm_expr, GPR_SIZE == 32 ? "addiu" : "daddiu",
13023                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13024         }
13025       else if (CPU_HAS_SEQ (mips_opts.arch))
13026         {
13027           used_at = 1;
13028           load_register (AT, &imm_expr, GPR_SIZE == 64);
13029           macro_build (NULL, "sne", "d,v,t", op[0], op[1], AT);
13030           break;
13031         }
13032       else
13033         {
13034           load_register (AT, &imm_expr, GPR_SIZE == 64);
13035           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
13036           used_at = 1;
13037         }
13038       macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
13039       break;
13040
13041     case M_SUB_I:
13042       s = "addi";
13043       s2 = "sub";
13044       goto do_subi;
13045     case M_SUBU_I:
13046       s = "addiu";
13047       s2 = "subu";
13048       goto do_subi;
13049     case M_DSUB_I:
13050       dbl = 1;
13051       s = "daddi";
13052       s2 = "dsub";
13053       if (!mips_opts.micromips)
13054         goto do_subi;
13055       if (imm_expr.X_add_number > -0x200
13056           && imm_expr.X_add_number <= 0x200)
13057         {
13058           macro_build (NULL, s, "t,r,.", op[0], op[1],
13059                        (int) -imm_expr.X_add_number);
13060           break;
13061         }
13062       goto do_subi_i;
13063     case M_DSUBU_I:
13064       dbl = 1;
13065       s = "daddiu";
13066       s2 = "dsubu";
13067     do_subi:
13068       if (imm_expr.X_add_number > -0x8000
13069           && imm_expr.X_add_number <= 0x8000)
13070         {
13071           imm_expr.X_add_number = -imm_expr.X_add_number;
13072           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
13073           break;
13074         }
13075     do_subi_i:
13076       used_at = 1;
13077       load_register (AT, &imm_expr, dbl);
13078       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
13079       break;
13080
13081     case M_TEQ_I:
13082       s = "teq";
13083       goto trap;
13084     case M_TGE_I:
13085       s = "tge";
13086       goto trap;
13087     case M_TGEU_I:
13088       s = "tgeu";
13089       goto trap;
13090     case M_TLT_I:
13091       s = "tlt";
13092       goto trap;
13093     case M_TLTU_I:
13094       s = "tltu";
13095       goto trap;
13096     case M_TNE_I:
13097       s = "tne";
13098     trap:
13099       used_at = 1;
13100       load_register (AT, &imm_expr, GPR_SIZE == 64);
13101       macro_build (NULL, s, "s,t", op[0], AT);
13102       break;
13103
13104     case M_TRUNCWS:
13105     case M_TRUNCWD:
13106       gas_assert (!mips_opts.micromips);
13107       gas_assert (mips_opts.isa == ISA_MIPS1);
13108       used_at = 1;
13109
13110       /*
13111        * Is the double cfc1 instruction a bug in the mips assembler;
13112        * or is there a reason for it?
13113        */
13114       start_noreorder ();
13115       macro_build (NULL, "cfc1", "t,G", op[2], RA);
13116       macro_build (NULL, "cfc1", "t,G", op[2], RA);
13117       macro_build (NULL, "nop", "");
13118       expr1.X_add_number = 3;
13119       macro_build (&expr1, "ori", "t,r,i", AT, op[2], BFD_RELOC_LO16);
13120       expr1.X_add_number = 2;
13121       macro_build (&expr1, "xori", "t,r,i", AT, AT, BFD_RELOC_LO16);
13122       macro_build (NULL, "ctc1", "t,G", AT, RA);
13123       macro_build (NULL, "nop", "");
13124       macro_build (NULL, mask == M_TRUNCWD ? "cvt.w.d" : "cvt.w.s", "D,S",
13125                    op[0], op[1]);
13126       macro_build (NULL, "ctc1", "t,G", op[2], RA);
13127       macro_build (NULL, "nop", "");
13128       end_noreorder ();
13129       break;
13130
13131     case M_ULH_AB:
13132       s = "lb";
13133       s2 = "lbu";
13134       off = 1;
13135       goto uld_st;
13136     case M_ULHU_AB:
13137       s = "lbu";
13138       s2 = "lbu";
13139       off = 1;
13140       goto uld_st;
13141     case M_ULW_AB:
13142       s = "lwl";
13143       s2 = "lwr";
13144       offbits = (mips_opts.micromips ? 12 : 16);
13145       off = 3;
13146       goto uld_st;
13147     case M_ULD_AB:
13148       s = "ldl";
13149       s2 = "ldr";
13150       offbits = (mips_opts.micromips ? 12 : 16);
13151       off = 7;
13152       goto uld_st;
13153     case M_USH_AB:
13154       s = "sb";
13155       s2 = "sb";
13156       off = 1;
13157       ust = 1;
13158       goto uld_st;
13159     case M_USW_AB:
13160       s = "swl";
13161       s2 = "swr";
13162       offbits = (mips_opts.micromips ? 12 : 16);
13163       off = 3;
13164       ust = 1;
13165       goto uld_st;
13166     case M_USD_AB:
13167       s = "sdl";
13168       s2 = "sdr";
13169       offbits = (mips_opts.micromips ? 12 : 16);
13170       off = 7;
13171       ust = 1;
13172
13173     uld_st:
13174       breg = op[2];
13175       large_offset = !small_offset_p (off, align, offbits);
13176       ep = &offset_expr;
13177       expr1.X_add_number = 0;
13178       if (large_offset)
13179         {
13180           used_at = 1;
13181           tempreg = AT;
13182           if (small_offset_p (0, align, 16))
13183             macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", tempreg, breg, -1,
13184                          offset_reloc[0], offset_reloc[1], offset_reloc[2]);
13185           else
13186             {
13187               load_address (tempreg, ep, &used_at);
13188               if (breg != 0)
13189                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
13190                              tempreg, tempreg, breg);
13191             }
13192           offset_reloc[0] = BFD_RELOC_LO16;
13193           offset_reloc[1] = BFD_RELOC_UNUSED;
13194           offset_reloc[2] = BFD_RELOC_UNUSED;
13195           breg = tempreg;
13196           tempreg = op[0];
13197           ep = &expr1;
13198         }
13199       else if (!ust && op[0] == breg)
13200         {
13201           used_at = 1;
13202           tempreg = AT;
13203         }
13204       else
13205         tempreg = op[0];
13206
13207       if (off == 1)
13208         goto ulh_sh;
13209
13210       if (!target_big_endian)
13211         ep->X_add_number += off;
13212       if (offbits == 12)
13213         macro_build (NULL, s, "t,~(b)", tempreg, (int) ep->X_add_number, breg);
13214       else
13215         macro_build (ep, s, "t,o(b)", tempreg, -1,
13216                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13217
13218       if (!target_big_endian)
13219         ep->X_add_number -= off;
13220       else
13221         ep->X_add_number += off;
13222       if (offbits == 12)
13223         macro_build (NULL, s2, "t,~(b)",
13224                      tempreg, (int) ep->X_add_number, breg);
13225       else
13226         macro_build (ep, s2, "t,o(b)", tempreg, -1,
13227                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13228
13229       /* If necessary, move the result in tempreg to the final destination.  */
13230       if (!ust && op[0] != tempreg)
13231         {
13232           /* Protect second load's delay slot.  */
13233           load_delay_nop ();
13234           move_register (op[0], tempreg);
13235         }
13236       break;
13237
13238     ulh_sh:
13239       used_at = 1;
13240       if (target_big_endian == ust)
13241         ep->X_add_number += off;
13242       tempreg = ust || large_offset ? op[0] : AT;
13243       macro_build (ep, s, "t,o(b)", tempreg, -1,
13244                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13245
13246       /* For halfword transfers we need a temporary register to shuffle
13247          bytes.  Unfortunately for M_USH_A we have none available before
13248          the next store as AT holds the base address.  We deal with this
13249          case by clobbering TREG and then restoring it as with ULH.  */
13250       tempreg = ust == large_offset ? op[0] : AT;
13251       if (ust)
13252         macro_build (NULL, "srl", SHFT_FMT, tempreg, op[0], 8);
13253
13254       if (target_big_endian == ust)
13255         ep->X_add_number -= off;
13256       else
13257         ep->X_add_number += off;
13258       macro_build (ep, s2, "t,o(b)", tempreg, -1,
13259                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
13260
13261       /* For M_USH_A re-retrieve the LSB.  */
13262       if (ust && large_offset)
13263         {
13264           if (target_big_endian)
13265             ep->X_add_number += off;
13266           else
13267             ep->X_add_number -= off;
13268           macro_build (&expr1, "lbu", "t,o(b)", AT, -1,
13269                        offset_reloc[0], offset_reloc[1], offset_reloc[2], AT);
13270         }
13271       /* For ULH and M_USH_A OR the LSB in.  */
13272       if (!ust || large_offset)
13273         {
13274           tempreg = !large_offset ? AT : op[0];
13275           macro_build (NULL, "sll", SHFT_FMT, tempreg, tempreg, 8);
13276           macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
13277         }
13278       break;
13279
13280     default:
13281       /* FIXME: Check if this is one of the itbl macros, since they
13282          are added dynamically.  */
13283       as_bad (_("macro %s not implemented yet"), ip->insn_mo->name);
13284       break;
13285     }
13286   if (!mips_opts.at && used_at)
13287     as_bad (_("macro used $at after \".set noat\""));
13288 }
13289
13290 /* Implement macros in mips16 mode.  */
13291
13292 static void
13293 mips16_macro (struct mips_cl_insn *ip)
13294 {
13295   const struct mips_operand_array *operands;
13296   int mask;
13297   int tmp;
13298   expressionS expr1;
13299   int dbl;
13300   const char *s, *s2, *s3;
13301   unsigned int op[MAX_OPERANDS];
13302   unsigned int i;
13303
13304   mask = ip->insn_mo->mask;
13305
13306   operands = insn_operands (ip);
13307   for (i = 0; i < MAX_OPERANDS; i++)
13308     if (operands->operand[i])
13309       op[i] = insn_extract_operand (ip, operands->operand[i]);
13310     else
13311       op[i] = -1;
13312
13313   expr1.X_op = O_constant;
13314   expr1.X_op_symbol = NULL;
13315   expr1.X_add_symbol = NULL;
13316   expr1.X_add_number = 1;
13317
13318   dbl = 0;
13319
13320   switch (mask)
13321     {
13322     default:
13323       abort ();
13324
13325     case M_DDIV_3:
13326       dbl = 1;
13327     case M_DIV_3:
13328       s = "mflo";
13329       goto do_div3;
13330     case M_DREM_3:
13331       dbl = 1;
13332     case M_REM_3:
13333       s = "mfhi";
13334     do_div3:
13335       start_noreorder ();
13336       macro_build (NULL, dbl ? "ddiv" : "div", "0,x,y", op[1], op[2]);
13337       expr1.X_add_number = 2;
13338       macro_build (&expr1, "bnez", "x,p", op[2]);
13339       macro_build (NULL, "break", "6", 7);
13340
13341       /* FIXME: The normal code checks for of -1 / -0x80000000 here,
13342          since that causes an overflow.  We should do that as well,
13343          but I don't see how to do the comparisons without a temporary
13344          register.  */
13345       end_noreorder ();
13346       macro_build (NULL, s, "x", op[0]);
13347       break;
13348
13349     case M_DIVU_3:
13350       s = "divu";
13351       s2 = "mflo";
13352       goto do_divu3;
13353     case M_REMU_3:
13354       s = "divu";
13355       s2 = "mfhi";
13356       goto do_divu3;
13357     case M_DDIVU_3:
13358       s = "ddivu";
13359       s2 = "mflo";
13360       goto do_divu3;
13361     case M_DREMU_3:
13362       s = "ddivu";
13363       s2 = "mfhi";
13364     do_divu3:
13365       start_noreorder ();
13366       macro_build (NULL, s, "0,x,y", op[1], op[2]);
13367       expr1.X_add_number = 2;
13368       macro_build (&expr1, "bnez", "x,p", op[2]);
13369       macro_build (NULL, "break", "6", 7);
13370       end_noreorder ();
13371       macro_build (NULL, s2, "x", op[0]);
13372       break;
13373
13374     case M_DMUL:
13375       dbl = 1;
13376     case M_MUL:
13377       macro_build (NULL, dbl ? "dmultu" : "multu", "x,y", op[1], op[2]);
13378       macro_build (NULL, "mflo", "x", op[0]);
13379       break;
13380
13381     case M_DSUBU_I:
13382       dbl = 1;
13383       goto do_subu;
13384     case M_SUBU_I:
13385     do_subu:
13386       imm_expr.X_add_number = -imm_expr.X_add_number;
13387       macro_build (&imm_expr, dbl ? "daddiu" : "addiu", "y,x,4", op[0], op[1]);
13388       break;
13389
13390     case M_SUBU_I_2:
13391       imm_expr.X_add_number = -imm_expr.X_add_number;
13392       macro_build (&imm_expr, "addiu", "x,k", op[0]);
13393       break;
13394
13395     case M_DSUBU_I_2:
13396       imm_expr.X_add_number = -imm_expr.X_add_number;
13397       macro_build (&imm_expr, "daddiu", "y,j", op[0]);
13398       break;
13399
13400     case M_BEQ:
13401       s = "cmp";
13402       s2 = "bteqz";
13403       goto do_branch;
13404     case M_BNE:
13405       s = "cmp";
13406       s2 = "btnez";
13407       goto do_branch;
13408     case M_BLT:
13409       s = "slt";
13410       s2 = "btnez";
13411       goto do_branch;
13412     case M_BLTU:
13413       s = "sltu";
13414       s2 = "btnez";
13415       goto do_branch;
13416     case M_BLE:
13417       s = "slt";
13418       s2 = "bteqz";
13419       goto do_reverse_branch;
13420     case M_BLEU:
13421       s = "sltu";
13422       s2 = "bteqz";
13423       goto do_reverse_branch;
13424     case M_BGE:
13425       s = "slt";
13426       s2 = "bteqz";
13427       goto do_branch;
13428     case M_BGEU:
13429       s = "sltu";
13430       s2 = "bteqz";
13431       goto do_branch;
13432     case M_BGT:
13433       s = "slt";
13434       s2 = "btnez";
13435       goto do_reverse_branch;
13436     case M_BGTU:
13437       s = "sltu";
13438       s2 = "btnez";
13439
13440     do_reverse_branch:
13441       tmp = op[1];
13442       op[1] = op[0];
13443       op[0] = tmp;
13444
13445     do_branch:
13446       macro_build (NULL, s, "x,y", op[0], op[1]);
13447       macro_build (&offset_expr, s2, "p");
13448       break;
13449
13450     case M_BEQ_I:
13451       s = "cmpi";
13452       s2 = "bteqz";
13453       s3 = "x,U";
13454       goto do_branch_i;
13455     case M_BNE_I:
13456       s = "cmpi";
13457       s2 = "btnez";
13458       s3 = "x,U";
13459       goto do_branch_i;
13460     case M_BLT_I:
13461       s = "slti";
13462       s2 = "btnez";
13463       s3 = "x,8";
13464       goto do_branch_i;
13465     case M_BLTU_I:
13466       s = "sltiu";
13467       s2 = "btnez";
13468       s3 = "x,8";
13469       goto do_branch_i;
13470     case M_BLE_I:
13471       s = "slti";
13472       s2 = "btnez";
13473       s3 = "x,8";
13474       goto do_addone_branch_i;
13475     case M_BLEU_I:
13476       s = "sltiu";
13477       s2 = "btnez";
13478       s3 = "x,8";
13479       goto do_addone_branch_i;
13480     case M_BGE_I:
13481       s = "slti";
13482       s2 = "bteqz";
13483       s3 = "x,8";
13484       goto do_branch_i;
13485     case M_BGEU_I:
13486       s = "sltiu";
13487       s2 = "bteqz";
13488       s3 = "x,8";
13489       goto do_branch_i;
13490     case M_BGT_I:
13491       s = "slti";
13492       s2 = "bteqz";
13493       s3 = "x,8";
13494       goto do_addone_branch_i;
13495     case M_BGTU_I:
13496       s = "sltiu";
13497       s2 = "bteqz";
13498       s3 = "x,8";
13499
13500     do_addone_branch_i:
13501       ++imm_expr.X_add_number;
13502
13503     do_branch_i:
13504       macro_build (&imm_expr, s, s3, op[0]);
13505       macro_build (&offset_expr, s2, "p");
13506       break;
13507
13508     case M_ABS:
13509       expr1.X_add_number = 0;
13510       macro_build (&expr1, "slti", "x,8", op[1]);
13511       if (op[0] != op[1])
13512         macro_build (NULL, "move", "y,X", op[0], mips16_to_32_reg_map[op[1]]);
13513       expr1.X_add_number = 2;
13514       macro_build (&expr1, "bteqz", "p");
13515       macro_build (NULL, "neg", "x,w", op[0], op[0]);
13516       break;
13517     }
13518 }
13519
13520 /* Look up instruction [START, START + LENGTH) in HASH.  Record any extra
13521    opcode bits in *OPCODE_EXTRA.  */
13522
13523 static struct mips_opcode *
13524 mips_lookup_insn (struct hash_control *hash, const char *start,
13525                   ssize_t length, unsigned int *opcode_extra)
13526 {
13527   char *name, *dot, *p;
13528   unsigned int mask, suffix;
13529   ssize_t opend;
13530   struct mips_opcode *insn;
13531
13532   /* Make a copy of the instruction so that we can fiddle with it.  */
13533   name = xstrndup (start, length);
13534
13535   /* Look up the instruction as-is.  */
13536   insn = (struct mips_opcode *) hash_find (hash, name);
13537   if (insn)
13538     goto end;
13539
13540   dot = strchr (name, '.');
13541   if (dot && dot[1])
13542     {
13543       /* Try to interpret the text after the dot as a VU0 channel suffix.  */
13544       p = mips_parse_vu0_channels (dot + 1, &mask);
13545       if (*p == 0 && mask != 0)
13546         {
13547           *dot = 0;
13548           insn = (struct mips_opcode *) hash_find (hash, name);
13549           *dot = '.';
13550           if (insn && (insn->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0)
13551             {
13552               *opcode_extra |= mask << mips_vu0_channel_mask.lsb;
13553               goto end;
13554             }
13555         }
13556     }
13557
13558   if (mips_opts.micromips)
13559     {
13560       /* See if there's an instruction size override suffix,
13561          either `16' or `32', at the end of the mnemonic proper,
13562          that defines the operation, i.e. before the first `.'
13563          character if any.  Strip it and retry.  */
13564       opend = dot != NULL ? dot - name : length;
13565       if (opend >= 3 && name[opend - 2] == '1' && name[opend - 1] == '6')
13566         suffix = 2;
13567       else if (name[opend - 2] == '3' && name[opend - 1] == '2')
13568         suffix = 4;
13569       else
13570         suffix = 0;
13571       if (suffix)
13572         {
13573           memcpy (name + opend - 2, name + opend, length - opend + 1);
13574           insn = (struct mips_opcode *) hash_find (hash, name);
13575           if (insn)
13576             {
13577               forced_insn_length = suffix;
13578               goto end;
13579             }
13580         }
13581     }
13582
13583   insn = NULL;
13584  end:
13585   free (name);
13586   return insn;
13587 }
13588
13589 /* Assemble an instruction into its binary format.  If the instruction
13590    is a macro, set imm_expr and offset_expr to the values associated
13591    with "I" and "A" operands respectively.  Otherwise store the value
13592    of the relocatable field (if any) in offset_expr.  In both cases
13593    set offset_reloc to the relocation operators applied to offset_expr.  */
13594
13595 static void
13596 mips_ip (char *str, struct mips_cl_insn *insn)
13597 {
13598   const struct mips_opcode *first, *past;
13599   struct hash_control *hash;
13600   char format;
13601   size_t end;
13602   struct mips_operand_token *tokens;
13603   unsigned int opcode_extra;
13604
13605   if (mips_opts.micromips)
13606     {
13607       hash = micromips_op_hash;
13608       past = &micromips_opcodes[bfd_micromips_num_opcodes];
13609     }
13610   else
13611     {
13612       hash = op_hash;
13613       past = &mips_opcodes[NUMOPCODES];
13614     }
13615   forced_insn_length = 0;
13616   opcode_extra = 0;
13617
13618   /* We first try to match an instruction up to a space or to the end.  */
13619   for (end = 0; str[end] != '\0' && !ISSPACE (str[end]); end++)
13620     continue;
13621
13622   first = mips_lookup_insn (hash, str, end, &opcode_extra);
13623   if (first == NULL)
13624     {
13625       set_insn_error (0, _("unrecognized opcode"));
13626       return;
13627     }
13628
13629   if (strcmp (first->name, "li.s") == 0)
13630     format = 'f';
13631   else if (strcmp (first->name, "li.d") == 0)
13632     format = 'd';
13633   else
13634     format = 0;
13635   tokens = mips_parse_arguments (str + end, format);
13636   if (!tokens)
13637     return;
13638
13639   if (!match_insns (insn, first, past, tokens, opcode_extra, FALSE)
13640       && !match_insns (insn, first, past, tokens, opcode_extra, TRUE))
13641     set_insn_error (0, _("invalid operands"));
13642
13643   obstack_free (&mips_operand_tokens, tokens);
13644 }
13645
13646 /* As for mips_ip, but used when assembling MIPS16 code.
13647    Also set forced_insn_length to the resulting instruction size in
13648    bytes if the user explicitly requested a small or extended instruction.  */
13649
13650 static void
13651 mips16_ip (char *str, struct mips_cl_insn *insn)
13652 {
13653   char *end, *s, c;
13654   struct mips_opcode *first;
13655   struct mips_operand_token *tokens;
13656
13657   forced_insn_length = 0;
13658
13659   for (s = str; ISLOWER (*s); ++s)
13660     ;
13661   end = s;
13662   c = *end;
13663   switch (c)
13664     {
13665     case '\0':
13666       break;
13667
13668     case ' ':
13669       s++;
13670       break;
13671
13672     case '.':
13673       if (s[1] == 't' && s[2] == ' ')
13674         {
13675           forced_insn_length = 2;
13676           s += 3;
13677           break;
13678         }
13679       else if (s[1] == 'e' && s[2] == ' ')
13680         {
13681           forced_insn_length = 4;
13682           s += 3;
13683           break;
13684         }
13685       /* Fall through.  */
13686     default:
13687       set_insn_error (0, _("unrecognized opcode"));
13688       return;
13689     }
13690
13691   if (mips_opts.noautoextend && !forced_insn_length)
13692     forced_insn_length = 2;
13693
13694   *end = 0;
13695   first = (struct mips_opcode *) hash_find (mips16_op_hash, str);
13696   *end = c;
13697
13698   if (!first)
13699     {
13700       set_insn_error (0, _("unrecognized opcode"));
13701       return;
13702     }
13703
13704   tokens = mips_parse_arguments (s, 0);
13705   if (!tokens)
13706     return;
13707
13708   if (!match_mips16_insns (insn, first, tokens))
13709     set_insn_error (0, _("invalid operands"));
13710
13711   obstack_free (&mips_operand_tokens, tokens);
13712 }
13713
13714 /* Marshal immediate value VAL for an extended MIPS16 instruction.
13715    NBITS is the number of significant bits in VAL.  */
13716
13717 static unsigned long
13718 mips16_immed_extend (offsetT val, unsigned int nbits)
13719 {
13720   int extval;
13721   if (nbits == 16)
13722     {
13723       extval = ((val >> 11) & 0x1f) | (val & 0x7e0);
13724       val &= 0x1f;
13725     }
13726   else if (nbits == 15)
13727     {
13728       extval = ((val >> 11) & 0xf) | (val & 0x7f0);
13729       val &= 0xf;
13730     }
13731   else
13732     {
13733       extval = ((val & 0x1f) << 6) | (val & 0x20);
13734       val = 0;
13735     }
13736   return (extval << 16) | val;
13737 }
13738
13739 /* Like decode_mips16_operand, but require the operand to be defined and
13740    require it to be an integer.  */
13741
13742 static const struct mips_int_operand *
13743 mips16_immed_operand (int type, bfd_boolean extended_p)
13744 {
13745   const struct mips_operand *operand;
13746
13747   operand = decode_mips16_operand (type, extended_p);
13748   if (!operand || (operand->type != OP_INT && operand->type != OP_PCREL))
13749     abort ();
13750   return (const struct mips_int_operand *) operand;
13751 }
13752
13753 /* Return true if SVAL fits OPERAND.  RELOC is as for mips16_immed.  */
13754
13755 static bfd_boolean
13756 mips16_immed_in_range_p (const struct mips_int_operand *operand,
13757                          bfd_reloc_code_real_type reloc, offsetT sval)
13758 {
13759   int min_val, max_val;
13760
13761   min_val = mips_int_operand_min (operand);
13762   max_val = mips_int_operand_max (operand);
13763   if (reloc != BFD_RELOC_UNUSED)
13764     {
13765       if (min_val < 0)
13766         sval = SEXT_16BIT (sval);
13767       else
13768         sval &= 0xffff;
13769     }
13770
13771   return (sval >= min_val
13772           && sval <= max_val
13773           && (sval & ((1 << operand->shift) - 1)) == 0);
13774 }
13775
13776 /* Install immediate value VAL into MIPS16 instruction *INSN,
13777    extending it if necessary.  The instruction in *INSN may
13778    already be extended.
13779
13780    RELOC is the relocation that produced VAL, or BFD_RELOC_UNUSED
13781    if none.  In the former case, VAL is a 16-bit number with no
13782    defined signedness.
13783
13784    TYPE is the type of the immediate field.  USER_INSN_LENGTH
13785    is the length that the user requested, or 0 if none.  */
13786
13787 static void
13788 mips16_immed (const char *file, unsigned int line, int type,
13789               bfd_reloc_code_real_type reloc, offsetT val,
13790               unsigned int user_insn_length, unsigned long *insn)
13791 {
13792   const struct mips_int_operand *operand;
13793   unsigned int uval, length;
13794
13795   operand = mips16_immed_operand (type, FALSE);
13796   if (!mips16_immed_in_range_p (operand, reloc, val))
13797     {
13798       /* We need an extended instruction.  */
13799       if (user_insn_length == 2)
13800         as_bad_where (file, line, _("invalid unextended operand value"));
13801       else
13802         *insn |= MIPS16_EXTEND;
13803     }
13804   else if (user_insn_length == 4)
13805     {
13806       /* The operand doesn't force an unextended instruction to be extended.
13807          Warn if the user wanted an extended instruction anyway.  */
13808       *insn |= MIPS16_EXTEND;
13809       as_warn_where (file, line,
13810                      _("extended operand requested but not required"));
13811     }
13812
13813   length = mips16_opcode_length (*insn);
13814   if (length == 4)
13815     {
13816       operand = mips16_immed_operand (type, TRUE);
13817       if (!mips16_immed_in_range_p (operand, reloc, val))
13818         as_bad_where (file, line,
13819                       _("operand value out of range for instruction"));
13820     }
13821   uval = ((unsigned int) val >> operand->shift) - operand->bias;
13822   if (length == 2)
13823     *insn = mips_insert_operand (&operand->root, *insn, uval);
13824   else
13825     *insn |= mips16_immed_extend (uval, operand->root.size);
13826 }
13827 \f
13828 struct percent_op_match
13829 {
13830   const char *str;
13831   bfd_reloc_code_real_type reloc;
13832 };
13833
13834 static const struct percent_op_match mips_percent_op[] =
13835 {
13836   {"%lo", BFD_RELOC_LO16},
13837   {"%call_hi", BFD_RELOC_MIPS_CALL_HI16},
13838   {"%call_lo", BFD_RELOC_MIPS_CALL_LO16},
13839   {"%call16", BFD_RELOC_MIPS_CALL16},
13840   {"%got_disp", BFD_RELOC_MIPS_GOT_DISP},
13841   {"%got_page", BFD_RELOC_MIPS_GOT_PAGE},
13842   {"%got_ofst", BFD_RELOC_MIPS_GOT_OFST},
13843   {"%got_hi", BFD_RELOC_MIPS_GOT_HI16},
13844   {"%got_lo", BFD_RELOC_MIPS_GOT_LO16},
13845   {"%got", BFD_RELOC_MIPS_GOT16},
13846   {"%gp_rel", BFD_RELOC_GPREL16},
13847   {"%half", BFD_RELOC_16},
13848   {"%highest", BFD_RELOC_MIPS_HIGHEST},
13849   {"%higher", BFD_RELOC_MIPS_HIGHER},
13850   {"%neg", BFD_RELOC_MIPS_SUB},
13851   {"%tlsgd", BFD_RELOC_MIPS_TLS_GD},
13852   {"%tlsldm", BFD_RELOC_MIPS_TLS_LDM},
13853   {"%dtprel_hi", BFD_RELOC_MIPS_TLS_DTPREL_HI16},
13854   {"%dtprel_lo", BFD_RELOC_MIPS_TLS_DTPREL_LO16},
13855   {"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16},
13856   {"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16},
13857   {"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL},
13858   {"%hi", BFD_RELOC_HI16_S},
13859   {"%pcrel_hi", BFD_RELOC_HI16_S_PCREL},
13860   {"%pcrel_lo", BFD_RELOC_LO16_PCREL}
13861 };
13862
13863 static const struct percent_op_match mips16_percent_op[] =
13864 {
13865   {"%lo", BFD_RELOC_MIPS16_LO16},
13866   {"%gprel", BFD_RELOC_MIPS16_GPREL},
13867   {"%got", BFD_RELOC_MIPS16_GOT16},
13868   {"%call16", BFD_RELOC_MIPS16_CALL16},
13869   {"%hi", BFD_RELOC_MIPS16_HI16_S},
13870   {"%tlsgd", BFD_RELOC_MIPS16_TLS_GD},
13871   {"%tlsldm", BFD_RELOC_MIPS16_TLS_LDM},
13872   {"%dtprel_hi", BFD_RELOC_MIPS16_TLS_DTPREL_HI16},
13873   {"%dtprel_lo", BFD_RELOC_MIPS16_TLS_DTPREL_LO16},
13874   {"%tprel_hi", BFD_RELOC_MIPS16_TLS_TPREL_HI16},
13875   {"%tprel_lo", BFD_RELOC_MIPS16_TLS_TPREL_LO16},
13876   {"%gottprel", BFD_RELOC_MIPS16_TLS_GOTTPREL}
13877 };
13878
13879
13880 /* Return true if *STR points to a relocation operator.  When returning true,
13881    move *STR over the operator and store its relocation code in *RELOC.
13882    Leave both *STR and *RELOC alone when returning false.  */
13883
13884 static bfd_boolean
13885 parse_relocation (char **str, bfd_reloc_code_real_type *reloc)
13886 {
13887   const struct percent_op_match *percent_op;
13888   size_t limit, i;
13889
13890   if (mips_opts.mips16)
13891     {
13892       percent_op = mips16_percent_op;
13893       limit = ARRAY_SIZE (mips16_percent_op);
13894     }
13895   else
13896     {
13897       percent_op = mips_percent_op;
13898       limit = ARRAY_SIZE (mips_percent_op);
13899     }
13900
13901   for (i = 0; i < limit; i++)
13902     if (strncasecmp (*str, percent_op[i].str, strlen (percent_op[i].str)) == 0)
13903       {
13904         int len = strlen (percent_op[i].str);
13905
13906         if (!ISSPACE ((*str)[len]) && (*str)[len] != '(')
13907           continue;
13908
13909         *str += strlen (percent_op[i].str);
13910         *reloc = percent_op[i].reloc;
13911
13912         /* Check whether the output BFD supports this relocation.
13913            If not, issue an error and fall back on something safe.  */
13914         if (!bfd_reloc_type_lookup (stdoutput, percent_op[i].reloc))
13915           {
13916             as_bad (_("relocation %s isn't supported by the current ABI"),
13917                     percent_op[i].str);
13918             *reloc = BFD_RELOC_UNUSED;
13919           }
13920         return TRUE;
13921       }
13922   return FALSE;
13923 }
13924
13925
13926 /* Parse string STR as a 16-bit relocatable operand.  Store the
13927    expression in *EP and the relocations in the array starting
13928    at RELOC.  Return the number of relocation operators used.
13929
13930    On exit, EXPR_END points to the first character after the expression.  */
13931
13932 static size_t
13933 my_getSmallExpression (expressionS *ep, bfd_reloc_code_real_type *reloc,
13934                        char *str)
13935 {
13936   bfd_reloc_code_real_type reversed_reloc[3];
13937   size_t reloc_index, i;
13938   int crux_depth, str_depth;
13939   char *crux;
13940
13941   /* Search for the start of the main expression, recoding relocations
13942      in REVERSED_RELOC.  End the loop with CRUX pointing to the start
13943      of the main expression and with CRUX_DEPTH containing the number
13944      of open brackets at that point.  */
13945   reloc_index = -1;
13946   str_depth = 0;
13947   do
13948     {
13949       reloc_index++;
13950       crux = str;
13951       crux_depth = str_depth;
13952
13953       /* Skip over whitespace and brackets, keeping count of the number
13954          of brackets.  */
13955       while (*str == ' ' || *str == '\t' || *str == '(')
13956         if (*str++ == '(')
13957           str_depth++;
13958     }
13959   while (*str == '%'
13960          && reloc_index < (HAVE_NEWABI ? 3 : 1)
13961          && parse_relocation (&str, &reversed_reloc[reloc_index]));
13962
13963   my_getExpression (ep, crux);
13964   str = expr_end;
13965
13966   /* Match every open bracket.  */
13967   while (crux_depth > 0 && (*str == ')' || *str == ' ' || *str == '\t'))
13968     if (*str++ == ')')
13969       crux_depth--;
13970
13971   if (crux_depth > 0)
13972     as_bad (_("unclosed '('"));
13973
13974   expr_end = str;
13975
13976   if (reloc_index != 0)
13977     {
13978       prev_reloc_op_frag = frag_now;
13979       for (i = 0; i < reloc_index; i++)
13980         reloc[i] = reversed_reloc[reloc_index - 1 - i];
13981     }
13982
13983   return reloc_index;
13984 }
13985
13986 static void
13987 my_getExpression (expressionS *ep, char *str)
13988 {
13989   char *save_in;
13990
13991   save_in = input_line_pointer;
13992   input_line_pointer = str;
13993   expression (ep);
13994   expr_end = input_line_pointer;
13995   input_line_pointer = save_in;
13996 }
13997
13998 const char *
13999 md_atof (int type, char *litP, int *sizeP)
14000 {
14001   return ieee_md_atof (type, litP, sizeP, target_big_endian);
14002 }
14003
14004 void
14005 md_number_to_chars (char *buf, valueT val, int n)
14006 {
14007   if (target_big_endian)
14008     number_to_chars_bigendian (buf, val, n);
14009   else
14010     number_to_chars_littleendian (buf, val, n);
14011 }
14012 \f
14013 static int support_64bit_objects(void)
14014 {
14015   const char **list, **l;
14016   int yes;
14017
14018   list = bfd_target_list ();
14019   for (l = list; *l != NULL; l++)
14020     if (strcmp (*l, ELF_TARGET ("elf64-", "big")) == 0
14021         || strcmp (*l, ELF_TARGET ("elf64-", "little")) == 0)
14022       break;
14023   yes = (*l != NULL);
14024   free (list);
14025   return yes;
14026 }
14027
14028 /* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to
14029    NEW_VALUE.  Warn if another value was already specified.  Note:
14030    we have to defer parsing the -march and -mtune arguments in order
14031    to handle 'from-abi' correctly, since the ABI might be specified
14032    in a later argument.  */
14033
14034 static void
14035 mips_set_option_string (const char **string_ptr, const char *new_value)
14036 {
14037   if (*string_ptr != 0 && strcasecmp (*string_ptr, new_value) != 0)
14038     as_warn (_("a different %s was already specified, is now %s"),
14039              string_ptr == &mips_arch_string ? "-march" : "-mtune",
14040              new_value);
14041
14042   *string_ptr = new_value;
14043 }
14044
14045 int
14046 md_parse_option (int c, const char *arg)
14047 {
14048   unsigned int i;
14049
14050   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
14051     if (c == mips_ases[i].option_on || c == mips_ases[i].option_off)
14052       {
14053         file_ase_explicit |= mips_set_ase (&mips_ases[i], &file_mips_opts,
14054                                            c == mips_ases[i].option_on);
14055         return 1;
14056       }
14057
14058   switch (c)
14059     {
14060     case OPTION_CONSTRUCT_FLOATS:
14061       mips_disable_float_construction = 0;
14062       break;
14063
14064     case OPTION_NO_CONSTRUCT_FLOATS:
14065       mips_disable_float_construction = 1;
14066       break;
14067
14068     case OPTION_TRAP:
14069       mips_trap = 1;
14070       break;
14071
14072     case OPTION_BREAK:
14073       mips_trap = 0;
14074       break;
14075
14076     case OPTION_EB:
14077       target_big_endian = 1;
14078       break;
14079
14080     case OPTION_EL:
14081       target_big_endian = 0;
14082       break;
14083
14084     case 'O':
14085       if (arg == NULL)
14086         mips_optimize = 1;
14087       else if (arg[0] == '0')
14088         mips_optimize = 0;
14089       else if (arg[0] == '1')
14090         mips_optimize = 1;
14091       else
14092         mips_optimize = 2;
14093       break;
14094
14095     case 'g':
14096       if (arg == NULL)
14097         mips_debug = 2;
14098       else
14099         mips_debug = atoi (arg);
14100       break;
14101
14102     case OPTION_MIPS1:
14103       file_mips_opts.isa = ISA_MIPS1;
14104       break;
14105
14106     case OPTION_MIPS2:
14107       file_mips_opts.isa = ISA_MIPS2;
14108       break;
14109
14110     case OPTION_MIPS3:
14111       file_mips_opts.isa = ISA_MIPS3;
14112       break;
14113
14114     case OPTION_MIPS4:
14115       file_mips_opts.isa = ISA_MIPS4;
14116       break;
14117
14118     case OPTION_MIPS5:
14119       file_mips_opts.isa = ISA_MIPS5;
14120       break;
14121
14122     case OPTION_MIPS32:
14123       file_mips_opts.isa = ISA_MIPS32;
14124       break;
14125
14126     case OPTION_MIPS32R2:
14127       file_mips_opts.isa = ISA_MIPS32R2;
14128       break;
14129
14130     case OPTION_MIPS32R3:
14131       file_mips_opts.isa = ISA_MIPS32R3;
14132       break;
14133
14134     case OPTION_MIPS32R5:
14135       file_mips_opts.isa = ISA_MIPS32R5;
14136       break;
14137
14138     case OPTION_MIPS32R6:
14139       file_mips_opts.isa = ISA_MIPS32R6;
14140       break;
14141
14142     case OPTION_MIPS64R2:
14143       file_mips_opts.isa = ISA_MIPS64R2;
14144       break;
14145
14146     case OPTION_MIPS64R3:
14147       file_mips_opts.isa = ISA_MIPS64R3;
14148       break;
14149
14150     case OPTION_MIPS64R5:
14151       file_mips_opts.isa = ISA_MIPS64R5;
14152       break;
14153
14154     case OPTION_MIPS64R6:
14155       file_mips_opts.isa = ISA_MIPS64R6;
14156       break;
14157
14158     case OPTION_MIPS64:
14159       file_mips_opts.isa = ISA_MIPS64;
14160       break;
14161
14162     case OPTION_MTUNE:
14163       mips_set_option_string (&mips_tune_string, arg);
14164       break;
14165
14166     case OPTION_MARCH:
14167       mips_set_option_string (&mips_arch_string, arg);
14168       break;
14169
14170     case OPTION_M4650:
14171       mips_set_option_string (&mips_arch_string, "4650");
14172       mips_set_option_string (&mips_tune_string, "4650");
14173       break;
14174
14175     case OPTION_NO_M4650:
14176       break;
14177
14178     case OPTION_M4010:
14179       mips_set_option_string (&mips_arch_string, "4010");
14180       mips_set_option_string (&mips_tune_string, "4010");
14181       break;
14182
14183     case OPTION_NO_M4010:
14184       break;
14185
14186     case OPTION_M4100:
14187       mips_set_option_string (&mips_arch_string, "4100");
14188       mips_set_option_string (&mips_tune_string, "4100");
14189       break;
14190
14191     case OPTION_NO_M4100:
14192       break;
14193
14194     case OPTION_M3900:
14195       mips_set_option_string (&mips_arch_string, "3900");
14196       mips_set_option_string (&mips_tune_string, "3900");
14197       break;
14198
14199     case OPTION_NO_M3900:
14200       break;
14201
14202     case OPTION_MICROMIPS:
14203       if (file_mips_opts.mips16 == 1)
14204         {
14205           as_bad (_("-mmicromips cannot be used with -mips16"));
14206           return 0;
14207         }
14208       file_mips_opts.micromips = 1;
14209       mips_no_prev_insn ();
14210       break;
14211
14212     case OPTION_NO_MICROMIPS:
14213       file_mips_opts.micromips = 0;
14214       mips_no_prev_insn ();
14215       break;
14216
14217     case OPTION_MIPS16:
14218       if (file_mips_opts.micromips == 1)
14219         {
14220           as_bad (_("-mips16 cannot be used with -micromips"));
14221           return 0;
14222         }
14223       file_mips_opts.mips16 = 1;
14224       mips_no_prev_insn ();
14225       break;
14226
14227     case OPTION_NO_MIPS16:
14228       file_mips_opts.mips16 = 0;
14229       mips_no_prev_insn ();
14230       break;
14231
14232     case OPTION_FIX_24K:
14233       mips_fix_24k = 1;
14234       break;
14235
14236     case OPTION_NO_FIX_24K:
14237       mips_fix_24k = 0;
14238       break;
14239
14240     case OPTION_FIX_RM7000:
14241       mips_fix_rm7000 = 1;
14242       break;
14243
14244     case OPTION_NO_FIX_RM7000:
14245       mips_fix_rm7000 = 0;
14246       break;
14247
14248     case OPTION_FIX_LOONGSON2F_JUMP:
14249       mips_fix_loongson2f_jump = TRUE;
14250       break;
14251
14252     case OPTION_NO_FIX_LOONGSON2F_JUMP:
14253       mips_fix_loongson2f_jump = FALSE;
14254       break;
14255
14256     case OPTION_FIX_LOONGSON2F_NOP:
14257       mips_fix_loongson2f_nop = TRUE;
14258       break;
14259
14260     case OPTION_NO_FIX_LOONGSON2F_NOP:
14261       mips_fix_loongson2f_nop = FALSE;
14262       break;
14263
14264     case OPTION_FIX_VR4120:
14265       mips_fix_vr4120 = 1;
14266       break;
14267
14268     case OPTION_NO_FIX_VR4120:
14269       mips_fix_vr4120 = 0;
14270       break;
14271
14272     case OPTION_FIX_VR4130:
14273       mips_fix_vr4130 = 1;
14274       break;
14275
14276     case OPTION_NO_FIX_VR4130:
14277       mips_fix_vr4130 = 0;
14278       break;
14279
14280     case OPTION_FIX_CN63XXP1:
14281       mips_fix_cn63xxp1 = TRUE;
14282       break;
14283
14284     case OPTION_NO_FIX_CN63XXP1:
14285       mips_fix_cn63xxp1 = FALSE;
14286       break;
14287
14288     case OPTION_RELAX_BRANCH:
14289       mips_relax_branch = 1;
14290       break;
14291
14292     case OPTION_NO_RELAX_BRANCH:
14293       mips_relax_branch = 0;
14294       break;
14295
14296     case OPTION_INSN32:
14297       file_mips_opts.insn32 = TRUE;
14298       break;
14299
14300     case OPTION_NO_INSN32:
14301       file_mips_opts.insn32 = FALSE;
14302       break;
14303
14304     case OPTION_MSHARED:
14305       mips_in_shared = TRUE;
14306       break;
14307
14308     case OPTION_MNO_SHARED:
14309       mips_in_shared = FALSE;
14310       break;
14311
14312     case OPTION_MSYM32:
14313       file_mips_opts.sym32 = TRUE;
14314       break;
14315
14316     case OPTION_MNO_SYM32:
14317       file_mips_opts.sym32 = FALSE;
14318       break;
14319
14320       /* When generating ELF code, we permit -KPIC and -call_shared to
14321          select SVR4_PIC, and -non_shared to select no PIC.  This is
14322          intended to be compatible with Irix 5.  */
14323     case OPTION_CALL_SHARED:
14324       mips_pic = SVR4_PIC;
14325       mips_abicalls = TRUE;
14326       break;
14327
14328     case OPTION_CALL_NONPIC:
14329       mips_pic = NO_PIC;
14330       mips_abicalls = TRUE;
14331       break;
14332
14333     case OPTION_NON_SHARED:
14334       mips_pic = NO_PIC;
14335       mips_abicalls = FALSE;
14336       break;
14337
14338       /* The -xgot option tells the assembler to use 32 bit offsets
14339          when accessing the got in SVR4_PIC mode.  It is for Irix
14340          compatibility.  */
14341     case OPTION_XGOT:
14342       mips_big_got = 1;
14343       break;
14344
14345     case 'G':
14346       g_switch_value = atoi (arg);
14347       g_switch_seen = 1;
14348       break;
14349
14350       /* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
14351          and -mabi=64.  */
14352     case OPTION_32:
14353       mips_abi = O32_ABI;
14354       break;
14355
14356     case OPTION_N32:
14357       mips_abi = N32_ABI;
14358       break;
14359
14360     case OPTION_64:
14361       mips_abi = N64_ABI;
14362       if (!support_64bit_objects())
14363         as_fatal (_("no compiled in support for 64 bit object file format"));
14364       break;
14365
14366     case OPTION_GP32:
14367       file_mips_opts.gp = 32;
14368       break;
14369
14370     case OPTION_GP64:
14371       file_mips_opts.gp = 64;
14372       break;
14373
14374     case OPTION_FP32:
14375       file_mips_opts.fp = 32;
14376       break;
14377
14378     case OPTION_FPXX:
14379       file_mips_opts.fp = 0;
14380       break;
14381
14382     case OPTION_FP64:
14383       file_mips_opts.fp = 64;
14384       break;
14385
14386     case OPTION_ODD_SPREG:
14387       file_mips_opts.oddspreg = 1;
14388       break;
14389
14390     case OPTION_NO_ODD_SPREG:
14391       file_mips_opts.oddspreg = 0;
14392       break;
14393
14394     case OPTION_SINGLE_FLOAT:
14395       file_mips_opts.single_float = 1;
14396       break;
14397
14398     case OPTION_DOUBLE_FLOAT:
14399       file_mips_opts.single_float = 0;
14400       break;
14401
14402     case OPTION_SOFT_FLOAT:
14403       file_mips_opts.soft_float = 1;
14404       break;
14405
14406     case OPTION_HARD_FLOAT:
14407       file_mips_opts.soft_float = 0;
14408       break;
14409
14410     case OPTION_MABI:
14411       if (strcmp (arg, "32") == 0)
14412         mips_abi = O32_ABI;
14413       else if (strcmp (arg, "o64") == 0)
14414         mips_abi = O64_ABI;
14415       else if (strcmp (arg, "n32") == 0)
14416         mips_abi = N32_ABI;
14417       else if (strcmp (arg, "64") == 0)
14418         {
14419           mips_abi = N64_ABI;
14420           if (! support_64bit_objects())
14421             as_fatal (_("no compiled in support for 64 bit object file "
14422                         "format"));
14423         }
14424       else if (strcmp (arg, "eabi") == 0)
14425         mips_abi = EABI_ABI;
14426       else
14427         {
14428           as_fatal (_("invalid abi -mabi=%s"), arg);
14429           return 0;
14430         }
14431       break;
14432
14433     case OPTION_M7000_HILO_FIX:
14434       mips_7000_hilo_fix = TRUE;
14435       break;
14436
14437     case OPTION_MNO_7000_HILO_FIX:
14438       mips_7000_hilo_fix = FALSE;
14439       break;
14440
14441     case OPTION_MDEBUG:
14442       mips_flag_mdebug = TRUE;
14443       break;
14444
14445     case OPTION_NO_MDEBUG:
14446       mips_flag_mdebug = FALSE;
14447       break;
14448
14449     case OPTION_PDR:
14450       mips_flag_pdr = TRUE;
14451       break;
14452
14453     case OPTION_NO_PDR:
14454       mips_flag_pdr = FALSE;
14455       break;
14456
14457     case OPTION_MVXWORKS_PIC:
14458       mips_pic = VXWORKS_PIC;
14459       break;
14460
14461     case OPTION_NAN:
14462       if (strcmp (arg, "2008") == 0)
14463         mips_nan2008 = 1;
14464       else if (strcmp (arg, "legacy") == 0)
14465         mips_nan2008 = 0;
14466       else
14467         {
14468           as_fatal (_("invalid NaN setting -mnan=%s"), arg);
14469           return 0;
14470         }
14471       break;
14472
14473     default:
14474       return 0;
14475     }
14476
14477     mips_fix_loongson2f = mips_fix_loongson2f_nop || mips_fix_loongson2f_jump;
14478
14479   return 1;
14480 }
14481 \f
14482 /* Set up globals to tune for the ISA or processor described by INFO.  */
14483
14484 static void
14485 mips_set_tune (const struct mips_cpu_info *info)
14486 {
14487   if (info != 0)
14488     mips_tune = info->cpu;
14489 }
14490
14491
14492 void
14493 mips_after_parse_args (void)
14494 {
14495   const struct mips_cpu_info *arch_info = 0;
14496   const struct mips_cpu_info *tune_info = 0;
14497
14498   /* GP relative stuff not working for PE */
14499   if (strncmp (TARGET_OS, "pe", 2) == 0)
14500     {
14501       if (g_switch_seen && g_switch_value != 0)
14502         as_bad (_("-G not supported in this configuration"));
14503       g_switch_value = 0;
14504     }
14505
14506   if (mips_abi == NO_ABI)
14507     mips_abi = MIPS_DEFAULT_ABI;
14508
14509   /* The following code determines the architecture.
14510      Similar code was added to GCC 3.3 (see override_options() in
14511      config/mips/mips.c).  The GAS and GCC code should be kept in sync
14512      as much as possible.  */
14513
14514   if (mips_arch_string != 0)
14515     arch_info = mips_parse_cpu ("-march", mips_arch_string);
14516
14517   if (file_mips_opts.isa != ISA_UNKNOWN)
14518     {
14519       /* Handle -mipsN.  At this point, file_mips_opts.isa contains the
14520          ISA level specified by -mipsN, while arch_info->isa contains
14521          the -march selection (if any).  */
14522       if (arch_info != 0)
14523         {
14524           /* -march takes precedence over -mipsN, since it is more descriptive.
14525              There's no harm in specifying both as long as the ISA levels
14526              are the same.  */
14527           if (file_mips_opts.isa != arch_info->isa)
14528             as_bad (_("-%s conflicts with the other architecture options,"
14529                       " which imply -%s"),
14530                     mips_cpu_info_from_isa (file_mips_opts.isa)->name,
14531                     mips_cpu_info_from_isa (arch_info->isa)->name);
14532         }
14533       else
14534         arch_info = mips_cpu_info_from_isa (file_mips_opts.isa);
14535     }
14536
14537   if (arch_info == 0)
14538     {
14539       arch_info = mips_parse_cpu ("default CPU", MIPS_CPU_STRING_DEFAULT);
14540       gas_assert (arch_info);
14541     }
14542
14543   if (ABI_NEEDS_64BIT_REGS (mips_abi) && !ISA_HAS_64BIT_REGS (arch_info->isa))
14544     as_bad (_("-march=%s is not compatible with the selected ABI"),
14545             arch_info->name);
14546
14547   file_mips_opts.arch = arch_info->cpu;
14548   file_mips_opts.isa = arch_info->isa;
14549
14550   /* Set up initial mips_opts state.  */
14551   mips_opts = file_mips_opts;
14552
14553   /* The register size inference code is now placed in
14554      file_mips_check_options.  */
14555
14556   /* Optimize for file_mips_opts.arch, unless -mtune selects a different
14557      processor.  */
14558   if (mips_tune_string != 0)
14559     tune_info = mips_parse_cpu ("-mtune", mips_tune_string);
14560
14561   if (tune_info == 0)
14562     mips_set_tune (arch_info);
14563   else
14564     mips_set_tune (tune_info);
14565
14566   if (mips_flag_mdebug < 0)
14567     mips_flag_mdebug = 0;
14568 }
14569 \f
14570 void
14571 mips_init_after_args (void)
14572 {
14573   /* initialize opcodes */
14574   bfd_mips_num_opcodes = bfd_mips_num_builtin_opcodes;
14575   mips_opcodes = (struct mips_opcode *) mips_builtin_opcodes;
14576 }
14577
14578 long
14579 md_pcrel_from (fixS *fixP)
14580 {
14581   valueT addr = fixP->fx_where + fixP->fx_frag->fr_address;
14582   switch (fixP->fx_r_type)
14583     {
14584     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
14585     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
14586       /* Return the address of the delay slot.  */
14587       return addr + 2;
14588
14589     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
14590     case BFD_RELOC_MICROMIPS_JMP:
14591     case BFD_RELOC_16_PCREL_S2:
14592     case BFD_RELOC_MIPS_21_PCREL_S2:
14593     case BFD_RELOC_MIPS_26_PCREL_S2:
14594     case BFD_RELOC_MIPS_JMP:
14595       /* Return the address of the delay slot.  */
14596       return addr + 4;
14597
14598     default:
14599       return addr;
14600     }
14601 }
14602
14603 /* This is called before the symbol table is processed.  In order to
14604    work with gcc when using mips-tfile, we must keep all local labels.
14605    However, in other cases, we want to discard them.  If we were
14606    called with -g, but we didn't see any debugging information, it may
14607    mean that gcc is smuggling debugging information through to
14608    mips-tfile, in which case we must generate all local labels.  */
14609
14610 void
14611 mips_frob_file_before_adjust (void)
14612 {
14613 #ifndef NO_ECOFF_DEBUGGING
14614   if (ECOFF_DEBUGGING
14615       && mips_debug != 0
14616       && ! ecoff_debugging_seen)
14617     flag_keep_locals = 1;
14618 #endif
14619 }
14620
14621 /* Sort any unmatched HI16 and GOT16 relocs so that they immediately precede
14622    the corresponding LO16 reloc.  This is called before md_apply_fix and
14623    tc_gen_reloc.  Unmatched relocs can only be generated by use of explicit
14624    relocation operators.
14625
14626    For our purposes, a %lo() expression matches a %got() or %hi()
14627    expression if:
14628
14629       (a) it refers to the same symbol; and
14630       (b) the offset applied in the %lo() expression is no lower than
14631           the offset applied in the %got() or %hi().
14632
14633    (b) allows us to cope with code like:
14634
14635         lui     $4,%hi(foo)
14636         lh      $4,%lo(foo+2)($4)
14637
14638    ...which is legal on RELA targets, and has a well-defined behaviour
14639    if the user knows that adding 2 to "foo" will not induce a carry to
14640    the high 16 bits.
14641
14642    When several %lo()s match a particular %got() or %hi(), we use the
14643    following rules to distinguish them:
14644
14645      (1) %lo()s with smaller offsets are a better match than %lo()s with
14646          higher offsets.
14647
14648      (2) %lo()s with no matching %got() or %hi() are better than those
14649          that already have a matching %got() or %hi().
14650
14651      (3) later %lo()s are better than earlier %lo()s.
14652
14653    These rules are applied in order.
14654
14655    (1) means, among other things, that %lo()s with identical offsets are
14656    chosen if they exist.
14657
14658    (2) means that we won't associate several high-part relocations with
14659    the same low-part relocation unless there's no alternative.  Having
14660    several high parts for the same low part is a GNU extension; this rule
14661    allows careful users to avoid it.
14662
14663    (3) is purely cosmetic.  mips_hi_fixup_list is is in reverse order,
14664    with the last high-part relocation being at the front of the list.
14665    It therefore makes sense to choose the last matching low-part
14666    relocation, all other things being equal.  It's also easier
14667    to code that way.  */
14668
14669 void
14670 mips_frob_file (void)
14671 {
14672   struct mips_hi_fixup *l;
14673   bfd_reloc_code_real_type looking_for_rtype = BFD_RELOC_UNUSED;
14674
14675   for (l = mips_hi_fixup_list; l != NULL; l = l->next)
14676     {
14677       segment_info_type *seginfo;
14678       bfd_boolean matched_lo_p;
14679       fixS **hi_pos, **lo_pos, **pos;
14680
14681       gas_assert (reloc_needs_lo_p (l->fixp->fx_r_type));
14682
14683       /* If a GOT16 relocation turns out to be against a global symbol,
14684          there isn't supposed to be a matching LO.  Ignore %gots against
14685          constants; we'll report an error for those later.  */
14686       if (got16_reloc_p (l->fixp->fx_r_type)
14687           && !(l->fixp->fx_addsy
14688                && pic_need_relax (l->fixp->fx_addsy, l->seg)))
14689         continue;
14690
14691       /* Check quickly whether the next fixup happens to be a matching %lo.  */
14692       if (fixup_has_matching_lo_p (l->fixp))
14693         continue;
14694
14695       seginfo = seg_info (l->seg);
14696
14697       /* Set HI_POS to the position of this relocation in the chain.
14698          Set LO_POS to the position of the chosen low-part relocation.
14699          MATCHED_LO_P is true on entry to the loop if *POS is a low-part
14700          relocation that matches an immediately-preceding high-part
14701          relocation.  */
14702       hi_pos = NULL;
14703       lo_pos = NULL;
14704       matched_lo_p = FALSE;
14705       looking_for_rtype = matching_lo_reloc (l->fixp->fx_r_type);
14706
14707       for (pos = &seginfo->fix_root; *pos != NULL; pos = &(*pos)->fx_next)
14708         {
14709           if (*pos == l->fixp)
14710             hi_pos = pos;
14711
14712           if ((*pos)->fx_r_type == looking_for_rtype
14713               && symbol_same_p ((*pos)->fx_addsy, l->fixp->fx_addsy)
14714               && (*pos)->fx_offset >= l->fixp->fx_offset
14715               && (lo_pos == NULL
14716                   || (*pos)->fx_offset < (*lo_pos)->fx_offset
14717                   || (!matched_lo_p
14718                       && (*pos)->fx_offset == (*lo_pos)->fx_offset)))
14719             lo_pos = pos;
14720
14721           matched_lo_p = (reloc_needs_lo_p ((*pos)->fx_r_type)
14722                           && fixup_has_matching_lo_p (*pos));
14723         }
14724
14725       /* If we found a match, remove the high-part relocation from its
14726          current position and insert it before the low-part relocation.
14727          Make the offsets match so that fixup_has_matching_lo_p()
14728          will return true.
14729
14730          We don't warn about unmatched high-part relocations since some
14731          versions of gcc have been known to emit dead "lui ...%hi(...)"
14732          instructions.  */
14733       if (lo_pos != NULL)
14734         {
14735           l->fixp->fx_offset = (*lo_pos)->fx_offset;
14736           if (l->fixp->fx_next != *lo_pos)
14737             {
14738               *hi_pos = l->fixp->fx_next;
14739               l->fixp->fx_next = *lo_pos;
14740               *lo_pos = l->fixp;
14741             }
14742         }
14743     }
14744 }
14745
14746 int
14747 mips_force_relocation (fixS *fixp)
14748 {
14749   if (generic_force_reloc (fixp))
14750     return 1;
14751
14752   /* We want to keep BFD_RELOC_MICROMIPS_*_PCREL_S1 relocation,
14753      so that the linker relaxation can update targets.  */
14754   if (fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
14755       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
14756       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1)
14757     return 1;
14758
14759   /* We want all PC-relative relocations to be kept for R6 relaxation.  */
14760   if (ISA_IS_R6 (mips_opts.isa)
14761       && (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
14762           || fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
14763           || fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2
14764           || fixp->fx_r_type == BFD_RELOC_MIPS_18_PCREL_S3
14765           || fixp->fx_r_type == BFD_RELOC_MIPS_19_PCREL_S2
14766           || fixp->fx_r_type == BFD_RELOC_HI16_S_PCREL
14767           || fixp->fx_r_type == BFD_RELOC_LO16_PCREL))
14768     return 1;
14769
14770   return 0;
14771 }
14772
14773 /* Read the instruction associated with RELOC from BUF.  */
14774
14775 static unsigned int
14776 read_reloc_insn (char *buf, bfd_reloc_code_real_type reloc)
14777 {
14778   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
14779     return read_compressed_insn (buf, 4);
14780   else
14781     return read_insn (buf);
14782 }
14783
14784 /* Write instruction INSN to BUF, given that it has been relocated
14785    by RELOC.  */
14786
14787 static void
14788 write_reloc_insn (char *buf, bfd_reloc_code_real_type reloc,
14789                   unsigned long insn)
14790 {
14791   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
14792     write_compressed_insn (buf, insn, 4);
14793   else
14794     write_insn (buf, insn);
14795 }
14796
14797 /* Apply a fixup to the object file.  */
14798
14799 void
14800 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
14801 {
14802   char *buf;
14803   unsigned long insn;
14804   reloc_howto_type *howto;
14805
14806   if (fixP->fx_pcrel)
14807     switch (fixP->fx_r_type)
14808       {
14809       case BFD_RELOC_16_PCREL_S2:
14810       case BFD_RELOC_MICROMIPS_7_PCREL_S1:
14811       case BFD_RELOC_MICROMIPS_10_PCREL_S1:
14812       case BFD_RELOC_MICROMIPS_16_PCREL_S1:
14813       case BFD_RELOC_32_PCREL:
14814       case BFD_RELOC_MIPS_21_PCREL_S2:
14815       case BFD_RELOC_MIPS_26_PCREL_S2:
14816       case BFD_RELOC_MIPS_18_PCREL_S3:
14817       case BFD_RELOC_MIPS_19_PCREL_S2:
14818       case BFD_RELOC_HI16_S_PCREL:
14819       case BFD_RELOC_LO16_PCREL:
14820         break;
14821
14822       case BFD_RELOC_32:
14823         fixP->fx_r_type = BFD_RELOC_32_PCREL;
14824         break;
14825
14826       default:
14827         as_bad_where (fixP->fx_file, fixP->fx_line,
14828                       _("PC-relative reference to a different section"));
14829         break;
14830       }
14831
14832   /* Handle BFD_RELOC_8, since it's easy.  Punt on other bfd relocations
14833      that have no MIPS ELF equivalent.  */
14834   if (fixP->fx_r_type != BFD_RELOC_8)
14835     {
14836       howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
14837       if (!howto)
14838         return;
14839     }
14840
14841   gas_assert (fixP->fx_size == 2
14842               || fixP->fx_size == 4
14843               || fixP->fx_r_type == BFD_RELOC_8
14844               || fixP->fx_r_type == BFD_RELOC_16
14845               || fixP->fx_r_type == BFD_RELOC_64
14846               || fixP->fx_r_type == BFD_RELOC_CTOR
14847               || fixP->fx_r_type == BFD_RELOC_MIPS_SUB
14848               || fixP->fx_r_type == BFD_RELOC_MICROMIPS_SUB
14849               || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
14850               || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY
14851               || fixP->fx_r_type == BFD_RELOC_MIPS_TLS_DTPREL64
14852               || fixP->fx_r_type == BFD_RELOC_NONE);
14853
14854   buf = fixP->fx_frag->fr_literal + fixP->fx_where;
14855
14856   /* Don't treat parts of a composite relocation as done.  There are two
14857      reasons for this:
14858
14859      (1) The second and third parts will be against 0 (RSS_UNDEF) but
14860          should nevertheless be emitted if the first part is.
14861
14862      (2) In normal usage, composite relocations are never assembly-time
14863          constants.  The easiest way of dealing with the pathological
14864          exceptions is to generate a relocation against STN_UNDEF and
14865          leave everything up to the linker.  */
14866   if (fixP->fx_addsy == NULL && !fixP->fx_pcrel && fixP->fx_tcbit == 0)
14867     fixP->fx_done = 1;
14868
14869   switch (fixP->fx_r_type)
14870     {
14871     case BFD_RELOC_MIPS_TLS_GD:
14872     case BFD_RELOC_MIPS_TLS_LDM:
14873     case BFD_RELOC_MIPS_TLS_DTPREL32:
14874     case BFD_RELOC_MIPS_TLS_DTPREL64:
14875     case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
14876     case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
14877     case BFD_RELOC_MIPS_TLS_GOTTPREL:
14878     case BFD_RELOC_MIPS_TLS_TPREL32:
14879     case BFD_RELOC_MIPS_TLS_TPREL64:
14880     case BFD_RELOC_MIPS_TLS_TPREL_HI16:
14881     case BFD_RELOC_MIPS_TLS_TPREL_LO16:
14882     case BFD_RELOC_MICROMIPS_TLS_GD:
14883     case BFD_RELOC_MICROMIPS_TLS_LDM:
14884     case BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16:
14885     case BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16:
14886     case BFD_RELOC_MICROMIPS_TLS_GOTTPREL:
14887     case BFD_RELOC_MICROMIPS_TLS_TPREL_HI16:
14888     case BFD_RELOC_MICROMIPS_TLS_TPREL_LO16:
14889     case BFD_RELOC_MIPS16_TLS_GD:
14890     case BFD_RELOC_MIPS16_TLS_LDM:
14891     case BFD_RELOC_MIPS16_TLS_DTPREL_HI16:
14892     case BFD_RELOC_MIPS16_TLS_DTPREL_LO16:
14893     case BFD_RELOC_MIPS16_TLS_GOTTPREL:
14894     case BFD_RELOC_MIPS16_TLS_TPREL_HI16:
14895     case BFD_RELOC_MIPS16_TLS_TPREL_LO16:
14896       if (!fixP->fx_addsy)
14897         {
14898           as_bad_where (fixP->fx_file, fixP->fx_line,
14899                         _("TLS relocation against a constant"));
14900           break;
14901         }
14902       S_SET_THREAD_LOCAL (fixP->fx_addsy);
14903       /* fall through */
14904
14905     case BFD_RELOC_MIPS_JMP:
14906     case BFD_RELOC_MIPS_SHIFT5:
14907     case BFD_RELOC_MIPS_SHIFT6:
14908     case BFD_RELOC_MIPS_GOT_DISP:
14909     case BFD_RELOC_MIPS_GOT_PAGE:
14910     case BFD_RELOC_MIPS_GOT_OFST:
14911     case BFD_RELOC_MIPS_SUB:
14912     case BFD_RELOC_MIPS_INSERT_A:
14913     case BFD_RELOC_MIPS_INSERT_B:
14914     case BFD_RELOC_MIPS_DELETE:
14915     case BFD_RELOC_MIPS_HIGHEST:
14916     case BFD_RELOC_MIPS_HIGHER:
14917     case BFD_RELOC_MIPS_SCN_DISP:
14918     case BFD_RELOC_MIPS_REL16:
14919     case BFD_RELOC_MIPS_RELGOT:
14920     case BFD_RELOC_MIPS_JALR:
14921     case BFD_RELOC_HI16:
14922     case BFD_RELOC_HI16_S:
14923     case BFD_RELOC_LO16:
14924     case BFD_RELOC_GPREL16:
14925     case BFD_RELOC_MIPS_LITERAL:
14926     case BFD_RELOC_MIPS_CALL16:
14927     case BFD_RELOC_MIPS_GOT16:
14928     case BFD_RELOC_GPREL32:
14929     case BFD_RELOC_MIPS_GOT_HI16:
14930     case BFD_RELOC_MIPS_GOT_LO16:
14931     case BFD_RELOC_MIPS_CALL_HI16:
14932     case BFD_RELOC_MIPS_CALL_LO16:
14933     case BFD_RELOC_MIPS16_GPREL:
14934     case BFD_RELOC_MIPS16_GOT16:
14935     case BFD_RELOC_MIPS16_CALL16:
14936     case BFD_RELOC_MIPS16_HI16:
14937     case BFD_RELOC_MIPS16_HI16_S:
14938     case BFD_RELOC_MIPS16_LO16:
14939     case BFD_RELOC_MIPS16_JMP:
14940     case BFD_RELOC_MICROMIPS_JMP:
14941     case BFD_RELOC_MICROMIPS_GOT_DISP:
14942     case BFD_RELOC_MICROMIPS_GOT_PAGE:
14943     case BFD_RELOC_MICROMIPS_GOT_OFST:
14944     case BFD_RELOC_MICROMIPS_SUB:
14945     case BFD_RELOC_MICROMIPS_HIGHEST:
14946     case BFD_RELOC_MICROMIPS_HIGHER:
14947     case BFD_RELOC_MICROMIPS_SCN_DISP:
14948     case BFD_RELOC_MICROMIPS_JALR:
14949     case BFD_RELOC_MICROMIPS_HI16:
14950     case BFD_RELOC_MICROMIPS_HI16_S:
14951     case BFD_RELOC_MICROMIPS_LO16:
14952     case BFD_RELOC_MICROMIPS_GPREL16:
14953     case BFD_RELOC_MICROMIPS_LITERAL:
14954     case BFD_RELOC_MICROMIPS_CALL16:
14955     case BFD_RELOC_MICROMIPS_GOT16:
14956     case BFD_RELOC_MICROMIPS_GOT_HI16:
14957     case BFD_RELOC_MICROMIPS_GOT_LO16:
14958     case BFD_RELOC_MICROMIPS_CALL_HI16:
14959     case BFD_RELOC_MICROMIPS_CALL_LO16:
14960     case BFD_RELOC_MIPS_EH:
14961       if (fixP->fx_done)
14962         {
14963           offsetT value;
14964
14965           if (calculate_reloc (fixP->fx_r_type, *valP, &value))
14966             {
14967               insn = read_reloc_insn (buf, fixP->fx_r_type);
14968               if (mips16_reloc_p (fixP->fx_r_type))
14969                 insn |= mips16_immed_extend (value, 16);
14970               else
14971                 insn |= (value & 0xffff);
14972               write_reloc_insn (buf, fixP->fx_r_type, insn);
14973             }
14974           else
14975             as_bad_where (fixP->fx_file, fixP->fx_line,
14976                           _("unsupported constant in relocation"));
14977         }
14978       break;
14979
14980     case BFD_RELOC_64:
14981       /* This is handled like BFD_RELOC_32, but we output a sign
14982          extended value if we are only 32 bits.  */
14983       if (fixP->fx_done)
14984         {
14985           if (8 <= sizeof (valueT))
14986             md_number_to_chars (buf, *valP, 8);
14987           else
14988             {
14989               valueT hiv;
14990
14991               if ((*valP & 0x80000000) != 0)
14992                 hiv = 0xffffffff;
14993               else
14994                 hiv = 0;
14995               md_number_to_chars (buf + (target_big_endian ? 4 : 0), *valP, 4);
14996               md_number_to_chars (buf + (target_big_endian ? 0 : 4), hiv, 4);
14997             }
14998         }
14999       break;
15000
15001     case BFD_RELOC_RVA:
15002     case BFD_RELOC_32:
15003     case BFD_RELOC_32_PCREL:
15004     case BFD_RELOC_16:
15005     case BFD_RELOC_8:
15006       /* If we are deleting this reloc entry, we must fill in the
15007          value now.  This can happen if we have a .word which is not
15008          resolved when it appears but is later defined.  */
15009       if (fixP->fx_done)
15010         md_number_to_chars (buf, *valP, fixP->fx_size);
15011       break;
15012
15013     case BFD_RELOC_MIPS_21_PCREL_S2:
15014     case BFD_RELOC_MIPS_26_PCREL_S2:
15015       if ((*valP & 0x3) != 0)
15016         as_bad_where (fixP->fx_file, fixP->fx_line,
15017                       _("branch to misaligned address (%lx)"), (long) *valP);
15018
15019       gas_assert (!fixP->fx_done);
15020       break;
15021
15022     case BFD_RELOC_MIPS_18_PCREL_S3:
15023       if ((S_GET_VALUE (fixP->fx_addsy) & 0x7) != 0)
15024         as_bad_where (fixP->fx_file, fixP->fx_line,
15025                       _("PC-relative access using misaligned symbol (%lx)"),
15026                       (long) S_GET_VALUE (fixP->fx_addsy));
15027       if ((fixP->fx_offset & 0x7) != 0)
15028         as_bad_where (fixP->fx_file, fixP->fx_line,
15029                       _("PC-relative access using misaligned offset (%lx)"),
15030                       (long) fixP->fx_offset);
15031
15032       gas_assert (!fixP->fx_done);
15033       break;
15034
15035     case BFD_RELOC_MIPS_19_PCREL_S2:
15036       if ((*valP & 0x3) != 0)
15037         as_bad_where (fixP->fx_file, fixP->fx_line,
15038                       _("PC-relative access to misaligned address (%lx)"),
15039                       (long) (S_GET_VALUE (fixP->fx_addsy) + fixP->fx_offset));
15040
15041       gas_assert (!fixP->fx_done);
15042       break;
15043
15044     case BFD_RELOC_HI16_S_PCREL:
15045     case BFD_RELOC_LO16_PCREL:
15046       gas_assert (!fixP->fx_done);
15047       break;
15048
15049     case BFD_RELOC_16_PCREL_S2:
15050       if ((*valP & 0x3) != 0)
15051         as_bad_where (fixP->fx_file, fixP->fx_line,
15052                       _("branch to misaligned address (%lx)"), (long) *valP);
15053
15054       /* We need to save the bits in the instruction since fixup_segment()
15055          might be deleting the relocation entry (i.e., a branch within
15056          the current segment).  */
15057       if (! fixP->fx_done)
15058         break;
15059
15060       /* Update old instruction data.  */
15061       insn = read_insn (buf);
15062
15063       if (*valP + 0x20000 <= 0x3ffff)
15064         {
15065           insn |= (*valP >> 2) & 0xffff;
15066           write_insn (buf, insn);
15067         }
15068       else if (mips_pic == NO_PIC
15069                && fixP->fx_done
15070                && fixP->fx_frag->fr_address >= text_section->vma
15071                && (fixP->fx_frag->fr_address
15072                    < text_section->vma + bfd_get_section_size (text_section))
15073                && ((insn & 0xffff0000) == 0x10000000     /* beq $0,$0 */
15074                    || (insn & 0xffff0000) == 0x04010000  /* bgez $0 */
15075                    || (insn & 0xffff0000) == 0x04110000)) /* bgezal $0 */
15076         {
15077           /* The branch offset is too large.  If this is an
15078              unconditional branch, and we are not generating PIC code,
15079              we can convert it to an absolute jump instruction.  */
15080           if ((insn & 0xffff0000) == 0x04110000)         /* bgezal $0 */
15081             insn = 0x0c000000;  /* jal */
15082           else
15083             insn = 0x08000000;  /* j */
15084           fixP->fx_r_type = BFD_RELOC_MIPS_JMP;
15085           fixP->fx_done = 0;
15086           fixP->fx_addsy = section_symbol (text_section);
15087           *valP += md_pcrel_from (fixP);
15088           write_insn (buf, insn);
15089         }
15090       else
15091         {
15092           /* If we got here, we have branch-relaxation disabled,
15093              and there's nothing we can do to fix this instruction
15094              without turning it into a longer sequence.  */
15095           as_bad_where (fixP->fx_file, fixP->fx_line,
15096                         _("branch out of range"));
15097         }
15098       break;
15099
15100     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
15101     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
15102     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
15103       /* We adjust the offset back to even.  */
15104       if ((*valP & 0x1) != 0)
15105         --(*valP);
15106
15107       if (! fixP->fx_done)
15108         break;
15109
15110       /* Should never visit here, because we keep the relocation.  */
15111       abort ();
15112       break;
15113
15114     case BFD_RELOC_VTABLE_INHERIT:
15115       fixP->fx_done = 0;
15116       if (fixP->fx_addsy
15117           && !S_IS_DEFINED (fixP->fx_addsy)
15118           && !S_IS_WEAK (fixP->fx_addsy))
15119         S_SET_WEAK (fixP->fx_addsy);
15120       break;
15121
15122     case BFD_RELOC_NONE:
15123     case BFD_RELOC_VTABLE_ENTRY:
15124       fixP->fx_done = 0;
15125       break;
15126
15127     default:
15128       abort ();
15129     }
15130
15131   /* Remember value for tc_gen_reloc.  */
15132   fixP->fx_addnumber = *valP;
15133 }
15134
15135 static symbolS *
15136 get_symbol (void)
15137 {
15138   int c;
15139   char *name;
15140   symbolS *p;
15141
15142   c = get_symbol_name (&name);
15143   p = (symbolS *) symbol_find_or_make (name);
15144   (void) restore_line_pointer (c);
15145   return p;
15146 }
15147
15148 /* Align the current frag to a given power of two.  If a particular
15149    fill byte should be used, FILL points to an integer that contains
15150    that byte, otherwise FILL is null.
15151
15152    This function used to have the comment:
15153
15154       The MIPS assembler also automatically adjusts any preceding label.
15155
15156    The implementation therefore applied the adjustment to a maximum of
15157    one label.  However, other label adjustments are applied to batches
15158    of labels, and adjusting just one caused problems when new labels
15159    were added for the sake of debugging or unwind information.
15160    We therefore adjust all preceding labels (given as LABELS) instead.  */
15161
15162 static void
15163 mips_align (int to, int *fill, struct insn_label_list *labels)
15164 {
15165   mips_emit_delays ();
15166   mips_record_compressed_mode ();
15167   if (fill == NULL && subseg_text_p (now_seg))
15168     frag_align_code (to, 0);
15169   else
15170     frag_align (to, fill ? *fill : 0, 0);
15171   record_alignment (now_seg, to);
15172   mips_move_labels (labels, FALSE);
15173 }
15174
15175 /* Align to a given power of two.  .align 0 turns off the automatic
15176    alignment used by the data creating pseudo-ops.  */
15177
15178 static void
15179 s_align (int x ATTRIBUTE_UNUSED)
15180 {
15181   int temp, fill_value, *fill_ptr;
15182   long max_alignment = 28;
15183
15184   /* o Note that the assembler pulls down any immediately preceding label
15185        to the aligned address.
15186      o It's not documented but auto alignment is reinstated by
15187        a .align pseudo instruction.
15188      o Note also that after auto alignment is turned off the mips assembler
15189        issues an error on attempt to assemble an improperly aligned data item.
15190        We don't.  */
15191
15192   temp = get_absolute_expression ();
15193   if (temp > max_alignment)
15194     as_bad (_("alignment too large, %d assumed"), temp = max_alignment);
15195   else if (temp < 0)
15196     {
15197       as_warn (_("alignment negative, 0 assumed"));
15198       temp = 0;
15199     }
15200   if (*input_line_pointer == ',')
15201     {
15202       ++input_line_pointer;
15203       fill_value = get_absolute_expression ();
15204       fill_ptr = &fill_value;
15205     }
15206   else
15207     fill_ptr = 0;
15208   if (temp)
15209     {
15210       segment_info_type *si = seg_info (now_seg);
15211       struct insn_label_list *l = si->label_list;
15212       /* Auto alignment should be switched on by next section change.  */
15213       auto_align = 1;
15214       mips_align (temp, fill_ptr, l);
15215     }
15216   else
15217     {
15218       auto_align = 0;
15219     }
15220
15221   demand_empty_rest_of_line ();
15222 }
15223
15224 static void
15225 s_change_sec (int sec)
15226 {
15227   segT seg;
15228
15229   /* The ELF backend needs to know that we are changing sections, so
15230      that .previous works correctly.  We could do something like check
15231      for an obj_section_change_hook macro, but that might be confusing
15232      as it would not be appropriate to use it in the section changing
15233      functions in read.c, since obj-elf.c intercepts those.  FIXME:
15234      This should be cleaner, somehow.  */
15235   obj_elf_section_change_hook ();
15236
15237   mips_emit_delays ();
15238
15239   switch (sec)
15240     {
15241     case 't':
15242       s_text (0);
15243       break;
15244     case 'd':
15245       s_data (0);
15246       break;
15247     case 'b':
15248       subseg_set (bss_section, (subsegT) get_absolute_expression ());
15249       demand_empty_rest_of_line ();
15250       break;
15251
15252     case 'r':
15253       seg = subseg_new (RDATA_SECTION_NAME,
15254                         (subsegT) get_absolute_expression ());
15255       bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
15256                                               | SEC_READONLY | SEC_RELOC
15257                                               | SEC_DATA));
15258       if (strncmp (TARGET_OS, "elf", 3) != 0)
15259         record_alignment (seg, 4);
15260       demand_empty_rest_of_line ();
15261       break;
15262
15263     case 's':
15264       seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
15265       bfd_set_section_flags (stdoutput, seg,
15266                              SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
15267       if (strncmp (TARGET_OS, "elf", 3) != 0)
15268         record_alignment (seg, 4);
15269       demand_empty_rest_of_line ();
15270       break;
15271
15272     case 'B':
15273       seg = subseg_new (".sbss", (subsegT) get_absolute_expression ());
15274       bfd_set_section_flags (stdoutput, seg, SEC_ALLOC);
15275       if (strncmp (TARGET_OS, "elf", 3) != 0)
15276         record_alignment (seg, 4);
15277       demand_empty_rest_of_line ();
15278       break;
15279     }
15280
15281   auto_align = 1;
15282 }
15283
15284 void
15285 s_change_section (int ignore ATTRIBUTE_UNUSED)
15286 {
15287   char *saved_ilp;
15288   char *section_name;
15289   char c, endc;
15290   char next_c = 0;
15291   int section_type;
15292   int section_flag;
15293   int section_entry_size;
15294   int section_alignment;
15295
15296   saved_ilp = input_line_pointer;
15297   endc = get_symbol_name (&section_name);
15298   c = (endc == '"' ? input_line_pointer[1] : endc);
15299   if (c)
15300     next_c = input_line_pointer [(endc == '"' ? 2 : 1)];
15301
15302   /* Do we have .section Name<,"flags">?  */
15303   if (c != ',' || (c == ',' && next_c == '"'))
15304     {
15305       /* Just after name is now '\0'.  */
15306       (void) restore_line_pointer (endc);
15307       input_line_pointer = saved_ilp;
15308       obj_elf_section (ignore);
15309       return;
15310     }
15311
15312   section_name = xstrdup (section_name);
15313   c = restore_line_pointer (endc);
15314
15315   input_line_pointer++;
15316
15317   /* Do we have .section Name<,type><,flag><,entry_size><,alignment>  */
15318   if (c == ',')
15319     section_type = get_absolute_expression ();
15320   else
15321     section_type = 0;
15322
15323   if (*input_line_pointer++ == ',')
15324     section_flag = get_absolute_expression ();
15325   else
15326     section_flag = 0;
15327
15328   if (*input_line_pointer++ == ',')
15329     section_entry_size = get_absolute_expression ();
15330   else
15331     section_entry_size = 0;
15332
15333   if (*input_line_pointer++ == ',')
15334     section_alignment = get_absolute_expression ();
15335   else
15336     section_alignment = 0;
15337
15338   /* FIXME: really ignore?  */
15339   (void) section_alignment;
15340
15341   /* When using the generic form of .section (as implemented by obj-elf.c),
15342      there's no way to set the section type to SHT_MIPS_DWARF.  Users have
15343      traditionally had to fall back on the more common @progbits instead.
15344
15345      There's nothing really harmful in this, since bfd will correct
15346      SHT_PROGBITS to SHT_MIPS_DWARF before writing out the file.  But it
15347      means that, for backwards compatibility, the special_section entries
15348      for dwarf sections must use SHT_PROGBITS rather than SHT_MIPS_DWARF.
15349
15350      Even so, we shouldn't force users of the MIPS .section syntax to
15351      incorrectly label the sections as SHT_PROGBITS.  The best compromise
15352      seems to be to map SHT_MIPS_DWARF to SHT_PROGBITS before calling the
15353      generic type-checking code.  */
15354   if (section_type == SHT_MIPS_DWARF)
15355     section_type = SHT_PROGBITS;
15356
15357   obj_elf_change_section (section_name, section_type, section_flag,
15358                           section_entry_size, 0, 0, 0);
15359
15360   if (now_seg->name != section_name)
15361     free (section_name);
15362 }
15363
15364 void
15365 mips_enable_auto_align (void)
15366 {
15367   auto_align = 1;
15368 }
15369
15370 static void
15371 s_cons (int log_size)
15372 {
15373   segment_info_type *si = seg_info (now_seg);
15374   struct insn_label_list *l = si->label_list;
15375
15376   mips_emit_delays ();
15377   if (log_size > 0 && auto_align)
15378     mips_align (log_size, 0, l);
15379   cons (1 << log_size);
15380   mips_clear_insn_labels ();
15381 }
15382
15383 static void
15384 s_float_cons (int type)
15385 {
15386   segment_info_type *si = seg_info (now_seg);
15387   struct insn_label_list *l = si->label_list;
15388
15389   mips_emit_delays ();
15390
15391   if (auto_align)
15392     {
15393       if (type == 'd')
15394         mips_align (3, 0, l);
15395       else
15396         mips_align (2, 0, l);
15397     }
15398
15399   float_cons (type);
15400   mips_clear_insn_labels ();
15401 }
15402
15403 /* Handle .globl.  We need to override it because on Irix 5 you are
15404    permitted to say
15405        .globl foo .text
15406    where foo is an undefined symbol, to mean that foo should be
15407    considered to be the address of a function.  */
15408
15409 static void
15410 s_mips_globl (int x ATTRIBUTE_UNUSED)
15411 {
15412   char *name;
15413   int c;
15414   symbolS *symbolP;
15415   flagword flag;
15416
15417   do
15418     {
15419       c = get_symbol_name (&name);
15420       symbolP = symbol_find_or_make (name);
15421       S_SET_EXTERNAL (symbolP);
15422
15423       *input_line_pointer = c;
15424       SKIP_WHITESPACE_AFTER_NAME ();
15425
15426       /* On Irix 5, every global symbol that is not explicitly labelled as
15427          being a function is apparently labelled as being an object.  */
15428       flag = BSF_OBJECT;
15429
15430       if (!is_end_of_line[(unsigned char) *input_line_pointer]
15431           && (*input_line_pointer != ','))
15432         {
15433           char *secname;
15434           asection *sec;
15435
15436           c = get_symbol_name (&secname);
15437           sec = bfd_get_section_by_name (stdoutput, secname);
15438           if (sec == NULL)
15439             as_bad (_("%s: no such section"), secname);
15440           (void) restore_line_pointer (c);
15441
15442           if (sec != NULL && (sec->flags & SEC_CODE) != 0)
15443             flag = BSF_FUNCTION;
15444         }
15445
15446       symbol_get_bfdsym (symbolP)->flags |= flag;
15447
15448       c = *input_line_pointer;
15449       if (c == ',')
15450         {
15451           input_line_pointer++;
15452           SKIP_WHITESPACE ();
15453           if (is_end_of_line[(unsigned char) *input_line_pointer])
15454             c = '\n';
15455         }
15456     }
15457   while (c == ',');
15458
15459   demand_empty_rest_of_line ();
15460 }
15461
15462 static void
15463 s_option (int x ATTRIBUTE_UNUSED)
15464 {
15465   char *opt;
15466   char c;
15467
15468   c = get_symbol_name (&opt);
15469
15470   if (*opt == 'O')
15471     {
15472       /* FIXME: What does this mean?  */
15473     }
15474   else if (strncmp (opt, "pic", 3) == 0 && ISDIGIT (opt[3]) && opt[4] == '\0')
15475     {
15476       int i;
15477
15478       i = atoi (opt + 3);
15479       if (i != 0 && i != 2)
15480         as_bad (_(".option pic%d not supported"), i);
15481       else if (mips_pic == VXWORKS_PIC)
15482         as_bad (_(".option pic%d not supported in VxWorks PIC mode"), i);
15483       else if (i == 0)
15484         mips_pic = NO_PIC;
15485       else if (i == 2)
15486         {
15487           mips_pic = SVR4_PIC;
15488           mips_abicalls = TRUE;
15489         }
15490
15491       if (mips_pic == SVR4_PIC)
15492         {
15493           if (g_switch_seen && g_switch_value != 0)
15494             as_warn (_("-G may not be used with SVR4 PIC code"));
15495           g_switch_value = 0;
15496           bfd_set_gp_size (stdoutput, 0);
15497         }
15498     }
15499   else
15500     as_warn (_("unrecognized option \"%s\""), opt);
15501
15502   (void) restore_line_pointer (c);
15503   demand_empty_rest_of_line ();
15504 }
15505
15506 /* This structure is used to hold a stack of .set values.  */
15507
15508 struct mips_option_stack
15509 {
15510   struct mips_option_stack *next;
15511   struct mips_set_options options;
15512 };
15513
15514 static struct mips_option_stack *mips_opts_stack;
15515
15516 /* Return status for .set/.module option handling.  */
15517
15518 enum code_option_type
15519 {
15520   /* Unrecognized option.  */
15521   OPTION_TYPE_BAD = -1,
15522
15523   /* Ordinary option.  */
15524   OPTION_TYPE_NORMAL,
15525
15526   /* ISA changing option.  */
15527   OPTION_TYPE_ISA
15528 };
15529
15530 /* Handle common .set/.module options.  Return status indicating option
15531    type.  */
15532
15533 static enum code_option_type
15534 parse_code_option (char * name)
15535 {
15536   bfd_boolean isa_set = FALSE;
15537   const struct mips_ase *ase;
15538
15539   if (strncmp (name, "at=", 3) == 0)
15540     {
15541       char *s = name + 3;
15542
15543       if (!reg_lookup (&s, RTYPE_NUM | RTYPE_GP, &mips_opts.at))
15544         as_bad (_("unrecognized register name `%s'"), s);
15545     }
15546   else if (strcmp (name, "at") == 0)
15547     mips_opts.at = ATREG;
15548   else if (strcmp (name, "noat") == 0)
15549     mips_opts.at = ZERO;
15550   else if (strcmp (name, "move") == 0 || strcmp (name, "novolatile") == 0)
15551     mips_opts.nomove = 0;
15552   else if (strcmp (name, "nomove") == 0 || strcmp (name, "volatile") == 0)
15553     mips_opts.nomove = 1;
15554   else if (strcmp (name, "bopt") == 0)
15555     mips_opts.nobopt = 0;
15556   else if (strcmp (name, "nobopt") == 0)
15557     mips_opts.nobopt = 1;
15558   else if (strcmp (name, "gp=32") == 0)
15559     mips_opts.gp = 32;
15560   else if (strcmp (name, "gp=64") == 0)
15561     mips_opts.gp = 64;
15562   else if (strcmp (name, "fp=32") == 0)
15563     mips_opts.fp = 32;
15564   else if (strcmp (name, "fp=xx") == 0)
15565     mips_opts.fp = 0;
15566   else if (strcmp (name, "fp=64") == 0)
15567     mips_opts.fp = 64;
15568   else if (strcmp (name, "softfloat") == 0)
15569     mips_opts.soft_float = 1;
15570   else if (strcmp (name, "hardfloat") == 0)
15571     mips_opts.soft_float = 0;
15572   else if (strcmp (name, "singlefloat") == 0)
15573     mips_opts.single_float = 1;
15574   else if (strcmp (name, "doublefloat") == 0)
15575     mips_opts.single_float = 0;
15576   else if (strcmp (name, "nooddspreg") == 0)
15577     mips_opts.oddspreg = 0;
15578   else if (strcmp (name, "oddspreg") == 0)
15579     mips_opts.oddspreg = 1;
15580   else if (strcmp (name, "mips16") == 0
15581            || strcmp (name, "MIPS-16") == 0)
15582     mips_opts.mips16 = 1;
15583   else if (strcmp (name, "nomips16") == 0
15584            || strcmp (name, "noMIPS-16") == 0)
15585     mips_opts.mips16 = 0;
15586   else if (strcmp (name, "micromips") == 0)
15587     mips_opts.micromips = 1;
15588   else if (strcmp (name, "nomicromips") == 0)
15589     mips_opts.micromips = 0;
15590   else if (name[0] == 'n'
15591            && name[1] == 'o'
15592            && (ase = mips_lookup_ase (name + 2)))
15593     mips_set_ase (ase, &mips_opts, FALSE);
15594   else if ((ase = mips_lookup_ase (name)))
15595     mips_set_ase (ase, &mips_opts, TRUE);
15596   else if (strncmp (name, "mips", 4) == 0 || strncmp (name, "arch=", 5) == 0)
15597     {
15598       /* Permit the user to change the ISA and architecture on the fly.
15599          Needless to say, misuse can cause serious problems.  */
15600       if (strncmp (name, "arch=", 5) == 0)
15601         {
15602           const struct mips_cpu_info *p;
15603
15604           p = mips_parse_cpu ("internal use", name + 5);
15605           if (!p)
15606             as_bad (_("unknown architecture %s"), name + 5);
15607           else
15608             {
15609               mips_opts.arch = p->cpu;
15610               mips_opts.isa = p->isa;
15611               isa_set = TRUE;
15612             }
15613         }
15614       else if (strncmp (name, "mips", 4) == 0)
15615         {
15616           const struct mips_cpu_info *p;
15617
15618           p = mips_parse_cpu ("internal use", name);
15619           if (!p)
15620             as_bad (_("unknown ISA level %s"), name + 4);
15621           else
15622             {
15623               mips_opts.arch = p->cpu;
15624               mips_opts.isa = p->isa;
15625               isa_set = TRUE;
15626             }
15627         }
15628       else
15629         as_bad (_("unknown ISA or architecture %s"), name);
15630     }
15631   else if (strcmp (name, "autoextend") == 0)
15632     mips_opts.noautoextend = 0;
15633   else if (strcmp (name, "noautoextend") == 0)
15634     mips_opts.noautoextend = 1;
15635   else if (strcmp (name, "insn32") == 0)
15636     mips_opts.insn32 = TRUE;
15637   else if (strcmp (name, "noinsn32") == 0)
15638     mips_opts.insn32 = FALSE;
15639   else if (strcmp (name, "sym32") == 0)
15640     mips_opts.sym32 = TRUE;
15641   else if (strcmp (name, "nosym32") == 0)
15642     mips_opts.sym32 = FALSE;
15643   else
15644     return OPTION_TYPE_BAD;
15645
15646   return isa_set ? OPTION_TYPE_ISA : OPTION_TYPE_NORMAL;
15647 }
15648
15649 /* Handle the .set pseudo-op.  */
15650
15651 static void
15652 s_mipsset (int x ATTRIBUTE_UNUSED)
15653 {
15654   enum code_option_type type = OPTION_TYPE_NORMAL;
15655   char *name = input_line_pointer, ch;
15656
15657   file_mips_check_options ();
15658
15659   while (!is_end_of_line[(unsigned char) *input_line_pointer])
15660     ++input_line_pointer;
15661   ch = *input_line_pointer;
15662   *input_line_pointer = '\0';
15663
15664   if (strchr (name, ','))
15665     {
15666       /* Generic ".set" directive; use the generic handler.  */
15667       *input_line_pointer = ch;
15668       input_line_pointer = name;
15669       s_set (0);
15670       return;
15671     }
15672
15673   if (strcmp (name, "reorder") == 0)
15674     {
15675       if (mips_opts.noreorder)
15676         end_noreorder ();
15677     }
15678   else if (strcmp (name, "noreorder") == 0)
15679     {
15680       if (!mips_opts.noreorder)
15681         start_noreorder ();
15682     }
15683   else if (strcmp (name, "macro") == 0)
15684     mips_opts.warn_about_macros = 0;
15685   else if (strcmp (name, "nomacro") == 0)
15686     {
15687       if (mips_opts.noreorder == 0)
15688         as_bad (_("`noreorder' must be set before `nomacro'"));
15689       mips_opts.warn_about_macros = 1;
15690     }
15691   else if (strcmp (name, "gp=default") == 0)
15692     mips_opts.gp = file_mips_opts.gp;
15693   else if (strcmp (name, "fp=default") == 0)
15694     mips_opts.fp = file_mips_opts.fp;
15695   else if (strcmp (name, "mips0") == 0 || strcmp (name, "arch=default") == 0)
15696     {
15697       mips_opts.isa = file_mips_opts.isa;
15698       mips_opts.arch = file_mips_opts.arch;
15699       mips_opts.gp = file_mips_opts.gp;
15700       mips_opts.fp = file_mips_opts.fp;
15701     }
15702   else if (strcmp (name, "push") == 0)
15703     {
15704       struct mips_option_stack *s;
15705
15706       s = XNEW (struct mips_option_stack);
15707       s->next = mips_opts_stack;
15708       s->options = mips_opts;
15709       mips_opts_stack = s;
15710     }
15711   else if (strcmp (name, "pop") == 0)
15712     {
15713       struct mips_option_stack *s;
15714
15715       s = mips_opts_stack;
15716       if (s == NULL)
15717         as_bad (_(".set pop with no .set push"));
15718       else
15719         {
15720           /* If we're changing the reorder mode we need to handle
15721              delay slots correctly.  */
15722           if (s->options.noreorder && ! mips_opts.noreorder)
15723             start_noreorder ();
15724           else if (! s->options.noreorder && mips_opts.noreorder)
15725             end_noreorder ();
15726
15727           mips_opts = s->options;
15728           mips_opts_stack = s->next;
15729           free (s);
15730         }
15731     }
15732   else
15733     {
15734       type = parse_code_option (name);
15735       if (type == OPTION_TYPE_BAD)
15736         as_warn (_("tried to set unrecognized symbol: %s\n"), name);
15737     }
15738
15739   /* The use of .set [arch|cpu]= historically 'fixes' the width of gp and fp
15740      registers based on what is supported by the arch/cpu.  */
15741   if (type == OPTION_TYPE_ISA)
15742     {
15743       switch (mips_opts.isa)
15744         {
15745         case 0:
15746           break;
15747         case ISA_MIPS1:
15748           /* MIPS I cannot support FPXX.  */
15749           mips_opts.fp = 32;
15750           /* fall-through.  */
15751         case ISA_MIPS2:
15752         case ISA_MIPS32:
15753         case ISA_MIPS32R2:
15754         case ISA_MIPS32R3:
15755         case ISA_MIPS32R5:
15756           mips_opts.gp = 32;
15757           if (mips_opts.fp != 0)
15758             mips_opts.fp = 32;
15759           break;
15760         case ISA_MIPS32R6:
15761           mips_opts.gp = 32;
15762           mips_opts.fp = 64;
15763           break;
15764         case ISA_MIPS3:
15765         case ISA_MIPS4:
15766         case ISA_MIPS5:
15767         case ISA_MIPS64:
15768         case ISA_MIPS64R2:
15769         case ISA_MIPS64R3:
15770         case ISA_MIPS64R5:
15771         case ISA_MIPS64R6:
15772           mips_opts.gp = 64;
15773           if (mips_opts.fp != 0)
15774             {
15775               if (mips_opts.arch == CPU_R5900)
15776                 mips_opts.fp = 32;
15777               else
15778                 mips_opts.fp = 64;
15779             }
15780           break;
15781         default:
15782           as_bad (_("unknown ISA level %s"), name + 4);
15783           break;
15784         }
15785     }
15786
15787   mips_check_options (&mips_opts, FALSE);
15788
15789   mips_check_isa_supports_ases ();
15790   *input_line_pointer = ch;
15791   demand_empty_rest_of_line ();
15792 }
15793
15794 /* Handle the .module pseudo-op.  */
15795
15796 static void
15797 s_module (int ignore ATTRIBUTE_UNUSED)
15798 {
15799   char *name = input_line_pointer, ch;
15800
15801   while (!is_end_of_line[(unsigned char) *input_line_pointer])
15802     ++input_line_pointer;
15803   ch = *input_line_pointer;
15804   *input_line_pointer = '\0';
15805
15806   if (!file_mips_opts_checked)
15807     {
15808       if (parse_code_option (name) == OPTION_TYPE_BAD)
15809         as_bad (_(".module used with unrecognized symbol: %s\n"), name);
15810
15811       /* Update module level settings from mips_opts.  */
15812       file_mips_opts = mips_opts;
15813     }
15814   else
15815     as_bad (_(".module is not permitted after generating code"));
15816
15817   *input_line_pointer = ch;
15818   demand_empty_rest_of_line ();
15819 }
15820
15821 /* Handle the .abicalls pseudo-op.  I believe this is equivalent to
15822    .option pic2.  It means to generate SVR4 PIC calls.  */
15823
15824 static void
15825 s_abicalls (int ignore ATTRIBUTE_UNUSED)
15826 {
15827   mips_pic = SVR4_PIC;
15828   mips_abicalls = TRUE;
15829
15830   if (g_switch_seen && g_switch_value != 0)
15831     as_warn (_("-G may not be used with SVR4 PIC code"));
15832   g_switch_value = 0;
15833
15834   bfd_set_gp_size (stdoutput, 0);
15835   demand_empty_rest_of_line ();
15836 }
15837
15838 /* Handle the .cpload pseudo-op.  This is used when generating SVR4
15839    PIC code.  It sets the $gp register for the function based on the
15840    function address, which is in the register named in the argument.
15841    This uses a relocation against _gp_disp, which is handled specially
15842    by the linker.  The result is:
15843         lui     $gp,%hi(_gp_disp)
15844         addiu   $gp,$gp,%lo(_gp_disp)
15845         addu    $gp,$gp,.cpload argument
15846    The .cpload argument is normally $25 == $t9.
15847
15848    The -mno-shared option changes this to:
15849         lui     $gp,%hi(__gnu_local_gp)
15850         addiu   $gp,$gp,%lo(__gnu_local_gp)
15851    and the argument is ignored.  This saves an instruction, but the
15852    resulting code is not position independent; it uses an absolute
15853    address for __gnu_local_gp.  Thus code assembled with -mno-shared
15854    can go into an ordinary executable, but not into a shared library.  */
15855
15856 static void
15857 s_cpload (int ignore ATTRIBUTE_UNUSED)
15858 {
15859   expressionS ex;
15860   int reg;
15861   int in_shared;
15862
15863   file_mips_check_options ();
15864
15865   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
15866      .cpload is ignored.  */
15867   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
15868     {
15869       s_ignore (0);
15870       return;
15871     }
15872
15873   if (mips_opts.mips16)
15874     {
15875       as_bad (_("%s not supported in MIPS16 mode"), ".cpload");
15876       ignore_rest_of_line ();
15877       return;
15878     }
15879
15880   /* .cpload should be in a .set noreorder section.  */
15881   if (mips_opts.noreorder == 0)
15882     as_warn (_(".cpload not in noreorder section"));
15883
15884   reg = tc_get_register (0);
15885
15886   /* If we need to produce a 64-bit address, we are better off using
15887      the default instruction sequence.  */
15888   in_shared = mips_in_shared || HAVE_64BIT_SYMBOLS;
15889
15890   ex.X_op = O_symbol;
15891   ex.X_add_symbol = symbol_find_or_make (in_shared ? "_gp_disp" :
15892                                          "__gnu_local_gp");
15893   ex.X_op_symbol = NULL;
15894   ex.X_add_number = 0;
15895
15896   /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
15897   symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
15898
15899   mips_mark_labels ();
15900   mips_assembling_insn = TRUE;
15901
15902   macro_start ();
15903   macro_build_lui (&ex, mips_gp_register);
15904   macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
15905                mips_gp_register, BFD_RELOC_LO16);
15906   if (in_shared)
15907     macro_build (NULL, "addu", "d,v,t", mips_gp_register,
15908                  mips_gp_register, reg);
15909   macro_end ();
15910
15911   mips_assembling_insn = FALSE;
15912   demand_empty_rest_of_line ();
15913 }
15914
15915 /* Handle the .cpsetup pseudo-op defined for NewABI PIC code.  The syntax is:
15916      .cpsetup $reg1, offset|$reg2, label
15917
15918    If offset is given, this results in:
15919      sd         $gp, offset($sp)
15920      lui        $gp, %hi(%neg(%gp_rel(label)))
15921      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
15922      daddu      $gp, $gp, $reg1
15923
15924    If $reg2 is given, this results in:
15925      or         $reg2, $gp, $0
15926      lui        $gp, %hi(%neg(%gp_rel(label)))
15927      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
15928      daddu      $gp, $gp, $reg1
15929    $reg1 is normally $25 == $t9.
15930
15931    The -mno-shared option replaces the last three instructions with
15932         lui     $gp,%hi(_gp)
15933         addiu   $gp,$gp,%lo(_gp)  */
15934
15935 static void
15936 s_cpsetup (int ignore ATTRIBUTE_UNUSED)
15937 {
15938   expressionS ex_off;
15939   expressionS ex_sym;
15940   int reg1;
15941
15942   file_mips_check_options ();
15943
15944   /* If we are not generating SVR4 PIC code, .cpsetup is ignored.
15945      We also need NewABI support.  */
15946   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
15947     {
15948       s_ignore (0);
15949       return;
15950     }
15951
15952   if (mips_opts.mips16)
15953     {
15954       as_bad (_("%s not supported in MIPS16 mode"), ".cpsetup");
15955       ignore_rest_of_line ();
15956       return;
15957     }
15958
15959   reg1 = tc_get_register (0);
15960   SKIP_WHITESPACE ();
15961   if (*input_line_pointer != ',')
15962     {
15963       as_bad (_("missing argument separator ',' for .cpsetup"));
15964       return;
15965     }
15966   else
15967     ++input_line_pointer;
15968   SKIP_WHITESPACE ();
15969   if (*input_line_pointer == '$')
15970     {
15971       mips_cpreturn_register = tc_get_register (0);
15972       mips_cpreturn_offset = -1;
15973     }
15974   else
15975     {
15976       mips_cpreturn_offset = get_absolute_expression ();
15977       mips_cpreturn_register = -1;
15978     }
15979   SKIP_WHITESPACE ();
15980   if (*input_line_pointer != ',')
15981     {
15982       as_bad (_("missing argument separator ',' for .cpsetup"));
15983       return;
15984     }
15985   else
15986     ++input_line_pointer;
15987   SKIP_WHITESPACE ();
15988   expression (&ex_sym);
15989
15990   mips_mark_labels ();
15991   mips_assembling_insn = TRUE;
15992
15993   macro_start ();
15994   if (mips_cpreturn_register == -1)
15995     {
15996       ex_off.X_op = O_constant;
15997       ex_off.X_add_symbol = NULL;
15998       ex_off.X_op_symbol = NULL;
15999       ex_off.X_add_number = mips_cpreturn_offset;
16000
16001       macro_build (&ex_off, "sd", "t,o(b)", mips_gp_register,
16002                    BFD_RELOC_LO16, SP);
16003     }
16004   else
16005     move_register (mips_cpreturn_register, mips_gp_register);
16006
16007   if (mips_in_shared || HAVE_64BIT_SYMBOLS)
16008     {
16009       macro_build (&ex_sym, "lui", LUI_FMT, mips_gp_register,
16010                    -1, BFD_RELOC_GPREL16, BFD_RELOC_MIPS_SUB,
16011                    BFD_RELOC_HI16_S);
16012
16013       macro_build (&ex_sym, "addiu", "t,r,j", mips_gp_register,
16014                    mips_gp_register, -1, BFD_RELOC_GPREL16,
16015                    BFD_RELOC_MIPS_SUB, BFD_RELOC_LO16);
16016
16017       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", mips_gp_register,
16018                    mips_gp_register, reg1);
16019     }
16020   else
16021     {
16022       expressionS ex;
16023
16024       ex.X_op = O_symbol;
16025       ex.X_add_symbol = symbol_find_or_make ("__gnu_local_gp");
16026       ex.X_op_symbol = NULL;
16027       ex.X_add_number = 0;
16028
16029       /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
16030       symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
16031
16032       macro_build_lui (&ex, mips_gp_register);
16033       macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
16034                    mips_gp_register, BFD_RELOC_LO16);
16035     }
16036
16037   macro_end ();
16038
16039   mips_assembling_insn = FALSE;
16040   demand_empty_rest_of_line ();
16041 }
16042
16043 static void
16044 s_cplocal (int ignore ATTRIBUTE_UNUSED)
16045 {
16046   file_mips_check_options ();
16047
16048   /* If we are not generating SVR4 PIC code, or if this is not NewABI code,
16049      .cplocal is ignored.  */
16050   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16051     {
16052       s_ignore (0);
16053       return;
16054     }
16055
16056   if (mips_opts.mips16)
16057     {
16058       as_bad (_("%s not supported in MIPS16 mode"), ".cplocal");
16059       ignore_rest_of_line ();
16060       return;
16061     }
16062
16063   mips_gp_register = tc_get_register (0);
16064   demand_empty_rest_of_line ();
16065 }
16066
16067 /* Handle the .cprestore pseudo-op.  This stores $gp into a given
16068    offset from $sp.  The offset is remembered, and after making a PIC
16069    call $gp is restored from that location.  */
16070
16071 static void
16072 s_cprestore (int ignore ATTRIBUTE_UNUSED)
16073 {
16074   expressionS ex;
16075
16076   file_mips_check_options ();
16077
16078   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
16079      .cprestore is ignored.  */
16080   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
16081     {
16082       s_ignore (0);
16083       return;
16084     }
16085
16086   if (mips_opts.mips16)
16087     {
16088       as_bad (_("%s not supported in MIPS16 mode"), ".cprestore");
16089       ignore_rest_of_line ();
16090       return;
16091     }
16092
16093   mips_cprestore_offset = get_absolute_expression ();
16094   mips_cprestore_valid = 1;
16095
16096   ex.X_op = O_constant;
16097   ex.X_add_symbol = NULL;
16098   ex.X_op_symbol = NULL;
16099   ex.X_add_number = mips_cprestore_offset;
16100
16101   mips_mark_labels ();
16102   mips_assembling_insn = TRUE;
16103
16104   macro_start ();
16105   macro_build_ldst_constoffset (&ex, ADDRESS_STORE_INSN, mips_gp_register,
16106                                 SP, HAVE_64BIT_ADDRESSES);
16107   macro_end ();
16108
16109   mips_assembling_insn = FALSE;
16110   demand_empty_rest_of_line ();
16111 }
16112
16113 /* Handle the .cpreturn pseudo-op defined for NewABI PIC code. If an offset
16114    was given in the preceding .cpsetup, it results in:
16115      ld         $gp, offset($sp)
16116
16117    If a register $reg2 was given there, it results in:
16118      or         $gp, $reg2, $0  */
16119
16120 static void
16121 s_cpreturn (int ignore ATTRIBUTE_UNUSED)
16122 {
16123   expressionS ex;
16124
16125   file_mips_check_options ();
16126
16127   /* If we are not generating SVR4 PIC code, .cpreturn is ignored.
16128      We also need NewABI support.  */
16129   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16130     {
16131       s_ignore (0);
16132       return;
16133     }
16134
16135   if (mips_opts.mips16)
16136     {
16137       as_bad (_("%s not supported in MIPS16 mode"), ".cpreturn");
16138       ignore_rest_of_line ();
16139       return;
16140     }
16141
16142   mips_mark_labels ();
16143   mips_assembling_insn = TRUE;
16144
16145   macro_start ();
16146   if (mips_cpreturn_register == -1)
16147     {
16148       ex.X_op = O_constant;
16149       ex.X_add_symbol = NULL;
16150       ex.X_op_symbol = NULL;
16151       ex.X_add_number = mips_cpreturn_offset;
16152
16153       macro_build (&ex, "ld", "t,o(b)", mips_gp_register, BFD_RELOC_LO16, SP);
16154     }
16155   else
16156     move_register (mips_gp_register, mips_cpreturn_register);
16157
16158   macro_end ();
16159
16160   mips_assembling_insn = FALSE;
16161   demand_empty_rest_of_line ();
16162 }
16163
16164 /* Handle a .dtprelword, .dtpreldword, .tprelword, or .tpreldword
16165    pseudo-op; DIRSTR says which. The pseudo-op generates a BYTES-size
16166    DTP- or TP-relative relocation of type RTYPE, for use in either DWARF
16167    debug information or MIPS16 TLS.  */
16168
16169 static void
16170 s_tls_rel_directive (const size_t bytes, const char *dirstr,
16171                      bfd_reloc_code_real_type rtype)
16172 {
16173   expressionS ex;
16174   char *p;
16175
16176   expression (&ex);
16177
16178   if (ex.X_op != O_symbol)
16179     {
16180       as_bad (_("unsupported use of %s"), dirstr);
16181       ignore_rest_of_line ();
16182     }
16183
16184   p = frag_more (bytes);
16185   md_number_to_chars (p, 0, bytes);
16186   fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE, rtype);
16187   demand_empty_rest_of_line ();
16188   mips_clear_insn_labels ();
16189 }
16190
16191 /* Handle .dtprelword.  */
16192
16193 static void
16194 s_dtprelword (int ignore ATTRIBUTE_UNUSED)
16195 {
16196   s_tls_rel_directive (4, ".dtprelword", BFD_RELOC_MIPS_TLS_DTPREL32);
16197 }
16198
16199 /* Handle .dtpreldword.  */
16200
16201 static void
16202 s_dtpreldword (int ignore ATTRIBUTE_UNUSED)
16203 {
16204   s_tls_rel_directive (8, ".dtpreldword", BFD_RELOC_MIPS_TLS_DTPREL64);
16205 }
16206
16207 /* Handle .tprelword.  */
16208
16209 static void
16210 s_tprelword (int ignore ATTRIBUTE_UNUSED)
16211 {
16212   s_tls_rel_directive (4, ".tprelword", BFD_RELOC_MIPS_TLS_TPREL32);
16213 }
16214
16215 /* Handle .tpreldword.  */
16216
16217 static void
16218 s_tpreldword (int ignore ATTRIBUTE_UNUSED)
16219 {
16220   s_tls_rel_directive (8, ".tpreldword", BFD_RELOC_MIPS_TLS_TPREL64);
16221 }
16222
16223 /* Handle the .gpvalue pseudo-op.  This is used when generating NewABI PIC
16224    code.  It sets the offset to use in gp_rel relocations.  */
16225
16226 static void
16227 s_gpvalue (int ignore ATTRIBUTE_UNUSED)
16228 {
16229   /* If we are not generating SVR4 PIC code, .gpvalue is ignored.
16230      We also need NewABI support.  */
16231   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
16232     {
16233       s_ignore (0);
16234       return;
16235     }
16236
16237   mips_gprel_offset = get_absolute_expression ();
16238
16239   demand_empty_rest_of_line ();
16240 }
16241
16242 /* Handle the .gpword pseudo-op.  This is used when generating PIC
16243    code.  It generates a 32 bit GP relative reloc.  */
16244
16245 static void
16246 s_gpword (int ignore ATTRIBUTE_UNUSED)
16247 {
16248   segment_info_type *si;
16249   struct insn_label_list *l;
16250   expressionS ex;
16251   char *p;
16252
16253   /* When not generating PIC code, this is treated as .word.  */
16254   if (mips_pic != SVR4_PIC)
16255     {
16256       s_cons (2);
16257       return;
16258     }
16259
16260   si = seg_info (now_seg);
16261   l = si->label_list;
16262   mips_emit_delays ();
16263   if (auto_align)
16264     mips_align (2, 0, l);
16265
16266   expression (&ex);
16267   mips_clear_insn_labels ();
16268
16269   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16270     {
16271       as_bad (_("unsupported use of .gpword"));
16272       ignore_rest_of_line ();
16273     }
16274
16275   p = frag_more (4);
16276   md_number_to_chars (p, 0, 4);
16277   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16278                BFD_RELOC_GPREL32);
16279
16280   demand_empty_rest_of_line ();
16281 }
16282
16283 static void
16284 s_gpdword (int ignore ATTRIBUTE_UNUSED)
16285 {
16286   segment_info_type *si;
16287   struct insn_label_list *l;
16288   expressionS ex;
16289   char *p;
16290
16291   /* When not generating PIC code, this is treated as .dword.  */
16292   if (mips_pic != SVR4_PIC)
16293     {
16294       s_cons (3);
16295       return;
16296     }
16297
16298   si = seg_info (now_seg);
16299   l = si->label_list;
16300   mips_emit_delays ();
16301   if (auto_align)
16302     mips_align (3, 0, l);
16303
16304   expression (&ex);
16305   mips_clear_insn_labels ();
16306
16307   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16308     {
16309       as_bad (_("unsupported use of .gpdword"));
16310       ignore_rest_of_line ();
16311     }
16312
16313   p = frag_more (8);
16314   md_number_to_chars (p, 0, 8);
16315   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16316                BFD_RELOC_GPREL32)->fx_tcbit = 1;
16317
16318   /* GPREL32 composed with 64 gives a 64-bit GP offset.  */
16319   fix_new (frag_now, p - frag_now->fr_literal, 8, NULL, 0,
16320            FALSE, BFD_RELOC_64)->fx_tcbit = 1;
16321
16322   demand_empty_rest_of_line ();
16323 }
16324
16325 /* Handle the .ehword pseudo-op.  This is used when generating unwinding
16326    tables.  It generates a R_MIPS_EH reloc.  */
16327
16328 static void
16329 s_ehword (int ignore ATTRIBUTE_UNUSED)
16330 {
16331   expressionS ex;
16332   char *p;
16333
16334   mips_emit_delays ();
16335
16336   expression (&ex);
16337   mips_clear_insn_labels ();
16338
16339   if (ex.X_op != O_symbol || ex.X_add_number != 0)
16340     {
16341       as_bad (_("unsupported use of .ehword"));
16342       ignore_rest_of_line ();
16343     }
16344
16345   p = frag_more (4);
16346   md_number_to_chars (p, 0, 4);
16347   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
16348                BFD_RELOC_32_PCREL);
16349
16350   demand_empty_rest_of_line ();
16351 }
16352
16353 /* Handle the .cpadd pseudo-op.  This is used when dealing with switch
16354    tables in SVR4 PIC code.  */
16355
16356 static void
16357 s_cpadd (int ignore ATTRIBUTE_UNUSED)
16358 {
16359   int reg;
16360
16361   file_mips_check_options ();
16362
16363   /* This is ignored when not generating SVR4 PIC code.  */
16364   if (mips_pic != SVR4_PIC)
16365     {
16366       s_ignore (0);
16367       return;
16368     }
16369
16370   mips_mark_labels ();
16371   mips_assembling_insn = TRUE;
16372
16373   /* Add $gp to the register named as an argument.  */
16374   macro_start ();
16375   reg = tc_get_register (0);
16376   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", reg, reg, mips_gp_register);
16377   macro_end ();
16378
16379   mips_assembling_insn = FALSE;
16380   demand_empty_rest_of_line ();
16381 }
16382
16383 /* Handle the .insn pseudo-op.  This marks instruction labels in
16384    mips16/micromips mode.  This permits the linker to handle them specially,
16385    such as generating jalx instructions when needed.  We also make
16386    them odd for the duration of the assembly, in order to generate the
16387    right sort of code.  We will make them even in the adjust_symtab
16388    routine, while leaving them marked.  This is convenient for the
16389    debugger and the disassembler.  The linker knows to make them odd
16390    again.  */
16391
16392 static void
16393 s_insn (int ignore ATTRIBUTE_UNUSED)
16394 {
16395   file_mips_check_options ();
16396   file_ase_mips16 |= mips_opts.mips16;
16397   file_ase_micromips |= mips_opts.micromips;
16398
16399   mips_mark_labels ();
16400
16401   demand_empty_rest_of_line ();
16402 }
16403
16404 /* Handle the .nan pseudo-op.  */
16405
16406 static void
16407 s_nan (int ignore ATTRIBUTE_UNUSED)
16408 {
16409   static const char str_legacy[] = "legacy";
16410   static const char str_2008[] = "2008";
16411   size_t i;
16412
16413   for (i = 0; !is_end_of_line[(unsigned char) input_line_pointer[i]]; i++);
16414
16415   if (i == sizeof (str_2008) - 1
16416       && memcmp (input_line_pointer, str_2008, i) == 0)
16417     mips_nan2008 = 1;
16418   else if (i == sizeof (str_legacy) - 1
16419            && memcmp (input_line_pointer, str_legacy, i) == 0)
16420     {
16421       if (ISA_HAS_LEGACY_NAN (file_mips_opts.isa))
16422         mips_nan2008 = 0;
16423       else
16424         as_bad (_("`%s' does not support legacy NaN"),
16425                   mips_cpu_info_from_isa (file_mips_opts.isa)->name);
16426     }
16427   else
16428     as_bad (_("bad .nan directive"));
16429
16430   input_line_pointer += i;
16431   demand_empty_rest_of_line ();
16432 }
16433
16434 /* Handle a .stab[snd] directive.  Ideally these directives would be
16435    implemented in a transparent way, so that removing them would not
16436    have any effect on the generated instructions.  However, s_stab
16437    internally changes the section, so in practice we need to decide
16438    now whether the preceding label marks compressed code.  We do not
16439    support changing the compression mode of a label after a .stab*
16440    directive, such as in:
16441
16442    foo:
16443         .stabs ...
16444         .set mips16
16445
16446    so the current mode wins.  */
16447
16448 static void
16449 s_mips_stab (int type)
16450 {
16451   mips_mark_labels ();
16452   s_stab (type);
16453 }
16454
16455 /* Handle the .weakext pseudo-op as defined in Kane and Heinrich.  */
16456
16457 static void
16458 s_mips_weakext (int ignore ATTRIBUTE_UNUSED)
16459 {
16460   char *name;
16461   int c;
16462   symbolS *symbolP;
16463   expressionS exp;
16464
16465   c = get_symbol_name (&name);
16466   symbolP = symbol_find_or_make (name);
16467   S_SET_WEAK (symbolP);
16468   *input_line_pointer = c;
16469
16470   SKIP_WHITESPACE_AFTER_NAME ();
16471
16472   if (! is_end_of_line[(unsigned char) *input_line_pointer])
16473     {
16474       if (S_IS_DEFINED (symbolP))
16475         {
16476           as_bad (_("ignoring attempt to redefine symbol %s"),
16477                   S_GET_NAME (symbolP));
16478           ignore_rest_of_line ();
16479           return;
16480         }
16481
16482       if (*input_line_pointer == ',')
16483         {
16484           ++input_line_pointer;
16485           SKIP_WHITESPACE ();
16486         }
16487
16488       expression (&exp);
16489       if (exp.X_op != O_symbol)
16490         {
16491           as_bad (_("bad .weakext directive"));
16492           ignore_rest_of_line ();
16493           return;
16494         }
16495       symbol_set_value_expression (symbolP, &exp);
16496     }
16497
16498   demand_empty_rest_of_line ();
16499 }
16500
16501 /* Parse a register string into a number.  Called from the ECOFF code
16502    to parse .frame.  The argument is non-zero if this is the frame
16503    register, so that we can record it in mips_frame_reg.  */
16504
16505 int
16506 tc_get_register (int frame)
16507 {
16508   unsigned int reg;
16509
16510   SKIP_WHITESPACE ();
16511   if (! reg_lookup (&input_line_pointer, RWARN | RTYPE_NUM | RTYPE_GP, &reg))
16512     reg = 0;
16513   if (frame)
16514     {
16515       mips_frame_reg = reg != 0 ? reg : SP;
16516       mips_frame_reg_valid = 1;
16517       mips_cprestore_valid = 0;
16518     }
16519   return reg;
16520 }
16521
16522 valueT
16523 md_section_align (asection *seg, valueT addr)
16524 {
16525   int align = bfd_get_section_alignment (stdoutput, seg);
16526
16527   /* We don't need to align ELF sections to the full alignment.
16528      However, Irix 5 may prefer that we align them at least to a 16
16529      byte boundary.  We don't bother to align the sections if we
16530      are targeted for an embedded system.  */
16531   if (strncmp (TARGET_OS, "elf", 3) == 0)
16532     return addr;
16533   if (align > 4)
16534     align = 4;
16535
16536   return ((addr + (1 << align) - 1) & -(1 << align));
16537 }
16538
16539 /* Utility routine, called from above as well.  If called while the
16540    input file is still being read, it's only an approximation.  (For
16541    example, a symbol may later become defined which appeared to be
16542    undefined earlier.)  */
16543
16544 static int
16545 nopic_need_relax (symbolS *sym, int before_relaxing)
16546 {
16547   if (sym == 0)
16548     return 0;
16549
16550   if (g_switch_value > 0)
16551     {
16552       const char *symname;
16553       int change;
16554
16555       /* Find out whether this symbol can be referenced off the $gp
16556          register.  It can be if it is smaller than the -G size or if
16557          it is in the .sdata or .sbss section.  Certain symbols can
16558          not be referenced off the $gp, although it appears as though
16559          they can.  */
16560       symname = S_GET_NAME (sym);
16561       if (symname != (const char *) NULL
16562           && (strcmp (symname, "eprol") == 0
16563               || strcmp (symname, "etext") == 0
16564               || strcmp (symname, "_gp") == 0
16565               || strcmp (symname, "edata") == 0
16566               || strcmp (symname, "_fbss") == 0
16567               || strcmp (symname, "_fdata") == 0
16568               || strcmp (symname, "_ftext") == 0
16569               || strcmp (symname, "end") == 0
16570               || strcmp (symname, "_gp_disp") == 0))
16571         change = 1;
16572       else if ((! S_IS_DEFINED (sym) || S_IS_COMMON (sym))
16573                && (0
16574 #ifndef NO_ECOFF_DEBUGGING
16575                    || (symbol_get_obj (sym)->ecoff_extern_size != 0
16576                        && (symbol_get_obj (sym)->ecoff_extern_size
16577                            <= g_switch_value))
16578 #endif
16579                    /* We must defer this decision until after the whole
16580                       file has been read, since there might be a .extern
16581                       after the first use of this symbol.  */
16582                    || (before_relaxing
16583 #ifndef NO_ECOFF_DEBUGGING
16584                        && symbol_get_obj (sym)->ecoff_extern_size == 0
16585 #endif
16586                        && S_GET_VALUE (sym) == 0)
16587                    || (S_GET_VALUE (sym) != 0
16588                        && S_GET_VALUE (sym) <= g_switch_value)))
16589         change = 0;
16590       else
16591         {
16592           const char *segname;
16593
16594           segname = segment_name (S_GET_SEGMENT (sym));
16595           gas_assert (strcmp (segname, ".lit8") != 0
16596                   && strcmp (segname, ".lit4") != 0);
16597           change = (strcmp (segname, ".sdata") != 0
16598                     && strcmp (segname, ".sbss") != 0
16599                     && strncmp (segname, ".sdata.", 7) != 0
16600                     && strncmp (segname, ".sbss.", 6) != 0
16601                     && strncmp (segname, ".gnu.linkonce.sb.", 17) != 0
16602                     && strncmp (segname, ".gnu.linkonce.s.", 16) != 0);
16603         }
16604       return change;
16605     }
16606   else
16607     /* We are not optimizing for the $gp register.  */
16608     return 1;
16609 }
16610
16611
16612 /* Return true if the given symbol should be considered local for SVR4 PIC.  */
16613
16614 static bfd_boolean
16615 pic_need_relax (symbolS *sym, asection *segtype)
16616 {
16617   asection *symsec;
16618
16619   /* Handle the case of a symbol equated to another symbol.  */
16620   while (symbol_equated_reloc_p (sym))
16621     {
16622       symbolS *n;
16623
16624       /* It's possible to get a loop here in a badly written program.  */
16625       n = symbol_get_value_expression (sym)->X_add_symbol;
16626       if (n == sym)
16627         break;
16628       sym = n;
16629     }
16630
16631   if (symbol_section_p (sym))
16632     return TRUE;
16633
16634   symsec = S_GET_SEGMENT (sym);
16635
16636   /* This must duplicate the test in adjust_reloc_syms.  */
16637   return (!bfd_is_und_section (symsec)
16638           && !bfd_is_abs_section (symsec)
16639           && !bfd_is_com_section (symsec)
16640           && !s_is_linkonce (sym, segtype)
16641           /* A global or weak symbol is treated as external.  */
16642           && (!S_IS_WEAK (sym) && !S_IS_EXTERNAL (sym)));
16643 }
16644
16645
16646 /* Given a mips16 variant frag FRAGP, return non-zero if it needs an
16647    extended opcode.  SEC is the section the frag is in.  */
16648
16649 static int
16650 mips16_extended_frag (fragS *fragp, asection *sec, long stretch)
16651 {
16652   int type;
16653   const struct mips_int_operand *operand;
16654   offsetT val;
16655   segT symsec;
16656   fragS *sym_frag;
16657
16658   if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
16659     return 0;
16660   if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
16661     return 1;
16662
16663   type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
16664   operand = mips16_immed_operand (type, FALSE);
16665
16666   sym_frag = symbol_get_frag (fragp->fr_symbol);
16667   val = S_GET_VALUE (fragp->fr_symbol);
16668   symsec = S_GET_SEGMENT (fragp->fr_symbol);
16669
16670   if (operand->root.type == OP_PCREL)
16671     {
16672       const struct mips_pcrel_operand *pcrel_op;
16673       addressT addr;
16674       offsetT maxtiny;
16675
16676       /* We won't have the section when we are called from
16677          mips_relax_frag.  However, we will always have been called
16678          from md_estimate_size_before_relax first.  If this is a
16679          branch to a different section, we mark it as such.  If SEC is
16680          NULL, and the frag is not marked, then it must be a branch to
16681          the same section.  */
16682       pcrel_op = (const struct mips_pcrel_operand *) operand;
16683       if (sec == NULL)
16684         {
16685           if (RELAX_MIPS16_LONG_BRANCH (fragp->fr_subtype))
16686             return 1;
16687         }
16688       else
16689         {
16690           /* Must have been called from md_estimate_size_before_relax.  */
16691           if (symsec != sec)
16692             {
16693               fragp->fr_subtype =
16694                 RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16695
16696               /* FIXME: We should support this, and let the linker
16697                  catch branches and loads that are out of range.  */
16698               as_bad_where (fragp->fr_file, fragp->fr_line,
16699                             _("unsupported PC relative reference to different section"));
16700
16701               return 1;
16702             }
16703           if (fragp != sym_frag && sym_frag->fr_address == 0)
16704             /* Assume non-extended on the first relaxation pass.
16705                The address we have calculated will be bogus if this is
16706                a forward branch to another frag, as the forward frag
16707                will have fr_address == 0.  */
16708             return 0;
16709         }
16710
16711       /* In this case, we know for sure that the symbol fragment is in
16712          the same section.  If the relax_marker of the symbol fragment
16713          differs from the relax_marker of this fragment, we have not
16714          yet adjusted the symbol fragment fr_address.  We want to add
16715          in STRETCH in order to get a better estimate of the address.
16716          This particularly matters because of the shift bits.  */
16717       if (stretch != 0
16718           && sym_frag->relax_marker != fragp->relax_marker)
16719         {
16720           fragS *f;
16721
16722           /* Adjust stretch for any alignment frag.  Note that if have
16723              been expanding the earlier code, the symbol may be
16724              defined in what appears to be an earlier frag.  FIXME:
16725              This doesn't handle the fr_subtype field, which specifies
16726              a maximum number of bytes to skip when doing an
16727              alignment.  */
16728           for (f = fragp; f != NULL && f != sym_frag; f = f->fr_next)
16729             {
16730               if (f->fr_type == rs_align || f->fr_type == rs_align_code)
16731                 {
16732                   if (stretch < 0)
16733                     stretch = - ((- stretch)
16734                                  & ~ ((1 << (int) f->fr_offset) - 1));
16735                   else
16736                     stretch &= ~ ((1 << (int) f->fr_offset) - 1);
16737                   if (stretch == 0)
16738                     break;
16739                 }
16740             }
16741           if (f != NULL)
16742             val += stretch;
16743         }
16744
16745       addr = fragp->fr_address + fragp->fr_fix;
16746
16747       /* The base address rules are complicated.  The base address of
16748          a branch is the following instruction.  The base address of a
16749          PC relative load or add is the instruction itself, but if it
16750          is in a delay slot (in which case it can not be extended) use
16751          the address of the instruction whose delay slot it is in.  */
16752       if (pcrel_op->include_isa_bit)
16753         {
16754           addr += 2;
16755
16756           /* If we are currently assuming that this frag should be
16757              extended, then, the current address is two bytes
16758              higher.  */
16759           if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16760             addr += 2;
16761
16762           /* Ignore the low bit in the target, since it will be set
16763              for a text label.  */
16764           val &= -2;
16765         }
16766       else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
16767         addr -= 4;
16768       else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
16769         addr -= 2;
16770
16771       val -= addr & -(1 << pcrel_op->align_log2);
16772
16773       /* If any of the shifted bits are set, we must use an extended
16774          opcode.  If the address depends on the size of this
16775          instruction, this can lead to a loop, so we arrange to always
16776          use an extended opcode.  We only check this when we are in
16777          the main relaxation loop, when SEC is NULL.  */
16778       if ((val & ((1 << operand->shift) - 1)) != 0 && sec == NULL)
16779         {
16780           fragp->fr_subtype =
16781             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16782           return 1;
16783         }
16784
16785       /* If we are about to mark a frag as extended because the value
16786          is precisely the next value above maxtiny, then there is a
16787          chance of an infinite loop as in the following code:
16788              la $4,foo
16789              .skip      1020
16790              .align     2
16791            foo:
16792          In this case when the la is extended, foo is 0x3fc bytes
16793          away, so the la can be shrunk, but then foo is 0x400 away, so
16794          the la must be extended.  To avoid this loop, we mark the
16795          frag as extended if it was small, and is about to become
16796          extended with the next value above maxtiny.  */
16797       maxtiny = mips_int_operand_max (operand);
16798       if (val == maxtiny + (1 << operand->shift)
16799           && ! RELAX_MIPS16_EXTENDED (fragp->fr_subtype)
16800           && sec == NULL)
16801         {
16802           fragp->fr_subtype =
16803             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16804           return 1;
16805         }
16806     }
16807   else if (symsec != absolute_section && sec != NULL)
16808     as_bad_where (fragp->fr_file, fragp->fr_line, _("unsupported relocation"));
16809
16810   return !mips16_immed_in_range_p (operand, BFD_RELOC_UNUSED, val);
16811 }
16812
16813 /* Compute the length of a branch sequence, and adjust the
16814    RELAX_BRANCH_TOOFAR bit accordingly.  If FRAGP is NULL, the
16815    worst-case length is computed, with UPDATE being used to indicate
16816    whether an unconditional (-1), branch-likely (+1) or regular (0)
16817    branch is to be computed.  */
16818 static int
16819 relaxed_branch_length (fragS *fragp, asection *sec, int update)
16820 {
16821   bfd_boolean toofar;
16822   int length;
16823
16824   if (fragp
16825       && S_IS_DEFINED (fragp->fr_symbol)
16826       && !S_IS_WEAK (fragp->fr_symbol)
16827       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16828     {
16829       addressT addr;
16830       offsetT val;
16831
16832       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16833
16834       addr = fragp->fr_address + fragp->fr_fix + 4;
16835
16836       val -= addr;
16837
16838       toofar = val < - (0x8000 << 2) || val >= (0x8000 << 2);
16839     }
16840   else
16841     /* If the symbol is not defined or it's in a different segment,
16842        we emit the long sequence.  */
16843     toofar = TRUE;
16844
16845   if (fragp && update && toofar != RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
16846     fragp->fr_subtype
16847       = RELAX_BRANCH_ENCODE (RELAX_BRANCH_AT (fragp->fr_subtype),
16848                              RELAX_BRANCH_UNCOND (fragp->fr_subtype),
16849                              RELAX_BRANCH_LIKELY (fragp->fr_subtype),
16850                              RELAX_BRANCH_LINK (fragp->fr_subtype),
16851                              toofar);
16852
16853   length = 4;
16854   if (toofar)
16855     {
16856       if (fragp ? RELAX_BRANCH_LIKELY (fragp->fr_subtype) : (update > 0))
16857         length += 8;
16858
16859       if (mips_pic != NO_PIC)
16860         {
16861           /* Additional space for PIC loading of target address.  */
16862           length += 8;
16863           if (mips_opts.isa == ISA_MIPS1)
16864             /* Additional space for $at-stabilizing nop.  */
16865             length += 4;
16866         }
16867
16868       /* If branch is conditional.  */
16869       if (fragp ? !RELAX_BRANCH_UNCOND (fragp->fr_subtype) : (update >= 0))
16870         length += 8;
16871     }
16872
16873   return length;
16874 }
16875
16876 /* Compute the length of a branch sequence, and adjust the
16877    RELAX_MICROMIPS_TOOFAR32 bit accordingly.  If FRAGP is NULL, the
16878    worst-case length is computed, with UPDATE being used to indicate
16879    whether an unconditional (-1), or regular (0) branch is to be
16880    computed.  */
16881
16882 static int
16883 relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
16884 {
16885   bfd_boolean toofar;
16886   int length;
16887
16888   if (fragp
16889       && S_IS_DEFINED (fragp->fr_symbol)
16890       && !S_IS_WEAK (fragp->fr_symbol)
16891       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16892     {
16893       addressT addr;
16894       offsetT val;
16895
16896       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16897       /* Ignore the low bit in the target, since it will be set
16898          for a text label.  */
16899       if ((val & 1) != 0)
16900         --val;
16901
16902       addr = fragp->fr_address + fragp->fr_fix + 4;
16903
16904       val -= addr;
16905
16906       toofar = val < - (0x8000 << 1) || val >= (0x8000 << 1);
16907     }
16908   else
16909     /* If the symbol is not defined or it's in a different segment,
16910        we emit the long sequence.  */
16911     toofar = TRUE;
16912
16913   if (fragp && update
16914       && toofar != RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
16915     fragp->fr_subtype = (toofar
16916                          ? RELAX_MICROMIPS_MARK_TOOFAR32 (fragp->fr_subtype)
16917                          : RELAX_MICROMIPS_CLEAR_TOOFAR32 (fragp->fr_subtype));
16918
16919   length = 4;
16920   if (toofar)
16921     {
16922       bfd_boolean compact_known = fragp != NULL;
16923       bfd_boolean compact = FALSE;
16924       bfd_boolean uncond;
16925
16926       if (compact_known)
16927         compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
16928       if (fragp)
16929         uncond = RELAX_MICROMIPS_UNCOND (fragp->fr_subtype);
16930       else
16931         uncond = update < 0;
16932
16933       /* If label is out of range, we turn branch <br>:
16934
16935                 <br>    label                   # 4 bytes
16936             0:
16937
16938          into:
16939
16940                 j       label                   # 4 bytes
16941                 nop                             # 2 bytes if compact && !PIC
16942             0:
16943        */
16944       if (mips_pic == NO_PIC && (!compact_known || compact))
16945         length += 2;
16946
16947       /* If assembling PIC code, we further turn:
16948
16949                         j       label                   # 4 bytes
16950
16951          into:
16952
16953                         lw/ld   at, %got(label)(gp)     # 4 bytes
16954                         d/addiu at, %lo(label)          # 4 bytes
16955                         jr/c    at                      # 2 bytes
16956        */
16957       if (mips_pic != NO_PIC)
16958         length += 6;
16959
16960       /* If branch <br> is conditional, we prepend negated branch <brneg>:
16961
16962                         <brneg> 0f                      # 4 bytes
16963                         nop                             # 2 bytes if !compact
16964        */
16965       if (!uncond)
16966         length += (compact_known && compact) ? 4 : 6;
16967     }
16968
16969   return length;
16970 }
16971
16972 /* Compute the length of a branch, and adjust the RELAX_MICROMIPS_TOOFAR16
16973    bit accordingly.  */
16974
16975 static int
16976 relaxed_micromips_16bit_branch_length (fragS *fragp, asection *sec, int update)
16977 {
16978   bfd_boolean toofar;
16979
16980   if (fragp
16981       && S_IS_DEFINED (fragp->fr_symbol)
16982       && !S_IS_WEAK (fragp->fr_symbol)
16983       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16984     {
16985       addressT addr;
16986       offsetT val;
16987       int type;
16988
16989       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16990       /* Ignore the low bit in the target, since it will be set
16991          for a text label.  */
16992       if ((val & 1) != 0)
16993         --val;
16994
16995       /* Assume this is a 2-byte branch.  */
16996       addr = fragp->fr_address + fragp->fr_fix + 2;
16997
16998       /* We try to avoid the infinite loop by not adding 2 more bytes for
16999          long branches.  */
17000
17001       val -= addr;
17002
17003       type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
17004       if (type == 'D')
17005         toofar = val < - (0x200 << 1) || val >= (0x200 << 1);
17006       else if (type == 'E')
17007         toofar = val < - (0x40 << 1) || val >= (0x40 << 1);
17008       else
17009         abort ();
17010     }
17011   else
17012     /* If the symbol is not defined or it's in a different segment,
17013        we emit a normal 32-bit branch.  */
17014     toofar = TRUE;
17015
17016   if (fragp && update
17017       && toofar != RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
17018     fragp->fr_subtype
17019       = toofar ? RELAX_MICROMIPS_MARK_TOOFAR16 (fragp->fr_subtype)
17020                : RELAX_MICROMIPS_CLEAR_TOOFAR16 (fragp->fr_subtype);
17021
17022   if (toofar)
17023     return 4;
17024
17025   return 2;
17026 }
17027
17028 /* Estimate the size of a frag before relaxing.  Unless this is the
17029    mips16, we are not really relaxing here, and the final size is
17030    encoded in the subtype information.  For the mips16, we have to
17031    decide whether we are using an extended opcode or not.  */
17032
17033 int
17034 md_estimate_size_before_relax (fragS *fragp, asection *segtype)
17035 {
17036   int change;
17037
17038   if (RELAX_BRANCH_P (fragp->fr_subtype))
17039     {
17040
17041       fragp->fr_var = relaxed_branch_length (fragp, segtype, FALSE);
17042
17043       return fragp->fr_var;
17044     }
17045
17046   if (RELAX_MIPS16_P (fragp->fr_subtype))
17047     /* We don't want to modify the EXTENDED bit here; it might get us
17048        into infinite loops.  We change it only in mips_relax_frag().  */
17049     return (RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2);
17050
17051   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17052     {
17053       int length = 4;
17054
17055       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17056         length = relaxed_micromips_16bit_branch_length (fragp, segtype, FALSE);
17057       if (length == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17058         length = relaxed_micromips_32bit_branch_length (fragp, segtype, FALSE);
17059       fragp->fr_var = length;
17060
17061       return length;
17062     }
17063
17064   if (mips_pic == NO_PIC)
17065     change = nopic_need_relax (fragp->fr_symbol, 0);
17066   else if (mips_pic == SVR4_PIC)
17067     change = pic_need_relax (fragp->fr_symbol, segtype);
17068   else if (mips_pic == VXWORKS_PIC)
17069     /* For vxworks, GOT16 relocations never have a corresponding LO16.  */
17070     change = 0;
17071   else
17072     abort ();
17073
17074   if (change)
17075     {
17076       fragp->fr_subtype |= RELAX_USE_SECOND;
17077       return -RELAX_FIRST (fragp->fr_subtype);
17078     }
17079   else
17080     return -RELAX_SECOND (fragp->fr_subtype);
17081 }
17082
17083 /* This is called to see whether a reloc against a defined symbol
17084    should be converted into a reloc against a section.  */
17085
17086 int
17087 mips_fix_adjustable (fixS *fixp)
17088 {
17089   if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
17090       || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
17091     return 0;
17092
17093   if (fixp->fx_addsy == NULL)
17094     return 1;
17095
17096   /* Allow relocs used for EH tables.  */
17097   if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
17098     return 1;
17099
17100   /* If symbol SYM is in a mergeable section, relocations of the form
17101      SYM + 0 can usually be made section-relative.  The mergeable data
17102      is then identified by the section offset rather than by the symbol.
17103
17104      However, if we're generating REL LO16 relocations, the offset is split
17105      between the LO16 and parterning high part relocation.  The linker will
17106      need to recalculate the complete offset in order to correctly identify
17107      the merge data.
17108
17109      The linker has traditionally not looked for the parterning high part
17110      relocation, and has thus allowed orphaned R_MIPS_LO16 relocations to be
17111      placed anywhere.  Rather than break backwards compatibility by changing
17112      this, it seems better not to force the issue, and instead keep the
17113      original symbol.  This will work with either linker behavior.  */
17114   if ((lo16_reloc_p (fixp->fx_r_type)
17115        || reloc_needs_lo_p (fixp->fx_r_type))
17116       && HAVE_IN_PLACE_ADDENDS
17117       && (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
17118     return 0;
17119
17120   /* There is no place to store an in-place offset for JALR relocations.
17121      Likewise an in-range offset of limited PC-relative relocations may
17122      overflow the in-place relocatable field if recalculated against the
17123      start address of the symbol's containing section.
17124
17125      Also, PC relative relocations for MIPS R6 need to be symbol rather than
17126      section relative to allow linker relaxations to be performed later on.  */
17127   if ((HAVE_IN_PLACE_ADDENDS || ISA_IS_R6 (mips_opts.isa))
17128       && (limited_pcrel_reloc_p (fixp->fx_r_type)
17129           || jalr_reloc_p (fixp->fx_r_type)))
17130     return 0;
17131
17132   /* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
17133      to a floating-point stub.  The same is true for non-R_MIPS16_26
17134      relocations against MIPS16 functions; in this case, the stub becomes
17135      the function's canonical address.
17136
17137      Floating-point stubs are stored in unique .mips16.call.* or
17138      .mips16.fn.* sections.  If a stub T for function F is in section S,
17139      the first relocation in section S must be against F; this is how the
17140      linker determines the target function.  All relocations that might
17141      resolve to T must also be against F.  We therefore have the following
17142      restrictions, which are given in an intentionally-redundant way:
17143
17144        1. We cannot reduce R_MIPS16_26 relocations against non-MIPS16
17145           symbols.
17146
17147        2. We cannot reduce a stub's relocations against non-MIPS16 symbols
17148           if that stub might be used.
17149
17150        3. We cannot reduce non-R_MIPS16_26 relocations against MIPS16
17151           symbols.
17152
17153        4. We cannot reduce a stub's relocations against MIPS16 symbols if
17154           that stub might be used.
17155
17156      There is a further restriction:
17157
17158        5. We cannot reduce jump relocations (R_MIPS_26, R_MIPS16_26 or
17159           R_MICROMIPS_26_S1) against MIPS16 or microMIPS symbols on
17160           targets with in-place addends; the relocation field cannot
17161           encode the low bit.
17162
17163      For simplicity, we deal with (3)-(4) by not reducing _any_ relocation
17164      against a MIPS16 symbol.  We deal with (5) by by not reducing any
17165      such relocations on REL targets.
17166
17167      We deal with (1)-(2) by saying that, if there's a R_MIPS16_26
17168      relocation against some symbol R, no relocation against R may be
17169      reduced.  (Note that this deals with (2) as well as (1) because
17170      relocations against global symbols will never be reduced on ELF
17171      targets.)  This approach is a little simpler than trying to detect
17172      stub sections, and gives the "all or nothing" per-symbol consistency
17173      that we have for MIPS16 symbols.  */
17174   if (fixp->fx_subsy == NULL
17175       && (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy))
17176           || *symbol_get_tc (fixp->fx_addsy)
17177           || (HAVE_IN_PLACE_ADDENDS
17178               && ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy))
17179               && jmp_reloc_p (fixp->fx_r_type))))
17180     return 0;
17181
17182   return 1;
17183 }
17184
17185 /* Translate internal representation of relocation info to BFD target
17186    format.  */
17187
17188 arelent **
17189 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
17190 {
17191   static arelent *retval[4];
17192   arelent *reloc;
17193   bfd_reloc_code_real_type code;
17194
17195   memset (retval, 0, sizeof(retval));
17196   reloc = retval[0] = XCNEW (arelent);
17197   reloc->sym_ptr_ptr = XNEW (asymbol *);
17198   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
17199   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
17200
17201   if (fixp->fx_pcrel)
17202     {
17203       gas_assert (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
17204                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
17205                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
17206                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1
17207                   || fixp->fx_r_type == BFD_RELOC_32_PCREL
17208                   || fixp->fx_r_type == BFD_RELOC_MIPS_21_PCREL_S2
17209                   || fixp->fx_r_type == BFD_RELOC_MIPS_26_PCREL_S2
17210                   || fixp->fx_r_type == BFD_RELOC_MIPS_18_PCREL_S3
17211                   || fixp->fx_r_type == BFD_RELOC_MIPS_19_PCREL_S2
17212                   || fixp->fx_r_type == BFD_RELOC_HI16_S_PCREL
17213                   || fixp->fx_r_type == BFD_RELOC_LO16_PCREL);
17214
17215       /* At this point, fx_addnumber is "symbol offset - pcrel address".
17216          Relocations want only the symbol offset.  */
17217       reloc->addend = fixp->fx_addnumber + reloc->address;
17218     }
17219   else
17220     reloc->addend = fixp->fx_addnumber;
17221
17222   /* Since the old MIPS ELF ABI uses Rel instead of Rela, encode the vtable
17223      entry to be used in the relocation's section offset.  */
17224   if (! HAVE_NEWABI && fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
17225     {
17226       reloc->address = reloc->addend;
17227       reloc->addend = 0;
17228     }
17229
17230   code = fixp->fx_r_type;
17231
17232   reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
17233   if (reloc->howto == NULL)
17234     {
17235       as_bad_where (fixp->fx_file, fixp->fx_line,
17236                     _("cannot represent %s relocation in this object file"
17237                       " format"),
17238                     bfd_get_reloc_code_name (code));
17239       retval[0] = NULL;
17240     }
17241
17242   return retval;
17243 }
17244
17245 /* Relax a machine dependent frag.  This returns the amount by which
17246    the current size of the frag should change.  */
17247
17248 int
17249 mips_relax_frag (asection *sec, fragS *fragp, long stretch)
17250 {
17251   if (RELAX_BRANCH_P (fragp->fr_subtype))
17252     {
17253       offsetT old_var = fragp->fr_var;
17254
17255       fragp->fr_var = relaxed_branch_length (fragp, sec, TRUE);
17256
17257       return fragp->fr_var - old_var;
17258     }
17259
17260   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17261     {
17262       offsetT old_var = fragp->fr_var;
17263       offsetT new_var = 4;
17264
17265       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
17266         new_var = relaxed_micromips_16bit_branch_length (fragp, sec, TRUE);
17267       if (new_var == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
17268         new_var = relaxed_micromips_32bit_branch_length (fragp, sec, TRUE);
17269       fragp->fr_var = new_var;
17270
17271       return new_var - old_var;
17272     }
17273
17274   if (! RELAX_MIPS16_P (fragp->fr_subtype))
17275     return 0;
17276
17277   if (mips16_extended_frag (fragp, NULL, stretch))
17278     {
17279       if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17280         return 0;
17281       fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
17282       return 2;
17283     }
17284   else
17285     {
17286       if (! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
17287         return 0;
17288       fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
17289       return -2;
17290     }
17291
17292   return 0;
17293 }
17294
17295 /* Convert a machine dependent frag.  */
17296
17297 void
17298 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
17299 {
17300   if (RELAX_BRANCH_P (fragp->fr_subtype))
17301     {
17302       char *buf;
17303       unsigned long insn;
17304       expressionS exp;
17305       fixS *fixp;
17306
17307       buf = fragp->fr_literal + fragp->fr_fix;
17308       insn = read_insn (buf);
17309
17310       if (!RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
17311         {
17312           /* We generate a fixup instead of applying it right now
17313              because, if there are linker relaxations, we're going to
17314              need the relocations.  */
17315           exp.X_op = O_symbol;
17316           exp.X_add_symbol = fragp->fr_symbol;
17317           exp.X_add_number = fragp->fr_offset;
17318
17319           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
17320                               BFD_RELOC_16_PCREL_S2);
17321           fixp->fx_file = fragp->fr_file;
17322           fixp->fx_line = fragp->fr_line;
17323
17324           buf = write_insn (buf, insn);
17325         }
17326       else
17327         {
17328           int i;
17329
17330           as_warn_where (fragp->fr_file, fragp->fr_line,
17331                          _("relaxed out-of-range branch into a jump"));
17332
17333           if (RELAX_BRANCH_UNCOND (fragp->fr_subtype))
17334             goto uncond;
17335
17336           if (!RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17337             {
17338               /* Reverse the branch.  */
17339               switch ((insn >> 28) & 0xf)
17340                 {
17341                 case 4:
17342                   if ((insn & 0xff000000) == 0x47000000
17343                       || (insn & 0xff600000) == 0x45600000)
17344                     {
17345                       /* BZ.df/BNZ.df, BZ.V/BNZ.V can have the condition
17346                          reversed by tweaking bit 23.  */
17347                       insn ^= 0x00800000;
17348                     }
17349                   else
17350                     {
17351                       /* bc[0-3][tf]l? instructions can have the condition
17352                          reversed by tweaking a single TF bit, and their
17353                          opcodes all have 0x4???????.  */
17354                       gas_assert ((insn & 0xf3e00000) == 0x41000000);
17355                       insn ^= 0x00010000;
17356                     }
17357                   break;
17358
17359                 case 0:
17360                   /* bltz       0x04000000      bgez    0x04010000
17361                      bltzal     0x04100000      bgezal  0x04110000  */
17362                   gas_assert ((insn & 0xfc0e0000) == 0x04000000);
17363                   insn ^= 0x00010000;
17364                   break;
17365
17366                 case 1:
17367                   /* beq        0x10000000      bne     0x14000000
17368                      blez       0x18000000      bgtz    0x1c000000  */
17369                   insn ^= 0x04000000;
17370                   break;
17371
17372                 default:
17373                   abort ();
17374                 }
17375             }
17376
17377           if (RELAX_BRANCH_LINK (fragp->fr_subtype))
17378             {
17379               /* Clear the and-link bit.  */
17380               gas_assert ((insn & 0xfc1c0000) == 0x04100000);
17381
17382               /* bltzal         0x04100000      bgezal  0x04110000
17383                  bltzall        0x04120000      bgezall 0x04130000  */
17384               insn &= ~0x00100000;
17385             }
17386
17387           /* Branch over the branch (if the branch was likely) or the
17388              full jump (not likely case).  Compute the offset from the
17389              current instruction to branch to.  */
17390           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17391             i = 16;
17392           else
17393             {
17394               /* How many bytes in instructions we've already emitted?  */
17395               i = buf - fragp->fr_literal - fragp->fr_fix;
17396               /* How many bytes in instructions from here to the end?  */
17397               i = fragp->fr_var - i;
17398             }
17399           /* Convert to instruction count.  */
17400           i >>= 2;
17401           /* Branch counts from the next instruction.  */
17402           i--;
17403           insn |= i;
17404           /* Branch over the jump.  */
17405           buf = write_insn (buf, insn);
17406
17407           /* nop */
17408           buf = write_insn (buf, 0);
17409
17410           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
17411             {
17412               /* beql $0, $0, 2f */
17413               insn = 0x50000000;
17414               /* Compute the PC offset from the current instruction to
17415                  the end of the variable frag.  */
17416               /* How many bytes in instructions we've already emitted?  */
17417               i = buf - fragp->fr_literal - fragp->fr_fix;
17418               /* How many bytes in instructions from here to the end?  */
17419               i = fragp->fr_var - i;
17420               /* Convert to instruction count.  */
17421               i >>= 2;
17422               /* Don't decrement i, because we want to branch over the
17423                  delay slot.  */
17424               insn |= i;
17425
17426               buf = write_insn (buf, insn);
17427               buf = write_insn (buf, 0);
17428             }
17429
17430         uncond:
17431           if (mips_pic == NO_PIC)
17432             {
17433               /* j or jal.  */
17434               insn = (RELAX_BRANCH_LINK (fragp->fr_subtype)
17435                       ? 0x0c000000 : 0x08000000);
17436               exp.X_op = O_symbol;
17437               exp.X_add_symbol = fragp->fr_symbol;
17438               exp.X_add_number = fragp->fr_offset;
17439
17440               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17441                                   FALSE, BFD_RELOC_MIPS_JMP);
17442               fixp->fx_file = fragp->fr_file;
17443               fixp->fx_line = fragp->fr_line;
17444
17445               buf = write_insn (buf, insn);
17446             }
17447           else
17448             {
17449               unsigned long at = RELAX_BRANCH_AT (fragp->fr_subtype);
17450
17451               /* lw/ld $at, <sym>($gp)  R_MIPS_GOT16 */
17452               insn = HAVE_64BIT_ADDRESSES ? 0xdf800000 : 0x8f800000;
17453               insn |= at << OP_SH_RT;
17454               exp.X_op = O_symbol;
17455               exp.X_add_symbol = fragp->fr_symbol;
17456               exp.X_add_number = fragp->fr_offset;
17457
17458               if (fragp->fr_offset)
17459                 {
17460                   exp.X_add_symbol = make_expr_symbol (&exp);
17461                   exp.X_add_number = 0;
17462                 }
17463
17464               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17465                                   FALSE, BFD_RELOC_MIPS_GOT16);
17466               fixp->fx_file = fragp->fr_file;
17467               fixp->fx_line = fragp->fr_line;
17468
17469               buf = write_insn (buf, insn);
17470
17471               if (mips_opts.isa == ISA_MIPS1)
17472                 /* nop */
17473                 buf = write_insn (buf, 0);
17474
17475               /* d/addiu $at, $at, <sym>  R_MIPS_LO16 */
17476               insn = HAVE_64BIT_ADDRESSES ? 0x64000000 : 0x24000000;
17477               insn |= at << OP_SH_RS | at << OP_SH_RT;
17478
17479               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
17480                                   FALSE, BFD_RELOC_LO16);
17481               fixp->fx_file = fragp->fr_file;
17482               fixp->fx_line = fragp->fr_line;
17483
17484               buf = write_insn (buf, insn);
17485
17486               /* j(al)r $at.  */
17487               if (RELAX_BRANCH_LINK (fragp->fr_subtype))
17488                 insn = 0x0000f809;
17489               else
17490                 insn = 0x00000008;
17491               insn |= at << OP_SH_RS;
17492
17493               buf = write_insn (buf, insn);
17494             }
17495         }
17496
17497       fragp->fr_fix += fragp->fr_var;
17498       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17499       return;
17500     }
17501
17502   /* Relax microMIPS branches.  */
17503   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
17504     {
17505       char *buf = fragp->fr_literal + fragp->fr_fix;
17506       bfd_boolean compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
17507       bfd_boolean al = RELAX_MICROMIPS_LINK (fragp->fr_subtype);
17508       int type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
17509       bfd_boolean short_ds;
17510       unsigned long insn;
17511       expressionS exp;
17512       fixS *fixp;
17513
17514       exp.X_op = O_symbol;
17515       exp.X_add_symbol = fragp->fr_symbol;
17516       exp.X_add_number = fragp->fr_offset;
17517
17518       fragp->fr_fix += fragp->fr_var;
17519
17520       /* Handle 16-bit branches that fit or are forced to fit.  */
17521       if (type != 0 && !RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
17522         {
17523           /* We generate a fixup instead of applying it right now,
17524              because if there is linker relaxation, we're going to
17525              need the relocations.  */
17526           if (type == 'D')
17527             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
17528                                 BFD_RELOC_MICROMIPS_10_PCREL_S1);
17529           else if (type == 'E')
17530             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
17531                                 BFD_RELOC_MICROMIPS_7_PCREL_S1);
17532           else
17533             abort ();
17534
17535           fixp->fx_file = fragp->fr_file;
17536           fixp->fx_line = fragp->fr_line;
17537
17538           /* These relocations can have an addend that won't fit in
17539              2 octets.  */
17540           fixp->fx_no_overflow = 1;
17541
17542           return;
17543         }
17544
17545       /* Handle 32-bit branches that fit or are forced to fit.  */
17546       if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
17547           || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
17548         {
17549           /* We generate a fixup instead of applying it right now,
17550              because if there is linker relaxation, we're going to
17551              need the relocations.  */
17552           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
17553                               BFD_RELOC_MICROMIPS_16_PCREL_S1);
17554           fixp->fx_file = fragp->fr_file;
17555           fixp->fx_line = fragp->fr_line;
17556
17557           if (type == 0)
17558             return;
17559         }
17560
17561       /* Relax 16-bit branches to 32-bit branches.  */
17562       if (type != 0)
17563         {
17564           insn = read_compressed_insn (buf, 2);
17565
17566           if ((insn & 0xfc00) == 0xcc00)                /* b16  */
17567             insn = 0x94000000;                          /* beq  */
17568           else if ((insn & 0xdc00) == 0x8c00)           /* beqz16/bnez16  */
17569             {
17570               unsigned long regno;
17571
17572               regno = (insn >> MICROMIPSOP_SH_MD) & MICROMIPSOP_MASK_MD;
17573               regno = micromips_to_32_reg_d_map [regno];
17574               insn = ((insn & 0x2000) << 16) | 0x94000000;      /* beq/bne  */
17575               insn |= regno << MICROMIPSOP_SH_RS;
17576             }
17577           else
17578             abort ();
17579
17580           /* Nothing else to do, just write it out.  */
17581           if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
17582               || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
17583             {
17584               buf = write_compressed_insn (buf, insn, 4);
17585               gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17586               return;
17587             }
17588         }
17589       else
17590         insn = read_compressed_insn (buf, 4);
17591
17592       /* Relax 32-bit branches to a sequence of instructions.  */
17593       as_warn_where (fragp->fr_file, fragp->fr_line,
17594                      _("relaxed out-of-range branch into a jump"));
17595
17596       /* Set the short-delay-slot bit.  */
17597       short_ds = al && (insn & 0x02000000) != 0;
17598
17599       if (!RELAX_MICROMIPS_UNCOND (fragp->fr_subtype))
17600         {
17601           symbolS *l;
17602
17603           /* Reverse the branch.  */
17604           if ((insn & 0xfc000000) == 0x94000000                 /* beq  */
17605               || (insn & 0xfc000000) == 0xb4000000)             /* bne  */
17606             insn ^= 0x20000000;
17607           else if ((insn & 0xffe00000) == 0x40000000            /* bltz  */
17608                    || (insn & 0xffe00000) == 0x40400000         /* bgez  */
17609                    || (insn & 0xffe00000) == 0x40800000         /* blez  */
17610                    || (insn & 0xffe00000) == 0x40c00000         /* bgtz  */
17611                    || (insn & 0xffe00000) == 0x40a00000         /* bnezc  */
17612                    || (insn & 0xffe00000) == 0x40e00000         /* beqzc  */
17613                    || (insn & 0xffe00000) == 0x40200000         /* bltzal  */
17614                    || (insn & 0xffe00000) == 0x40600000         /* bgezal  */
17615                    || (insn & 0xffe00000) == 0x42200000         /* bltzals  */
17616                    || (insn & 0xffe00000) == 0x42600000)        /* bgezals  */
17617             insn ^= 0x00400000;
17618           else if ((insn & 0xffe30000) == 0x43800000            /* bc1f  */
17619                    || (insn & 0xffe30000) == 0x43a00000         /* bc1t  */
17620                    || (insn & 0xffe30000) == 0x42800000         /* bc2f  */
17621                    || (insn & 0xffe30000) == 0x42a00000)        /* bc2t  */
17622             insn ^= 0x00200000;
17623           else if ((insn & 0xff000000) == 0x83000000            /* BZ.df
17624                                                                    BNZ.df  */
17625                     || (insn & 0xff600000) == 0x81600000)       /* BZ.V
17626                                                                    BNZ.V */
17627             insn ^= 0x00800000;
17628           else
17629             abort ();
17630
17631           if (al)
17632             {
17633               /* Clear the and-link and short-delay-slot bits.  */
17634               gas_assert ((insn & 0xfda00000) == 0x40200000);
17635
17636               /* bltzal  0x40200000     bgezal  0x40600000  */
17637               /* bltzals 0x42200000     bgezals 0x42600000  */
17638               insn &= ~0x02200000;
17639             }
17640
17641           /* Make a label at the end for use with the branch.  */
17642           l = symbol_new (micromips_label_name (), asec, fragp->fr_fix, fragp);
17643           micromips_label_inc ();
17644           S_SET_OTHER (l, ELF_ST_SET_MICROMIPS (S_GET_OTHER (l)));
17645
17646           /* Refer to it.  */
17647           fixp = fix_new (fragp, buf - fragp->fr_literal, 4, l, 0, TRUE,
17648                           BFD_RELOC_MICROMIPS_16_PCREL_S1);
17649           fixp->fx_file = fragp->fr_file;
17650           fixp->fx_line = fragp->fr_line;
17651
17652           /* Branch over the jump.  */
17653           buf = write_compressed_insn (buf, insn, 4);
17654           if (!compact)
17655             /* nop */
17656             buf = write_compressed_insn (buf, 0x0c00, 2);
17657         }
17658
17659       if (mips_pic == NO_PIC)
17660         {
17661           unsigned long jal = short_ds ? 0x74000000 : 0xf4000000; /* jal/s  */
17662
17663           /* j/jal/jals <sym>  R_MICROMIPS_26_S1  */
17664           insn = al ? jal : 0xd4000000;
17665
17666           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17667                               BFD_RELOC_MICROMIPS_JMP);
17668           fixp->fx_file = fragp->fr_file;
17669           fixp->fx_line = fragp->fr_line;
17670
17671           buf = write_compressed_insn (buf, insn, 4);
17672           if (compact)
17673             /* nop */
17674             buf = write_compressed_insn (buf, 0x0c00, 2);
17675         }
17676       else
17677         {
17678           unsigned long at = RELAX_MICROMIPS_AT (fragp->fr_subtype);
17679           unsigned long jalr = short_ds ? 0x45e0 : 0x45c0;      /* jalr/s  */
17680           unsigned long jr = compact ? 0x45a0 : 0x4580;         /* jr/c  */
17681
17682           /* lw/ld $at, <sym>($gp)  R_MICROMIPS_GOT16  */
17683           insn = HAVE_64BIT_ADDRESSES ? 0xdc1c0000 : 0xfc1c0000;
17684           insn |= at << MICROMIPSOP_SH_RT;
17685
17686           if (exp.X_add_number)
17687             {
17688               exp.X_add_symbol = make_expr_symbol (&exp);
17689               exp.X_add_number = 0;
17690             }
17691
17692           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17693                               BFD_RELOC_MICROMIPS_GOT16);
17694           fixp->fx_file = fragp->fr_file;
17695           fixp->fx_line = fragp->fr_line;
17696
17697           buf = write_compressed_insn (buf, insn, 4);
17698
17699           /* d/addiu $at, $at, <sym>  R_MICROMIPS_LO16  */
17700           insn = HAVE_64BIT_ADDRESSES ? 0x5c000000 : 0x30000000;
17701           insn |= at << MICROMIPSOP_SH_RT | at << MICROMIPSOP_SH_RS;
17702
17703           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17704                               BFD_RELOC_MICROMIPS_LO16);
17705           fixp->fx_file = fragp->fr_file;
17706           fixp->fx_line = fragp->fr_line;
17707
17708           buf = write_compressed_insn (buf, insn, 4);
17709
17710           /* jr/jrc/jalr/jalrs $at  */
17711           insn = al ? jalr : jr;
17712           insn |= at << MICROMIPSOP_SH_MJ;
17713
17714           buf = write_compressed_insn (buf, insn, 2);
17715         }
17716
17717       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17718       return;
17719     }
17720
17721   if (RELAX_MIPS16_P (fragp->fr_subtype))
17722     {
17723       int type;
17724       const struct mips_int_operand *operand;
17725       offsetT val;
17726       char *buf;
17727       unsigned int user_length, length;
17728       unsigned long insn;
17729       bfd_boolean ext;
17730
17731       type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
17732       operand = mips16_immed_operand (type, FALSE);
17733
17734       ext = RELAX_MIPS16_EXTENDED (fragp->fr_subtype);
17735       val = resolve_symbol_value (fragp->fr_symbol);
17736       if (operand->root.type == OP_PCREL)
17737         {
17738           const struct mips_pcrel_operand *pcrel_op;
17739           addressT addr;
17740
17741           pcrel_op = (const struct mips_pcrel_operand *) operand;
17742           addr = fragp->fr_address + fragp->fr_fix;
17743
17744           /* The rules for the base address of a PC relative reloc are
17745              complicated; see mips16_extended_frag.  */
17746           if (pcrel_op->include_isa_bit)
17747             {
17748               addr += 2;
17749               if (ext)
17750                 addr += 2;
17751               /* Ignore the low bit in the target, since it will be
17752                  set for a text label.  */
17753               val &= -2;
17754             }
17755           else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
17756             addr -= 4;
17757           else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
17758             addr -= 2;
17759
17760           addr &= -(1 << pcrel_op->align_log2);
17761           val -= addr;
17762
17763           /* Make sure the section winds up with the alignment we have
17764              assumed.  */
17765           if (operand->shift > 0)
17766             record_alignment (asec, operand->shift);
17767         }
17768
17769       if (ext
17770           && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
17771               || RELAX_MIPS16_DSLOT (fragp->fr_subtype)))
17772         as_warn_where (fragp->fr_file, fragp->fr_line,
17773                        _("extended instruction in delay slot"));
17774
17775       buf = fragp->fr_literal + fragp->fr_fix;
17776
17777       insn = read_compressed_insn (buf, 2);
17778       if (ext)
17779         insn |= MIPS16_EXTEND;
17780
17781       if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
17782         user_length = 4;
17783       else if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
17784         user_length = 2;
17785       else
17786         user_length = 0;
17787
17788       mips16_immed (fragp->fr_file, fragp->fr_line, type,
17789                     BFD_RELOC_UNUSED, val, user_length, &insn);
17790
17791       length = (ext ? 4 : 2);
17792       gas_assert (mips16_opcode_length (insn) == length);
17793       write_compressed_insn (buf, insn, length);
17794       fragp->fr_fix += length;
17795     }
17796   else
17797     {
17798       relax_substateT subtype = fragp->fr_subtype;
17799       bfd_boolean second_longer = (subtype & RELAX_SECOND_LONGER) != 0;
17800       bfd_boolean use_second = (subtype & RELAX_USE_SECOND) != 0;
17801       int first, second;
17802       fixS *fixp;
17803
17804       first = RELAX_FIRST (subtype);
17805       second = RELAX_SECOND (subtype);
17806       fixp = (fixS *) fragp->fr_opcode;
17807
17808       /* If the delay slot chosen does not match the size of the instruction,
17809          then emit a warning.  */
17810       if ((!use_second && (subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0)
17811            || (use_second && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0))
17812         {
17813           relax_substateT s;
17814           const char *msg;
17815
17816           s = subtype & (RELAX_DELAY_SLOT_16BIT
17817                          | RELAX_DELAY_SLOT_SIZE_FIRST
17818                          | RELAX_DELAY_SLOT_SIZE_SECOND);
17819           msg = macro_warning (s);
17820           if (msg != NULL)
17821             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17822           subtype &= ~s;
17823         }
17824
17825       /* Possibly emit a warning if we've chosen the longer option.  */
17826       if (use_second == second_longer)
17827         {
17828           relax_substateT s;
17829           const char *msg;
17830
17831           s = (subtype
17832                & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT));
17833           msg = macro_warning (s);
17834           if (msg != NULL)
17835             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17836           subtype &= ~s;
17837         }
17838
17839       /* Go through all the fixups for the first sequence.  Disable them
17840          (by marking them as done) if we're going to use the second
17841          sequence instead.  */
17842       while (fixp
17843              && fixp->fx_frag == fragp
17844              && fixp->fx_where < fragp->fr_fix - second)
17845         {
17846           if (subtype & RELAX_USE_SECOND)
17847             fixp->fx_done = 1;
17848           fixp = fixp->fx_next;
17849         }
17850
17851       /* Go through the fixups for the second sequence.  Disable them if
17852          we're going to use the first sequence, otherwise adjust their
17853          addresses to account for the relaxation.  */
17854       while (fixp && fixp->fx_frag == fragp)
17855         {
17856           if (subtype & RELAX_USE_SECOND)
17857             fixp->fx_where -= first;
17858           else
17859             fixp->fx_done = 1;
17860           fixp = fixp->fx_next;
17861         }
17862
17863       /* Now modify the frag contents.  */
17864       if (subtype & RELAX_USE_SECOND)
17865         {
17866           char *start;
17867
17868           start = fragp->fr_literal + fragp->fr_fix - first - second;
17869           memmove (start, start + first, second);
17870           fragp->fr_fix -= first;
17871         }
17872       else
17873         fragp->fr_fix -= second;
17874     }
17875 }
17876
17877 /* This function is called after the relocs have been generated.
17878    We've been storing mips16 text labels as odd.  Here we convert them
17879    back to even for the convenience of the debugger.  */
17880
17881 void
17882 mips_frob_file_after_relocs (void)
17883 {
17884   asymbol **syms;
17885   unsigned int count, i;
17886
17887   syms = bfd_get_outsymbols (stdoutput);
17888   count = bfd_get_symcount (stdoutput);
17889   for (i = 0; i < count; i++, syms++)
17890     if (ELF_ST_IS_COMPRESSED (elf_symbol (*syms)->internal_elf_sym.st_other)
17891         && ((*syms)->value & 1) != 0)
17892       {
17893         (*syms)->value &= ~1;
17894         /* If the symbol has an odd size, it was probably computed
17895            incorrectly, so adjust that as well.  */
17896         if ((elf_symbol (*syms)->internal_elf_sym.st_size & 1) != 0)
17897           ++elf_symbol (*syms)->internal_elf_sym.st_size;
17898       }
17899 }
17900
17901 /* This function is called whenever a label is defined, including fake
17902    labels instantiated off the dot special symbol.  It is used when
17903    handling branch delays; if a branch has a label, we assume we cannot
17904    move it.  This also bumps the value of the symbol by 1 in compressed
17905    code.  */
17906
17907 static void
17908 mips_record_label (symbolS *sym)
17909 {
17910   segment_info_type *si = seg_info (now_seg);
17911   struct insn_label_list *l;
17912
17913   if (free_insn_labels == NULL)
17914     l = XNEW (struct insn_label_list);
17915   else
17916     {
17917       l = free_insn_labels;
17918       free_insn_labels = l->next;
17919     }
17920
17921   l->label = sym;
17922   l->next = si->label_list;
17923   si->label_list = l;
17924 }
17925
17926 /* This function is called as tc_frob_label() whenever a label is defined
17927    and adds a DWARF-2 record we only want for true labels.  */
17928
17929 void
17930 mips_define_label (symbolS *sym)
17931 {
17932   mips_record_label (sym);
17933   dwarf2_emit_label (sym);
17934 }
17935
17936 /* This function is called by tc_new_dot_label whenever a new dot symbol
17937    is defined.  */
17938
17939 void
17940 mips_add_dot_label (symbolS *sym)
17941 {
17942   mips_record_label (sym);
17943   if (mips_assembling_insn && HAVE_CODE_COMPRESSION)
17944     mips_compressed_mark_label (sym);
17945 }
17946 \f
17947 /* Converting ASE flags from internal to .MIPS.abiflags values.  */
17948 static unsigned int
17949 mips_convert_ase_flags (int ase)
17950 {
17951   unsigned int ext_ases = 0;
17952
17953   if (ase & ASE_DSP)
17954     ext_ases |= AFL_ASE_DSP;
17955   if (ase & ASE_DSPR2)
17956     ext_ases |= AFL_ASE_DSPR2;
17957   if (ase & ASE_EVA)
17958     ext_ases |= AFL_ASE_EVA;
17959   if (ase & ASE_MCU)
17960     ext_ases |= AFL_ASE_MCU;
17961   if (ase & ASE_MDMX)
17962     ext_ases |= AFL_ASE_MDMX;
17963   if (ase & ASE_MIPS3D)
17964     ext_ases |= AFL_ASE_MIPS3D;
17965   if (ase & ASE_MT)
17966     ext_ases |= AFL_ASE_MT;
17967   if (ase & ASE_SMARTMIPS)
17968     ext_ases |= AFL_ASE_SMARTMIPS;
17969   if (ase & ASE_VIRT)
17970     ext_ases |= AFL_ASE_VIRT;
17971   if (ase & ASE_MSA)
17972     ext_ases |= AFL_ASE_MSA;
17973   if (ase & ASE_XPA)
17974     ext_ases |= AFL_ASE_XPA;
17975
17976   return ext_ases;
17977 }
17978 /* Some special processing for a MIPS ELF file.  */
17979
17980 void
17981 mips_elf_final_processing (void)
17982 {
17983   int fpabi;
17984   Elf_Internal_ABIFlags_v0 flags;
17985
17986   flags.version = 0;
17987   flags.isa_rev = 0;
17988   switch (file_mips_opts.isa)
17989     {
17990     case INSN_ISA1:
17991       flags.isa_level = 1;
17992       break;
17993     case INSN_ISA2:
17994       flags.isa_level = 2;
17995       break;
17996     case INSN_ISA3:
17997       flags.isa_level = 3;
17998       break;
17999     case INSN_ISA4:
18000       flags.isa_level = 4;
18001       break;
18002     case INSN_ISA5:
18003       flags.isa_level = 5;
18004       break;
18005     case INSN_ISA32:
18006       flags.isa_level = 32;
18007       flags.isa_rev = 1;
18008       break;
18009     case INSN_ISA32R2:
18010       flags.isa_level = 32;
18011       flags.isa_rev = 2;
18012       break;
18013     case INSN_ISA32R3:
18014       flags.isa_level = 32;
18015       flags.isa_rev = 3;
18016       break;
18017     case INSN_ISA32R5:
18018       flags.isa_level = 32;
18019       flags.isa_rev = 5;
18020       break;
18021     case INSN_ISA32R6:
18022       flags.isa_level = 32;
18023       flags.isa_rev = 6;
18024       break;
18025     case INSN_ISA64:
18026       flags.isa_level = 64;
18027       flags.isa_rev = 1;
18028       break;
18029     case INSN_ISA64R2:
18030       flags.isa_level = 64;
18031       flags.isa_rev = 2;
18032       break;
18033     case INSN_ISA64R3:
18034       flags.isa_level = 64;
18035       flags.isa_rev = 3;
18036       break;
18037     case INSN_ISA64R5:
18038       flags.isa_level = 64;
18039       flags.isa_rev = 5;
18040       break;
18041     case INSN_ISA64R6:
18042       flags.isa_level = 64;
18043       flags.isa_rev = 6;
18044       break;
18045     }
18046
18047   flags.gpr_size = file_mips_opts.gp == 32 ? AFL_REG_32 : AFL_REG_64;
18048   flags.cpr1_size = file_mips_opts.soft_float ? AFL_REG_NONE
18049                     : (file_mips_opts.ase & ASE_MSA) ? AFL_REG_128
18050                     : (file_mips_opts.fp == 64) ? AFL_REG_64
18051                     : AFL_REG_32;
18052   flags.cpr2_size = AFL_REG_NONE;
18053   flags.fp_abi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
18054                                            Tag_GNU_MIPS_ABI_FP);
18055   flags.isa_ext = bfd_mips_isa_ext (stdoutput);
18056   flags.ases = mips_convert_ase_flags (file_mips_opts.ase);
18057   if (file_ase_mips16)
18058     flags.ases |= AFL_ASE_MIPS16;
18059   if (file_ase_micromips)
18060     flags.ases |= AFL_ASE_MICROMIPS;
18061   flags.flags1 = 0;
18062   if ((ISA_HAS_ODD_SINGLE_FPR (file_mips_opts.isa, file_mips_opts.arch)
18063        || file_mips_opts.fp == 64)
18064       && file_mips_opts.oddspreg)
18065     flags.flags1 |= AFL_FLAGS1_ODDSPREG;
18066   flags.flags2 = 0;
18067
18068   bfd_mips_elf_swap_abiflags_v0_out (stdoutput, &flags,
18069                                      ((Elf_External_ABIFlags_v0 *)
18070                                      mips_flags_frag));
18071
18072   /* Write out the register information.  */
18073   if (mips_abi != N64_ABI)
18074     {
18075       Elf32_RegInfo s;
18076
18077       s.ri_gprmask = mips_gprmask;
18078       s.ri_cprmask[0] = mips_cprmask[0];
18079       s.ri_cprmask[1] = mips_cprmask[1];
18080       s.ri_cprmask[2] = mips_cprmask[2];
18081       s.ri_cprmask[3] = mips_cprmask[3];
18082       /* The gp_value field is set by the MIPS ELF backend.  */
18083
18084       bfd_mips_elf32_swap_reginfo_out (stdoutput, &s,
18085                                        ((Elf32_External_RegInfo *)
18086                                         mips_regmask_frag));
18087     }
18088   else
18089     {
18090       Elf64_Internal_RegInfo s;
18091
18092       s.ri_gprmask = mips_gprmask;
18093       s.ri_pad = 0;
18094       s.ri_cprmask[0] = mips_cprmask[0];
18095       s.ri_cprmask[1] = mips_cprmask[1];
18096       s.ri_cprmask[2] = mips_cprmask[2];
18097       s.ri_cprmask[3] = mips_cprmask[3];
18098       /* The gp_value field is set by the MIPS ELF backend.  */
18099
18100       bfd_mips_elf64_swap_reginfo_out (stdoutput, &s,
18101                                        ((Elf64_External_RegInfo *)
18102                                         mips_regmask_frag));
18103     }
18104
18105   /* Set the MIPS ELF flag bits.  FIXME: There should probably be some
18106      sort of BFD interface for this.  */
18107   if (mips_any_noreorder)
18108     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NOREORDER;
18109   if (mips_pic != NO_PIC)
18110     {
18111       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_PIC;
18112       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
18113     }
18114   if (mips_abicalls)
18115     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
18116
18117   /* Set MIPS ELF flags for ASEs.  Note that not all ASEs have flags
18118      defined at present; this might need to change in future.  */
18119   if (file_ase_mips16)
18120     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_M16;
18121   if (file_ase_micromips)
18122     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MICROMIPS;
18123   if (file_mips_opts.ase & ASE_MDMX)
18124     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MDMX;
18125
18126   /* Set the MIPS ELF ABI flags.  */
18127   if (mips_abi == O32_ABI && USE_E_MIPS_ABI_O32)
18128     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O32;
18129   else if (mips_abi == O64_ABI)
18130     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O64;
18131   else if (mips_abi == EABI_ABI)
18132     {
18133       if (file_mips_opts.gp == 64)
18134         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI64;
18135       else
18136         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI32;
18137     }
18138   else if (mips_abi == N32_ABI)
18139     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ABI2;
18140
18141   /* Nothing to do for N64_ABI.  */
18142
18143   if (mips_32bitmode)
18144     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_32BITMODE;
18145
18146   if (mips_nan2008 == 1)
18147     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NAN2008;
18148
18149   /* 32 bit code with 64 bit FP registers.  */
18150   fpabi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
18151                                     Tag_GNU_MIPS_ABI_FP);
18152   if (fpabi == Val_GNU_MIPS_ABI_FP_OLD_64)
18153     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_FP64;
18154 }
18155 \f
18156 typedef struct proc {
18157   symbolS *func_sym;
18158   symbolS *func_end_sym;
18159   unsigned long reg_mask;
18160   unsigned long reg_offset;
18161   unsigned long fpreg_mask;
18162   unsigned long fpreg_offset;
18163   unsigned long frame_offset;
18164   unsigned long frame_reg;
18165   unsigned long pc_reg;
18166 } procS;
18167
18168 static procS cur_proc;
18169 static procS *cur_proc_ptr;
18170 static int numprocs;
18171
18172 /* Implement NOP_OPCODE.  We encode a MIPS16 nop as "1", a microMIPS nop
18173    as "2", and a normal nop as "0".  */
18174
18175 #define NOP_OPCODE_MIPS         0
18176 #define NOP_OPCODE_MIPS16       1
18177 #define NOP_OPCODE_MICROMIPS    2
18178
18179 char
18180 mips_nop_opcode (void)
18181 {
18182   if (seg_info (now_seg)->tc_segment_info_data.micromips)
18183     return NOP_OPCODE_MICROMIPS;
18184   else if (seg_info (now_seg)->tc_segment_info_data.mips16)
18185     return NOP_OPCODE_MIPS16;
18186   else
18187     return NOP_OPCODE_MIPS;
18188 }
18189
18190 /* Fill in an rs_align_code fragment.  Unlike elsewhere we want to use
18191    32-bit microMIPS NOPs here (if applicable).  */
18192
18193 void
18194 mips_handle_align (fragS *fragp)
18195 {
18196   char nop_opcode;
18197   char *p;
18198   int bytes, size, excess;
18199   valueT opcode;
18200
18201   if (fragp->fr_type != rs_align_code)
18202     return;
18203
18204   p = fragp->fr_literal + fragp->fr_fix;
18205   nop_opcode = *p;
18206   switch (nop_opcode)
18207     {
18208     case NOP_OPCODE_MICROMIPS:
18209       opcode = micromips_nop32_insn.insn_opcode;
18210       size = 4;
18211       break;
18212     case NOP_OPCODE_MIPS16:
18213       opcode = mips16_nop_insn.insn_opcode;
18214       size = 2;
18215       break;
18216     case NOP_OPCODE_MIPS:
18217     default:
18218       opcode = nop_insn.insn_opcode;
18219       size = 4;
18220       break;
18221     }
18222
18223   bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
18224   excess = bytes % size;
18225
18226   /* Handle the leading part if we're not inserting a whole number of
18227      instructions, and make it the end of the fixed part of the frag.
18228      Try to fit in a short microMIPS NOP if applicable and possible,
18229      and use zeroes otherwise.  */
18230   gas_assert (excess < 4);
18231   fragp->fr_fix += excess;
18232   switch (excess)
18233     {
18234     case 3:
18235       *p++ = '\0';
18236       /* Fall through.  */
18237     case 2:
18238       if (nop_opcode == NOP_OPCODE_MICROMIPS && !mips_opts.insn32)
18239         {
18240           p = write_compressed_insn (p, micromips_nop16_insn.insn_opcode, 2);
18241           break;
18242         }
18243       *p++ = '\0';
18244       /* Fall through.  */
18245     case 1:
18246       *p++ = '\0';
18247       /* Fall through.  */
18248     case 0:
18249       break;
18250     }
18251
18252   md_number_to_chars (p, opcode, size);
18253   fragp->fr_var = size;
18254 }
18255
18256 static long
18257 get_number (void)
18258 {
18259   int negative = 0;
18260   long val = 0;
18261
18262   if (*input_line_pointer == '-')
18263     {
18264       ++input_line_pointer;
18265       negative = 1;
18266     }
18267   if (!ISDIGIT (*input_line_pointer))
18268     as_bad (_("expected simple number"));
18269   if (input_line_pointer[0] == '0')
18270     {
18271       if (input_line_pointer[1] == 'x')
18272         {
18273           input_line_pointer += 2;
18274           while (ISXDIGIT (*input_line_pointer))
18275             {
18276               val <<= 4;
18277               val |= hex_value (*input_line_pointer++);
18278             }
18279           return negative ? -val : val;
18280         }
18281       else
18282         {
18283           ++input_line_pointer;
18284           while (ISDIGIT (*input_line_pointer))
18285             {
18286               val <<= 3;
18287               val |= *input_line_pointer++ - '0';
18288             }
18289           return negative ? -val : val;
18290         }
18291     }
18292   if (!ISDIGIT (*input_line_pointer))
18293     {
18294       printf (_(" *input_line_pointer == '%c' 0x%02x\n"),
18295               *input_line_pointer, *input_line_pointer);
18296       as_warn (_("invalid number"));
18297       return -1;
18298     }
18299   while (ISDIGIT (*input_line_pointer))
18300     {
18301       val *= 10;
18302       val += *input_line_pointer++ - '0';
18303     }
18304   return negative ? -val : val;
18305 }
18306
18307 /* The .file directive; just like the usual .file directive, but there
18308    is an initial number which is the ECOFF file index.  In the non-ECOFF
18309    case .file implies DWARF-2.  */
18310
18311 static void
18312 s_mips_file (int x ATTRIBUTE_UNUSED)
18313 {
18314   static int first_file_directive = 0;
18315
18316   if (ECOFF_DEBUGGING)
18317     {
18318       get_number ();
18319       s_app_file (0);
18320     }
18321   else
18322     {
18323       char *filename;
18324
18325       filename = dwarf2_directive_file (0);
18326
18327       /* Versions of GCC up to 3.1 start files with a ".file"
18328          directive even for stabs output.  Make sure that this
18329          ".file" is handled.  Note that you need a version of GCC
18330          after 3.1 in order to support DWARF-2 on MIPS.  */
18331       if (filename != NULL && ! first_file_directive)
18332         {
18333           (void) new_logical_line (filename, -1);
18334           s_app_file_string (filename, 0);
18335         }
18336       first_file_directive = 1;
18337     }
18338 }
18339
18340 /* The .loc directive, implying DWARF-2.  */
18341
18342 static void
18343 s_mips_loc (int x ATTRIBUTE_UNUSED)
18344 {
18345   if (!ECOFF_DEBUGGING)
18346     dwarf2_directive_loc (0);
18347 }
18348
18349 /* The .end directive.  */
18350
18351 static void
18352 s_mips_end (int x ATTRIBUTE_UNUSED)
18353 {
18354   symbolS *p;
18355
18356   /* Following functions need their own .frame and .cprestore directives.  */
18357   mips_frame_reg_valid = 0;
18358   mips_cprestore_valid = 0;
18359
18360   if (!is_end_of_line[(unsigned char) *input_line_pointer])
18361     {
18362       p = get_symbol ();
18363       demand_empty_rest_of_line ();
18364     }
18365   else
18366     p = NULL;
18367
18368   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
18369     as_warn (_(".end not in text section"));
18370
18371   if (!cur_proc_ptr)
18372     {
18373       as_warn (_(".end directive without a preceding .ent directive"));
18374       demand_empty_rest_of_line ();
18375       return;
18376     }
18377
18378   if (p != NULL)
18379     {
18380       gas_assert (S_GET_NAME (p));
18381       if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->func_sym)))
18382         as_warn (_(".end symbol does not match .ent symbol"));
18383
18384       if (debug_type == DEBUG_STABS)
18385         stabs_generate_asm_endfunc (S_GET_NAME (p),
18386                                     S_GET_NAME (p));
18387     }
18388   else
18389     as_warn (_(".end directive missing or unknown symbol"));
18390
18391   /* Create an expression to calculate the size of the function.  */
18392   if (p && cur_proc_ptr)
18393     {
18394       OBJ_SYMFIELD_TYPE *obj = symbol_get_obj (p);
18395       expressionS *exp = XNEW (expressionS);
18396
18397       obj->size = exp;
18398       exp->X_op = O_subtract;
18399       exp->X_add_symbol = symbol_temp_new_now ();
18400       exp->X_op_symbol = p;
18401       exp->X_add_number = 0;
18402
18403       cur_proc_ptr->func_end_sym = exp->X_add_symbol;
18404     }
18405
18406   /* Generate a .pdr section.  */
18407   if (!ECOFF_DEBUGGING && mips_flag_pdr)
18408     {
18409       segT saved_seg = now_seg;
18410       subsegT saved_subseg = now_subseg;
18411       expressionS exp;
18412       char *fragp;
18413
18414 #ifdef md_flush_pending_output
18415       md_flush_pending_output ();
18416 #endif
18417
18418       gas_assert (pdr_seg);
18419       subseg_set (pdr_seg, 0);
18420
18421       /* Write the symbol.  */
18422       exp.X_op = O_symbol;
18423       exp.X_add_symbol = p;
18424       exp.X_add_number = 0;
18425       emit_expr (&exp, 4);
18426
18427       fragp = frag_more (7 * 4);
18428
18429       md_number_to_chars (fragp, cur_proc_ptr->reg_mask, 4);
18430       md_number_to_chars (fragp + 4, cur_proc_ptr->reg_offset, 4);
18431       md_number_to_chars (fragp + 8, cur_proc_ptr->fpreg_mask, 4);
18432       md_number_to_chars (fragp + 12, cur_proc_ptr->fpreg_offset, 4);
18433       md_number_to_chars (fragp + 16, cur_proc_ptr->frame_offset, 4);
18434       md_number_to_chars (fragp + 20, cur_proc_ptr->frame_reg, 4);
18435       md_number_to_chars (fragp + 24, cur_proc_ptr->pc_reg, 4);
18436
18437       subseg_set (saved_seg, saved_subseg);
18438     }
18439
18440   cur_proc_ptr = NULL;
18441 }
18442
18443 /* The .aent and .ent directives.  */
18444
18445 static void
18446 s_mips_ent (int aent)
18447 {
18448   symbolS *symbolP;
18449
18450   symbolP = get_symbol ();
18451   if (*input_line_pointer == ',')
18452     ++input_line_pointer;
18453   SKIP_WHITESPACE ();
18454   if (ISDIGIT (*input_line_pointer)
18455       || *input_line_pointer == '-')
18456     get_number ();
18457
18458   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
18459     as_warn (_(".ent or .aent not in text section"));
18460
18461   if (!aent && cur_proc_ptr)
18462     as_warn (_("missing .end"));
18463
18464   if (!aent)
18465     {
18466       /* This function needs its own .frame and .cprestore directives.  */
18467       mips_frame_reg_valid = 0;
18468       mips_cprestore_valid = 0;
18469
18470       cur_proc_ptr = &cur_proc;
18471       memset (cur_proc_ptr, '\0', sizeof (procS));
18472
18473       cur_proc_ptr->func_sym = symbolP;
18474
18475       ++numprocs;
18476
18477       if (debug_type == DEBUG_STABS)
18478         stabs_generate_asm_func (S_GET_NAME (symbolP),
18479                                  S_GET_NAME (symbolP));
18480     }
18481
18482   symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
18483
18484   demand_empty_rest_of_line ();
18485 }
18486
18487 /* The .frame directive. If the mdebug section is present (IRIX 5 native)
18488    then ecoff.c (ecoff_directive_frame) is used. For embedded targets,
18489    s_mips_frame is used so that we can set the PDR information correctly.
18490    We can't use the ecoff routines because they make reference to the ecoff
18491    symbol table (in the mdebug section).  */
18492
18493 static void
18494 s_mips_frame (int ignore ATTRIBUTE_UNUSED)
18495 {
18496   if (ECOFF_DEBUGGING)
18497     s_ignore (ignore);
18498   else
18499     {
18500       long val;
18501
18502       if (cur_proc_ptr == (procS *) NULL)
18503         {
18504           as_warn (_(".frame outside of .ent"));
18505           demand_empty_rest_of_line ();
18506           return;
18507         }
18508
18509       cur_proc_ptr->frame_reg = tc_get_register (1);
18510
18511       SKIP_WHITESPACE ();
18512       if (*input_line_pointer++ != ','
18513           || get_absolute_expression_and_terminator (&val) != ',')
18514         {
18515           as_warn (_("bad .frame directive"));
18516           --input_line_pointer;
18517           demand_empty_rest_of_line ();
18518           return;
18519         }
18520
18521       cur_proc_ptr->frame_offset = val;
18522       cur_proc_ptr->pc_reg = tc_get_register (0);
18523
18524       demand_empty_rest_of_line ();
18525     }
18526 }
18527
18528 /* The .fmask and .mask directives. If the mdebug section is present
18529    (IRIX 5 native) then ecoff.c (ecoff_directive_mask) is used. For
18530    embedded targets, s_mips_mask is used so that we can set the PDR
18531    information correctly. We can't use the ecoff routines because they
18532    make reference to the ecoff symbol table (in the mdebug section).  */
18533
18534 static void
18535 s_mips_mask (int reg_type)
18536 {
18537   if (ECOFF_DEBUGGING)
18538     s_ignore (reg_type);
18539   else
18540     {
18541       long mask, off;
18542
18543       if (cur_proc_ptr == (procS *) NULL)
18544         {
18545           as_warn (_(".mask/.fmask outside of .ent"));
18546           demand_empty_rest_of_line ();
18547           return;
18548         }
18549
18550       if (get_absolute_expression_and_terminator (&mask) != ',')
18551         {
18552           as_warn (_("bad .mask/.fmask directive"));
18553           --input_line_pointer;
18554           demand_empty_rest_of_line ();
18555           return;
18556         }
18557
18558       off = get_absolute_expression ();
18559
18560       if (reg_type == 'F')
18561         {
18562           cur_proc_ptr->fpreg_mask = mask;
18563           cur_proc_ptr->fpreg_offset = off;
18564         }
18565       else
18566         {
18567           cur_proc_ptr->reg_mask = mask;
18568           cur_proc_ptr->reg_offset = off;
18569         }
18570
18571       demand_empty_rest_of_line ();
18572     }
18573 }
18574
18575 /* A table describing all the processors gas knows about.  Names are
18576    matched in the order listed.
18577
18578    To ease comparison, please keep this table in the same order as
18579    gcc's mips_cpu_info_table[].  */
18580 static const struct mips_cpu_info mips_cpu_info_table[] =
18581 {
18582   /* Entries for generic ISAs */
18583   { "mips1",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS1,    CPU_R3000 },
18584   { "mips2",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS2,    CPU_R6000 },
18585   { "mips3",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS3,    CPU_R4000 },
18586   { "mips4",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS4,    CPU_R8000 },
18587   { "mips5",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS5,    CPU_MIPS5 },
18588   { "mips32",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS32,   CPU_MIPS32 },
18589   { "mips32r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R2, CPU_MIPS32R2 },
18590   { "mips32r3",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R3, CPU_MIPS32R3 },
18591   { "mips32r5",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R5, CPU_MIPS32R5 },
18592   { "mips32r6",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R6, CPU_MIPS32R6 },
18593   { "mips64",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS64,   CPU_MIPS64 },
18594   { "mips64r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R2, CPU_MIPS64R2 },
18595   { "mips64r3",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R3, CPU_MIPS64R3 },
18596   { "mips64r5",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R5, CPU_MIPS64R5 },
18597   { "mips64r6",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R6, CPU_MIPS64R6 },
18598
18599   /* MIPS I */
18600   { "r3000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
18601   { "r2000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
18602   { "r3900",          0, 0,                     ISA_MIPS1,    CPU_R3900 },
18603
18604   /* MIPS II */
18605   { "r6000",          0, 0,                     ISA_MIPS2,    CPU_R6000 },
18606
18607   /* MIPS III */
18608   { "r4000",          0, 0,                     ISA_MIPS3,    CPU_R4000 },
18609   { "r4010",          0, 0,                     ISA_MIPS2,    CPU_R4010 },
18610   { "vr4100",         0, 0,                     ISA_MIPS3,    CPU_VR4100 },
18611   { "vr4111",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
18612   { "vr4120",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
18613   { "vr4130",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
18614   { "vr4181",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
18615   { "vr4300",         0, 0,                     ISA_MIPS3,    CPU_R4300 },
18616   { "r4400",          0, 0,                     ISA_MIPS3,    CPU_R4400 },
18617   { "r4600",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
18618   { "orion",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
18619   { "r4650",          0, 0,                     ISA_MIPS3,    CPU_R4650 },
18620   { "r5900",          0, 0,                     ISA_MIPS3,    CPU_R5900 },
18621   /* ST Microelectronics Loongson 2E and 2F cores */
18622   { "loongson2e",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2E },
18623   { "loongson2f",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2F },
18624
18625   /* MIPS IV */
18626   { "r8000",          0, 0,                     ISA_MIPS4,    CPU_R8000 },
18627   { "r10000",         0, 0,                     ISA_MIPS4,    CPU_R10000 },
18628   { "r12000",         0, 0,                     ISA_MIPS4,    CPU_R12000 },
18629   { "r14000",         0, 0,                     ISA_MIPS4,    CPU_R14000 },
18630   { "r16000",         0, 0,                     ISA_MIPS4,    CPU_R16000 },
18631   { "vr5000",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18632   { "vr5400",         0, 0,                     ISA_MIPS4,    CPU_VR5400 },
18633   { "vr5500",         0, 0,                     ISA_MIPS4,    CPU_VR5500 },
18634   { "rm5200",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18635   { "rm5230",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18636   { "rm5231",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18637   { "rm5261",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18638   { "rm5721",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
18639   { "rm7000",         0, 0,                     ISA_MIPS4,    CPU_RM7000 },
18640   { "rm9000",         0, 0,                     ISA_MIPS4,    CPU_RM9000 },
18641
18642   /* MIPS 32 */
18643   { "4kc",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
18644   { "4km",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
18645   { "4kp",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
18646   { "4ksc",           0, ASE_SMARTMIPS,         ISA_MIPS32,   CPU_MIPS32 },
18647
18648   /* MIPS 32 Release 2 */
18649   { "4kec",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18650   { "4kem",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18651   { "4kep",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18652   { "4ksd",           0, ASE_SMARTMIPS,         ISA_MIPS32R2, CPU_MIPS32R2 },
18653   { "m4k",            0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18654   { "m4kp",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18655   { "m14k",           0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
18656   { "m14kc",          0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
18657   { "m14ke",          0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
18658                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
18659   { "m14kec",         0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
18660                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
18661   { "24kc",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18662   { "24kf2_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18663   { "24kf",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18664   { "24kf1_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18665   /* Deprecated forms of the above.  */
18666   { "24kfx",          0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18667   { "24kx",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
18668   /* 24KE is a 24K with DSP ASE, other ASEs are optional.  */
18669   { "24kec",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18670   { "24kef2_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18671   { "24kef",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18672   { "24kef1_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18673   /* Deprecated forms of the above.  */
18674   { "24kefx",         0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18675   { "24kex",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
18676   /* 34K is a 24K with DSP and MT ASE, other ASEs are optional.  */
18677   { "34kc",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18678   { "34kf2_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18679   { "34kf",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18680   { "34kf1_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18681   /* Deprecated forms of the above.  */
18682   { "34kfx",          0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18683   { "34kx",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18684   /* 34Kn is a 34kc without DSP.  */
18685   { "34kn",           0, ASE_MT,                ISA_MIPS32R2, CPU_MIPS32R2 },
18686   /* 74K with DSP and DSPR2 ASE, other ASEs are optional.  */
18687   { "74kc",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18688   { "74kf2_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18689   { "74kf",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18690   { "74kf1_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18691   { "74kf3_2",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18692   /* Deprecated forms of the above.  */
18693   { "74kfx",          0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18694   { "74kx",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
18695   /* 1004K cores are multiprocessor versions of the 34K.  */
18696   { "1004kc",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18697   { "1004kf2_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18698   { "1004kf",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18699   { "1004kf1_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18700   /* interaptiv is the new name for 1004kf */
18701   { "interaptiv",     0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
18702   /* M5100 family */
18703   { "m5100",          0, ASE_MCU,               ISA_MIPS32R5, CPU_MIPS32R5 },
18704   { "m5101",          0, ASE_MCU,               ISA_MIPS32R5, CPU_MIPS32R5 },
18705   /* P5600 with EVA and Virtualization ASEs, other ASEs are optional.  */
18706   { "p5600",          0, ASE_VIRT | ASE_EVA | ASE_XPA,  ISA_MIPS32R5, CPU_MIPS32R5 },
18707
18708   /* MIPS 64 */
18709   { "5kc",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
18710   { "5kf",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
18711   { "20kc",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
18712   { "25kf",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
18713
18714   /* Broadcom SB-1 CPU core */
18715   { "sb1",            0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
18716   /* Broadcom SB-1A CPU core */
18717   { "sb1a",           0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
18718
18719   { "loongson3a",     0, 0,                     ISA_MIPS64R2, CPU_LOONGSON_3A },
18720
18721   /* MIPS 64 Release 2 */
18722
18723   /* Cavium Networks Octeon CPU core */
18724   { "octeon",         0, 0,                     ISA_MIPS64R2, CPU_OCTEON },
18725   { "octeon+",        0, 0,                     ISA_MIPS64R2, CPU_OCTEONP },
18726   { "octeon2",        0, 0,                     ISA_MIPS64R2, CPU_OCTEON2 },
18727   { "octeon3",        0, ASE_VIRT | ASE_VIRT64, ISA_MIPS64R5, CPU_OCTEON3 },
18728
18729   /* RMI Xlr */
18730   { "xlr",            0, 0,                     ISA_MIPS64,   CPU_XLR },
18731
18732   /* Broadcom XLP.
18733      XLP is mostly like XLR, with the prominent exception that it is
18734      MIPS64R2 rather than MIPS64.  */
18735   { "xlp",            0, 0,                     ISA_MIPS64R2, CPU_XLR },
18736
18737   /* i6400.  */
18738   { "i6400",          0, ASE_MSA,               ISA_MIPS64R6, CPU_MIPS64R6},
18739
18740   /* End marker */
18741   { NULL, 0, 0, 0, 0 }
18742 };
18743
18744
18745 /* Return true if GIVEN is the same as CANONICAL, or if it is CANONICAL
18746    with a final "000" replaced by "k".  Ignore case.
18747
18748    Note: this function is shared between GCC and GAS.  */
18749
18750 static bfd_boolean
18751 mips_strict_matching_cpu_name_p (const char *canonical, const char *given)
18752 {
18753   while (*given != 0 && TOLOWER (*given) == TOLOWER (*canonical))
18754     given++, canonical++;
18755
18756   return ((*given == 0 && *canonical == 0)
18757           || (strcmp (canonical, "000") == 0 && strcasecmp (given, "k") == 0));
18758 }
18759
18760
18761 /* Return true if GIVEN matches CANONICAL, where GIVEN is a user-supplied
18762    CPU name.  We've traditionally allowed a lot of variation here.
18763
18764    Note: this function is shared between GCC and GAS.  */
18765
18766 static bfd_boolean
18767 mips_matching_cpu_name_p (const char *canonical, const char *given)
18768 {
18769   /* First see if the name matches exactly, or with a final "000"
18770      turned into "k".  */
18771   if (mips_strict_matching_cpu_name_p (canonical, given))
18772     return TRUE;
18773
18774   /* If not, try comparing based on numerical designation alone.
18775      See if GIVEN is an unadorned number, or 'r' followed by a number.  */
18776   if (TOLOWER (*given) == 'r')
18777     given++;
18778   if (!ISDIGIT (*given))
18779     return FALSE;
18780
18781   /* Skip over some well-known prefixes in the canonical name,
18782      hoping to find a number there too.  */
18783   if (TOLOWER (canonical[0]) == 'v' && TOLOWER (canonical[1]) == 'r')
18784     canonical += 2;
18785   else if (TOLOWER (canonical[0]) == 'r' && TOLOWER (canonical[1]) == 'm')
18786     canonical += 2;
18787   else if (TOLOWER (canonical[0]) == 'r')
18788     canonical += 1;
18789
18790   return mips_strict_matching_cpu_name_p (canonical, given);
18791 }
18792
18793
18794 /* Parse an option that takes the name of a processor as its argument.
18795    OPTION is the name of the option and CPU_STRING is the argument.
18796    Return the corresponding processor enumeration if the CPU_STRING is
18797    recognized, otherwise report an error and return null.
18798
18799    A similar function exists in GCC.  */
18800
18801 static const struct mips_cpu_info *
18802 mips_parse_cpu (const char *option, const char *cpu_string)
18803 {
18804   const struct mips_cpu_info *p;
18805
18806   /* 'from-abi' selects the most compatible architecture for the given
18807      ABI: MIPS I for 32-bit ABIs and MIPS III for 64-bit ABIs.  For the
18808      EABIs, we have to decide whether we're using the 32-bit or 64-bit
18809      version.  Look first at the -mgp options, if given, otherwise base
18810      the choice on MIPS_DEFAULT_64BIT.
18811
18812      Treat NO_ABI like the EABIs.  One reason to do this is that the
18813      plain 'mips' and 'mips64' configs have 'from-abi' as their default
18814      architecture.  This code picks MIPS I for 'mips' and MIPS III for
18815      'mips64', just as we did in the days before 'from-abi'.  */
18816   if (strcasecmp (cpu_string, "from-abi") == 0)
18817     {
18818       if (ABI_NEEDS_32BIT_REGS (mips_abi))
18819         return mips_cpu_info_from_isa (ISA_MIPS1);
18820
18821       if (ABI_NEEDS_64BIT_REGS (mips_abi))
18822         return mips_cpu_info_from_isa (ISA_MIPS3);
18823
18824       if (file_mips_opts.gp >= 0)
18825         return mips_cpu_info_from_isa (file_mips_opts.gp == 32
18826                                        ? ISA_MIPS1 : ISA_MIPS3);
18827
18828       return mips_cpu_info_from_isa (MIPS_DEFAULT_64BIT
18829                                      ? ISA_MIPS3
18830                                      : ISA_MIPS1);
18831     }
18832
18833   /* 'default' has traditionally been a no-op.  Probably not very useful.  */
18834   if (strcasecmp (cpu_string, "default") == 0)
18835     return 0;
18836
18837   for (p = mips_cpu_info_table; p->name != 0; p++)
18838     if (mips_matching_cpu_name_p (p->name, cpu_string))
18839       return p;
18840
18841   as_bad (_("bad value (%s) for %s"), cpu_string, option);
18842   return 0;
18843 }
18844
18845 /* Return the canonical processor information for ISA (a member of the
18846    ISA_MIPS* enumeration).  */
18847
18848 static const struct mips_cpu_info *
18849 mips_cpu_info_from_isa (int isa)
18850 {
18851   int i;
18852
18853   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18854     if ((mips_cpu_info_table[i].flags & MIPS_CPU_IS_ISA)
18855         && isa == mips_cpu_info_table[i].isa)
18856       return (&mips_cpu_info_table[i]);
18857
18858   return NULL;
18859 }
18860
18861 static const struct mips_cpu_info *
18862 mips_cpu_info_from_arch (int arch)
18863 {
18864   int i;
18865
18866   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18867     if (arch == mips_cpu_info_table[i].cpu)
18868       return (&mips_cpu_info_table[i]);
18869
18870   return NULL;
18871 }
18872 \f
18873 static void
18874 show (FILE *stream, const char *string, int *col_p, int *first_p)
18875 {
18876   if (*first_p)
18877     {
18878       fprintf (stream, "%24s", "");
18879       *col_p = 24;
18880     }
18881   else
18882     {
18883       fprintf (stream, ", ");
18884       *col_p += 2;
18885     }
18886
18887   if (*col_p + strlen (string) > 72)
18888     {
18889       fprintf (stream, "\n%24s", "");
18890       *col_p = 24;
18891     }
18892
18893   fprintf (stream, "%s", string);
18894   *col_p += strlen (string);
18895
18896   *first_p = 0;
18897 }
18898
18899 void
18900 md_show_usage (FILE *stream)
18901 {
18902   int column, first;
18903   size_t i;
18904
18905   fprintf (stream, _("\
18906 MIPS options:\n\
18907 -EB                     generate big endian output\n\
18908 -EL                     generate little endian output\n\
18909 -g, -g2                 do not remove unneeded NOPs or swap branches\n\
18910 -G NUM                  allow referencing objects up to NUM bytes\n\
18911                         implicitly with the gp register [default 8]\n"));
18912   fprintf (stream, _("\
18913 -mips1                  generate MIPS ISA I instructions\n\
18914 -mips2                  generate MIPS ISA II instructions\n\
18915 -mips3                  generate MIPS ISA III instructions\n\
18916 -mips4                  generate MIPS ISA IV instructions\n\
18917 -mips5                  generate MIPS ISA V instructions\n\
18918 -mips32                 generate MIPS32 ISA instructions\n\
18919 -mips32r2               generate MIPS32 release 2 ISA instructions\n\
18920 -mips32r3               generate MIPS32 release 3 ISA instructions\n\
18921 -mips32r5               generate MIPS32 release 5 ISA instructions\n\
18922 -mips32r6               generate MIPS32 release 6 ISA instructions\n\
18923 -mips64                 generate MIPS64 ISA instructions\n\
18924 -mips64r2               generate MIPS64 release 2 ISA instructions\n\
18925 -mips64r3               generate MIPS64 release 3 ISA instructions\n\
18926 -mips64r5               generate MIPS64 release 5 ISA instructions\n\
18927 -mips64r6               generate MIPS64 release 6 ISA instructions\n\
18928 -march=CPU/-mtune=CPU   generate code/schedule for CPU, where CPU is one of:\n"));
18929
18930   first = 1;
18931
18932   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18933     show (stream, mips_cpu_info_table[i].name, &column, &first);
18934   show (stream, "from-abi", &column, &first);
18935   fputc ('\n', stream);
18936
18937   fprintf (stream, _("\
18938 -mCPU                   equivalent to -march=CPU -mtune=CPU. Deprecated.\n\
18939 -no-mCPU                don't generate code specific to CPU.\n\
18940                         For -mCPU and -no-mCPU, CPU must be one of:\n"));
18941
18942   first = 1;
18943
18944   show (stream, "3900", &column, &first);
18945   show (stream, "4010", &column, &first);
18946   show (stream, "4100", &column, &first);
18947   show (stream, "4650", &column, &first);
18948   fputc ('\n', stream);
18949
18950   fprintf (stream, _("\
18951 -mips16                 generate mips16 instructions\n\
18952 -no-mips16              do not generate mips16 instructions\n"));
18953   fprintf (stream, _("\
18954 -mmicromips             generate microMIPS instructions\n\
18955 -mno-micromips          do not generate microMIPS instructions\n"));
18956   fprintf (stream, _("\
18957 -msmartmips             generate smartmips instructions\n\
18958 -mno-smartmips          do not generate smartmips instructions\n"));
18959   fprintf (stream, _("\
18960 -mdsp                   generate DSP instructions\n\
18961 -mno-dsp                do not generate DSP instructions\n"));
18962   fprintf (stream, _("\
18963 -mdspr2                 generate DSP R2 instructions\n\
18964 -mno-dspr2              do not generate DSP R2 instructions\n"));
18965   fprintf (stream, _("\
18966 -mmt                    generate MT instructions\n\
18967 -mno-mt                 do not generate MT instructions\n"));
18968   fprintf (stream, _("\
18969 -mmcu                   generate MCU instructions\n\
18970 -mno-mcu                do not generate MCU instructions\n"));
18971   fprintf (stream, _("\
18972 -mmsa                   generate MSA instructions\n\
18973 -mno-msa                do not generate MSA instructions\n"));
18974   fprintf (stream, _("\
18975 -mxpa                   generate eXtended Physical Address (XPA) instructions\n\
18976 -mno-xpa                do not generate eXtended Physical Address (XPA) instructions\n"));
18977   fprintf (stream, _("\
18978 -mvirt                  generate Virtualization instructions\n\
18979 -mno-virt               do not generate Virtualization instructions\n"));
18980   fprintf (stream, _("\
18981 -minsn32                only generate 32-bit microMIPS instructions\n\
18982 -mno-insn32             generate all microMIPS instructions\n"));
18983   fprintf (stream, _("\
18984 -mfix-loongson2f-jump   work around Loongson2F JUMP instructions\n\
18985 -mfix-loongson2f-nop    work around Loongson2F NOP errata\n\
18986 -mfix-vr4120            work around certain VR4120 errata\n\
18987 -mfix-vr4130            work around VR4130 mflo/mfhi errata\n\
18988 -mfix-24k               insert a nop after ERET and DERET instructions\n\
18989 -mfix-cn63xxp1          work around CN63XXP1 PREF errata\n\
18990 -mgp32                  use 32-bit GPRs, regardless of the chosen ISA\n\
18991 -mfp32                  use 32-bit FPRs, regardless of the chosen ISA\n\
18992 -msym32                 assume all symbols have 32-bit values\n\
18993 -O0                     remove unneeded NOPs, do not swap branches\n\
18994 -O                      remove unneeded NOPs and swap branches\n\
18995 --trap, --no-break      trap exception on div by 0 and mult overflow\n\
18996 --break, --no-trap      break exception on div by 0 and mult overflow\n"));
18997   fprintf (stream, _("\
18998 -mhard-float            allow floating-point instructions\n\
18999 -msoft-float            do not allow floating-point instructions\n\
19000 -msingle-float          only allow 32-bit floating-point operations\n\
19001 -mdouble-float          allow 32-bit and 64-bit floating-point operations\n\
19002 --[no-]construct-floats [dis]allow floating point values to be constructed\n\
19003 --[no-]relax-branch     [dis]allow out-of-range branches to be relaxed\n\
19004 -mnan=ENCODING          select an IEEE 754 NaN encoding convention, either of:\n"));
19005
19006   first = 1;
19007
19008   show (stream, "legacy", &column, &first);
19009   show (stream, "2008", &column, &first);
19010
19011   fputc ('\n', stream);
19012
19013   fprintf (stream, _("\
19014 -KPIC, -call_shared     generate SVR4 position independent code\n\
19015 -call_nonpic            generate non-PIC code that can operate with DSOs\n\
19016 -mvxworks-pic           generate VxWorks position independent code\n\
19017 -non_shared             do not generate code that can operate with DSOs\n\
19018 -xgot                   assume a 32 bit GOT\n\
19019 -mpdr, -mno-pdr         enable/disable creation of .pdr sections\n\
19020 -mshared, -mno-shared   disable/enable .cpload optimization for\n\
19021                         position dependent (non shared) code\n\
19022 -mabi=ABI               create ABI conformant object file for:\n"));
19023
19024   first = 1;
19025
19026   show (stream, "32", &column, &first);
19027   show (stream, "o64", &column, &first);
19028   show (stream, "n32", &column, &first);
19029   show (stream, "64", &column, &first);
19030   show (stream, "eabi", &column, &first);
19031
19032   fputc ('\n', stream);
19033
19034   fprintf (stream, _("\
19035 -32                     create o32 ABI object file (default)\n\
19036 -n32                    create n32 ABI object file\n\
19037 -64                     create 64 ABI object file\n"));
19038 }
19039
19040 #ifdef TE_IRIX
19041 enum dwarf2_format
19042 mips_dwarf2_format (asection *sec ATTRIBUTE_UNUSED)
19043 {
19044   if (HAVE_64BIT_SYMBOLS)
19045     return dwarf2_format_64bit_irix;
19046   else
19047     return dwarf2_format_32bit;
19048 }
19049 #endif
19050
19051 int
19052 mips_dwarf2_addr_size (void)
19053 {
19054   if (HAVE_64BIT_OBJECTS)
19055     return 8;
19056   else
19057     return 4;
19058 }
19059
19060 /* Standard calling conventions leave the CFA at SP on entry.  */
19061 void
19062 mips_cfi_frame_initial_instructions (void)
19063 {
19064   cfi_add_CFA_def_cfa_register (SP);
19065 }
19066
19067 int
19068 tc_mips_regname_to_dw2regnum (char *regname)
19069 {
19070   unsigned int regnum = -1;
19071   unsigned int reg;
19072
19073   if (reg_lookup (&regname, RTYPE_GP | RTYPE_NUM, &reg))
19074     regnum = reg;
19075
19076   return regnum;
19077 }
19078
19079 /* Implement CONVERT_SYMBOLIC_ATTRIBUTE.
19080    Given a symbolic attribute NAME, return the proper integer value.
19081    Returns -1 if the attribute is not known.  */
19082
19083 int
19084 mips_convert_symbolic_attribute (const char *name)
19085 {
19086   static const struct
19087   {
19088     const char * name;
19089     const int    tag;
19090   }
19091   attribute_table[] =
19092     {
19093 #define T(tag) {#tag, tag}
19094       T (Tag_GNU_MIPS_ABI_FP),
19095       T (Tag_GNU_MIPS_ABI_MSA),
19096 #undef T
19097     };
19098   unsigned int i;
19099
19100   if (name == NULL)
19101     return -1;
19102
19103   for (i = 0; i < ARRAY_SIZE (attribute_table); i++)
19104     if (streq (name, attribute_table[i].name))
19105       return attribute_table[i].tag;
19106
19107   return -1;
19108 }
19109
19110 void
19111 md_mips_end (void)
19112 {
19113   int fpabi = Val_GNU_MIPS_ABI_FP_ANY;
19114
19115   mips_emit_delays ();
19116   if (cur_proc_ptr)
19117     as_warn (_("missing .end at end of assembly"));
19118
19119   /* Just in case no code was emitted, do the consistency check.  */
19120   file_mips_check_options ();
19121
19122   /* Set a floating-point ABI if the user did not.  */
19123   if (obj_elf_seen_attribute (OBJ_ATTR_GNU, Tag_GNU_MIPS_ABI_FP))
19124     {
19125       /* Perform consistency checks on the floating-point ABI.  */
19126       fpabi = bfd_elf_get_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
19127                                         Tag_GNU_MIPS_ABI_FP);
19128       if (fpabi != Val_GNU_MIPS_ABI_FP_ANY)
19129         check_fpabi (fpabi);
19130     }
19131   else
19132     {
19133       /* Soft-float gets precedence over single-float, the two options should
19134          not be used together so this should not matter.  */
19135       if (file_mips_opts.soft_float == 1)
19136         fpabi = Val_GNU_MIPS_ABI_FP_SOFT;
19137       /* Single-float gets precedence over all double_float cases.  */
19138       else if (file_mips_opts.single_float == 1)
19139         fpabi = Val_GNU_MIPS_ABI_FP_SINGLE;
19140       else
19141         {
19142           switch (file_mips_opts.fp)
19143             {
19144             case 32:
19145               if (file_mips_opts.gp == 32)
19146                 fpabi = Val_GNU_MIPS_ABI_FP_DOUBLE;
19147               break;
19148             case 0:
19149               fpabi = Val_GNU_MIPS_ABI_FP_XX;
19150               break;
19151             case 64:
19152               if (file_mips_opts.gp == 32 && !file_mips_opts.oddspreg)
19153                 fpabi = Val_GNU_MIPS_ABI_FP_64A;
19154               else if (file_mips_opts.gp == 32)
19155                 fpabi = Val_GNU_MIPS_ABI_FP_64;
19156               else
19157                 fpabi = Val_GNU_MIPS_ABI_FP_DOUBLE;
19158               break;
19159             }
19160         }
19161
19162       bfd_elf_add_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
19163                                 Tag_GNU_MIPS_ABI_FP, fpabi);
19164     }
19165 }
19166
19167 /*  Returns the relocation type required for a particular CFI encoding.  */
19168
19169 bfd_reloc_code_real_type
19170 mips_cfi_reloc_for_encoding (int encoding)
19171 {
19172   if (encoding == (DW_EH_PE_sdata4 | DW_EH_PE_pcrel))
19173     return BFD_RELOC_32_PCREL;
19174   else return BFD_RELOC_NONE;
19175 }