gas/
[external/binutils.git] / gas / config / tc-mips.c
1 /* tc-mips.c -- assemble code for a MIPS chip.
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4    Free Software Foundation, Inc.
5    Contributed by the OSF and Ralph Campbell.
6    Written by Keith Knowles and Ralph Campbell, working independently.
7    Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus
8    Support.
9
10    This file is part of GAS.
11
12    GAS is free software; you can redistribute it and/or modify
13    it under the terms of the GNU General Public License as published by
14    the Free Software Foundation; either version 3, or (at your option)
15    any later version.
16
17    GAS is distributed in the hope that it will be useful,
18    but WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20    GNU General Public License for more details.
21
22    You should have received a copy of the GNU General Public License
23    along with GAS; see the file COPYING.  If not, write to the Free
24    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
25    02110-1301, USA.  */
26
27 #include "as.h"
28 #include "config.h"
29 #include "subsegs.h"
30 #include "safe-ctype.h"
31
32 #include "opcode/mips.h"
33 #include "itbl-ops.h"
34 #include "dwarf2dbg.h"
35 #include "dw2gencfi.h"
36
37 /* Check assumptions made in this file.  */
38 typedef char static_assert1[sizeof (offsetT) < 8 ? -1 : 1];
39 typedef char static_assert2[sizeof (valueT) < 8 ? -1 : 1];
40
41 #ifdef DEBUG
42 #define DBG(x) printf x
43 #else
44 #define DBG(x)
45 #endif
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
93 #define ZERO 0
94 #define ATREG 1
95 #define S0  16
96 #define S7  23
97 #define TREG 24
98 #define PIC_CALL_REG 25
99 #define KT0 26
100 #define KT1 27
101 #define GP  28
102 #define SP  29
103 #define FP  30
104 #define RA  31
105
106 #define ILLEGAL_REG (32)
107
108 #define AT  mips_opts.at
109
110 extern int target_big_endian;
111
112 /* The name of the readonly data section.  */
113 #define RDATA_SECTION_NAME ".rodata"
114
115 /* Ways in which an instruction can be "appended" to the output.  */
116 enum append_method {
117   /* Just add it normally.  */
118   APPEND_ADD,
119
120   /* Add it normally and then add a nop.  */
121   APPEND_ADD_WITH_NOP,
122
123   /* Turn an instruction with a delay slot into a "compact" version.  */
124   APPEND_ADD_COMPACT,
125
126   /* Insert the instruction before the last one.  */
127   APPEND_SWAP
128 };
129
130 /* Information about an instruction, including its format, operands
131    and fixups.  */
132 struct mips_cl_insn
133 {
134   /* The opcode's entry in mips_opcodes or mips16_opcodes.  */
135   const struct mips_opcode *insn_mo;
136
137   /* The 16-bit or 32-bit bitstring of the instruction itself.  This is
138      a copy of INSN_MO->match with the operands filled in.  If we have
139      decided to use an extended MIPS16 instruction, this includes the
140      extension.  */
141   unsigned long insn_opcode;
142
143   /* The frag that contains the instruction.  */
144   struct frag *frag;
145
146   /* The offset into FRAG of the first instruction byte.  */
147   long where;
148
149   /* The relocs associated with the instruction, if any.  */
150   fixS *fixp[3];
151
152   /* True if this entry cannot be moved from its current position.  */
153   unsigned int fixed_p : 1;
154
155   /* True if this instruction occurred in a .set noreorder block.  */
156   unsigned int noreorder_p : 1;
157
158   /* True for mips16 instructions that jump to an absolute address.  */
159   unsigned int mips16_absolute_jump_p : 1;
160
161   /* True if this instruction is complete.  */
162   unsigned int complete_p : 1;
163
164   /* True if this instruction is cleared from history by unconditional
165      branch.  */
166   unsigned int cleared_p : 1;
167 };
168
169 /* The ABI to use.  */
170 enum mips_abi_level
171 {
172   NO_ABI = 0,
173   O32_ABI,
174   O64_ABI,
175   N32_ABI,
176   N64_ABI,
177   EABI_ABI
178 };
179
180 /* MIPS ABI we are using for this output file.  */
181 static enum mips_abi_level mips_abi = NO_ABI;
182
183 /* Whether or not we have code that can call pic code.  */
184 int mips_abicalls = FALSE;
185
186 /* Whether or not we have code which can be put into a shared
187    library.  */
188 static bfd_boolean mips_in_shared = TRUE;
189
190 /* This is the set of options which may be modified by the .set
191    pseudo-op.  We use a struct so that .set push and .set pop are more
192    reliable.  */
193
194 struct mips_set_options
195 {
196   /* MIPS ISA (Instruction Set Architecture) level.  This is set to -1
197      if it has not been initialized.  Changed by `.set mipsN', and the
198      -mipsN command line option, and the default CPU.  */
199   int isa;
200   /* Enabled Application Specific Extensions (ASEs).  Changed by `.set
201      <asename>', by command line options, and based on the default
202      architecture.  */
203   int ase;
204   /* Whether we are assembling for the mips16 processor.  0 if we are
205      not, 1 if we are, and -1 if the value has not been initialized.
206      Changed by `.set mips16' and `.set nomips16', and the -mips16 and
207      -nomips16 command line options, and the default CPU.  */
208   int mips16;
209   /* Whether we are assembling for the mipsMIPS ASE.  0 if we are not,
210      1 if we are, and -1 if the value has not been initialized.  Changed
211      by `.set micromips' and `.set nomicromips', and the -mmicromips
212      and -mno-micromips command line options, and the default CPU.  */
213   int micromips;
214   /* Non-zero if we should not reorder instructions.  Changed by `.set
215      reorder' and `.set noreorder'.  */
216   int noreorder;
217   /* Non-zero if we should not permit the register designated "assembler
218      temporary" to be used in instructions.  The value is the register
219      number, normally $at ($1).  Changed by `.set at=REG', `.set noat'
220      (same as `.set at=$0') and `.set at' (same as `.set at=$1').  */
221   unsigned int at;
222   /* Non-zero if we should warn when a macro instruction expands into
223      more than one machine instruction.  Changed by `.set nomacro' and
224      `.set macro'.  */
225   int warn_about_macros;
226   /* Non-zero if we should not move instructions.  Changed by `.set
227      move', `.set volatile', `.set nomove', and `.set novolatile'.  */
228   int nomove;
229   /* Non-zero if we should not optimize branches by moving the target
230      of the branch into the delay slot.  Actually, we don't perform
231      this optimization anyhow.  Changed by `.set bopt' and `.set
232      nobopt'.  */
233   int nobopt;
234   /* Non-zero if we should not autoextend mips16 instructions.
235      Changed by `.set autoextend' and `.set noautoextend'.  */
236   int noautoextend;
237   /* True if we should only emit 32-bit microMIPS instructions.
238      Changed by `.set insn32' and `.set noinsn32', and the -minsn32
239      and -mno-insn32 command line options.  */
240   bfd_boolean insn32;
241   /* Restrict general purpose registers and floating point registers
242      to 32 bit.  This is initially determined when -mgp32 or -mfp32
243      is passed but can changed if the assembler code uses .set mipsN.  */
244   int gp32;
245   int fp32;
246   /* MIPS architecture (CPU) type.  Changed by .set arch=FOO, the -march
247      command line option, and the default CPU.  */
248   int arch;
249   /* True if ".set sym32" is in effect.  */
250   bfd_boolean sym32;
251   /* True if floating-point operations are not allowed.  Changed by .set
252      softfloat or .set hardfloat, by command line options -msoft-float or
253      -mhard-float.  The default is false.  */
254   bfd_boolean soft_float;
255
256   /* True if only single-precision floating-point operations are allowed.
257      Changed by .set singlefloat or .set doublefloat, command-line options
258      -msingle-float or -mdouble-float.  The default is false.  */
259   bfd_boolean single_float;
260 };
261
262 /* This is the struct we use to hold the current set of options.  Note
263    that we must set the isa field to ISA_UNKNOWN and the ASE fields to
264    -1 to indicate that they have not been initialized.  */
265
266 /* True if -mgp32 was passed.  */
267 static int file_mips_gp32 = -1;
268
269 /* True if -mfp32 was passed.  */
270 static int file_mips_fp32 = -1;
271
272 /* 1 if -msoft-float, 0 if -mhard-float.  The default is 0.  */
273 static int file_mips_soft_float = 0;
274
275 /* 1 if -msingle-float, 0 if -mdouble-float.  The default is 0.   */
276 static int file_mips_single_float = 0;
277
278 /* True if -mnan=2008, false if -mnan=legacy.  */
279 static bfd_boolean mips_flag_nan2008 = FALSE;
280
281 static struct mips_set_options mips_opts =
282 {
283   /* isa */ ISA_UNKNOWN, /* ase */ 0, /* mips16 */ -1, /* micromips */ -1,
284   /* noreorder */ 0,  /* at */ ATREG, /* warn_about_macros */ 0,
285   /* nomove */ 0, /* nobopt */ 0, /* noautoextend */ 0, /* insn32 */ FALSE,
286   /* gp32 */ 0, /* fp32 */ 0, /* arch */ CPU_UNKNOWN, /* sym32 */ FALSE,
287   /* soft_float */ FALSE, /* single_float */ FALSE
288 };
289
290 /* The set of ASEs that were selected on the command line, either
291    explicitly via ASE options or implicitly through things like -march.  */
292 static unsigned int file_ase;
293
294 /* Which bits of file_ase were explicitly set or cleared by ASE options.  */
295 static unsigned int file_ase_explicit;
296
297 /* These variables are filled in with the masks of registers used.
298    The object format code reads them and puts them in the appropriate
299    place.  */
300 unsigned long mips_gprmask;
301 unsigned long mips_cprmask[4];
302
303 /* MIPS ISA we are using for this output file.  */
304 static int file_mips_isa = ISA_UNKNOWN;
305
306 /* True if any MIPS16 code was produced.  */
307 static int file_ase_mips16;
308
309 #define ISA_SUPPORTS_MIPS16E (mips_opts.isa == ISA_MIPS32               \
310                               || mips_opts.isa == ISA_MIPS32R2          \
311                               || mips_opts.isa == ISA_MIPS64            \
312                               || mips_opts.isa == ISA_MIPS64R2)
313
314 /* True if any microMIPS code was produced.  */
315 static int file_ase_micromips;
316
317 /* True if we want to create R_MIPS_JALR for jalr $25.  */
318 #ifdef TE_IRIX
319 #define MIPS_JALR_HINT_P(EXPR) HAVE_NEWABI
320 #else
321 /* As a GNU extension, we use R_MIPS_JALR for o32 too.  However,
322    because there's no place for any addend, the only acceptable
323    expression is a bare symbol.  */
324 #define MIPS_JALR_HINT_P(EXPR) \
325   (!HAVE_IN_PLACE_ADDENDS \
326    || ((EXPR)->X_op == O_symbol && (EXPR)->X_add_number == 0))
327 #endif
328
329 /* The argument of the -march= flag.  The architecture we are assembling.  */
330 static int file_mips_arch = CPU_UNKNOWN;
331 static const char *mips_arch_string;
332
333 /* The argument of the -mtune= flag.  The architecture for which we
334    are optimizing.  */
335 static int mips_tune = CPU_UNKNOWN;
336 static const char *mips_tune_string;
337
338 /* True when generating 32-bit code for a 64-bit processor.  */
339 static int mips_32bitmode = 0;
340
341 /* True if the given ABI requires 32-bit registers.  */
342 #define ABI_NEEDS_32BIT_REGS(ABI) ((ABI) == O32_ABI)
343
344 /* Likewise 64-bit registers.  */
345 #define ABI_NEEDS_64BIT_REGS(ABI)       \
346   ((ABI) == N32_ABI                     \
347    || (ABI) == N64_ABI                  \
348    || (ABI) == O64_ABI)
349
350 /*  Return true if ISA supports 64 bit wide gp registers.  */
351 #define ISA_HAS_64BIT_REGS(ISA)         \
352   ((ISA) == ISA_MIPS3                   \
353    || (ISA) == ISA_MIPS4                \
354    || (ISA) == ISA_MIPS5                \
355    || (ISA) == ISA_MIPS64               \
356    || (ISA) == ISA_MIPS64R2)
357
358 /*  Return true if ISA supports 64 bit wide float registers.  */
359 #define ISA_HAS_64BIT_FPRS(ISA)         \
360   ((ISA) == ISA_MIPS3                   \
361    || (ISA) == ISA_MIPS4                \
362    || (ISA) == ISA_MIPS5                \
363    || (ISA) == ISA_MIPS32R2             \
364    || (ISA) == ISA_MIPS64               \
365    || (ISA) == ISA_MIPS64R2)
366
367 /* Return true if ISA supports 64-bit right rotate (dror et al.)
368    instructions.  */
369 #define ISA_HAS_DROR(ISA)               \
370   ((ISA) == ISA_MIPS64R2                \
371    || (mips_opts.micromips              \
372        && ISA_HAS_64BIT_REGS (ISA))     \
373    )
374
375 /* Return true if ISA supports 32-bit right rotate (ror et al.)
376    instructions.  */
377 #define ISA_HAS_ROR(ISA)                \
378   ((ISA) == ISA_MIPS32R2                \
379    || (ISA) == ISA_MIPS64R2             \
380    || (mips_opts.ase & ASE_SMARTMIPS)   \
381    || mips_opts.micromips               \
382    )
383
384 /* Return true if ISA supports single-precision floats in odd registers.  */
385 #define ISA_HAS_ODD_SINGLE_FPR(ISA)     \
386   ((ISA) == ISA_MIPS32                  \
387    || (ISA) == ISA_MIPS32R2             \
388    || (ISA) == ISA_MIPS64               \
389    || (ISA) == ISA_MIPS64R2)
390
391 /* Return true if ISA supports move to/from high part of a 64-bit
392    floating-point register. */
393 #define ISA_HAS_MXHC1(ISA)              \
394   ((ISA) == ISA_MIPS32R2                \
395    || (ISA) == ISA_MIPS64R2)
396
397 #define HAVE_32BIT_GPRS                            \
398     (mips_opts.gp32 || !ISA_HAS_64BIT_REGS (mips_opts.isa))
399
400 #define HAVE_32BIT_FPRS                            \
401     (mips_opts.fp32 || !ISA_HAS_64BIT_FPRS (mips_opts.isa))
402
403 #define HAVE_64BIT_GPRS (!HAVE_32BIT_GPRS)
404 #define HAVE_64BIT_FPRS (!HAVE_32BIT_FPRS)
405
406 #define HAVE_NEWABI (mips_abi == N32_ABI || mips_abi == N64_ABI)
407
408 #define HAVE_64BIT_OBJECTS (mips_abi == N64_ABI)
409
410 /* True if relocations are stored in-place.  */
411 #define HAVE_IN_PLACE_ADDENDS (!HAVE_NEWABI)
412
413 /* The ABI-derived address size.  */
414 #define HAVE_64BIT_ADDRESSES \
415   (HAVE_64BIT_GPRS && (mips_abi == EABI_ABI || mips_abi == N64_ABI))
416 #define HAVE_32BIT_ADDRESSES (!HAVE_64BIT_ADDRESSES)
417
418 /* The size of symbolic constants (i.e., expressions of the form
419    "SYMBOL" or "SYMBOL + OFFSET").  */
420 #define HAVE_32BIT_SYMBOLS \
421   (HAVE_32BIT_ADDRESSES || !HAVE_64BIT_OBJECTS || mips_opts.sym32)
422 #define HAVE_64BIT_SYMBOLS (!HAVE_32BIT_SYMBOLS)
423
424 /* Addresses are loaded in different ways, depending on the address size
425    in use.  The n32 ABI Documentation also mandates the use of additions
426    with overflow checking, but existing implementations don't follow it.  */
427 #define ADDRESS_ADD_INSN                                                \
428    (HAVE_32BIT_ADDRESSES ? "addu" : "daddu")
429
430 #define ADDRESS_ADDI_INSN                                               \
431    (HAVE_32BIT_ADDRESSES ? "addiu" : "daddiu")
432
433 #define ADDRESS_LOAD_INSN                                               \
434    (HAVE_32BIT_ADDRESSES ? "lw" : "ld")
435
436 #define ADDRESS_STORE_INSN                                              \
437    (HAVE_32BIT_ADDRESSES ? "sw" : "sd")
438
439 /* Return true if the given CPU supports the MIPS16 ASE.  */
440 #define CPU_HAS_MIPS16(cpu)                                             \
441    (strncmp (TARGET_CPU, "mips16", sizeof ("mips16") - 1) == 0          \
442     || strncmp (TARGET_CANONICAL, "mips-lsi-elf", sizeof ("mips-lsi-elf") - 1) == 0)
443
444 /* Return true if the given CPU supports the microMIPS ASE.  */
445 #define CPU_HAS_MICROMIPS(cpu)  0
446
447 /* True if CPU has a dror instruction.  */
448 #define CPU_HAS_DROR(CPU)       ((CPU) == CPU_VR5400 || (CPU) == CPU_VR5500)
449
450 /* True if CPU has a ror instruction.  */
451 #define CPU_HAS_ROR(CPU)        CPU_HAS_DROR (CPU)
452
453 /* True if CPU is in the Octeon family */
454 #define CPU_IS_OCTEON(CPU) ((CPU) == CPU_OCTEON || (CPU) == CPU_OCTEONP || (CPU) == CPU_OCTEON2)
455
456 /* True if CPU has seq/sne and seqi/snei instructions.  */
457 #define CPU_HAS_SEQ(CPU)        (CPU_IS_OCTEON (CPU))
458
459 /* True, if CPU has support for ldc1 and sdc1. */
460 #define CPU_HAS_LDC1_SDC1(CPU)  \
461    ((mips_opts.isa != ISA_MIPS1) && ((CPU) != CPU_R5900))
462
463 /* True if mflo and mfhi can be immediately followed by instructions
464    which write to the HI and LO registers.
465
466    According to MIPS specifications, MIPS ISAs I, II, and III need
467    (at least) two instructions between the reads of HI/LO and
468    instructions which write them, and later ISAs do not.  Contradicting
469    the MIPS specifications, some MIPS IV processor user manuals (e.g.
470    the UM for the NEC Vr5000) document needing the instructions between
471    HI/LO reads and writes, as well.  Therefore, we declare only MIPS32,
472    MIPS64 and later ISAs to have the interlocks, plus any specific
473    earlier-ISA CPUs for which CPU documentation declares that the
474    instructions are really interlocked.  */
475 #define hilo_interlocks \
476   (mips_opts.isa == ISA_MIPS32                        \
477    || mips_opts.isa == ISA_MIPS32R2                   \
478    || mips_opts.isa == ISA_MIPS64                     \
479    || mips_opts.isa == ISA_MIPS64R2                   \
480    || mips_opts.arch == CPU_R4010                     \
481    || mips_opts.arch == CPU_R5900                     \
482    || mips_opts.arch == CPU_R10000                    \
483    || mips_opts.arch == CPU_R12000                    \
484    || mips_opts.arch == CPU_R14000                    \
485    || mips_opts.arch == CPU_R16000                    \
486    || mips_opts.arch == CPU_RM7000                    \
487    || mips_opts.arch == CPU_VR5500                    \
488    || mips_opts.micromips                             \
489    )
490
491 /* Whether the processor uses hardware interlocks to protect reads
492    from the GPRs after they are loaded from memory, and thus does not
493    require nops to be inserted.  This applies to instructions marked
494    INSN_LOAD_MEMORY_DELAY.  These nops are only required at MIPS ISA
495    level I and microMIPS mode instructions are always interlocked.  */
496 #define gpr_interlocks                                \
497   (mips_opts.isa != ISA_MIPS1                         \
498    || mips_opts.arch == CPU_R3900                     \
499    || mips_opts.arch == CPU_R5900                     \
500    || mips_opts.micromips                             \
501    )
502
503 /* Whether the processor uses hardware interlocks to avoid delays
504    required by coprocessor instructions, and thus does not require
505    nops to be inserted.  This applies to instructions marked
506    INSN_LOAD_COPROC_DELAY, INSN_COPROC_MOVE_DELAY, and to delays
507    between instructions marked INSN_WRITE_COND_CODE and ones marked
508    INSN_READ_COND_CODE.  These nops are only required at MIPS ISA
509    levels I, II, and III and microMIPS mode instructions are always
510    interlocked.  */
511 /* Itbl support may require additional care here.  */
512 #define cop_interlocks                                \
513   ((mips_opts.isa != ISA_MIPS1                        \
514     && mips_opts.isa != ISA_MIPS2                     \
515     && mips_opts.isa != ISA_MIPS3)                    \
516    || mips_opts.arch == CPU_R4300                     \
517    || mips_opts.micromips                             \
518    )
519
520 /* Whether the processor uses hardware interlocks to protect reads
521    from coprocessor registers after they are loaded from memory, and
522    thus does not require nops to be inserted.  This applies to
523    instructions marked INSN_COPROC_MEMORY_DELAY.  These nops are only
524    requires at MIPS ISA level I and microMIPS mode instructions are
525    always interlocked.  */
526 #define cop_mem_interlocks                            \
527   (mips_opts.isa != ISA_MIPS1                         \
528    || mips_opts.micromips                             \
529    )
530
531 /* Is this a mfhi or mflo instruction?  */
532 #define MF_HILO_INSN(PINFO) \
533   ((PINFO & INSN_READ_HI) || (PINFO & INSN_READ_LO))
534
535 /* Whether code compression (either of the MIPS16 or the microMIPS ASEs)
536    has been selected.  This implies, in particular, that addresses of text
537    labels have their LSB set.  */
538 #define HAVE_CODE_COMPRESSION                                           \
539   ((mips_opts.mips16 | mips_opts.micromips) != 0)
540
541 /* The minimum and maximum signed values that can be stored in a GPR.  */
542 #define GPR_SMAX ((offsetT) (((valueT) 1 << (HAVE_64BIT_GPRS ? 63 : 31)) - 1))
543 #define GPR_SMIN (-GPR_SMAX - 1)
544
545 /* MIPS PIC level.  */
546
547 enum mips_pic_level mips_pic;
548
549 /* 1 if we should generate 32 bit offsets from the $gp register in
550    SVR4_PIC mode.  Currently has no meaning in other modes.  */
551 static int mips_big_got = 0;
552
553 /* 1 if trap instructions should used for overflow rather than break
554    instructions.  */
555 static int mips_trap = 0;
556
557 /* 1 if double width floating point constants should not be constructed
558    by assembling two single width halves into two single width floating
559    point registers which just happen to alias the double width destination
560    register.  On some architectures this aliasing can be disabled by a bit
561    in the status register, and the setting of this bit cannot be determined
562    automatically at assemble time.  */
563 static int mips_disable_float_construction;
564
565 /* Non-zero if any .set noreorder directives were used.  */
566
567 static int mips_any_noreorder;
568
569 /* Non-zero if nops should be inserted when the register referenced in
570    an mfhi/mflo instruction is read in the next two instructions.  */
571 static int mips_7000_hilo_fix;
572
573 /* The size of objects in the small data section.  */
574 static unsigned int g_switch_value = 8;
575 /* Whether the -G option was used.  */
576 static int g_switch_seen = 0;
577
578 #define N_RMASK 0xc4
579 #define N_VFP   0xd4
580
581 /* If we can determine in advance that GP optimization won't be
582    possible, we can skip the relaxation stuff that tries to produce
583    GP-relative references.  This makes delay slot optimization work
584    better.
585
586    This function can only provide a guess, but it seems to work for
587    gcc output.  It needs to guess right for gcc, otherwise gcc
588    will put what it thinks is a GP-relative instruction in a branch
589    delay slot.
590
591    I don't know if a fix is needed for the SVR4_PIC mode.  I've only
592    fixed it for the non-PIC mode.  KR 95/04/07  */
593 static int nopic_need_relax (symbolS *, int);
594
595 /* handle of the OPCODE hash table */
596 static struct hash_control *op_hash = NULL;
597
598 /* The opcode hash table we use for the mips16.  */
599 static struct hash_control *mips16_op_hash = NULL;
600
601 /* The opcode hash table we use for the microMIPS ASE.  */
602 static struct hash_control *micromips_op_hash = NULL;
603
604 /* This array holds the chars that always start a comment.  If the
605     pre-processor is disabled, these aren't very useful */
606 const char comment_chars[] = "#";
607
608 /* This array holds the chars that only start a comment at the beginning of
609    a line.  If the line seems to have the form '# 123 filename'
610    .line and .file directives will appear in the pre-processed output */
611 /* Note that input_file.c hand checks for '#' at the beginning of the
612    first line of the input file.  This is because the compiler outputs
613    #NO_APP at the beginning of its output.  */
614 /* Also note that C style comments are always supported.  */
615 const char line_comment_chars[] = "#";
616
617 /* This array holds machine specific line separator characters.  */
618 const char line_separator_chars[] = ";";
619
620 /* Chars that can be used to separate mant from exp in floating point nums */
621 const char EXP_CHARS[] = "eE";
622
623 /* Chars that mean this number is a floating point constant */
624 /* As in 0f12.456 */
625 /* or    0d1.2345e12 */
626 const char FLT_CHARS[] = "rRsSfFdDxXpP";
627
628 /* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
629    changed in read.c .  Ideally it shouldn't have to know about it at all,
630    but nothing is ideal around here.
631  */
632
633 /* Types of printf format used for instruction-related error messages.
634    "I" means int ("%d") and "S" means string ("%s"). */
635 enum mips_insn_error_format {
636   ERR_FMT_PLAIN,
637   ERR_FMT_I,
638   ERR_FMT_SS,
639 };
640
641 /* Information about an error that was found while assembling the current
642    instruction.  */
643 struct mips_insn_error {
644   /* We sometimes need to match an instruction against more than one
645      opcode table entry.  Errors found during this matching are reported
646      against a particular syntactic argument rather than against the
647      instruction as a whole.  We grade these messages so that errors
648      against argument N have a greater priority than an error against
649      any argument < N, since the former implies that arguments up to N
650      were acceptable and that the opcode entry was therefore a closer match.
651      If several matches report an error against the same argument,
652      we only use that error if it is the same in all cases.
653
654      min_argnum is the minimum argument number for which an error message
655      should be accepted.  It is 0 if MSG is against the instruction as
656      a whole.  */
657   int min_argnum;
658
659   /* The printf()-style message, including its format and arguments.  */
660   enum mips_insn_error_format format;
661   const char *msg;
662   union {
663     int i;
664     const char *ss[2];
665   } u;
666 };
667
668 /* The error that should be reported for the current instruction.  */
669 static struct mips_insn_error insn_error;
670
671 static int auto_align = 1;
672
673 /* When outputting SVR4 PIC code, the assembler needs to know the
674    offset in the stack frame from which to restore the $gp register.
675    This is set by the .cprestore pseudo-op, and saved in this
676    variable.  */
677 static offsetT mips_cprestore_offset = -1;
678
679 /* Similar for NewABI PIC code, where $gp is callee-saved.  NewABI has some
680    more optimizations, it can use a register value instead of a memory-saved
681    offset and even an other register than $gp as global pointer.  */
682 static offsetT mips_cpreturn_offset = -1;
683 static int mips_cpreturn_register = -1;
684 static int mips_gp_register = GP;
685 static int mips_gprel_offset = 0;
686
687 /* Whether mips_cprestore_offset has been set in the current function
688    (or whether it has already been warned about, if not).  */
689 static int mips_cprestore_valid = 0;
690
691 /* This is the register which holds the stack frame, as set by the
692    .frame pseudo-op.  This is needed to implement .cprestore.  */
693 static int mips_frame_reg = SP;
694
695 /* Whether mips_frame_reg has been set in the current function
696    (or whether it has already been warned about, if not).  */
697 static int mips_frame_reg_valid = 0;
698
699 /* To output NOP instructions correctly, we need to keep information
700    about the previous two instructions.  */
701
702 /* Whether we are optimizing.  The default value of 2 means to remove
703    unneeded NOPs and swap branch instructions when possible.  A value
704    of 1 means to not swap branches.  A value of 0 means to always
705    insert NOPs.  */
706 static int mips_optimize = 2;
707
708 /* Debugging level.  -g sets this to 2.  -gN sets this to N.  -g0 is
709    equivalent to seeing no -g option at all.  */
710 static int mips_debug = 0;
711
712 /* The maximum number of NOPs needed to avoid the VR4130 mflo/mfhi errata.  */
713 #define MAX_VR4130_NOPS 4
714
715 /* The maximum number of NOPs needed to fill delay slots.  */
716 #define MAX_DELAY_NOPS 2
717
718 /* The maximum number of NOPs needed for any purpose.  */
719 #define MAX_NOPS 4
720
721 /* A list of previous instructions, with index 0 being the most recent.
722    We need to look back MAX_NOPS instructions when filling delay slots
723    or working around processor errata.  We need to look back one
724    instruction further if we're thinking about using history[0] to
725    fill a branch delay slot.  */
726 static struct mips_cl_insn history[1 + MAX_NOPS];
727
728 /* Arrays of operands for each instruction.  */
729 #define MAX_OPERANDS 6
730 struct mips_operand_array {
731   const struct mips_operand *operand[MAX_OPERANDS];
732 };
733 static struct mips_operand_array *mips_operands;
734 static struct mips_operand_array *mips16_operands;
735 static struct mips_operand_array *micromips_operands;
736
737 /* Nop instructions used by emit_nop.  */
738 static struct mips_cl_insn nop_insn;
739 static struct mips_cl_insn mips16_nop_insn;
740 static struct mips_cl_insn micromips_nop16_insn;
741 static struct mips_cl_insn micromips_nop32_insn;
742
743 /* The appropriate nop for the current mode.  */
744 #define NOP_INSN (mips_opts.mips16                                      \
745                   ? &mips16_nop_insn                                    \
746                   : (mips_opts.micromips                                \
747                      ? (mips_opts.insn32                                \
748                         ? &micromips_nop32_insn                         \
749                         : &micromips_nop16_insn)                        \
750                      : &nop_insn))
751
752 /* The size of NOP_INSN in bytes.  */
753 #define NOP_INSN_SIZE ((mips_opts.mips16                                \
754                         || (mips_opts.micromips && !mips_opts.insn32))  \
755                        ? 2 : 4)
756
757 /* If this is set, it points to a frag holding nop instructions which
758    were inserted before the start of a noreorder section.  If those
759    nops turn out to be unnecessary, the size of the frag can be
760    decreased.  */
761 static fragS *prev_nop_frag;
762
763 /* The number of nop instructions we created in prev_nop_frag.  */
764 static int prev_nop_frag_holds;
765
766 /* The number of nop instructions that we know we need in
767    prev_nop_frag.  */
768 static int prev_nop_frag_required;
769
770 /* The number of instructions we've seen since prev_nop_frag.  */
771 static int prev_nop_frag_since;
772
773 /* Relocations against symbols are sometimes done in two parts, with a HI
774    relocation and a LO relocation.  Each relocation has only 16 bits of
775    space to store an addend.  This means that in order for the linker to
776    handle carries correctly, it must be able to locate both the HI and
777    the LO relocation.  This means that the relocations must appear in
778    order in the relocation table.
779
780    In order to implement this, we keep track of each unmatched HI
781    relocation.  We then sort them so that they immediately precede the
782    corresponding LO relocation.  */
783
784 struct mips_hi_fixup
785 {
786   /* Next HI fixup.  */
787   struct mips_hi_fixup *next;
788   /* This fixup.  */
789   fixS *fixp;
790   /* The section this fixup is in.  */
791   segT seg;
792 };
793
794 /* The list of unmatched HI relocs.  */
795
796 static struct mips_hi_fixup *mips_hi_fixup_list;
797
798 /* The frag containing the last explicit relocation operator.
799    Null if explicit relocations have not been used.  */
800
801 static fragS *prev_reloc_op_frag;
802
803 /* Map mips16 register numbers to normal MIPS register numbers.  */
804
805 static const unsigned int mips16_to_32_reg_map[] =
806 {
807   16, 17, 2, 3, 4, 5, 6, 7
808 };
809
810 /* Map microMIPS register numbers to normal MIPS register numbers.  */
811
812 #define micromips_to_32_reg_d_map       mips16_to_32_reg_map
813
814 /* The microMIPS registers with type h.  */
815 static const unsigned int micromips_to_32_reg_h_map1[] =
816 {
817   5, 5, 6, 4, 4, 4, 4, 4
818 };
819 static const unsigned int micromips_to_32_reg_h_map2[] =
820 {
821   6, 7, 7, 21, 22, 5, 6, 7
822 };
823
824 /* The microMIPS registers with type m.  */
825 static const unsigned int micromips_to_32_reg_m_map[] =
826 {
827   0, 17, 2, 3, 16, 18, 19, 20
828 };
829
830 #define micromips_to_32_reg_n_map      micromips_to_32_reg_m_map
831
832 /* Classifies the kind of instructions we're interested in when
833    implementing -mfix-vr4120.  */
834 enum fix_vr4120_class
835 {
836   FIX_VR4120_MACC,
837   FIX_VR4120_DMACC,
838   FIX_VR4120_MULT,
839   FIX_VR4120_DMULT,
840   FIX_VR4120_DIV,
841   FIX_VR4120_MTHILO,
842   NUM_FIX_VR4120_CLASSES
843 };
844
845 /* ...likewise -mfix-loongson2f-jump.  */
846 static bfd_boolean mips_fix_loongson2f_jump;
847
848 /* ...likewise -mfix-loongson2f-nop.  */
849 static bfd_boolean mips_fix_loongson2f_nop;
850
851 /* True if -mfix-loongson2f-nop or -mfix-loongson2f-jump passed.  */
852 static bfd_boolean mips_fix_loongson2f;
853
854 /* Given two FIX_VR4120_* values X and Y, bit Y of element X is set if
855    there must be at least one other instruction between an instruction
856    of type X and an instruction of type Y.  */
857 static unsigned int vr4120_conflicts[NUM_FIX_VR4120_CLASSES];
858
859 /* True if -mfix-vr4120 is in force.  */
860 static int mips_fix_vr4120;
861
862 /* ...likewise -mfix-vr4130.  */
863 static int mips_fix_vr4130;
864
865 /* ...likewise -mfix-24k.  */
866 static int mips_fix_24k;
867
868 /* ...likewise -mfix-cn63xxp1 */
869 static bfd_boolean mips_fix_cn63xxp1;
870
871 /* We don't relax branches by default, since this causes us to expand
872    `la .l2 - .l1' if there's a branch between .l1 and .l2, because we
873    fail to compute the offset before expanding the macro to the most
874    efficient expansion.  */
875
876 static int mips_relax_branch;
877 \f
878 /* The expansion of many macros depends on the type of symbol that
879    they refer to.  For example, when generating position-dependent code,
880    a macro that refers to a symbol may have two different expansions,
881    one which uses GP-relative addresses and one which uses absolute
882    addresses.  When generating SVR4-style PIC, a macro may have
883    different expansions for local and global symbols.
884
885    We handle these situations by generating both sequences and putting
886    them in variant frags.  In position-dependent code, the first sequence
887    will be the GP-relative one and the second sequence will be the
888    absolute one.  In SVR4 PIC, the first sequence will be for global
889    symbols and the second will be for local symbols.
890
891    The frag's "subtype" is RELAX_ENCODE (FIRST, SECOND), where FIRST and
892    SECOND are the lengths of the two sequences in bytes.  These fields
893    can be extracted using RELAX_FIRST() and RELAX_SECOND().  In addition,
894    the subtype has the following flags:
895
896    RELAX_USE_SECOND
897         Set if it has been decided that we should use the second
898         sequence instead of the first.
899
900    RELAX_SECOND_LONGER
901         Set in the first variant frag if the macro's second implementation
902         is longer than its first.  This refers to the macro as a whole,
903         not an individual relaxation.
904
905    RELAX_NOMACRO
906         Set in the first variant frag if the macro appeared in a .set nomacro
907         block and if one alternative requires a warning but the other does not.
908
909    RELAX_DELAY_SLOT
910         Like RELAX_NOMACRO, but indicates that the macro appears in a branch
911         delay slot.
912
913    RELAX_DELAY_SLOT_16BIT
914         Like RELAX_DELAY_SLOT, but indicates that the delay slot requires a
915         16-bit instruction.
916
917    RELAX_DELAY_SLOT_SIZE_FIRST
918         Like RELAX_DELAY_SLOT, but indicates that the first implementation of
919         the macro is of the wrong size for the branch delay slot.
920
921    RELAX_DELAY_SLOT_SIZE_SECOND
922         Like RELAX_DELAY_SLOT, but indicates that the second implementation of
923         the macro is of the wrong size for the branch delay slot.
924
925    The frag's "opcode" points to the first fixup for relaxable code.
926
927    Relaxable macros are generated using a sequence such as:
928
929       relax_start (SYMBOL);
930       ... generate first expansion ...
931       relax_switch ();
932       ... generate second expansion ...
933       relax_end ();
934
935    The code and fixups for the unwanted alternative are discarded
936    by md_convert_frag.  */
937 #define RELAX_ENCODE(FIRST, SECOND) (((FIRST) << 8) | (SECOND))
938
939 #define RELAX_FIRST(X) (((X) >> 8) & 0xff)
940 #define RELAX_SECOND(X) ((X) & 0xff)
941 #define RELAX_USE_SECOND 0x10000
942 #define RELAX_SECOND_LONGER 0x20000
943 #define RELAX_NOMACRO 0x40000
944 #define RELAX_DELAY_SLOT 0x80000
945 #define RELAX_DELAY_SLOT_16BIT 0x100000
946 #define RELAX_DELAY_SLOT_SIZE_FIRST 0x200000
947 #define RELAX_DELAY_SLOT_SIZE_SECOND 0x400000
948
949 /* Branch without likely bit.  If label is out of range, we turn:
950
951         beq reg1, reg2, label
952         delay slot
953
954    into
955
956         bne reg1, reg2, 0f
957         nop
958         j label
959      0: delay slot
960
961    with the following opcode replacements:
962
963         beq <-> bne
964         blez <-> bgtz
965         bltz <-> bgez
966         bc1f <-> bc1t
967
968         bltzal <-> bgezal  (with jal label instead of j label)
969
970    Even though keeping the delay slot instruction in the delay slot of
971    the branch would be more efficient, it would be very tricky to do
972    correctly, because we'd have to introduce a variable frag *after*
973    the delay slot instruction, and expand that instead.  Let's do it
974    the easy way for now, even if the branch-not-taken case now costs
975    one additional instruction.  Out-of-range branches are not supposed
976    to be common, anyway.
977
978    Branch likely.  If label is out of range, we turn:
979
980         beql reg1, reg2, label
981         delay slot (annulled if branch not taken)
982
983    into
984
985         beql reg1, reg2, 1f
986         nop
987         beql $0, $0, 2f
988         nop
989      1: j[al] label
990         delay slot (executed only if branch taken)
991      2:
992
993    It would be possible to generate a shorter sequence by losing the
994    likely bit, generating something like:
995
996         bne reg1, reg2, 0f
997         nop
998         j[al] label
999         delay slot (executed only if branch taken)
1000      0:
1001
1002         beql -> bne
1003         bnel -> beq
1004         blezl -> bgtz
1005         bgtzl -> blez
1006         bltzl -> bgez
1007         bgezl -> bltz
1008         bc1fl -> bc1t
1009         bc1tl -> bc1f
1010
1011         bltzall -> bgezal  (with jal label instead of j label)
1012         bgezall -> bltzal  (ditto)
1013
1014
1015    but it's not clear that it would actually improve performance.  */
1016 #define RELAX_BRANCH_ENCODE(at, uncond, likely, link, toofar)   \
1017   ((relax_substateT)                                            \
1018    (0xc0000000                                                  \
1019     | ((at) & 0x1f)                                             \
1020     | ((toofar) ? 0x20 : 0)                                     \
1021     | ((link) ? 0x40 : 0)                                       \
1022     | ((likely) ? 0x80 : 0)                                     \
1023     | ((uncond) ? 0x100 : 0)))
1024 #define RELAX_BRANCH_P(i) (((i) & 0xf0000000) == 0xc0000000)
1025 #define RELAX_BRANCH_UNCOND(i) (((i) & 0x100) != 0)
1026 #define RELAX_BRANCH_LIKELY(i) (((i) & 0x80) != 0)
1027 #define RELAX_BRANCH_LINK(i) (((i) & 0x40) != 0)
1028 #define RELAX_BRANCH_TOOFAR(i) (((i) & 0x20) != 0)
1029 #define RELAX_BRANCH_AT(i) ((i) & 0x1f)
1030
1031 /* For mips16 code, we use an entirely different form of relaxation.
1032    mips16 supports two versions of most instructions which take
1033    immediate values: a small one which takes some small value, and a
1034    larger one which takes a 16 bit value.  Since branches also follow
1035    this pattern, relaxing these values is required.
1036
1037    We can assemble both mips16 and normal MIPS code in a single
1038    object.  Therefore, we need to support this type of relaxation at
1039    the same time that we support the relaxation described above.  We
1040    use the high bit of the subtype field to distinguish these cases.
1041
1042    The information we store for this type of relaxation is the
1043    argument code found in the opcode file for this relocation, whether
1044    the user explicitly requested a small or extended form, and whether
1045    the relocation is in a jump or jal delay slot.  That tells us the
1046    size of the value, and how it should be stored.  We also store
1047    whether the fragment is considered to be extended or not.  We also
1048    store whether this is known to be a branch to a different section,
1049    whether we have tried to relax this frag yet, and whether we have
1050    ever extended a PC relative fragment because of a shift count.  */
1051 #define RELAX_MIPS16_ENCODE(type, small, ext, dslot, jal_dslot) \
1052   (0x80000000                                                   \
1053    | ((type) & 0xff)                                            \
1054    | ((small) ? 0x100 : 0)                                      \
1055    | ((ext) ? 0x200 : 0)                                        \
1056    | ((dslot) ? 0x400 : 0)                                      \
1057    | ((jal_dslot) ? 0x800 : 0))
1058 #define RELAX_MIPS16_P(i) (((i) & 0xc0000000) == 0x80000000)
1059 #define RELAX_MIPS16_TYPE(i) ((i) & 0xff)
1060 #define RELAX_MIPS16_USER_SMALL(i) (((i) & 0x100) != 0)
1061 #define RELAX_MIPS16_USER_EXT(i) (((i) & 0x200) != 0)
1062 #define RELAX_MIPS16_DSLOT(i) (((i) & 0x400) != 0)
1063 #define RELAX_MIPS16_JAL_DSLOT(i) (((i) & 0x800) != 0)
1064 #define RELAX_MIPS16_EXTENDED(i) (((i) & 0x1000) != 0)
1065 #define RELAX_MIPS16_MARK_EXTENDED(i) ((i) | 0x1000)
1066 #define RELAX_MIPS16_CLEAR_EXTENDED(i) ((i) &~ 0x1000)
1067 #define RELAX_MIPS16_LONG_BRANCH(i) (((i) & 0x2000) != 0)
1068 #define RELAX_MIPS16_MARK_LONG_BRANCH(i) ((i) | 0x2000)
1069 #define RELAX_MIPS16_CLEAR_LONG_BRANCH(i) ((i) &~ 0x2000)
1070
1071 /* For microMIPS code, we use relaxation similar to one we use for
1072    MIPS16 code.  Some instructions that take immediate values support
1073    two encodings: a small one which takes some small value, and a
1074    larger one which takes a 16 bit value.  As some branches also follow
1075    this pattern, relaxing these values is required.
1076
1077    We can assemble both microMIPS and normal MIPS code in a single
1078    object.  Therefore, we need to support this type of relaxation at
1079    the same time that we support the relaxation described above.  We
1080    use one of the high bits of the subtype field to distinguish these
1081    cases.
1082
1083    The information we store for this type of relaxation is the argument
1084    code found in the opcode file for this relocation, the register
1085    selected as the assembler temporary, whether the branch is
1086    unconditional, whether it is compact, whether it stores the link
1087    address implicitly in $ra, whether relaxation of out-of-range 32-bit
1088    branches to a sequence of instructions is enabled, and whether the
1089    displacement of a branch is too large to fit as an immediate argument
1090    of a 16-bit and a 32-bit branch, respectively.  */
1091 #define RELAX_MICROMIPS_ENCODE(type, at, uncond, compact, link, \
1092                                relax32, toofar16, toofar32)     \
1093   (0x40000000                                                   \
1094    | ((type) & 0xff)                                            \
1095    | (((at) & 0x1f) << 8)                                       \
1096    | ((uncond) ? 0x2000 : 0)                                    \
1097    | ((compact) ? 0x4000 : 0)                                   \
1098    | ((link) ? 0x8000 : 0)                                      \
1099    | ((relax32) ? 0x10000 : 0)                                  \
1100    | ((toofar16) ? 0x20000 : 0)                                 \
1101    | ((toofar32) ? 0x40000 : 0))
1102 #define RELAX_MICROMIPS_P(i) (((i) & 0xc0000000) == 0x40000000)
1103 #define RELAX_MICROMIPS_TYPE(i) ((i) & 0xff)
1104 #define RELAX_MICROMIPS_AT(i) (((i) >> 8) & 0x1f)
1105 #define RELAX_MICROMIPS_UNCOND(i) (((i) & 0x2000) != 0)
1106 #define RELAX_MICROMIPS_COMPACT(i) (((i) & 0x4000) != 0)
1107 #define RELAX_MICROMIPS_LINK(i) (((i) & 0x8000) != 0)
1108 #define RELAX_MICROMIPS_RELAX32(i) (((i) & 0x10000) != 0)
1109
1110 #define RELAX_MICROMIPS_TOOFAR16(i) (((i) & 0x20000) != 0)
1111 #define RELAX_MICROMIPS_MARK_TOOFAR16(i) ((i) | 0x20000)
1112 #define RELAX_MICROMIPS_CLEAR_TOOFAR16(i) ((i) & ~0x20000)
1113 #define RELAX_MICROMIPS_TOOFAR32(i) (((i) & 0x40000) != 0)
1114 #define RELAX_MICROMIPS_MARK_TOOFAR32(i) ((i) | 0x40000)
1115 #define RELAX_MICROMIPS_CLEAR_TOOFAR32(i) ((i) & ~0x40000)
1116
1117 /* Sign-extend 16-bit value X.  */
1118 #define SEXT_16BIT(X) ((((X) + 0x8000) & 0xffff) - 0x8000)
1119
1120 /* Is the given value a sign-extended 32-bit value?  */
1121 #define IS_SEXT_32BIT_NUM(x)                                            \
1122   (((x) &~ (offsetT) 0x7fffffff) == 0                                   \
1123    || (((x) &~ (offsetT) 0x7fffffff) == ~ (offsetT) 0x7fffffff))
1124
1125 /* Is the given value a sign-extended 16-bit value?  */
1126 #define IS_SEXT_16BIT_NUM(x)                                            \
1127   (((x) &~ (offsetT) 0x7fff) == 0                                       \
1128    || (((x) &~ (offsetT) 0x7fff) == ~ (offsetT) 0x7fff))
1129
1130 /* Is the given value a sign-extended 12-bit value?  */
1131 #define IS_SEXT_12BIT_NUM(x)                                            \
1132   (((((x) & 0xfff) ^ 0x800LL) - 0x800LL) == (x))
1133
1134 /* Is the given value a sign-extended 9-bit value?  */
1135 #define IS_SEXT_9BIT_NUM(x)                                             \
1136   (((((x) & 0x1ff) ^ 0x100LL) - 0x100LL) == (x))
1137
1138 /* Is the given value a zero-extended 32-bit value?  Or a negated one?  */
1139 #define IS_ZEXT_32BIT_NUM(x)                                            \
1140   (((x) &~ (offsetT) 0xffffffff) == 0                                   \
1141    || (((x) &~ (offsetT) 0xffffffff) == ~ (offsetT) 0xffffffff))
1142
1143 /* Extract bits MASK << SHIFT from STRUCT and shift them right
1144    SHIFT places.  */
1145 #define EXTRACT_BITS(STRUCT, MASK, SHIFT) \
1146   (((STRUCT) >> (SHIFT)) & (MASK))
1147
1148 /* Extract the operand given by FIELD from mips_cl_insn INSN.  */
1149 #define EXTRACT_OPERAND(MICROMIPS, FIELD, INSN) \
1150   (!(MICROMIPS) \
1151    ? EXTRACT_BITS ((INSN).insn_opcode, OP_MASK_##FIELD, OP_SH_##FIELD) \
1152    : EXTRACT_BITS ((INSN).insn_opcode, \
1153                    MICROMIPSOP_MASK_##FIELD, MICROMIPSOP_SH_##FIELD))
1154 #define MIPS16_EXTRACT_OPERAND(FIELD, INSN) \
1155   EXTRACT_BITS ((INSN).insn_opcode, \
1156                 MIPS16OP_MASK_##FIELD, \
1157                 MIPS16OP_SH_##FIELD)
1158
1159 /* The MIPS16 EXTEND opcode, shifted left 16 places.  */
1160 #define MIPS16_EXTEND (0xf000U << 16)
1161 \f
1162 /* Whether or not we are emitting a branch-likely macro.  */
1163 static bfd_boolean emit_branch_likely_macro = FALSE;
1164
1165 /* Global variables used when generating relaxable macros.  See the
1166    comment above RELAX_ENCODE for more details about how relaxation
1167    is used.  */
1168 static struct {
1169   /* 0 if we're not emitting a relaxable macro.
1170      1 if we're emitting the first of the two relaxation alternatives.
1171      2 if we're emitting the second alternative.  */
1172   int sequence;
1173
1174   /* The first relaxable fixup in the current frag.  (In other words,
1175      the first fixup that refers to relaxable code.)  */
1176   fixS *first_fixup;
1177
1178   /* sizes[0] says how many bytes of the first alternative are stored in
1179      the current frag.  Likewise sizes[1] for the second alternative.  */
1180   unsigned int sizes[2];
1181
1182   /* The symbol on which the choice of sequence depends.  */
1183   symbolS *symbol;
1184 } mips_relax;
1185 \f
1186 /* Global variables used to decide whether a macro needs a warning.  */
1187 static struct {
1188   /* True if the macro is in a branch delay slot.  */
1189   bfd_boolean delay_slot_p;
1190
1191   /* Set to the length in bytes required if the macro is in a delay slot
1192      that requires a specific length of instruction, otherwise zero.  */
1193   unsigned int delay_slot_length;
1194
1195   /* For relaxable macros, sizes[0] is the length of the first alternative
1196      in bytes and sizes[1] is the length of the second alternative.
1197      For non-relaxable macros, both elements give the length of the
1198      macro in bytes.  */
1199   unsigned int sizes[2];
1200
1201   /* For relaxable macros, first_insn_sizes[0] is the length of the first
1202      instruction of the first alternative in bytes and first_insn_sizes[1]
1203      is the length of the first instruction of the second alternative.
1204      For non-relaxable macros, both elements give the length of the first
1205      instruction in bytes.
1206
1207      Set to zero if we haven't yet seen the first instruction.  */
1208   unsigned int first_insn_sizes[2];
1209
1210   /* For relaxable macros, insns[0] is the number of instructions for the
1211      first alternative and insns[1] is the number of instructions for the
1212      second alternative.
1213
1214      For non-relaxable macros, both elements give the number of
1215      instructions for the macro.  */
1216   unsigned int insns[2];
1217
1218   /* The first variant frag for this macro.  */
1219   fragS *first_frag;
1220 } mips_macro_warning;
1221 \f
1222 /* Prototypes for static functions.  */
1223
1224 enum mips_regclass { MIPS_GR_REG, MIPS_FP_REG, MIPS16_REG };
1225
1226 static void append_insn
1227   (struct mips_cl_insn *, expressionS *, bfd_reloc_code_real_type *,
1228    bfd_boolean expansionp);
1229 static void mips_no_prev_insn (void);
1230 static void macro_build (expressionS *, const char *, const char *, ...);
1231 static void mips16_macro_build
1232   (expressionS *, const char *, const char *, va_list *);
1233 static void load_register (int, expressionS *, int);
1234 static void macro_start (void);
1235 static void macro_end (void);
1236 static void macro (struct mips_cl_insn *ip, char *str);
1237 static void mips16_macro (struct mips_cl_insn * ip);
1238 static void mips_ip (char *str, struct mips_cl_insn * ip);
1239 static void mips16_ip (char *str, struct mips_cl_insn * ip);
1240 static void mips16_immed
1241   (char *, unsigned int, int, bfd_reloc_code_real_type, offsetT,
1242    unsigned int, unsigned long *);
1243 static size_t my_getSmallExpression
1244   (expressionS *, bfd_reloc_code_real_type *, char *);
1245 static void my_getExpression (expressionS *, char *);
1246 static void s_align (int);
1247 static void s_change_sec (int);
1248 static void s_change_section (int);
1249 static void s_cons (int);
1250 static void s_float_cons (int);
1251 static void s_mips_globl (int);
1252 static void s_option (int);
1253 static void s_mipsset (int);
1254 static void s_abicalls (int);
1255 static void s_cpload (int);
1256 static void s_cpsetup (int);
1257 static void s_cplocal (int);
1258 static void s_cprestore (int);
1259 static void s_cpreturn (int);
1260 static void s_dtprelword (int);
1261 static void s_dtpreldword (int);
1262 static void s_tprelword (int);
1263 static void s_tpreldword (int);
1264 static void s_gpvalue (int);
1265 static void s_gpword (int);
1266 static void s_gpdword (int);
1267 static void s_ehword (int);
1268 static void s_cpadd (int);
1269 static void s_insn (int);
1270 static void s_nan (int);
1271 static void md_obj_begin (void);
1272 static void md_obj_end (void);
1273 static void s_mips_ent (int);
1274 static void s_mips_end (int);
1275 static void s_mips_frame (int);
1276 static void s_mips_mask (int reg_type);
1277 static void s_mips_stab (int);
1278 static void s_mips_weakext (int);
1279 static void s_mips_file (int);
1280 static void s_mips_loc (int);
1281 static bfd_boolean pic_need_relax (symbolS *, asection *);
1282 static int relaxed_branch_length (fragS *, asection *, int);
1283 static int relaxed_micromips_16bit_branch_length (fragS *, asection *, int);
1284 static int relaxed_micromips_32bit_branch_length (fragS *, asection *, int);
1285
1286 /* Table and functions used to map between CPU/ISA names, and
1287    ISA levels, and CPU numbers.  */
1288
1289 struct mips_cpu_info
1290 {
1291   const char *name;           /* CPU or ISA name.  */
1292   int flags;                  /* MIPS_CPU_* flags.  */
1293   int ase;                    /* Set of ASEs implemented by the CPU.  */
1294   int isa;                    /* ISA level.  */
1295   int cpu;                    /* CPU number (default CPU if ISA).  */
1296 };
1297
1298 #define MIPS_CPU_IS_ISA         0x0001  /* Is this an ISA?  (If 0, a CPU.) */
1299
1300 static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *);
1301 static const struct mips_cpu_info *mips_cpu_info_from_isa (int);
1302 static const struct mips_cpu_info *mips_cpu_info_from_arch (int);
1303 \f
1304 /* Command-line options.  */
1305 const char *md_shortopts = "O::g::G:";
1306
1307 enum options
1308   {
1309     OPTION_MARCH = OPTION_MD_BASE,
1310     OPTION_MTUNE,
1311     OPTION_MIPS1,
1312     OPTION_MIPS2,
1313     OPTION_MIPS3,
1314     OPTION_MIPS4,
1315     OPTION_MIPS5,
1316     OPTION_MIPS32,
1317     OPTION_MIPS64,
1318     OPTION_MIPS32R2,
1319     OPTION_MIPS64R2,
1320     OPTION_MIPS16,
1321     OPTION_NO_MIPS16,
1322     OPTION_MIPS3D,
1323     OPTION_NO_MIPS3D,
1324     OPTION_MDMX,
1325     OPTION_NO_MDMX,
1326     OPTION_DSP,
1327     OPTION_NO_DSP,
1328     OPTION_MT,
1329     OPTION_NO_MT,
1330     OPTION_VIRT,
1331     OPTION_NO_VIRT,
1332     OPTION_SMARTMIPS,
1333     OPTION_NO_SMARTMIPS,
1334     OPTION_DSPR2,
1335     OPTION_NO_DSPR2,
1336     OPTION_EVA,
1337     OPTION_NO_EVA,
1338     OPTION_MICROMIPS,
1339     OPTION_NO_MICROMIPS,
1340     OPTION_MCU,
1341     OPTION_NO_MCU,
1342     OPTION_COMPAT_ARCH_BASE,
1343     OPTION_M4650,
1344     OPTION_NO_M4650,
1345     OPTION_M4010,
1346     OPTION_NO_M4010,
1347     OPTION_M4100,
1348     OPTION_NO_M4100,
1349     OPTION_M3900,
1350     OPTION_NO_M3900,
1351     OPTION_M7000_HILO_FIX,
1352     OPTION_MNO_7000_HILO_FIX,
1353     OPTION_FIX_24K,
1354     OPTION_NO_FIX_24K,
1355     OPTION_FIX_LOONGSON2F_JUMP,
1356     OPTION_NO_FIX_LOONGSON2F_JUMP,
1357     OPTION_FIX_LOONGSON2F_NOP,
1358     OPTION_NO_FIX_LOONGSON2F_NOP,
1359     OPTION_FIX_VR4120,
1360     OPTION_NO_FIX_VR4120,
1361     OPTION_FIX_VR4130,
1362     OPTION_NO_FIX_VR4130,
1363     OPTION_FIX_CN63XXP1,
1364     OPTION_NO_FIX_CN63XXP1,
1365     OPTION_TRAP,
1366     OPTION_BREAK,
1367     OPTION_EB,
1368     OPTION_EL,
1369     OPTION_FP32,
1370     OPTION_GP32,
1371     OPTION_CONSTRUCT_FLOATS,
1372     OPTION_NO_CONSTRUCT_FLOATS,
1373     OPTION_FP64,
1374     OPTION_GP64,
1375     OPTION_RELAX_BRANCH,
1376     OPTION_NO_RELAX_BRANCH,
1377     OPTION_INSN32,
1378     OPTION_NO_INSN32,
1379     OPTION_MSHARED,
1380     OPTION_MNO_SHARED,
1381     OPTION_MSYM32,
1382     OPTION_MNO_SYM32,
1383     OPTION_SOFT_FLOAT,
1384     OPTION_HARD_FLOAT,
1385     OPTION_SINGLE_FLOAT,
1386     OPTION_DOUBLE_FLOAT,
1387     OPTION_32,
1388     OPTION_CALL_SHARED,
1389     OPTION_CALL_NONPIC,
1390     OPTION_NON_SHARED,
1391     OPTION_XGOT,
1392     OPTION_MABI,
1393     OPTION_N32,
1394     OPTION_64,
1395     OPTION_MDEBUG,
1396     OPTION_NO_MDEBUG,
1397     OPTION_PDR,
1398     OPTION_NO_PDR,
1399     OPTION_MVXWORKS_PIC,
1400     OPTION_NAN,
1401     OPTION_END_OF_ENUM
1402   };
1403
1404 struct option md_longopts[] =
1405 {
1406   /* Options which specify architecture.  */
1407   {"march", required_argument, NULL, OPTION_MARCH},
1408   {"mtune", required_argument, NULL, OPTION_MTUNE},
1409   {"mips0", no_argument, NULL, OPTION_MIPS1},
1410   {"mips1", no_argument, NULL, OPTION_MIPS1},
1411   {"mips2", no_argument, NULL, OPTION_MIPS2},
1412   {"mips3", no_argument, NULL, OPTION_MIPS3},
1413   {"mips4", no_argument, NULL, OPTION_MIPS4},
1414   {"mips5", no_argument, NULL, OPTION_MIPS5},
1415   {"mips32", no_argument, NULL, OPTION_MIPS32},
1416   {"mips64", no_argument, NULL, OPTION_MIPS64},
1417   {"mips32r2", no_argument, NULL, OPTION_MIPS32R2},
1418   {"mips64r2", no_argument, NULL, OPTION_MIPS64R2},
1419
1420   /* Options which specify Application Specific Extensions (ASEs).  */
1421   {"mips16", no_argument, NULL, OPTION_MIPS16},
1422   {"no-mips16", no_argument, NULL, OPTION_NO_MIPS16},
1423   {"mips3d", no_argument, NULL, OPTION_MIPS3D},
1424   {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D},
1425   {"mdmx", no_argument, NULL, OPTION_MDMX},
1426   {"no-mdmx", no_argument, NULL, OPTION_NO_MDMX},
1427   {"mdsp", no_argument, NULL, OPTION_DSP},
1428   {"mno-dsp", no_argument, NULL, OPTION_NO_DSP},
1429   {"mmt", no_argument, NULL, OPTION_MT},
1430   {"mno-mt", no_argument, NULL, OPTION_NO_MT},
1431   {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS},
1432   {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS},
1433   {"mdspr2", no_argument, NULL, OPTION_DSPR2},
1434   {"mno-dspr2", no_argument, NULL, OPTION_NO_DSPR2},
1435   {"meva", no_argument, NULL, OPTION_EVA},
1436   {"mno-eva", no_argument, NULL, OPTION_NO_EVA},
1437   {"mmicromips", no_argument, NULL, OPTION_MICROMIPS},
1438   {"mno-micromips", no_argument, NULL, OPTION_NO_MICROMIPS},
1439   {"mmcu", no_argument, NULL, OPTION_MCU},
1440   {"mno-mcu", no_argument, NULL, OPTION_NO_MCU},
1441   {"mvirt", no_argument, NULL, OPTION_VIRT},
1442   {"mno-virt", no_argument, NULL, OPTION_NO_VIRT},
1443
1444   /* Old-style architecture options.  Don't add more of these.  */
1445   {"m4650", no_argument, NULL, OPTION_M4650},
1446   {"no-m4650", no_argument, NULL, OPTION_NO_M4650},
1447   {"m4010", no_argument, NULL, OPTION_M4010},
1448   {"no-m4010", no_argument, NULL, OPTION_NO_M4010},
1449   {"m4100", no_argument, NULL, OPTION_M4100},
1450   {"no-m4100", no_argument, NULL, OPTION_NO_M4100},
1451   {"m3900", no_argument, NULL, OPTION_M3900},
1452   {"no-m3900", no_argument, NULL, OPTION_NO_M3900},
1453
1454   /* Options which enable bug fixes.  */
1455   {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX},
1456   {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1457   {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
1458   {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP},
1459   {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP},
1460   {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP},
1461   {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP},
1462   {"mfix-vr4120",    no_argument, NULL, OPTION_FIX_VR4120},
1463   {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120},
1464   {"mfix-vr4130",    no_argument, NULL, OPTION_FIX_VR4130},
1465   {"mno-fix-vr4130", no_argument, NULL, OPTION_NO_FIX_VR4130},
1466   {"mfix-24k",    no_argument, NULL, OPTION_FIX_24K},
1467   {"mno-fix-24k", no_argument, NULL, OPTION_NO_FIX_24K},
1468   {"mfix-cn63xxp1", no_argument, NULL, OPTION_FIX_CN63XXP1},
1469   {"mno-fix-cn63xxp1", no_argument, NULL, OPTION_NO_FIX_CN63XXP1},
1470
1471   /* Miscellaneous options.  */
1472   {"trap", no_argument, NULL, OPTION_TRAP},
1473   {"no-break", no_argument, NULL, OPTION_TRAP},
1474   {"break", no_argument, NULL, OPTION_BREAK},
1475   {"no-trap", no_argument, NULL, OPTION_BREAK},
1476   {"EB", no_argument, NULL, OPTION_EB},
1477   {"EL", no_argument, NULL, OPTION_EL},
1478   {"mfp32", no_argument, NULL, OPTION_FP32},
1479   {"mgp32", no_argument, NULL, OPTION_GP32},
1480   {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS},
1481   {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
1482   {"mfp64", no_argument, NULL, OPTION_FP64},
1483   {"mgp64", no_argument, NULL, OPTION_GP64},
1484   {"relax-branch", no_argument, NULL, OPTION_RELAX_BRANCH},
1485   {"no-relax-branch", no_argument, NULL, OPTION_NO_RELAX_BRANCH},
1486   {"minsn32", no_argument, NULL, OPTION_INSN32},
1487   {"mno-insn32", no_argument, NULL, OPTION_NO_INSN32},
1488   {"mshared", no_argument, NULL, OPTION_MSHARED},
1489   {"mno-shared", no_argument, NULL, OPTION_MNO_SHARED},
1490   {"msym32", no_argument, NULL, OPTION_MSYM32},
1491   {"mno-sym32", no_argument, NULL, OPTION_MNO_SYM32},
1492   {"msoft-float", no_argument, NULL, OPTION_SOFT_FLOAT},
1493   {"mhard-float", no_argument, NULL, OPTION_HARD_FLOAT},
1494   {"msingle-float", no_argument, NULL, OPTION_SINGLE_FLOAT},
1495   {"mdouble-float", no_argument, NULL, OPTION_DOUBLE_FLOAT},
1496
1497   /* Strictly speaking this next option is ELF specific,
1498      but we allow it for other ports as well in order to
1499      make testing easier.  */
1500   {"32", no_argument, NULL, OPTION_32},
1501
1502   /* ELF-specific options.  */
1503   {"KPIC", no_argument, NULL, OPTION_CALL_SHARED},
1504   {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
1505   {"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC},
1506   {"non_shared",  no_argument, NULL, OPTION_NON_SHARED},
1507   {"xgot", no_argument, NULL, OPTION_XGOT},
1508   {"mabi", required_argument, NULL, OPTION_MABI},
1509   {"n32", no_argument, NULL, OPTION_N32},
1510   {"64", no_argument, NULL, OPTION_64},
1511   {"mdebug", no_argument, NULL, OPTION_MDEBUG},
1512   {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG},
1513   {"mpdr", no_argument, NULL, OPTION_PDR},
1514   {"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
1515   {"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC},
1516   {"mnan", required_argument, NULL, OPTION_NAN},
1517
1518   {NULL, no_argument, NULL, 0}
1519 };
1520 size_t md_longopts_size = sizeof (md_longopts);
1521 \f
1522 /* Information about either an Application Specific Extension or an
1523    optional architecture feature that, for simplicity, we treat in the
1524    same way as an ASE.  */
1525 struct mips_ase
1526 {
1527   /* The name of the ASE, used in both the command-line and .set options.  */
1528   const char *name;
1529
1530   /* The associated ASE_* flags.  If the ASE is available on both 32-bit
1531      and 64-bit architectures, the flags here refer to the subset that
1532      is available on both.  */
1533   unsigned int flags;
1534
1535   /* The ASE_* flag used for instructions that are available on 64-bit
1536      architectures but that are not included in FLAGS.  */
1537   unsigned int flags64;
1538
1539   /* The command-line options that turn the ASE on and off.  */
1540   int option_on;
1541   int option_off;
1542
1543   /* The minimum required architecture revisions for MIPS32, MIPS64,
1544      microMIPS32 and microMIPS64, or -1 if the extension isn't supported.  */
1545   int mips32_rev;
1546   int mips64_rev;
1547   int micromips32_rev;
1548   int micromips64_rev;
1549 };
1550
1551 /* A table of all supported ASEs.  */
1552 static const struct mips_ase mips_ases[] = {
1553   { "dsp", ASE_DSP, ASE_DSP64,
1554     OPTION_DSP, OPTION_NO_DSP,
1555     2, 2, 2, 2 },
1556
1557   { "dspr2", ASE_DSP | ASE_DSPR2, 0,
1558     OPTION_DSPR2, OPTION_NO_DSPR2,
1559     2, 2, 2, 2 },
1560
1561   { "eva", ASE_EVA, 0,
1562     OPTION_EVA, OPTION_NO_EVA,
1563     2, 2, 2, 2 },
1564
1565   { "mcu", ASE_MCU, 0,
1566     OPTION_MCU, OPTION_NO_MCU,
1567     2, 2, 2, 2 },
1568
1569   /* Deprecated in MIPS64r5, but we don't implement that yet.  */
1570   { "mdmx", ASE_MDMX, 0,
1571     OPTION_MDMX, OPTION_NO_MDMX,
1572     -1, 1, -1, -1 },
1573
1574   /* Requires 64-bit FPRs, so the minimum MIPS32 revision is 2.  */
1575   { "mips3d", ASE_MIPS3D, 0,
1576     OPTION_MIPS3D, OPTION_NO_MIPS3D,
1577     2, 1, -1, -1 },
1578
1579   { "mt", ASE_MT, 0,
1580     OPTION_MT, OPTION_NO_MT,
1581     2, 2, -1, -1 },
1582
1583   { "smartmips", ASE_SMARTMIPS, 0,
1584     OPTION_SMARTMIPS, OPTION_NO_SMARTMIPS,
1585     1, -1, -1, -1 },
1586
1587   { "virt", ASE_VIRT, ASE_VIRT64,
1588     OPTION_VIRT, OPTION_NO_VIRT,
1589     2, 2, 2, 2 }
1590 };
1591
1592 /* The set of ASEs that require -mfp64.  */
1593 #define FP64_ASES (ASE_MIPS3D | ASE_MDMX)
1594
1595 /* Groups of ASE_* flags that represent different revisions of an ASE.  */
1596 static const unsigned int mips_ase_groups[] = {
1597   ASE_DSP | ASE_DSPR2
1598 };
1599 \f
1600 /* Pseudo-op table.
1601
1602    The following pseudo-ops from the Kane and Heinrich MIPS book
1603    should be defined here, but are currently unsupported: .alias,
1604    .galive, .gjaldef, .gjrlive, .livereg, .noalias.
1605
1606    The following pseudo-ops from the Kane and Heinrich MIPS book are
1607    specific to the type of debugging information being generated, and
1608    should be defined by the object format: .aent, .begin, .bend,
1609    .bgnb, .end, .endb, .ent, .fmask, .frame, .loc, .mask, .verstamp,
1610    .vreg.
1611
1612    The following pseudo-ops from the Kane and Heinrich MIPS book are
1613    not MIPS CPU specific, but are also not specific to the object file
1614    format.  This file is probably the best place to define them, but
1615    they are not currently supported: .asm0, .endr, .lab, .struct.  */
1616
1617 static const pseudo_typeS mips_pseudo_table[] =
1618 {
1619   /* MIPS specific pseudo-ops.  */
1620   {"option", s_option, 0},
1621   {"set", s_mipsset, 0},
1622   {"rdata", s_change_sec, 'r'},
1623   {"sdata", s_change_sec, 's'},
1624   {"livereg", s_ignore, 0},
1625   {"abicalls", s_abicalls, 0},
1626   {"cpload", s_cpload, 0},
1627   {"cpsetup", s_cpsetup, 0},
1628   {"cplocal", s_cplocal, 0},
1629   {"cprestore", s_cprestore, 0},
1630   {"cpreturn", s_cpreturn, 0},
1631   {"dtprelword", s_dtprelword, 0},
1632   {"dtpreldword", s_dtpreldword, 0},
1633   {"tprelword", s_tprelword, 0},
1634   {"tpreldword", s_tpreldword, 0},
1635   {"gpvalue", s_gpvalue, 0},
1636   {"gpword", s_gpword, 0},
1637   {"gpdword", s_gpdword, 0},
1638   {"ehword", s_ehword, 0},
1639   {"cpadd", s_cpadd, 0},
1640   {"insn", s_insn, 0},
1641   {"nan", s_nan, 0},
1642
1643   /* Relatively generic pseudo-ops that happen to be used on MIPS
1644      chips.  */
1645   {"asciiz", stringer, 8 + 1},
1646   {"bss", s_change_sec, 'b'},
1647   {"err", s_err, 0},
1648   {"half", s_cons, 1},
1649   {"dword", s_cons, 3},
1650   {"weakext", s_mips_weakext, 0},
1651   {"origin", s_org, 0},
1652   {"repeat", s_rept, 0},
1653
1654   /* For MIPS this is non-standard, but we define it for consistency.  */
1655   {"sbss", s_change_sec, 'B'},
1656
1657   /* These pseudo-ops are defined in read.c, but must be overridden
1658      here for one reason or another.  */
1659   {"align", s_align, 0},
1660   {"byte", s_cons, 0},
1661   {"data", s_change_sec, 'd'},
1662   {"double", s_float_cons, 'd'},
1663   {"float", s_float_cons, 'f'},
1664   {"globl", s_mips_globl, 0},
1665   {"global", s_mips_globl, 0},
1666   {"hword", s_cons, 1},
1667   {"int", s_cons, 2},
1668   {"long", s_cons, 2},
1669   {"octa", s_cons, 4},
1670   {"quad", s_cons, 3},
1671   {"section", s_change_section, 0},
1672   {"short", s_cons, 1},
1673   {"single", s_float_cons, 'f'},
1674   {"stabd", s_mips_stab, 'd'},
1675   {"stabn", s_mips_stab, 'n'},
1676   {"stabs", s_mips_stab, 's'},
1677   {"text", s_change_sec, 't'},
1678   {"word", s_cons, 2},
1679
1680   { "extern", ecoff_directive_extern, 0},
1681
1682   { NULL, NULL, 0 },
1683 };
1684
1685 static const pseudo_typeS mips_nonecoff_pseudo_table[] =
1686 {
1687   /* These pseudo-ops should be defined by the object file format.
1688      However, a.out doesn't support them, so we have versions here.  */
1689   {"aent", s_mips_ent, 1},
1690   {"bgnb", s_ignore, 0},
1691   {"end", s_mips_end, 0},
1692   {"endb", s_ignore, 0},
1693   {"ent", s_mips_ent, 0},
1694   {"file", s_mips_file, 0},
1695   {"fmask", s_mips_mask, 'F'},
1696   {"frame", s_mips_frame, 0},
1697   {"loc", s_mips_loc, 0},
1698   {"mask", s_mips_mask, 'R'},
1699   {"verstamp", s_ignore, 0},
1700   { NULL, NULL, 0 },
1701 };
1702
1703 /* Export the ABI address size for use by TC_ADDRESS_BYTES for the
1704    purpose of the `.dc.a' internal pseudo-op.  */
1705
1706 int
1707 mips_address_bytes (void)
1708 {
1709   return HAVE_64BIT_ADDRESSES ? 8 : 4;
1710 }
1711
1712 extern void pop_insert (const pseudo_typeS *);
1713
1714 void
1715 mips_pop_insert (void)
1716 {
1717   pop_insert (mips_pseudo_table);
1718   if (! ECOFF_DEBUGGING)
1719     pop_insert (mips_nonecoff_pseudo_table);
1720 }
1721 \f
1722 /* Symbols labelling the current insn.  */
1723
1724 struct insn_label_list
1725 {
1726   struct insn_label_list *next;
1727   symbolS *label;
1728 };
1729
1730 static struct insn_label_list *free_insn_labels;
1731 #define label_list tc_segment_info_data.labels
1732
1733 static void mips_clear_insn_labels (void);
1734 static void mips_mark_labels (void);
1735 static void mips_compressed_mark_labels (void);
1736
1737 static inline void
1738 mips_clear_insn_labels (void)
1739 {
1740   register struct insn_label_list **pl;
1741   segment_info_type *si;
1742
1743   if (now_seg)
1744     {
1745       for (pl = &free_insn_labels; *pl != NULL; pl = &(*pl)->next)
1746         ;
1747       
1748       si = seg_info (now_seg);
1749       *pl = si->label_list;
1750       si->label_list = NULL;
1751     }
1752 }
1753
1754 /* Mark instruction labels in MIPS16/microMIPS mode.  */
1755
1756 static inline void
1757 mips_mark_labels (void)
1758 {
1759   if (HAVE_CODE_COMPRESSION)
1760     mips_compressed_mark_labels ();
1761 }
1762 \f
1763 static char *expr_end;
1764
1765 /* Expressions which appear in macro instructions.  These are set by
1766    mips_ip and read by macro.  */
1767
1768 static expressionS imm_expr;
1769 static expressionS imm2_expr;
1770
1771 /* The relocatable field in an instruction and the relocs associated
1772    with it.  These variables are used for instructions like LUI and
1773    JAL as well as true offsets.  They are also used for address
1774    operands in macros.  */
1775
1776 static expressionS offset_expr;
1777 static bfd_reloc_code_real_type offset_reloc[3]
1778   = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
1779
1780 /* This is set to the resulting size of the instruction to be produced
1781    by mips16_ip if an explicit extension is used or by mips_ip if an
1782    explicit size is supplied.  */
1783
1784 static unsigned int forced_insn_length;
1785
1786 /* True if we are assembling an instruction.  All dot symbols defined during
1787    this time should be treated as code labels.  */
1788
1789 static bfd_boolean mips_assembling_insn;
1790
1791 /* The pdr segment for per procedure frame/regmask info.  Not used for
1792    ECOFF debugging.  */
1793
1794 static segT pdr_seg;
1795
1796 /* The default target format to use.  */
1797
1798 #if defined (TE_FreeBSD)
1799 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips-freebsd"
1800 #elif defined (TE_TMIPS)
1801 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips"
1802 #else
1803 #define ELF_TARGET(PREFIX, ENDIAN) PREFIX ENDIAN "mips"
1804 #endif
1805
1806 const char *
1807 mips_target_format (void)
1808 {
1809   switch (OUTPUT_FLAVOR)
1810     {
1811     case bfd_target_elf_flavour:
1812 #ifdef TE_VXWORKS
1813       if (!HAVE_64BIT_OBJECTS && !HAVE_NEWABI)
1814         return (target_big_endian
1815                 ? "elf32-bigmips-vxworks"
1816                 : "elf32-littlemips-vxworks");
1817 #endif
1818       return (target_big_endian
1819               ? (HAVE_64BIT_OBJECTS
1820                  ? ELF_TARGET ("elf64-", "big")
1821                  : (HAVE_NEWABI
1822                     ? ELF_TARGET ("elf32-n", "big")
1823                     : ELF_TARGET ("elf32-", "big")))
1824               : (HAVE_64BIT_OBJECTS
1825                  ? ELF_TARGET ("elf64-", "little")
1826                  : (HAVE_NEWABI
1827                     ? ELF_TARGET ("elf32-n", "little")
1828                     : ELF_TARGET ("elf32-", "little"))));
1829     default:
1830       abort ();
1831       return NULL;
1832     }
1833 }
1834
1835 /* Return the ISA revision that is currently in use, or 0 if we are
1836    generating code for MIPS V or below.  */
1837
1838 static int
1839 mips_isa_rev (void)
1840 {
1841   if (mips_opts.isa == ISA_MIPS32R2 || mips_opts.isa == ISA_MIPS64R2)
1842     return 2;
1843
1844   /* microMIPS implies revision 2 or above.  */
1845   if (mips_opts.micromips)
1846     return 2;
1847
1848   if (mips_opts.isa == ISA_MIPS32 || mips_opts.isa == ISA_MIPS64)
1849     return 1;
1850
1851   return 0;
1852 }
1853
1854 /* Return the mask of all ASEs that are revisions of those in FLAGS.  */
1855
1856 static unsigned int
1857 mips_ase_mask (unsigned int flags)
1858 {
1859   unsigned int i;
1860
1861   for (i = 0; i < ARRAY_SIZE (mips_ase_groups); i++)
1862     if (flags & mips_ase_groups[i])
1863       flags |= mips_ase_groups[i];
1864   return flags;
1865 }
1866
1867 /* Check whether the current ISA supports ASE.  Issue a warning if
1868    appropriate.  */
1869
1870 static void
1871 mips_check_isa_supports_ase (const struct mips_ase *ase)
1872 {
1873   const char *base;
1874   int min_rev, size;
1875   static unsigned int warned_isa;
1876   static unsigned int warned_fp32;
1877
1878   if (ISA_HAS_64BIT_REGS (mips_opts.isa))
1879     min_rev = mips_opts.micromips ? ase->micromips64_rev : ase->mips64_rev;
1880   else
1881     min_rev = mips_opts.micromips ? ase->micromips32_rev : ase->mips32_rev;
1882   if ((min_rev < 0 || mips_isa_rev () < min_rev)
1883       && (warned_isa & ase->flags) != ase->flags)
1884     {
1885       warned_isa |= ase->flags;
1886       base = mips_opts.micromips ? "microMIPS" : "MIPS";
1887       size = ISA_HAS_64BIT_REGS (mips_opts.isa) ? 64 : 32;
1888       if (min_rev < 0)
1889         as_warn (_("The %d-bit %s architecture does not support the"
1890                    " `%s' extension"), size, base, ase->name);
1891       else
1892         as_warn (_("The `%s' extension requires %s%d revision %d or greater"),
1893                  ase->name, base, size, min_rev);
1894     }
1895   if ((ase->flags & FP64_ASES)
1896       && mips_opts.fp32
1897       && (warned_fp32 & ase->flags) != ase->flags)
1898     {
1899       warned_fp32 |= ase->flags;
1900       as_warn (_("The `%s' extension requires 64-bit FPRs"), ase->name);
1901     }
1902 }
1903
1904 /* Check all enabled ASEs to see whether they are supported by the
1905    chosen architecture.  */
1906
1907 static void
1908 mips_check_isa_supports_ases (void)
1909 {
1910   unsigned int i, mask;
1911
1912   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
1913     {
1914       mask = mips_ase_mask (mips_ases[i].flags);
1915       if ((mips_opts.ase & mask) == mips_ases[i].flags)
1916         mips_check_isa_supports_ase (&mips_ases[i]);
1917     }
1918 }
1919
1920 /* Set the state of ASE to ENABLED_P.  Return the mask of ASE_* flags
1921    that were affected.  */
1922
1923 static unsigned int
1924 mips_set_ase (const struct mips_ase *ase, bfd_boolean enabled_p)
1925 {
1926   unsigned int mask;
1927
1928   mask = mips_ase_mask (ase->flags);
1929   mips_opts.ase &= ~mask;
1930   if (enabled_p)
1931     mips_opts.ase |= ase->flags;
1932   return mask;
1933 }
1934
1935 /* Return the ASE called NAME, or null if none.  */
1936
1937 static const struct mips_ase *
1938 mips_lookup_ase (const char *name)
1939 {
1940   unsigned int i;
1941
1942   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
1943     if (strcmp (name, mips_ases[i].name) == 0)
1944       return &mips_ases[i];
1945   return NULL;
1946 }
1947
1948 /* Return the length of a microMIPS instruction in bytes.  If bits of
1949    the mask beyond the low 16 are 0, then it is a 16-bit instruction.
1950    Otherwise assume a 32-bit instruction; 48-bit instructions (0x1f
1951    major opcode) will require further modifications to the opcode
1952    table.  */
1953
1954 static inline unsigned int
1955 micromips_insn_length (const struct mips_opcode *mo)
1956 {
1957   return (mo->mask >> 16) == 0 ? 2 : 4;
1958 }
1959
1960 /* Return the length of MIPS16 instruction OPCODE.  */
1961
1962 static inline unsigned int
1963 mips16_opcode_length (unsigned long opcode)
1964 {
1965   return (opcode >> 16) == 0 ? 2 : 4;
1966 }
1967
1968 /* Return the length of instruction INSN.  */
1969
1970 static inline unsigned int
1971 insn_length (const struct mips_cl_insn *insn)
1972 {
1973   if (mips_opts.micromips)
1974     return micromips_insn_length (insn->insn_mo);
1975   else if (mips_opts.mips16)
1976     return mips16_opcode_length (insn->insn_opcode);
1977   else
1978     return 4;
1979 }
1980
1981 /* Initialise INSN from opcode entry MO.  Leave its position unspecified.  */
1982
1983 static void
1984 create_insn (struct mips_cl_insn *insn, const struct mips_opcode *mo)
1985 {
1986   size_t i;
1987
1988   insn->insn_mo = mo;
1989   insn->insn_opcode = mo->match;
1990   insn->frag = NULL;
1991   insn->where = 0;
1992   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
1993     insn->fixp[i] = NULL;
1994   insn->fixed_p = (mips_opts.noreorder > 0);
1995   insn->noreorder_p = (mips_opts.noreorder > 0);
1996   insn->mips16_absolute_jump_p = 0;
1997   insn->complete_p = 0;
1998   insn->cleared_p = 0;
1999 }
2000
2001 /* Get a list of all the operands in INSN.  */
2002
2003 static const struct mips_operand_array *
2004 insn_operands (const struct mips_cl_insn *insn)
2005 {
2006   if (insn->insn_mo >= &mips_opcodes[0]
2007       && insn->insn_mo < &mips_opcodes[NUMOPCODES])
2008     return &mips_operands[insn->insn_mo - &mips_opcodes[0]];
2009
2010   if (insn->insn_mo >= &mips16_opcodes[0]
2011       && insn->insn_mo < &mips16_opcodes[bfd_mips16_num_opcodes])
2012     return &mips16_operands[insn->insn_mo - &mips16_opcodes[0]];
2013
2014   if (insn->insn_mo >= &micromips_opcodes[0]
2015       && insn->insn_mo < &micromips_opcodes[bfd_micromips_num_opcodes])
2016     return &micromips_operands[insn->insn_mo - &micromips_opcodes[0]];
2017
2018   abort ();
2019 }
2020
2021 /* Get a description of operand OPNO of INSN.  */
2022
2023 static const struct mips_operand *
2024 insn_opno (const struct mips_cl_insn *insn, unsigned opno)
2025 {
2026   const struct mips_operand_array *operands;
2027
2028   operands = insn_operands (insn);
2029   if (opno >= MAX_OPERANDS || !operands->operand[opno])
2030     abort ();
2031   return operands->operand[opno];
2032 }
2033
2034 /* Install UVAL as the value of OPERAND in INSN.  */
2035
2036 static inline void
2037 insn_insert_operand (struct mips_cl_insn *insn,
2038                      const struct mips_operand *operand, unsigned int uval)
2039 {
2040   insn->insn_opcode = mips_insert_operand (operand, insn->insn_opcode, uval);
2041 }
2042
2043 /* Extract the value of OPERAND from INSN.  */
2044
2045 static inline unsigned
2046 insn_extract_operand (const struct mips_cl_insn *insn,
2047                       const struct mips_operand *operand)
2048 {
2049   return mips_extract_operand (operand, insn->insn_opcode);
2050 }
2051
2052 /* Record the current MIPS16/microMIPS mode in now_seg.  */
2053
2054 static void
2055 mips_record_compressed_mode (void)
2056 {
2057   segment_info_type *si;
2058
2059   si = seg_info (now_seg);
2060   if (si->tc_segment_info_data.mips16 != mips_opts.mips16)
2061     si->tc_segment_info_data.mips16 = mips_opts.mips16;
2062   if (si->tc_segment_info_data.micromips != mips_opts.micromips)
2063     si->tc_segment_info_data.micromips = mips_opts.micromips;
2064 }
2065
2066 /* Read a standard MIPS instruction from BUF.  */
2067
2068 static unsigned long
2069 read_insn (char *buf)
2070 {
2071   if (target_big_endian)
2072     return bfd_getb32 ((bfd_byte *) buf);
2073   else
2074     return bfd_getl32 ((bfd_byte *) buf);
2075 }
2076
2077 /* Write standard MIPS instruction INSN to BUF.  Return a pointer to
2078    the next byte.  */
2079
2080 static char *
2081 write_insn (char *buf, unsigned int insn)
2082 {
2083   md_number_to_chars (buf, insn, 4);
2084   return buf + 4;
2085 }
2086
2087 /* Read a microMIPS or MIPS16 opcode from BUF, given that it
2088    has length LENGTH.  */
2089
2090 static unsigned long
2091 read_compressed_insn (char *buf, unsigned int length)
2092 {
2093   unsigned long insn;
2094   unsigned int i;
2095
2096   insn = 0;
2097   for (i = 0; i < length; i += 2)
2098     {
2099       insn <<= 16;
2100       if (target_big_endian)
2101         insn |= bfd_getb16 ((char *) buf);
2102       else
2103         insn |= bfd_getl16 ((char *) buf);
2104       buf += 2;
2105     }
2106   return insn;
2107 }
2108
2109 /* Write microMIPS or MIPS16 instruction INSN to BUF, given that the
2110    instruction is LENGTH bytes long.  Return a pointer to the next byte.  */
2111
2112 static char *
2113 write_compressed_insn (char *buf, unsigned int insn, unsigned int length)
2114 {
2115   unsigned int i;
2116
2117   for (i = 0; i < length; i += 2)
2118     md_number_to_chars (buf + i, insn >> ((length - i - 2) * 8), 2);
2119   return buf + length;
2120 }
2121
2122 /* Install INSN at the location specified by its "frag" and "where" fields.  */
2123
2124 static void
2125 install_insn (const struct mips_cl_insn *insn)
2126 {
2127   char *f = insn->frag->fr_literal + insn->where;
2128   if (HAVE_CODE_COMPRESSION)
2129     write_compressed_insn (f, insn->insn_opcode, insn_length (insn));
2130   else
2131     write_insn (f, insn->insn_opcode);
2132   mips_record_compressed_mode ();
2133 }
2134
2135 /* Move INSN to offset WHERE in FRAG.  Adjust the fixups accordingly
2136    and install the opcode in the new location.  */
2137
2138 static void
2139 move_insn (struct mips_cl_insn *insn, fragS *frag, long where)
2140 {
2141   size_t i;
2142
2143   insn->frag = frag;
2144   insn->where = where;
2145   for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
2146     if (insn->fixp[i] != NULL)
2147       {
2148         insn->fixp[i]->fx_frag = frag;
2149         insn->fixp[i]->fx_where = where;
2150       }
2151   install_insn (insn);
2152 }
2153
2154 /* Add INSN to the end of the output.  */
2155
2156 static void
2157 add_fixed_insn (struct mips_cl_insn *insn)
2158 {
2159   char *f = frag_more (insn_length (insn));
2160   move_insn (insn, frag_now, f - frag_now->fr_literal);
2161 }
2162
2163 /* Start a variant frag and move INSN to the start of the variant part,
2164    marking it as fixed.  The other arguments are as for frag_var.  */
2165
2166 static void
2167 add_relaxed_insn (struct mips_cl_insn *insn, int max_chars, int var,
2168                   relax_substateT subtype, symbolS *symbol, offsetT offset)
2169 {
2170   frag_grow (max_chars);
2171   move_insn (insn, frag_now, frag_more (0) - frag_now->fr_literal);
2172   insn->fixed_p = 1;
2173   frag_var (rs_machine_dependent, max_chars, var,
2174             subtype, symbol, offset, NULL);
2175 }
2176
2177 /* Insert N copies of INSN into the history buffer, starting at
2178    position FIRST.  Neither FIRST nor N need to be clipped.  */
2179
2180 static void
2181 insert_into_history (unsigned int first, unsigned int n,
2182                      const struct mips_cl_insn *insn)
2183 {
2184   if (mips_relax.sequence != 2)
2185     {
2186       unsigned int i;
2187
2188       for (i = ARRAY_SIZE (history); i-- > first;)
2189         if (i >= first + n)
2190           history[i] = history[i - n];
2191         else
2192           history[i] = *insn;
2193     }
2194 }
2195
2196 /* Clear the error in insn_error.  */
2197
2198 static void
2199 clear_insn_error (void)
2200 {
2201   memset (&insn_error, 0, sizeof (insn_error));
2202 }
2203
2204 /* Possibly record error message MSG for the current instruction.
2205    If the error is about a particular argument, ARGNUM is the 1-based
2206    number of that argument, otherwise it is 0.  FORMAT is the format
2207    of MSG.  Return true if MSG was used, false if the current message
2208    was kept.  */
2209
2210 static bfd_boolean
2211 set_insn_error_format (int argnum, enum mips_insn_error_format format,
2212                        const char *msg)
2213 {
2214   if (argnum == 0)
2215     {
2216       /* Give priority to errors against specific arguments, and to
2217          the first whole-instruction message.  */
2218       if (insn_error.msg)
2219         return FALSE;
2220     }
2221   else
2222     {
2223       /* Keep insn_error if it is against a later argument.  */
2224       if (argnum < insn_error.min_argnum)
2225         return FALSE;
2226
2227       /* If both errors are against the same argument but are different,
2228          give up on reporting a specific error for this argument.
2229          See the comment about mips_insn_error for details.  */
2230       if (argnum == insn_error.min_argnum
2231           && insn_error.msg
2232           && strcmp (insn_error.msg, msg) != 0)
2233         {
2234           insn_error.msg = 0;
2235           insn_error.min_argnum += 1;
2236           return FALSE;
2237         }
2238     }
2239   insn_error.min_argnum = argnum;
2240   insn_error.format = format;
2241   insn_error.msg = msg;
2242   return TRUE;
2243 }
2244
2245 /* Record an instruction error with no % format fields.  ARGNUM and MSG are
2246    as for set_insn_error_format.  */
2247
2248 static void
2249 set_insn_error (int argnum, const char *msg)
2250 {
2251   set_insn_error_format (argnum, ERR_FMT_PLAIN, msg);
2252 }
2253
2254 /* Record an instruction error with one %d field I.  ARGNUM and MSG are
2255    as for set_insn_error_format.  */
2256
2257 static void
2258 set_insn_error_i (int argnum, const char *msg, int i)
2259 {
2260   if (set_insn_error_format (argnum, ERR_FMT_I, msg))
2261     insn_error.u.i = i;
2262 }
2263
2264 /* Record an instruction error with two %s fields S1 and S2.  ARGNUM and MSG
2265    are as for set_insn_error_format.  */
2266
2267 static void
2268 set_insn_error_ss (int argnum, const char *msg, const char *s1, const char *s2)
2269 {
2270   if (set_insn_error_format (argnum, ERR_FMT_SS, msg))
2271     {
2272       insn_error.u.ss[0] = s1;
2273       insn_error.u.ss[1] = s2;
2274     }
2275 }
2276
2277 /* Report the error in insn_error, which is against assembly code STR.  */
2278
2279 static void
2280 report_insn_error (const char *str)
2281 {
2282   const char *msg;
2283
2284   msg = ACONCAT ((insn_error.msg, " `%s'", NULL));
2285   switch (insn_error.format)
2286     {
2287     case ERR_FMT_PLAIN:
2288       as_bad (msg, str);
2289       break;
2290
2291     case ERR_FMT_I:
2292       as_bad (msg, insn_error.u.i, str);
2293       break;
2294
2295     case ERR_FMT_SS:
2296       as_bad (msg, insn_error.u.ss[0], insn_error.u.ss[1], str);
2297       break;
2298     }
2299 }
2300
2301 /* Initialize vr4120_conflicts.  There is a bit of duplication here:
2302    the idea is to make it obvious at a glance that each errata is
2303    included.  */
2304
2305 static void
2306 init_vr4120_conflicts (void)
2307 {
2308 #define CONFLICT(FIRST, SECOND) \
2309     vr4120_conflicts[FIX_VR4120_##FIRST] |= 1 << FIX_VR4120_##SECOND
2310
2311   /* Errata 21 - [D]DIV[U] after [D]MACC */
2312   CONFLICT (MACC, DIV);
2313   CONFLICT (DMACC, DIV);
2314
2315   /* Errata 23 - Continuous DMULT[U]/DMACC instructions.  */
2316   CONFLICT (DMULT, DMULT);
2317   CONFLICT (DMULT, DMACC);
2318   CONFLICT (DMACC, DMULT);
2319   CONFLICT (DMACC, DMACC);
2320
2321   /* Errata 24 - MT{LO,HI} after [D]MACC */
2322   CONFLICT (MACC, MTHILO);
2323   CONFLICT (DMACC, MTHILO);
2324
2325   /* VR4181A errata MD(1): "If a MULT, MULTU, DMULT or DMULTU
2326      instruction is executed immediately after a MACC or DMACC
2327      instruction, the result of [either instruction] is incorrect."  */
2328   CONFLICT (MACC, MULT);
2329   CONFLICT (MACC, DMULT);
2330   CONFLICT (DMACC, MULT);
2331   CONFLICT (DMACC, DMULT);
2332
2333   /* VR4181A errata MD(4): "If a MACC or DMACC instruction is
2334      executed immediately after a DMULT, DMULTU, DIV, DIVU,
2335      DDIV or DDIVU instruction, the result of the MACC or
2336      DMACC instruction is incorrect.".  */
2337   CONFLICT (DMULT, MACC);
2338   CONFLICT (DMULT, DMACC);
2339   CONFLICT (DIV, MACC);
2340   CONFLICT (DIV, DMACC);
2341
2342 #undef CONFLICT
2343 }
2344
2345 struct regname {
2346   const char *name;
2347   unsigned int num;
2348 };
2349
2350 #define RNUM_MASK       0x00000ff
2351 #define RTYPE_MASK      0x0efff00
2352 #define RTYPE_NUM       0x0000100
2353 #define RTYPE_FPU       0x0000200
2354 #define RTYPE_FCC       0x0000400
2355 #define RTYPE_VEC       0x0000800
2356 #define RTYPE_GP        0x0001000
2357 #define RTYPE_CP0       0x0002000
2358 #define RTYPE_PC        0x0004000
2359 #define RTYPE_ACC       0x0008000
2360 #define RTYPE_CCC       0x0010000
2361 #define RTYPE_VI        0x0020000
2362 #define RTYPE_VF        0x0040000
2363 #define RTYPE_R5900_I   0x0080000
2364 #define RTYPE_R5900_Q   0x0100000
2365 #define RTYPE_R5900_R   0x0200000
2366 #define RTYPE_R5900_ACC 0x0400000
2367 #define RWARN           0x8000000
2368
2369 #define GENERIC_REGISTER_NUMBERS \
2370     {"$0",      RTYPE_NUM | 0},  \
2371     {"$1",      RTYPE_NUM | 1},  \
2372     {"$2",      RTYPE_NUM | 2},  \
2373     {"$3",      RTYPE_NUM | 3},  \
2374     {"$4",      RTYPE_NUM | 4},  \
2375     {"$5",      RTYPE_NUM | 5},  \
2376     {"$6",      RTYPE_NUM | 6},  \
2377     {"$7",      RTYPE_NUM | 7},  \
2378     {"$8",      RTYPE_NUM | 8},  \
2379     {"$9",      RTYPE_NUM | 9},  \
2380     {"$10",     RTYPE_NUM | 10}, \
2381     {"$11",     RTYPE_NUM | 11}, \
2382     {"$12",     RTYPE_NUM | 12}, \
2383     {"$13",     RTYPE_NUM | 13}, \
2384     {"$14",     RTYPE_NUM | 14}, \
2385     {"$15",     RTYPE_NUM | 15}, \
2386     {"$16",     RTYPE_NUM | 16}, \
2387     {"$17",     RTYPE_NUM | 17}, \
2388     {"$18",     RTYPE_NUM | 18}, \
2389     {"$19",     RTYPE_NUM | 19}, \
2390     {"$20",     RTYPE_NUM | 20}, \
2391     {"$21",     RTYPE_NUM | 21}, \
2392     {"$22",     RTYPE_NUM | 22}, \
2393     {"$23",     RTYPE_NUM | 23}, \
2394     {"$24",     RTYPE_NUM | 24}, \
2395     {"$25",     RTYPE_NUM | 25}, \
2396     {"$26",     RTYPE_NUM | 26}, \
2397     {"$27",     RTYPE_NUM | 27}, \
2398     {"$28",     RTYPE_NUM | 28}, \
2399     {"$29",     RTYPE_NUM | 29}, \
2400     {"$30",     RTYPE_NUM | 30}, \
2401     {"$31",     RTYPE_NUM | 31} 
2402
2403 #define FPU_REGISTER_NAMES       \
2404     {"$f0",     RTYPE_FPU | 0},  \
2405     {"$f1",     RTYPE_FPU | 1},  \
2406     {"$f2",     RTYPE_FPU | 2},  \
2407     {"$f3",     RTYPE_FPU | 3},  \
2408     {"$f4",     RTYPE_FPU | 4},  \
2409     {"$f5",     RTYPE_FPU | 5},  \
2410     {"$f6",     RTYPE_FPU | 6},  \
2411     {"$f7",     RTYPE_FPU | 7},  \
2412     {"$f8",     RTYPE_FPU | 8},  \
2413     {"$f9",     RTYPE_FPU | 9},  \
2414     {"$f10",    RTYPE_FPU | 10}, \
2415     {"$f11",    RTYPE_FPU | 11}, \
2416     {"$f12",    RTYPE_FPU | 12}, \
2417     {"$f13",    RTYPE_FPU | 13}, \
2418     {"$f14",    RTYPE_FPU | 14}, \
2419     {"$f15",    RTYPE_FPU | 15}, \
2420     {"$f16",    RTYPE_FPU | 16}, \
2421     {"$f17",    RTYPE_FPU | 17}, \
2422     {"$f18",    RTYPE_FPU | 18}, \
2423     {"$f19",    RTYPE_FPU | 19}, \
2424     {"$f20",    RTYPE_FPU | 20}, \
2425     {"$f21",    RTYPE_FPU | 21}, \
2426     {"$f22",    RTYPE_FPU | 22}, \
2427     {"$f23",    RTYPE_FPU | 23}, \
2428     {"$f24",    RTYPE_FPU | 24}, \
2429     {"$f25",    RTYPE_FPU | 25}, \
2430     {"$f26",    RTYPE_FPU | 26}, \
2431     {"$f27",    RTYPE_FPU | 27}, \
2432     {"$f28",    RTYPE_FPU | 28}, \
2433     {"$f29",    RTYPE_FPU | 29}, \
2434     {"$f30",    RTYPE_FPU | 30}, \
2435     {"$f31",    RTYPE_FPU | 31}
2436
2437 #define FPU_CONDITION_CODE_NAMES \
2438     {"$fcc0",   RTYPE_FCC | 0},  \
2439     {"$fcc1",   RTYPE_FCC | 1},  \
2440     {"$fcc2",   RTYPE_FCC | 2},  \
2441     {"$fcc3",   RTYPE_FCC | 3},  \
2442     {"$fcc4",   RTYPE_FCC | 4},  \
2443     {"$fcc5",   RTYPE_FCC | 5},  \
2444     {"$fcc6",   RTYPE_FCC | 6},  \
2445     {"$fcc7",   RTYPE_FCC | 7}
2446
2447 #define COPROC_CONDITION_CODE_NAMES         \
2448     {"$cc0",    RTYPE_FCC | RTYPE_CCC | 0}, \
2449     {"$cc1",    RTYPE_FCC | RTYPE_CCC | 1}, \
2450     {"$cc2",    RTYPE_FCC | RTYPE_CCC | 2}, \
2451     {"$cc3",    RTYPE_FCC | RTYPE_CCC | 3}, \
2452     {"$cc4",    RTYPE_FCC | RTYPE_CCC | 4}, \
2453     {"$cc5",    RTYPE_FCC | RTYPE_CCC | 5}, \
2454     {"$cc6",    RTYPE_FCC | RTYPE_CCC | 6}, \
2455     {"$cc7",    RTYPE_FCC | RTYPE_CCC | 7}
2456
2457 #define N32N64_SYMBOLIC_REGISTER_NAMES \
2458     {"$a4",     RTYPE_GP | 8},  \
2459     {"$a5",     RTYPE_GP | 9},  \
2460     {"$a6",     RTYPE_GP | 10}, \
2461     {"$a7",     RTYPE_GP | 11}, \
2462     {"$ta0",    RTYPE_GP | 8},  /* alias for $a4 */ \
2463     {"$ta1",    RTYPE_GP | 9},  /* alias for $a5 */ \
2464     {"$ta2",    RTYPE_GP | 10}, /* alias for $a6 */ \
2465     {"$ta3",    RTYPE_GP | 11}, /* alias for $a7 */ \
2466     {"$t0",     RTYPE_GP | 12}, \
2467     {"$t1",     RTYPE_GP | 13}, \
2468     {"$t2",     RTYPE_GP | 14}, \
2469     {"$t3",     RTYPE_GP | 15}
2470
2471 #define O32_SYMBOLIC_REGISTER_NAMES \
2472     {"$t0",     RTYPE_GP | 8},  \
2473     {"$t1",     RTYPE_GP | 9},  \
2474     {"$t2",     RTYPE_GP | 10}, \
2475     {"$t3",     RTYPE_GP | 11}, \
2476     {"$t4",     RTYPE_GP | 12}, \
2477     {"$t5",     RTYPE_GP | 13}, \
2478     {"$t6",     RTYPE_GP | 14}, \
2479     {"$t7",     RTYPE_GP | 15}, \
2480     {"$ta0",    RTYPE_GP | 12}, /* alias for $t4 */ \
2481     {"$ta1",    RTYPE_GP | 13}, /* alias for $t5 */ \
2482     {"$ta2",    RTYPE_GP | 14}, /* alias for $t6 */ \
2483     {"$ta3",    RTYPE_GP | 15}  /* alias for $t7 */ 
2484
2485 /* Remaining symbolic register names */
2486 #define SYMBOLIC_REGISTER_NAMES \
2487     {"$zero",   RTYPE_GP | 0},  \
2488     {"$at",     RTYPE_GP | 1},  \
2489     {"$AT",     RTYPE_GP | 1},  \
2490     {"$v0",     RTYPE_GP | 2},  \
2491     {"$v1",     RTYPE_GP | 3},  \
2492     {"$a0",     RTYPE_GP | 4},  \
2493     {"$a1",     RTYPE_GP | 5},  \
2494     {"$a2",     RTYPE_GP | 6},  \
2495     {"$a3",     RTYPE_GP | 7},  \
2496     {"$s0",     RTYPE_GP | 16}, \
2497     {"$s1",     RTYPE_GP | 17}, \
2498     {"$s2",     RTYPE_GP | 18}, \
2499     {"$s3",     RTYPE_GP | 19}, \
2500     {"$s4",     RTYPE_GP | 20}, \
2501     {"$s5",     RTYPE_GP | 21}, \
2502     {"$s6",     RTYPE_GP | 22}, \
2503     {"$s7",     RTYPE_GP | 23}, \
2504     {"$t8",     RTYPE_GP | 24}, \
2505     {"$t9",     RTYPE_GP | 25}, \
2506     {"$k0",     RTYPE_GP | 26}, \
2507     {"$kt0",    RTYPE_GP | 26}, \
2508     {"$k1",     RTYPE_GP | 27}, \
2509     {"$kt1",    RTYPE_GP | 27}, \
2510     {"$gp",     RTYPE_GP | 28}, \
2511     {"$sp",     RTYPE_GP | 29}, \
2512     {"$s8",     RTYPE_GP | 30}, \
2513     {"$fp",     RTYPE_GP | 30}, \
2514     {"$ra",     RTYPE_GP | 31}
2515
2516 #define MIPS16_SPECIAL_REGISTER_NAMES \
2517     {"$pc",     RTYPE_PC | 0}
2518
2519 #define MDMX_VECTOR_REGISTER_NAMES \
2520     /* {"$v0",  RTYPE_VEC | 0},  clash with REG 2 above */ \
2521     /* {"$v1",  RTYPE_VEC | 1},  clash with REG 3 above */ \
2522     {"$v2",     RTYPE_VEC | 2},  \
2523     {"$v3",     RTYPE_VEC | 3},  \
2524     {"$v4",     RTYPE_VEC | 4},  \
2525     {"$v5",     RTYPE_VEC | 5},  \
2526     {"$v6",     RTYPE_VEC | 6},  \
2527     {"$v7",     RTYPE_VEC | 7},  \
2528     {"$v8",     RTYPE_VEC | 8},  \
2529     {"$v9",     RTYPE_VEC | 9},  \
2530     {"$v10",    RTYPE_VEC | 10}, \
2531     {"$v11",    RTYPE_VEC | 11}, \
2532     {"$v12",    RTYPE_VEC | 12}, \
2533     {"$v13",    RTYPE_VEC | 13}, \
2534     {"$v14",    RTYPE_VEC | 14}, \
2535     {"$v15",    RTYPE_VEC | 15}, \
2536     {"$v16",    RTYPE_VEC | 16}, \
2537     {"$v17",    RTYPE_VEC | 17}, \
2538     {"$v18",    RTYPE_VEC | 18}, \
2539     {"$v19",    RTYPE_VEC | 19}, \
2540     {"$v20",    RTYPE_VEC | 20}, \
2541     {"$v21",    RTYPE_VEC | 21}, \
2542     {"$v22",    RTYPE_VEC | 22}, \
2543     {"$v23",    RTYPE_VEC | 23}, \
2544     {"$v24",    RTYPE_VEC | 24}, \
2545     {"$v25",    RTYPE_VEC | 25}, \
2546     {"$v26",    RTYPE_VEC | 26}, \
2547     {"$v27",    RTYPE_VEC | 27}, \
2548     {"$v28",    RTYPE_VEC | 28}, \
2549     {"$v29",    RTYPE_VEC | 29}, \
2550     {"$v30",    RTYPE_VEC | 30}, \
2551     {"$v31",    RTYPE_VEC | 31}
2552
2553 #define R5900_I_NAMES \
2554     {"$I",      RTYPE_R5900_I | 0}
2555
2556 #define R5900_Q_NAMES \
2557     {"$Q",      RTYPE_R5900_Q | 0}
2558
2559 #define R5900_R_NAMES \
2560     {"$R",      RTYPE_R5900_R | 0}
2561
2562 #define R5900_ACC_NAMES \
2563     {"$ACC",    RTYPE_R5900_ACC | 0 }
2564
2565 #define MIPS_DSP_ACCUMULATOR_NAMES \
2566     {"$ac0",    RTYPE_ACC | 0}, \
2567     {"$ac1",    RTYPE_ACC | 1}, \
2568     {"$ac2",    RTYPE_ACC | 2}, \
2569     {"$ac3",    RTYPE_ACC | 3}
2570
2571 static const struct regname reg_names[] = {
2572   GENERIC_REGISTER_NUMBERS,
2573   FPU_REGISTER_NAMES,
2574   FPU_CONDITION_CODE_NAMES,
2575   COPROC_CONDITION_CODE_NAMES,
2576
2577   /* The $txx registers depends on the abi,
2578      these will be added later into the symbol table from
2579      one of the tables below once mips_abi is set after 
2580      parsing of arguments from the command line. */
2581   SYMBOLIC_REGISTER_NAMES,
2582
2583   MIPS16_SPECIAL_REGISTER_NAMES,
2584   MDMX_VECTOR_REGISTER_NAMES,
2585   R5900_I_NAMES,
2586   R5900_Q_NAMES,
2587   R5900_R_NAMES,
2588   R5900_ACC_NAMES,
2589   MIPS_DSP_ACCUMULATOR_NAMES,
2590   {0, 0}
2591 };
2592
2593 static const struct regname reg_names_o32[] = {
2594   O32_SYMBOLIC_REGISTER_NAMES,
2595   {0, 0}
2596 };
2597
2598 static const struct regname reg_names_n32n64[] = {
2599   N32N64_SYMBOLIC_REGISTER_NAMES,
2600   {0, 0}
2601 };
2602
2603 /* Register symbols $v0 and $v1 map to GPRs 2 and 3, but they can also be
2604    interpreted as vector registers 0 and 1.  If SYMVAL is the value of one
2605    of these register symbols, return the associated vector register,
2606    otherwise return SYMVAL itself.  */
2607
2608 static unsigned int
2609 mips_prefer_vec_regno (unsigned int symval)
2610 {
2611   if ((symval & -2) == (RTYPE_GP | 2))
2612     return RTYPE_VEC | (symval & 1);
2613   return symval;
2614 }
2615
2616 /* Return true if string [S, E) is a valid register name, storing its
2617    symbol value in *SYMVAL_PTR if so.  */
2618
2619 static bfd_boolean
2620 mips_parse_register_1 (char *s, char *e, unsigned int *symval_ptr)
2621 {
2622   char save_c;
2623   symbolS *symbol;
2624
2625   /* Terminate name.  */
2626   save_c = *e;
2627   *e = '\0';
2628
2629   /* Look up the name.  */
2630   symbol = symbol_find (s);
2631   *e = save_c;
2632
2633   if (!symbol || S_GET_SEGMENT (symbol) != reg_section)
2634     return FALSE;
2635
2636   *symval_ptr = S_GET_VALUE (symbol);
2637   return TRUE;
2638 }
2639
2640 /* Return true if the string at *SPTR is a valid register name.  Allow it
2641    to have a VU0-style channel suffix of the form x?y?z?w? if CHANNELS_PTR
2642    is nonnull.
2643
2644    When returning true, move *SPTR past the register, store the
2645    register's symbol value in *SYMVAL_PTR and the channel mask in
2646    *CHANNELS_PTR (if nonnull).  The symbol value includes the register
2647    number (RNUM_MASK) and register type (RTYPE_MASK).  The channel mask
2648    is a 4-bit value of the form XYZW and is 0 if no suffix was given.  */
2649
2650 static bfd_boolean
2651 mips_parse_register (char **sptr, unsigned int *symval_ptr,
2652                      unsigned int *channels_ptr)
2653 {
2654   char *s, *e, *m;
2655   const char *q;
2656   unsigned int channels, symval, bit;
2657
2658   /* Find end of name.  */
2659   s = e = *sptr;
2660   if (is_name_beginner (*e))
2661     ++e;
2662   while (is_part_of_name (*e))
2663     ++e;
2664
2665   channels = 0;
2666   if (!mips_parse_register_1 (s, e, &symval))
2667     {
2668       if (!channels_ptr)
2669         return FALSE;
2670
2671       /* Eat characters from the end of the string that are valid
2672          channel suffixes.  The preceding register must be $ACC or
2673          end with a digit, so there is no ambiguity.  */
2674       bit = 1;
2675       m = e;
2676       for (q = "wzyx"; *q; q++, bit <<= 1)
2677         if (m > s && m[-1] == *q)
2678           {
2679             --m;
2680             channels |= bit;
2681           }
2682
2683       if (channels == 0
2684           || !mips_parse_register_1 (s, m, &symval)
2685           || (symval & (RTYPE_VI | RTYPE_VF | RTYPE_R5900_ACC)) == 0)
2686         return FALSE;
2687     }
2688
2689   *sptr = e;
2690   *symval_ptr = symval;
2691   if (channels_ptr)
2692     *channels_ptr = channels;
2693   return TRUE;
2694 }
2695
2696 /* Check if SPTR points at a valid register specifier according to TYPES.
2697    If so, then return 1, advance S to consume the specifier and store
2698    the register's number in REGNOP, otherwise return 0.  */
2699
2700 static int
2701 reg_lookup (char **s, unsigned int types, unsigned int *regnop)
2702 {
2703   unsigned int regno;
2704
2705   if (mips_parse_register (s, &regno, NULL))
2706     {
2707       if (types & RTYPE_VEC)
2708         regno = mips_prefer_vec_regno (regno);
2709       if (regno & types)
2710         regno &= RNUM_MASK;
2711       else
2712         regno = ~0;
2713     }
2714   else
2715     {
2716       if (types & RWARN)
2717         as_warn (_("Unrecognized register name `%s'"), *s);
2718       regno = ~0;
2719     }
2720   if (regnop)
2721     *regnop = regno;
2722   return regno <= RNUM_MASK;
2723 }
2724
2725 /* Parse a VU0 "x?y?z?w?" channel mask at S and store the associated
2726    mask in *CHANNELS.  Return a pointer to the first unconsumed character.  */
2727
2728 static char *
2729 mips_parse_vu0_channels (char *s, unsigned int *channels)
2730 {
2731   unsigned int i;
2732
2733   *channels = 0;
2734   for (i = 0; i < 4; i++)
2735     if (*s == "xyzw"[i])
2736       {
2737         *channels |= 1 << (3 - i);
2738         ++s;
2739       }
2740   return s;
2741 }
2742
2743 /* Token types for parsed operand lists.  */
2744 enum mips_operand_token_type {
2745   /* A plain register, e.g. $f2.  */
2746   OT_REG,
2747
2748   /* A 4-bit XYZW channel mask.  */
2749   OT_CHANNELS,
2750
2751   /* An element of a vector, e.g. $v0[1].  */
2752   OT_REG_ELEMENT,
2753
2754   /* A continuous range of registers, e.g. $s0-$s4.  */
2755   OT_REG_RANGE,
2756
2757   /* A (possibly relocated) expression.  */
2758   OT_INTEGER,
2759
2760   /* A floating-point value.  */
2761   OT_FLOAT,
2762
2763   /* A single character.  This can be '(', ')' or ',', but '(' only appears
2764      before OT_REGs.  */
2765   OT_CHAR,
2766
2767   /* A doubled character, either "--" or "++".  */
2768   OT_DOUBLE_CHAR,
2769
2770   /* The end of the operand list.  */
2771   OT_END
2772 };
2773
2774 /* A parsed operand token.  */
2775 struct mips_operand_token
2776 {
2777   /* The type of token.  */
2778   enum mips_operand_token_type type;
2779   union
2780   {
2781     /* The register symbol value for an OT_REG.  */
2782     unsigned int regno;
2783
2784     /* The 4-bit channel mask for an OT_CHANNEL_SUFFIX.  */
2785     unsigned int channels;
2786
2787     /* The register symbol value and index for an OT_REG_ELEMENT.  */
2788     struct {
2789       unsigned int regno;
2790       addressT index;
2791     } reg_element;
2792
2793     /* The two register symbol values involved in an OT_REG_RANGE.  */
2794     struct {
2795       unsigned int regno1;
2796       unsigned int regno2;
2797     } reg_range;
2798
2799     /* The value of an OT_INTEGER.  The value is represented as an
2800        expression and the relocation operators that were applied to
2801        that expression.  The reloc entries are BFD_RELOC_UNUSED if no
2802        relocation operators were used.  */
2803     struct {
2804       expressionS value;
2805       bfd_reloc_code_real_type relocs[3];
2806     } integer;
2807
2808     /* The binary data for an OT_FLOAT constant, and the number of bytes
2809        in the constant.  */
2810     struct {
2811       unsigned char data[8];
2812       int length;
2813     } flt;
2814
2815     /* The character represented by an OT_CHAR or OT_DOUBLE_CHAR.  */
2816     char ch;
2817   } u;
2818 };
2819
2820 /* An obstack used to construct lists of mips_operand_tokens.  */
2821 static struct obstack mips_operand_tokens;
2822
2823 /* Give TOKEN type TYPE and add it to mips_operand_tokens.  */
2824
2825 static void
2826 mips_add_token (struct mips_operand_token *token,
2827                 enum mips_operand_token_type type)
2828 {
2829   token->type = type;
2830   obstack_grow (&mips_operand_tokens, token, sizeof (*token));
2831 }
2832
2833 /* Check whether S is '(' followed by a register name.  Add OT_CHAR
2834    and OT_REG tokens for them if so, and return a pointer to the first
2835    unconsumed character.  Return null otherwise.  */
2836
2837 static char *
2838 mips_parse_base_start (char *s)
2839 {
2840   struct mips_operand_token token;
2841   unsigned int regno, channels;
2842   bfd_boolean decrement_p;
2843
2844   if (*s != '(')
2845     return 0;
2846
2847   ++s;
2848   SKIP_SPACE_TABS (s);
2849
2850   /* Only match "--" as part of a base expression.  In other contexts "--X"
2851      is a double negative.  */
2852   decrement_p = (s[0] == '-' && s[1] == '-');
2853   if (decrement_p)
2854     {
2855       s += 2;
2856       SKIP_SPACE_TABS (s);
2857     }
2858
2859   /* Allow a channel specifier because that leads to better error messages
2860      than treating something like "$vf0x++" as an expression.  */
2861   if (!mips_parse_register (&s, &regno, &channels))
2862     return 0;
2863
2864   token.u.ch = '(';
2865   mips_add_token (&token, OT_CHAR);
2866
2867   if (decrement_p)
2868     {
2869       token.u.ch = '-';
2870       mips_add_token (&token, OT_DOUBLE_CHAR);
2871     }
2872
2873   token.u.regno = regno;
2874   mips_add_token (&token, OT_REG);
2875
2876   if (channels)
2877     {
2878       token.u.channels = channels;
2879       mips_add_token (&token, OT_CHANNELS);
2880     }
2881
2882   /* For consistency, only match "++" as part of base expressions too.  */
2883   SKIP_SPACE_TABS (s);
2884   if (s[0] == '+' && s[1] == '+')
2885     {
2886       s += 2;
2887       token.u.ch = '+';
2888       mips_add_token (&token, OT_DOUBLE_CHAR);
2889     }
2890
2891   return s;
2892 }
2893
2894 /* Parse one or more tokens from S.  Return a pointer to the first
2895    unconsumed character on success.  Return null if an error was found
2896    and store the error text in insn_error.  FLOAT_FORMAT is as for
2897    mips_parse_arguments.  */
2898
2899 static char *
2900 mips_parse_argument_token (char *s, char float_format)
2901 {
2902   char *end, *save_in, *err;
2903   unsigned int regno1, regno2, channels;
2904   struct mips_operand_token token;
2905
2906   /* First look for "($reg", since we want to treat that as an
2907      OT_CHAR and OT_REG rather than an expression.  */
2908   end = mips_parse_base_start (s);
2909   if (end)
2910     return end;
2911
2912   /* Handle other characters that end up as OT_CHARs.  */
2913   if (*s == ')' || *s == ',')
2914     {
2915       token.u.ch = *s;
2916       mips_add_token (&token, OT_CHAR);
2917       ++s;
2918       return s;
2919     }
2920
2921   /* Handle tokens that start with a register.  */
2922   if (mips_parse_register (&s, &regno1, &channels))
2923     {
2924       if (channels)
2925         {
2926           /* A register and a VU0 channel suffix.  */
2927           token.u.regno = regno1;
2928           mips_add_token (&token, OT_REG);
2929
2930           token.u.channels = channels;
2931           mips_add_token (&token, OT_CHANNELS);
2932           return s;
2933         }
2934
2935       SKIP_SPACE_TABS (s);
2936       if (*s == '-')
2937         {
2938           /* A register range.  */
2939           ++s;
2940           SKIP_SPACE_TABS (s);
2941           if (!mips_parse_register (&s, &regno2, NULL))
2942             {
2943               set_insn_error (0, _("Invalid register range"));
2944               return 0;
2945             }
2946
2947           token.u.reg_range.regno1 = regno1;
2948           token.u.reg_range.regno2 = regno2;
2949           mips_add_token (&token, OT_REG_RANGE);
2950           return s;
2951         }
2952       else if (*s == '[')
2953         {
2954           /* A vector element.  */
2955           expressionS element;
2956
2957           ++s;
2958           SKIP_SPACE_TABS (s);
2959           my_getExpression (&element, s);
2960           if (element.X_op != O_constant)
2961             {
2962               set_insn_error (0, _("Vector element must be constant"));
2963               return 0;
2964             }
2965           s = expr_end;
2966           SKIP_SPACE_TABS (s);
2967           if (*s != ']')
2968             {
2969               set_insn_error (0, _("Missing `]'"));
2970               return 0;
2971             }
2972           ++s;
2973
2974           token.u.reg_element.regno = regno1;
2975           token.u.reg_element.index = element.X_add_number;
2976           mips_add_token (&token, OT_REG_ELEMENT);
2977           return s;
2978         }
2979
2980       /* Looks like just a plain register.  */
2981       token.u.regno = regno1;
2982       mips_add_token (&token, OT_REG);
2983       return s;
2984     }
2985
2986   if (float_format)
2987     {
2988       /* First try to treat expressions as floats.  */
2989       save_in = input_line_pointer;
2990       input_line_pointer = s;
2991       err = md_atof (float_format, (char *) token.u.flt.data,
2992                      &token.u.flt.length);
2993       end = input_line_pointer;
2994       input_line_pointer = save_in;
2995       if (err && *err)
2996         {
2997           set_insn_error (0, err);
2998           return 0;
2999         }
3000       if (s != end)
3001         {
3002           mips_add_token (&token, OT_FLOAT);
3003           return end;
3004         }
3005     }
3006
3007   /* Treat everything else as an integer expression.  */
3008   token.u.integer.relocs[0] = BFD_RELOC_UNUSED;
3009   token.u.integer.relocs[1] = BFD_RELOC_UNUSED;
3010   token.u.integer.relocs[2] = BFD_RELOC_UNUSED;
3011   my_getSmallExpression (&token.u.integer.value, token.u.integer.relocs, s);
3012   s = expr_end;
3013   mips_add_token (&token, OT_INTEGER);
3014   return s;
3015 }
3016
3017 /* S points to the operand list for an instruction.  FLOAT_FORMAT is 'f'
3018    if expressions should be treated as 32-bit floating-point constants,
3019    'd' if they should be treated as 64-bit floating-point constants,
3020    or 0 if they should be treated as integer expressions (the usual case).
3021
3022    Return a list of tokens on success, otherwise return 0.  The caller
3023    must obstack_free the list after use.  */
3024
3025 static struct mips_operand_token *
3026 mips_parse_arguments (char *s, char float_format)
3027 {
3028   struct mips_operand_token token;
3029
3030   SKIP_SPACE_TABS (s);
3031   while (*s)
3032     {
3033       s = mips_parse_argument_token (s, float_format);
3034       if (!s)
3035         {
3036           obstack_free (&mips_operand_tokens,
3037                         obstack_finish (&mips_operand_tokens));
3038           return 0;
3039         }
3040       SKIP_SPACE_TABS (s);
3041     }
3042   mips_add_token (&token, OT_END);
3043   return (struct mips_operand_token *) obstack_finish (&mips_operand_tokens);
3044 }
3045
3046 /* Return TRUE if opcode MO is valid on the currently selected ISA, ASE
3047    and architecture.  Use is_opcode_valid_16 for MIPS16 opcodes.  */
3048
3049 static bfd_boolean
3050 is_opcode_valid (const struct mips_opcode *mo)
3051 {
3052   int isa = mips_opts.isa;
3053   int ase = mips_opts.ase;
3054   int fp_s, fp_d;
3055   unsigned int i;
3056
3057   if (ISA_HAS_64BIT_REGS (mips_opts.isa))
3058     for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
3059       if ((ase & mips_ases[i].flags) == mips_ases[i].flags)
3060         ase |= mips_ases[i].flags64;
3061
3062   if (!opcode_is_member (mo, isa, ase, mips_opts.arch))
3063     return FALSE;
3064
3065   /* Check whether the instruction or macro requires single-precision or
3066      double-precision floating-point support.  Note that this information is
3067      stored differently in the opcode table for insns and macros.  */
3068   if (mo->pinfo == INSN_MACRO)
3069     {
3070       fp_s = mo->pinfo2 & INSN2_M_FP_S;
3071       fp_d = mo->pinfo2 & INSN2_M_FP_D;
3072     }
3073   else
3074     {
3075       fp_s = mo->pinfo & FP_S;
3076       fp_d = mo->pinfo & FP_D;
3077     }
3078
3079   if (fp_d && (mips_opts.soft_float || mips_opts.single_float))
3080     return FALSE;
3081
3082   if (fp_s && mips_opts.soft_float)
3083     return FALSE;
3084
3085   return TRUE;
3086 }
3087
3088 /* Return TRUE if the MIPS16 opcode MO is valid on the currently
3089    selected ISA and architecture.  */
3090
3091 static bfd_boolean
3092 is_opcode_valid_16 (const struct mips_opcode *mo)
3093 {
3094   return opcode_is_member (mo, mips_opts.isa, 0, mips_opts.arch);
3095 }
3096
3097 /* Return TRUE if the size of the microMIPS opcode MO matches one
3098    explicitly requested.  Always TRUE in the standard MIPS mode.  */
3099
3100 static bfd_boolean
3101 is_size_valid (const struct mips_opcode *mo)
3102 {
3103   if (!mips_opts.micromips)
3104     return TRUE;
3105
3106   if (mips_opts.insn32)
3107     {
3108       if (mo->pinfo != INSN_MACRO && micromips_insn_length (mo) != 4)
3109         return FALSE;
3110       if ((mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0)
3111         return FALSE;
3112     }
3113   if (!forced_insn_length)
3114     return TRUE;
3115   if (mo->pinfo == INSN_MACRO)
3116     return FALSE;
3117   return forced_insn_length == micromips_insn_length (mo);
3118 }
3119
3120 /* Return TRUE if the microMIPS opcode MO is valid for the delay slot
3121    of the preceding instruction.  Always TRUE in the standard MIPS mode.
3122
3123    We don't accept macros in 16-bit delay slots to avoid a case where
3124    a macro expansion fails because it relies on a preceding 32-bit real
3125    instruction to have matched and does not handle the operands correctly.
3126    The only macros that may expand to 16-bit instructions are JAL that
3127    cannot be placed in a delay slot anyway, and corner cases of BALIGN
3128    and BGT (that likewise cannot be placed in a delay slot) that decay to
3129    a NOP.  In all these cases the macros precede any corresponding real
3130    instruction definitions in the opcode table, so they will match in the
3131    second pass where the size of the delay slot is ignored and therefore
3132    produce correct code.  */
3133
3134 static bfd_boolean
3135 is_delay_slot_valid (const struct mips_opcode *mo)
3136 {
3137   if (!mips_opts.micromips)
3138     return TRUE;
3139
3140   if (mo->pinfo == INSN_MACRO)
3141     return (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) == 0;
3142   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
3143       && micromips_insn_length (mo) != 4)
3144     return FALSE;
3145   if ((history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
3146       && micromips_insn_length (mo) != 2)
3147     return FALSE;
3148
3149   return TRUE;
3150 }
3151
3152 /* For consistency checking, verify that all bits of OPCODE are specified
3153    either by the match/mask part of the instruction definition, or by the
3154    operand list.  Also build up a list of operands in OPERANDS.
3155
3156    INSN_BITS says which bits of the instruction are significant.
3157    If OPCODE is a standard or microMIPS instruction, DECODE_OPERAND
3158    provides the mips_operand description of each operand.  DECODE_OPERAND
3159    is null for MIPS16 instructions.  */
3160
3161 static int
3162 validate_mips_insn (const struct mips_opcode *opcode,
3163                     unsigned long insn_bits,
3164                     const struct mips_operand *(*decode_operand) (const char *),
3165                     struct mips_operand_array *operands)
3166 {
3167   const char *s;
3168   unsigned long used_bits, doubled, undefined, opno, mask;
3169   const struct mips_operand *operand;
3170
3171   mask = (opcode->pinfo == INSN_MACRO ? 0 : opcode->mask);
3172   if ((mask & opcode->match) != opcode->match)
3173     {
3174       as_bad (_("internal: bad mips opcode (mask error): %s %s"),
3175               opcode->name, opcode->args);
3176       return 0;
3177     }
3178   used_bits = 0;
3179   opno = 0;
3180   if (opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX)
3181     used_bits = mips_insert_operand (&mips_vu0_channel_mask, used_bits, -1);
3182   for (s = opcode->args; *s; ++s)
3183     switch (*s)
3184       {
3185       case ',':
3186       case '(':
3187       case ')':
3188         break;
3189
3190       case '#':
3191         s++;
3192         break;
3193
3194       default:
3195         if (!decode_operand)
3196           operand = decode_mips16_operand (*s, FALSE);
3197         else
3198           operand = decode_operand (s);
3199         if (!operand && opcode->pinfo != INSN_MACRO)
3200           {
3201             as_bad (_("internal: unknown operand type: %s %s"),
3202                     opcode->name, opcode->args);
3203             return 0;
3204           }
3205         gas_assert (opno < MAX_OPERANDS);
3206         operands->operand[opno] = operand;
3207         if (operand && operand->type != OP_VU0_MATCH_SUFFIX)
3208           {
3209             used_bits = mips_insert_operand (operand, used_bits, -1);
3210             if (operand->type == OP_MDMX_IMM_REG)
3211               /* Bit 5 is the format selector (OB vs QH).  The opcode table
3212                  has separate entries for each format.  */
3213               used_bits &= ~(1 << (operand->lsb + 5));
3214             if (operand->type == OP_ENTRY_EXIT_LIST)
3215               used_bits &= ~(mask & 0x700);
3216           }
3217         /* Skip prefix characters.  */
3218         if (decode_operand && (*s == '+' || *s == 'm'))
3219           ++s;
3220         opno += 1;
3221         break;
3222       }
3223   doubled = used_bits & mask & insn_bits;
3224   if (doubled)
3225     {
3226       as_bad (_("internal: bad mips opcode (bits 0x%08lx doubly defined):"
3227                 " %s %s"), doubled, opcode->name, opcode->args);
3228       return 0;
3229     }
3230   used_bits |= mask;
3231   undefined = ~used_bits & insn_bits;
3232   if (opcode->pinfo != INSN_MACRO && undefined)
3233     {
3234       as_bad (_("internal: bad mips opcode (bits 0x%08lx undefined): %s %s"),
3235               undefined, opcode->name, opcode->args);
3236       return 0;
3237     }
3238   used_bits &= ~insn_bits;
3239   if (used_bits)
3240     {
3241       as_bad (_("internal: bad mips opcode (bits 0x%08lx defined): %s %s"),
3242               used_bits, opcode->name, opcode->args);
3243       return 0;
3244     }
3245   return 1;
3246 }
3247
3248 /* The MIPS16 version of validate_mips_insn.  */
3249
3250 static int
3251 validate_mips16_insn (const struct mips_opcode *opcode,
3252                       struct mips_operand_array *operands)
3253 {
3254   if (opcode->args[0] == 'a' || opcode->args[0] == 'i')
3255     {
3256       /* In this case OPCODE defines the first 16 bits in a 32-bit jump
3257          instruction.  Use TMP to describe the full instruction.  */
3258       struct mips_opcode tmp;
3259
3260       tmp = *opcode;
3261       tmp.match <<= 16;
3262       tmp.mask <<= 16;
3263       return validate_mips_insn (&tmp, 0xffffffff, 0, operands);
3264     }
3265   return validate_mips_insn (opcode, 0xffff, 0, operands);
3266 }
3267
3268 /* The microMIPS version of validate_mips_insn.  */
3269
3270 static int
3271 validate_micromips_insn (const struct mips_opcode *opc,
3272                          struct mips_operand_array *operands)
3273 {
3274   unsigned long insn_bits;
3275   unsigned long major;
3276   unsigned int length;
3277
3278   if (opc->pinfo == INSN_MACRO)
3279     return validate_mips_insn (opc, 0xffffffff, decode_micromips_operand,
3280                                operands);
3281
3282   length = micromips_insn_length (opc);
3283   if (length != 2 && length != 4)
3284     {
3285       as_bad (_("Internal error: bad microMIPS opcode (incorrect length: %u): "
3286                 "%s %s"), length, opc->name, opc->args);
3287       return 0;
3288     }
3289   major = opc->match >> (10 + 8 * (length - 2));
3290   if ((length == 2 && (major & 7) != 1 && (major & 6) != 2)
3291       || (length == 4 && (major & 7) != 0 && (major & 4) != 4))
3292     {
3293       as_bad (_("Internal error: bad microMIPS opcode "
3294                 "(opcode/length mismatch): %s %s"), opc->name, opc->args);
3295       return 0;
3296     }
3297
3298   /* Shift piecewise to avoid an overflow where unsigned long is 32-bit.  */
3299   insn_bits = 1 << 4 * length;
3300   insn_bits <<= 4 * length;
3301   insn_bits -= 1;
3302   return validate_mips_insn (opc, insn_bits, decode_micromips_operand,
3303                              operands);
3304 }
3305
3306 /* This function is called once, at assembler startup time.  It should set up
3307    all the tables, etc. that the MD part of the assembler will need.  */
3308
3309 void
3310 md_begin (void)
3311 {
3312   const char *retval = NULL;
3313   int i = 0;
3314   int broken = 0;
3315
3316   if (mips_pic != NO_PIC)
3317     {
3318       if (g_switch_seen && g_switch_value != 0)
3319         as_bad (_("-G may not be used in position-independent code"));
3320       g_switch_value = 0;
3321     }
3322
3323   if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_arch))
3324     as_warn (_("Could not set architecture and machine"));
3325
3326   op_hash = hash_new ();
3327
3328   mips_operands = XCNEWVEC (struct mips_operand_array, NUMOPCODES);
3329   for (i = 0; i < NUMOPCODES;)
3330     {
3331       const char *name = mips_opcodes[i].name;
3332
3333       retval = hash_insert (op_hash, name, (void *) &mips_opcodes[i]);
3334       if (retval != NULL)
3335         {
3336           fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
3337                    mips_opcodes[i].name, retval);
3338           /* Probably a memory allocation problem?  Give up now.  */
3339           as_fatal (_("Broken assembler.  No assembly attempted."));
3340         }
3341       do
3342         {
3343           if (!validate_mips_insn (&mips_opcodes[i], 0xffffffff,
3344                                    decode_mips_operand, &mips_operands[i]))
3345             broken = 1;
3346           if (nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3347             {
3348               create_insn (&nop_insn, mips_opcodes + i);
3349               if (mips_fix_loongson2f_nop)
3350                 nop_insn.insn_opcode = LOONGSON2F_NOP_INSN;
3351               nop_insn.fixed_p = 1;
3352             }
3353           ++i;
3354         }
3355       while ((i < NUMOPCODES) && !strcmp (mips_opcodes[i].name, name));
3356     }
3357
3358   mips16_op_hash = hash_new ();
3359   mips16_operands = XCNEWVEC (struct mips_operand_array,
3360                               bfd_mips16_num_opcodes);
3361
3362   i = 0;
3363   while (i < bfd_mips16_num_opcodes)
3364     {
3365       const char *name = mips16_opcodes[i].name;
3366
3367       retval = hash_insert (mips16_op_hash, name, (void *) &mips16_opcodes[i]);
3368       if (retval != NULL)
3369         as_fatal (_("internal: can't hash `%s': %s"),
3370                   mips16_opcodes[i].name, retval);
3371       do
3372         {
3373           if (!validate_mips16_insn (&mips16_opcodes[i], &mips16_operands[i]))
3374             broken = 1;
3375           if (mips16_nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
3376             {
3377               create_insn (&mips16_nop_insn, mips16_opcodes + i);
3378               mips16_nop_insn.fixed_p = 1;
3379             }
3380           ++i;
3381         }
3382       while (i < bfd_mips16_num_opcodes
3383              && strcmp (mips16_opcodes[i].name, name) == 0);
3384     }
3385
3386   micromips_op_hash = hash_new ();
3387   micromips_operands = XCNEWVEC (struct mips_operand_array,
3388                                  bfd_micromips_num_opcodes);
3389
3390   i = 0;
3391   while (i < bfd_micromips_num_opcodes)
3392     {
3393       const char *name = micromips_opcodes[i].name;
3394
3395       retval = hash_insert (micromips_op_hash, name,
3396                             (void *) &micromips_opcodes[i]);
3397       if (retval != NULL)
3398         as_fatal (_("internal: can't hash `%s': %s"),
3399                   micromips_opcodes[i].name, retval);
3400       do
3401         {
3402           struct mips_cl_insn *micromips_nop_insn;
3403
3404           if (!validate_micromips_insn (&micromips_opcodes[i],
3405                                         &micromips_operands[i]))
3406             broken = 1;
3407
3408           if (micromips_opcodes[i].pinfo != INSN_MACRO)
3409             {
3410               if (micromips_insn_length (micromips_opcodes + i) == 2)
3411                 micromips_nop_insn = &micromips_nop16_insn;
3412               else if (micromips_insn_length (micromips_opcodes + i) == 4)
3413                 micromips_nop_insn = &micromips_nop32_insn;
3414               else
3415                 continue;
3416
3417               if (micromips_nop_insn->insn_mo == NULL
3418                   && strcmp (name, "nop") == 0)
3419                 {
3420                   create_insn (micromips_nop_insn, micromips_opcodes + i);
3421                   micromips_nop_insn->fixed_p = 1;
3422                 }
3423             }
3424         }
3425       while (++i < bfd_micromips_num_opcodes
3426              && strcmp (micromips_opcodes[i].name, name) == 0);
3427     }
3428
3429   if (broken)
3430     as_fatal (_("Broken assembler.  No assembly attempted."));
3431
3432   /* We add all the general register names to the symbol table.  This
3433      helps us detect invalid uses of them.  */
3434   for (i = 0; reg_names[i].name; i++) 
3435     symbol_table_insert (symbol_new (reg_names[i].name, reg_section,
3436                                      reg_names[i].num, /* & RNUM_MASK, */
3437                                      &zero_address_frag));
3438   if (HAVE_NEWABI)
3439     for (i = 0; reg_names_n32n64[i].name; i++) 
3440       symbol_table_insert (symbol_new (reg_names_n32n64[i].name, reg_section,
3441                                        reg_names_n32n64[i].num, /* & RNUM_MASK, */
3442                                        &zero_address_frag));
3443   else
3444     for (i = 0; reg_names_o32[i].name; i++) 
3445       symbol_table_insert (symbol_new (reg_names_o32[i].name, reg_section,
3446                                        reg_names_o32[i].num, /* & RNUM_MASK, */
3447                                        &zero_address_frag));
3448
3449   for (i = 0; i < 32; i++)
3450     {
3451       char regname[7];
3452
3453       /* R5900 VU0 floating-point register.  */
3454       regname[sizeof (rename) - 1] = 0;
3455       snprintf (regname, sizeof (regname) - 1, "$vf%d", i);
3456       symbol_table_insert (symbol_new (regname, reg_section,
3457                                        RTYPE_VF | i, &zero_address_frag));
3458
3459       /* R5900 VU0 integer register.  */
3460       snprintf (regname, sizeof (regname) - 1, "$vi%d", i);
3461       symbol_table_insert (symbol_new (regname, reg_section,
3462                                        RTYPE_VI | i, &zero_address_frag));
3463
3464     }
3465
3466   obstack_init (&mips_operand_tokens);
3467
3468   mips_no_prev_insn ();
3469
3470   mips_gprmask = 0;
3471   mips_cprmask[0] = 0;
3472   mips_cprmask[1] = 0;
3473   mips_cprmask[2] = 0;
3474   mips_cprmask[3] = 0;
3475
3476   /* set the default alignment for the text section (2**2) */
3477   record_alignment (text_section, 2);
3478
3479   bfd_set_gp_size (stdoutput, g_switch_value);
3480
3481   /* On a native system other than VxWorks, sections must be aligned
3482      to 16 byte boundaries.  When configured for an embedded ELF
3483      target, we don't bother.  */
3484   if (strncmp (TARGET_OS, "elf", 3) != 0
3485       && strncmp (TARGET_OS, "vxworks", 7) != 0)
3486     {
3487       (void) bfd_set_section_alignment (stdoutput, text_section, 4);
3488       (void) bfd_set_section_alignment (stdoutput, data_section, 4);
3489       (void) bfd_set_section_alignment (stdoutput, bss_section, 4);
3490     }
3491
3492   /* Create a .reginfo section for register masks and a .mdebug
3493      section for debugging information.  */
3494   {
3495     segT seg;
3496     subsegT subseg;
3497     flagword flags;
3498     segT sec;
3499
3500     seg = now_seg;
3501     subseg = now_subseg;
3502
3503     /* The ABI says this section should be loaded so that the
3504        running program can access it.  However, we don't load it
3505        if we are configured for an embedded target */
3506     flags = SEC_READONLY | SEC_DATA;
3507     if (strncmp (TARGET_OS, "elf", 3) != 0)
3508       flags |= SEC_ALLOC | SEC_LOAD;
3509
3510     if (mips_abi != N64_ABI)
3511       {
3512         sec = subseg_new (".reginfo", (subsegT) 0);
3513
3514         bfd_set_section_flags (stdoutput, sec, flags);
3515         bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
3516
3517         mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
3518       }
3519     else
3520       {
3521         /* The 64-bit ABI uses a .MIPS.options section rather than
3522            .reginfo section.  */
3523         sec = subseg_new (".MIPS.options", (subsegT) 0);
3524         bfd_set_section_flags (stdoutput, sec, flags);
3525         bfd_set_section_alignment (stdoutput, sec, 3);
3526
3527         /* Set up the option header.  */
3528         {
3529           Elf_Internal_Options opthdr;
3530           char *f;
3531
3532           opthdr.kind = ODK_REGINFO;
3533           opthdr.size = (sizeof (Elf_External_Options)
3534                          + sizeof (Elf64_External_RegInfo));
3535           opthdr.section = 0;
3536           opthdr.info = 0;
3537           f = frag_more (sizeof (Elf_External_Options));
3538           bfd_mips_elf_swap_options_out (stdoutput, &opthdr,
3539                                          (Elf_External_Options *) f);
3540
3541           mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
3542         }
3543       }
3544
3545     if (ECOFF_DEBUGGING)
3546       {
3547         sec = subseg_new (".mdebug", (subsegT) 0);
3548         (void) bfd_set_section_flags (stdoutput, sec,
3549                                       SEC_HAS_CONTENTS | SEC_READONLY);
3550         (void) bfd_set_section_alignment (stdoutput, sec, 2);
3551       }
3552     else if (mips_flag_pdr)
3553       {
3554         pdr_seg = subseg_new (".pdr", (subsegT) 0);
3555         (void) bfd_set_section_flags (stdoutput, pdr_seg,
3556                                       SEC_READONLY | SEC_RELOC
3557                                       | SEC_DEBUGGING);
3558         (void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
3559       }
3560
3561     subseg_set (seg, subseg);
3562   }
3563
3564   if (! ECOFF_DEBUGGING)
3565     md_obj_begin ();
3566
3567   if (mips_fix_vr4120)
3568     init_vr4120_conflicts ();
3569 }
3570
3571 void
3572 md_mips_end (void)
3573 {
3574   mips_emit_delays ();
3575   if (! ECOFF_DEBUGGING)
3576     md_obj_end ();
3577 }
3578
3579 void
3580 md_assemble (char *str)
3581 {
3582   struct mips_cl_insn insn;
3583   bfd_reloc_code_real_type unused_reloc[3]
3584     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
3585
3586   imm_expr.X_op = O_absent;
3587   imm2_expr.X_op = O_absent;
3588   offset_expr.X_op = O_absent;
3589   offset_reloc[0] = BFD_RELOC_UNUSED;
3590   offset_reloc[1] = BFD_RELOC_UNUSED;
3591   offset_reloc[2] = BFD_RELOC_UNUSED;
3592
3593   mips_mark_labels ();
3594   mips_assembling_insn = TRUE;
3595   clear_insn_error ();
3596
3597   if (mips_opts.mips16)
3598     mips16_ip (str, &insn);
3599   else
3600     {
3601       mips_ip (str, &insn);
3602       DBG ((_("returned from mips_ip(%s) insn_opcode = 0x%x\n"),
3603             str, insn.insn_opcode));
3604     }
3605
3606   if (insn_error.msg)
3607     report_insn_error (str);
3608   else if (insn.insn_mo->pinfo == INSN_MACRO)
3609     {
3610       macro_start ();
3611       if (mips_opts.mips16)
3612         mips16_macro (&insn);
3613       else
3614         macro (&insn, str);
3615       macro_end ();
3616     }
3617   else
3618     {
3619       if (offset_expr.X_op != O_absent)
3620         append_insn (&insn, &offset_expr, offset_reloc, FALSE);
3621       else
3622         append_insn (&insn, NULL, unused_reloc, FALSE);
3623     }
3624
3625   mips_assembling_insn = FALSE;
3626 }
3627
3628 /* Convenience functions for abstracting away the differences between
3629    MIPS16 and non-MIPS16 relocations.  */
3630
3631 static inline bfd_boolean
3632 mips16_reloc_p (bfd_reloc_code_real_type reloc)
3633 {
3634   switch (reloc)
3635     {
3636     case BFD_RELOC_MIPS16_JMP:
3637     case BFD_RELOC_MIPS16_GPREL:
3638     case BFD_RELOC_MIPS16_GOT16:
3639     case BFD_RELOC_MIPS16_CALL16:
3640     case BFD_RELOC_MIPS16_HI16_S:
3641     case BFD_RELOC_MIPS16_HI16:
3642     case BFD_RELOC_MIPS16_LO16:
3643       return TRUE;
3644
3645     default:
3646       return FALSE;
3647     }
3648 }
3649
3650 static inline bfd_boolean
3651 micromips_reloc_p (bfd_reloc_code_real_type reloc)
3652 {
3653   switch (reloc)
3654     {
3655     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
3656     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
3657     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
3658     case BFD_RELOC_MICROMIPS_GPREL16:
3659     case BFD_RELOC_MICROMIPS_JMP:
3660     case BFD_RELOC_MICROMIPS_HI16:
3661     case BFD_RELOC_MICROMIPS_HI16_S:
3662     case BFD_RELOC_MICROMIPS_LO16:
3663     case BFD_RELOC_MICROMIPS_LITERAL:
3664     case BFD_RELOC_MICROMIPS_GOT16:
3665     case BFD_RELOC_MICROMIPS_CALL16:
3666     case BFD_RELOC_MICROMIPS_GOT_HI16:
3667     case BFD_RELOC_MICROMIPS_GOT_LO16:
3668     case BFD_RELOC_MICROMIPS_CALL_HI16:
3669     case BFD_RELOC_MICROMIPS_CALL_LO16:
3670     case BFD_RELOC_MICROMIPS_SUB:
3671     case BFD_RELOC_MICROMIPS_GOT_PAGE:
3672     case BFD_RELOC_MICROMIPS_GOT_OFST:
3673     case BFD_RELOC_MICROMIPS_GOT_DISP:
3674     case BFD_RELOC_MICROMIPS_HIGHEST:
3675     case BFD_RELOC_MICROMIPS_HIGHER:
3676     case BFD_RELOC_MICROMIPS_SCN_DISP:
3677     case BFD_RELOC_MICROMIPS_JALR:
3678       return TRUE;
3679
3680     default:
3681       return FALSE;
3682     }
3683 }
3684
3685 static inline bfd_boolean
3686 jmp_reloc_p (bfd_reloc_code_real_type reloc)
3687 {
3688   return reloc == BFD_RELOC_MIPS_JMP || reloc == BFD_RELOC_MICROMIPS_JMP;
3689 }
3690
3691 static inline bfd_boolean
3692 got16_reloc_p (bfd_reloc_code_real_type reloc)
3693 {
3694   return (reloc == BFD_RELOC_MIPS_GOT16 || reloc == BFD_RELOC_MIPS16_GOT16
3695           || reloc == BFD_RELOC_MICROMIPS_GOT16);
3696 }
3697
3698 static inline bfd_boolean
3699 hi16_reloc_p (bfd_reloc_code_real_type reloc)
3700 {
3701   return (reloc == BFD_RELOC_HI16_S || reloc == BFD_RELOC_MIPS16_HI16_S
3702           || reloc == BFD_RELOC_MICROMIPS_HI16_S);
3703 }
3704
3705 static inline bfd_boolean
3706 lo16_reloc_p (bfd_reloc_code_real_type reloc)
3707 {
3708   return (reloc == BFD_RELOC_LO16 || reloc == BFD_RELOC_MIPS16_LO16
3709           || reloc == BFD_RELOC_MICROMIPS_LO16);
3710 }
3711
3712 static inline bfd_boolean
3713 jalr_reloc_p (bfd_reloc_code_real_type reloc)
3714 {
3715   return reloc == BFD_RELOC_MIPS_JALR || reloc == BFD_RELOC_MICROMIPS_JALR;
3716 }
3717
3718 static inline bfd_boolean
3719 gprel16_reloc_p (bfd_reloc_code_real_type reloc)
3720 {
3721   return (reloc == BFD_RELOC_GPREL16 || reloc == BFD_RELOC_MIPS16_GPREL
3722           || reloc == BFD_RELOC_MICROMIPS_GPREL16);
3723 }
3724
3725 /* Return true if RELOC is a PC-relative relocation that does not have
3726    full address range.  */
3727
3728 static inline bfd_boolean
3729 limited_pcrel_reloc_p (bfd_reloc_code_real_type reloc)
3730 {
3731   switch (reloc)
3732     {
3733     case BFD_RELOC_16_PCREL_S2:
3734     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
3735     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
3736     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
3737       return TRUE;
3738
3739     case BFD_RELOC_32_PCREL:
3740       return HAVE_64BIT_ADDRESSES;
3741
3742     default:
3743       return FALSE;
3744     }
3745 }
3746
3747 /* Return true if the given relocation might need a matching %lo().
3748    This is only "might" because SVR4 R_MIPS_GOT16 relocations only
3749    need a matching %lo() when applied to local symbols.  */
3750
3751 static inline bfd_boolean
3752 reloc_needs_lo_p (bfd_reloc_code_real_type reloc)
3753 {
3754   return (HAVE_IN_PLACE_ADDENDS
3755           && (hi16_reloc_p (reloc)
3756               /* VxWorks R_MIPS_GOT16 relocs never need a matching %lo();
3757                  all GOT16 relocations evaluate to "G".  */
3758               || (got16_reloc_p (reloc) && mips_pic != VXWORKS_PIC)));
3759 }
3760
3761 /* Return the type of %lo() reloc needed by RELOC, given that
3762    reloc_needs_lo_p.  */
3763
3764 static inline bfd_reloc_code_real_type
3765 matching_lo_reloc (bfd_reloc_code_real_type reloc)
3766 {
3767   return (mips16_reloc_p (reloc) ? BFD_RELOC_MIPS16_LO16
3768           : (micromips_reloc_p (reloc) ? BFD_RELOC_MICROMIPS_LO16
3769              : BFD_RELOC_LO16));
3770 }
3771
3772 /* Return true if the given fixup is followed by a matching R_MIPS_LO16
3773    relocation.  */
3774
3775 static inline bfd_boolean
3776 fixup_has_matching_lo_p (fixS *fixp)
3777 {
3778   return (fixp->fx_next != NULL
3779           && fixp->fx_next->fx_r_type == matching_lo_reloc (fixp->fx_r_type)
3780           && fixp->fx_addsy == fixp->fx_next->fx_addsy
3781           && fixp->fx_offset == fixp->fx_next->fx_offset);
3782 }
3783
3784 /* Move all labels in LABELS to the current insertion point.  TEXT_P
3785    says whether the labels refer to text or data.  */
3786
3787 static void
3788 mips_move_labels (struct insn_label_list *labels, bfd_boolean text_p)
3789 {
3790   struct insn_label_list *l;
3791   valueT val;
3792
3793   for (l = labels; l != NULL; l = l->next)
3794     {
3795       gas_assert (S_GET_SEGMENT (l->label) == now_seg);
3796       symbol_set_frag (l->label, frag_now);
3797       val = (valueT) frag_now_fix ();
3798       /* MIPS16/microMIPS text labels are stored as odd.  */
3799       if (text_p && HAVE_CODE_COMPRESSION)
3800         ++val;
3801       S_SET_VALUE (l->label, val);
3802     }
3803 }
3804
3805 /* Move all labels in insn_labels to the current insertion point
3806    and treat them as text labels.  */
3807
3808 static void
3809 mips_move_text_labels (void)
3810 {
3811   mips_move_labels (seg_info (now_seg)->label_list, TRUE);
3812 }
3813
3814 static bfd_boolean
3815 s_is_linkonce (symbolS *sym, segT from_seg)
3816 {
3817   bfd_boolean linkonce = FALSE;
3818   segT symseg = S_GET_SEGMENT (sym);
3819
3820   if (symseg != from_seg && !S_IS_LOCAL (sym))
3821     {
3822       if ((bfd_get_section_flags (stdoutput, symseg) & SEC_LINK_ONCE))
3823         linkonce = TRUE;
3824       /* The GNU toolchain uses an extension for ELF: a section
3825          beginning with the magic string .gnu.linkonce is a
3826          linkonce section.  */
3827       if (strncmp (segment_name (symseg), ".gnu.linkonce",
3828                    sizeof ".gnu.linkonce" - 1) == 0)
3829         linkonce = TRUE;
3830     }
3831   return linkonce;
3832 }
3833
3834 /* Mark MIPS16 or microMIPS instruction label LABEL.  This permits the
3835    linker to handle them specially, such as generating jalx instructions
3836    when needed.  We also make them odd for the duration of the assembly,
3837    in order to generate the right sort of code.  We will make them even
3838    in the adjust_symtab routine, while leaving them marked.  This is
3839    convenient for the debugger and the disassembler.  The linker knows
3840    to make them odd again.  */
3841
3842 static void
3843 mips_compressed_mark_label (symbolS *label)
3844 {
3845   gas_assert (HAVE_CODE_COMPRESSION);
3846
3847   if (mips_opts.mips16)
3848     S_SET_OTHER (label, ELF_ST_SET_MIPS16 (S_GET_OTHER (label)));
3849   else
3850     S_SET_OTHER (label, ELF_ST_SET_MICROMIPS (S_GET_OTHER (label)));
3851   if ((S_GET_VALUE (label) & 1) == 0
3852       /* Don't adjust the address if the label is global or weak, or
3853          in a link-once section, since we'll be emitting symbol reloc
3854          references to it which will be patched up by the linker, and
3855          the final value of the symbol may or may not be MIPS16/microMIPS.  */
3856       && !S_IS_WEAK (label)
3857       && !S_IS_EXTERNAL (label)
3858       && !s_is_linkonce (label, now_seg))
3859     S_SET_VALUE (label, S_GET_VALUE (label) | 1);
3860 }
3861
3862 /* Mark preceding MIPS16 or microMIPS instruction labels.  */
3863
3864 static void
3865 mips_compressed_mark_labels (void)
3866 {
3867   struct insn_label_list *l;
3868
3869   for (l = seg_info (now_seg)->label_list; l != NULL; l = l->next)
3870     mips_compressed_mark_label (l->label);
3871 }
3872
3873 /* End the current frag.  Make it a variant frag and record the
3874    relaxation info.  */
3875
3876 static void
3877 relax_close_frag (void)
3878 {
3879   mips_macro_warning.first_frag = frag_now;
3880   frag_var (rs_machine_dependent, 0, 0,
3881             RELAX_ENCODE (mips_relax.sizes[0], mips_relax.sizes[1]),
3882             mips_relax.symbol, 0, (char *) mips_relax.first_fixup);
3883
3884   memset (&mips_relax.sizes, 0, sizeof (mips_relax.sizes));
3885   mips_relax.first_fixup = 0;
3886 }
3887
3888 /* Start a new relaxation sequence whose expansion depends on SYMBOL.
3889    See the comment above RELAX_ENCODE for more details.  */
3890
3891 static void
3892 relax_start (symbolS *symbol)
3893 {
3894   gas_assert (mips_relax.sequence == 0);
3895   mips_relax.sequence = 1;
3896   mips_relax.symbol = symbol;
3897 }
3898
3899 /* Start generating the second version of a relaxable sequence.
3900    See the comment above RELAX_ENCODE for more details.  */
3901
3902 static void
3903 relax_switch (void)
3904 {
3905   gas_assert (mips_relax.sequence == 1);
3906   mips_relax.sequence = 2;
3907 }
3908
3909 /* End the current relaxable sequence.  */
3910
3911 static void
3912 relax_end (void)
3913 {
3914   gas_assert (mips_relax.sequence == 2);
3915   relax_close_frag ();
3916   mips_relax.sequence = 0;
3917 }
3918
3919 /* Return true if IP is a delayed branch or jump.  */
3920
3921 static inline bfd_boolean
3922 delayed_branch_p (const struct mips_cl_insn *ip)
3923 {
3924   return (ip->insn_mo->pinfo & (INSN_UNCOND_BRANCH_DELAY
3925                                 | INSN_COND_BRANCH_DELAY
3926                                 | INSN_COND_BRANCH_LIKELY)) != 0;
3927 }
3928
3929 /* Return true if IP is a compact branch or jump.  */
3930
3931 static inline bfd_boolean
3932 compact_branch_p (const struct mips_cl_insn *ip)
3933 {
3934   return (ip->insn_mo->pinfo2 & (INSN2_UNCOND_BRANCH
3935                                  | INSN2_COND_BRANCH)) != 0;
3936 }
3937
3938 /* Return true if IP is an unconditional branch or jump.  */
3939
3940 static inline bfd_boolean
3941 uncond_branch_p (const struct mips_cl_insn *ip)
3942 {
3943   return ((ip->insn_mo->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0
3944           || (ip->insn_mo->pinfo2 & INSN2_UNCOND_BRANCH) != 0);
3945 }
3946
3947 /* Return true if IP is a branch-likely instruction.  */
3948
3949 static inline bfd_boolean
3950 branch_likely_p (const struct mips_cl_insn *ip)
3951 {
3952   return (ip->insn_mo->pinfo & INSN_COND_BRANCH_LIKELY) != 0;
3953 }
3954
3955 /* Return the type of nop that should be used to fill the delay slot
3956    of delayed branch IP.  */
3957
3958 static struct mips_cl_insn *
3959 get_delay_slot_nop (const struct mips_cl_insn *ip)
3960 {
3961   if (mips_opts.micromips
3962       && (ip->insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
3963     return &micromips_nop32_insn;
3964   return NOP_INSN;
3965 }
3966
3967 /* Return a mask that has bit N set if OPCODE reads the register(s)
3968    in operand N.  */
3969
3970 static unsigned int
3971 insn_read_mask (const struct mips_opcode *opcode)
3972 {
3973   return (opcode->pinfo & INSN_READ_ALL) >> INSN_READ_SHIFT;
3974 }
3975
3976 /* Return a mask that has bit N set if OPCODE writes to the register(s)
3977    in operand N.  */
3978
3979 static unsigned int
3980 insn_write_mask (const struct mips_opcode *opcode)
3981 {
3982   return (opcode->pinfo & INSN_WRITE_ALL) >> INSN_WRITE_SHIFT;
3983 }
3984
3985 /* Return a mask of the registers specified by operand OPERAND of INSN.
3986    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
3987    is set.  */
3988
3989 static unsigned int
3990 operand_reg_mask (const struct mips_cl_insn *insn,
3991                   const struct mips_operand *operand,
3992                   unsigned int type_mask)
3993 {
3994   unsigned int uval, vsel;
3995
3996   switch (operand->type)
3997     {
3998     case OP_INT:
3999     case OP_MAPPED_INT:
4000     case OP_MSB:
4001     case OP_PCREL:
4002     case OP_PERF_REG:
4003     case OP_ADDIUSP_INT:
4004     case OP_ENTRY_EXIT_LIST:
4005     case OP_REPEAT_DEST_REG:
4006     case OP_REPEAT_PREV_REG:
4007     case OP_PC:
4008     case OP_VU0_SUFFIX:
4009     case OP_VU0_MATCH_SUFFIX:
4010       abort ();
4011
4012     case OP_REG:
4013     case OP_OPTIONAL_REG:
4014       {
4015         const struct mips_reg_operand *reg_op;
4016
4017         reg_op = (const struct mips_reg_operand *) operand;
4018         if (!(type_mask & (1 << reg_op->reg_type)))
4019           return 0;
4020         uval = insn_extract_operand (insn, operand);
4021         return 1 << mips_decode_reg_operand (reg_op, uval);
4022       }
4023
4024     case OP_REG_PAIR:
4025       {
4026         const struct mips_reg_pair_operand *pair_op;
4027
4028         pair_op = (const struct mips_reg_pair_operand *) operand;
4029         if (!(type_mask & (1 << pair_op->reg_type)))
4030           return 0;
4031         uval = insn_extract_operand (insn, operand);
4032         return (1 << pair_op->reg1_map[uval]) | (1 << pair_op->reg2_map[uval]);
4033       }
4034
4035     case OP_CLO_CLZ_DEST:
4036       if (!(type_mask & (1 << OP_REG_GP)))
4037         return 0;
4038       uval = insn_extract_operand (insn, operand);
4039       return (1 << (uval & 31)) | (1 << (uval >> 5));
4040
4041     case OP_LWM_SWM_LIST:
4042       abort ();
4043
4044     case OP_SAVE_RESTORE_LIST:
4045       abort ();
4046
4047     case OP_MDMX_IMM_REG:
4048       if (!(type_mask & (1 << OP_REG_VEC)))
4049         return 0;
4050       uval = insn_extract_operand (insn, operand);
4051       vsel = uval >> 5;
4052       if ((vsel & 0x18) == 0x18)
4053         return 0;
4054       return 1 << (uval & 31);
4055     }
4056   abort ();
4057 }
4058
4059 /* Return a mask of the registers specified by operands OPNO_MASK of INSN,
4060    where bit N of OPNO_MASK is set if operand N should be included.
4061    Ignore registers of type OP_REG_<t> unless bit OP_REG_<t> of TYPE_MASK
4062    is set.  */
4063
4064 static unsigned int
4065 insn_reg_mask (const struct mips_cl_insn *insn,
4066                unsigned int type_mask, unsigned int opno_mask)
4067 {
4068   unsigned int opno, reg_mask;
4069
4070   opno = 0;
4071   reg_mask = 0;
4072   while (opno_mask != 0)
4073     {
4074       if (opno_mask & 1)
4075         reg_mask |= operand_reg_mask (insn, insn_opno (insn, opno), type_mask);
4076       opno_mask >>= 1;
4077       opno += 1;
4078     }
4079   return reg_mask;
4080 }
4081
4082 /* Return the mask of core registers that IP reads.  */
4083
4084 static unsigned int
4085 gpr_read_mask (const struct mips_cl_insn *ip)
4086 {
4087   unsigned long pinfo, pinfo2;
4088   unsigned int mask;
4089
4090   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_read_mask (ip->insn_mo));
4091   pinfo = ip->insn_mo->pinfo;
4092   pinfo2 = ip->insn_mo->pinfo2;
4093   if (pinfo & INSN_UDI)
4094     {
4095       /* UDI instructions have traditionally been assumed to read RS
4096          and RT.  */
4097       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RT, *ip);
4098       mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RS, *ip);
4099     }
4100   if (pinfo & INSN_READ_GPR_24)
4101     mask |= 1 << 24;
4102   if (pinfo2 & INSN2_READ_GPR_16)
4103     mask |= 1 << 16;
4104   if (pinfo2 & INSN2_READ_SP)
4105     mask |= 1 << SP;
4106   if (pinfo2 & INSN2_READ_GPR_31)
4107     mask |= 1 << 31;
4108   /* Don't include register 0.  */
4109   return mask & ~1;
4110 }
4111
4112 /* Return the mask of core registers that IP writes.  */
4113
4114 static unsigned int
4115 gpr_write_mask (const struct mips_cl_insn *ip)
4116 {
4117   unsigned long pinfo, pinfo2;
4118   unsigned int mask;
4119
4120   mask = insn_reg_mask (ip, 1 << OP_REG_GP, insn_write_mask (ip->insn_mo));
4121   pinfo = ip->insn_mo->pinfo;
4122   pinfo2 = ip->insn_mo->pinfo2;
4123   if (pinfo & INSN_WRITE_GPR_24)
4124     mask |= 1 << 24;
4125   if (pinfo & INSN_WRITE_GPR_31)
4126     mask |= 1 << 31;
4127   if (pinfo & INSN_UDI)
4128     /* UDI instructions have traditionally been assumed to write to RD.  */
4129     mask |= 1 << EXTRACT_OPERAND (mips_opts.micromips, RD, *ip);
4130   if (pinfo2 & INSN2_WRITE_SP)
4131     mask |= 1 << SP;
4132   /* Don't include register 0.  */
4133   return mask & ~1;
4134 }
4135
4136 /* Return the mask of floating-point registers that IP reads.  */
4137
4138 static unsigned int
4139 fpr_read_mask (const struct mips_cl_insn *ip)
4140 {
4141   unsigned long pinfo;
4142   unsigned int mask;
4143
4144   mask = insn_reg_mask (ip, (1 << OP_REG_FP) | (1 << OP_REG_VEC),
4145                         insn_read_mask (ip->insn_mo));
4146   pinfo = ip->insn_mo->pinfo;
4147   /* Conservatively treat all operands to an FP_D instruction are doubles.
4148      (This is overly pessimistic for things like cvt.d.s.)  */
4149   if (HAVE_32BIT_FPRS && (pinfo & FP_D))
4150     mask |= mask << 1;
4151   return mask;
4152 }
4153
4154 /* Return the mask of floating-point registers that IP writes.  */
4155
4156 static unsigned int
4157 fpr_write_mask (const struct mips_cl_insn *ip)
4158 {
4159   unsigned long pinfo;
4160   unsigned int mask;
4161
4162   mask = insn_reg_mask (ip, (1 << OP_REG_FP) | (1 << OP_REG_VEC),
4163                         insn_write_mask (ip->insn_mo));
4164   pinfo = ip->insn_mo->pinfo;
4165   /* Conservatively treat all operands to an FP_D instruction are doubles.
4166      (This is overly pessimistic for things like cvt.s.d.)  */
4167   if (HAVE_32BIT_FPRS && (pinfo & FP_D))
4168     mask |= mask << 1;
4169   return mask;
4170 }
4171
4172 /* Operand OPNUM of INSN is an odd-numbered floating-point register.
4173    Check whether that is allowed.  */
4174
4175 static bfd_boolean
4176 mips_oddfpreg_ok (const struct mips_opcode *insn, int opnum)
4177 {
4178   const char *s = insn->name;
4179
4180   if (insn->pinfo == INSN_MACRO)
4181     /* Let a macro pass, we'll catch it later when it is expanded.  */
4182     return TRUE;
4183
4184   if (ISA_HAS_ODD_SINGLE_FPR (mips_opts.isa) || mips_opts.arch == CPU_R5900)
4185     {
4186       /* Allow odd registers for single-precision ops.  */
4187       switch (insn->pinfo & (FP_S | FP_D))
4188         {
4189         case FP_S:
4190         case 0:
4191           return TRUE;
4192         case FP_D:
4193           return FALSE;
4194         default:
4195           break;
4196         }
4197
4198       /* Cvt.w.x and cvt.x.w allow an odd register for a 'w' or 's' operand.  */
4199       s = strchr (insn->name, '.');
4200       if (s != NULL && opnum == 2)
4201         s = strchr (s + 1, '.');
4202       return (s != NULL && (s[1] == 'w' || s[1] == 's'));
4203     }
4204
4205   /* Single-precision coprocessor loads and moves are OK too.  */
4206   if ((insn->pinfo & FP_S)
4207       && (insn->pinfo & (INSN_COPROC_MEMORY_DELAY | INSN_STORE_MEMORY
4208                          | INSN_LOAD_COPROC_DELAY | INSN_COPROC_MOVE_DELAY)))
4209     return TRUE;
4210
4211   return FALSE;
4212 }
4213
4214 /* Report that user-supplied argument ARGNUM for INSN was VAL, but should
4215    have been in the range [MIN_VAL, MAX_VAL].  PRINT_HEX says whether
4216    this operand is normally printed in hex or decimal.  */
4217
4218 static void
4219 report_bad_range (struct mips_cl_insn *insn, int argnum,
4220                   offsetT val, int min_val, int max_val,
4221                   bfd_boolean print_hex)
4222 {
4223   if (print_hex && val >= 0)
4224     as_bad (_("Operand %d of `%s' must be in the range [0x%x, 0x%x],"
4225               " was 0x%lx."),
4226             argnum, insn->insn_mo->name, min_val, max_val, (unsigned long) val);
4227   else if (print_hex)
4228     as_bad (_("Operand %d of `%s' must be in the range [0x%x, 0x%x],"
4229               " was %ld."),
4230             argnum, insn->insn_mo->name, min_val, max_val, (unsigned long) val);
4231   else
4232     as_bad (_("Operand %d of `%s' must be in the range [%d, %d],"
4233               " was %ld."),
4234             argnum, insn->insn_mo->name, min_val, max_val, (unsigned long) val);
4235 }
4236
4237 /* Report an invalid combination of position and size operands for a bitfield
4238    operation.  POS and SIZE are the values that were given.  */
4239
4240 static void
4241 report_bad_field (offsetT pos, offsetT size)
4242 {
4243   as_bad (_("Invalid field specification (position %ld, size %ld)"),
4244           (unsigned long) pos, (unsigned long) size);
4245 }
4246
4247 /* Information about an instruction argument that we're trying to match.  */
4248 struct mips_arg_info
4249 {
4250   /* The instruction so far.  */
4251   struct mips_cl_insn *insn;
4252
4253   /* The first unconsumed operand token.  */
4254   struct mips_operand_token *token;
4255
4256   /* The 1-based operand number, in terms of insn->insn_mo->args.  */
4257   int opnum;
4258
4259   /* The 1-based argument number, for error reporting.  This does not
4260      count elided optional registers, etc..  */
4261   int argnum;
4262
4263   /* The last OP_REG operand seen, or ILLEGAL_REG if none.  */
4264   unsigned int last_regno;
4265
4266   /* If the first operand was an OP_REG, this is the register that it
4267      specified, otherwise it is ILLEGAL_REG.  */
4268   unsigned int dest_regno;
4269
4270   /* The value of the last OP_INT operand.  Only used for OP_MSB,
4271      where it gives the lsb position.  */
4272   unsigned int last_op_int;
4273
4274   /* If true, match routines should assume that no later instruction
4275      alternative matches and should therefore be as accomodating as
4276      possible.  Match routines should not report errors if something
4277      is only invalid for !LAX_MATCH.  */
4278   bfd_boolean lax_match;
4279
4280   /* True if a reference to the current AT register was seen.  */
4281   bfd_boolean seen_at;
4282 };
4283
4284 /* Record that the argument is out of range.  */
4285
4286 static void
4287 match_out_of_range (struct mips_arg_info *arg)
4288 {
4289   set_insn_error_i (arg->argnum, _("operand %d out of range"), arg->argnum);
4290 }
4291
4292 /* Record that the argument isn't constant but needs to be.  */
4293
4294 static void
4295 match_not_constant (struct mips_arg_info *arg)
4296 {
4297   set_insn_error_i (arg->argnum, _("operand %d must be constant"),
4298                     arg->argnum);
4299 }
4300
4301 /* Try to match an OT_CHAR token for character CH.  Consume the token
4302    and return true on success, otherwise return false.  */
4303
4304 static bfd_boolean
4305 match_char (struct mips_arg_info *arg, char ch)
4306 {
4307   if (arg->token->type == OT_CHAR && arg->token->u.ch == ch)
4308     {
4309       ++arg->token;
4310       if (ch == ',')
4311         arg->argnum += 1;
4312       return TRUE;
4313     }
4314   return FALSE;
4315 }
4316
4317 /* Try to get an expression from the next tokens in ARG.  Consume the
4318    tokens and return true on success, storing the expression value in
4319    VALUE and relocation types in R.  */
4320
4321 static bfd_boolean
4322 match_expression (struct mips_arg_info *arg, expressionS *value,
4323                   bfd_reloc_code_real_type *r)
4324 {
4325   /* If the next token is a '(' that was parsed as being part of a base
4326      expression, assume we have an elided offset.  The later match will fail
4327      if this turns out to be wrong.  */
4328   if (arg->token->type == OT_CHAR && arg->token->u.ch == '(')
4329     {
4330       value->X_op = O_constant;
4331       value->X_add_number = 0;
4332       r[0] = r[1] = r[2] = BFD_RELOC_UNUSED;
4333       return TRUE;
4334     }
4335
4336   /* Reject register-based expressions such as "0+$2" and "(($2))".
4337      For plain registers the default error seems more appropriate.  */
4338   if (arg->token->type == OT_INTEGER
4339       && arg->token->u.integer.value.X_op == O_register)
4340     {
4341       set_insn_error (arg->argnum, _("register value used as expression"));
4342       return FALSE;
4343     }
4344
4345   if (arg->token->type == OT_INTEGER)
4346     {
4347       *value = arg->token->u.integer.value;
4348       memcpy (r, arg->token->u.integer.relocs, 3 * sizeof (*r));
4349       ++arg->token;
4350       return TRUE;
4351     }
4352
4353   set_insn_error_i
4354     (arg->argnum, _("operand %d must be an immediate expression"),
4355      arg->argnum);
4356   return FALSE;
4357 }
4358
4359 /* Try to get a constant expression from the next tokens in ARG.  Consume
4360    the tokens and return return true on success, storing the constant value
4361    in *VALUE.  Use FALLBACK as the value if the match succeeded with an
4362    error.  */
4363
4364 static bfd_boolean
4365 match_const_int (struct mips_arg_info *arg, offsetT *value)
4366 {
4367   expressionS ex;
4368   bfd_reloc_code_real_type r[3];
4369
4370   if (!match_expression (arg, &ex, r))
4371     return FALSE;
4372
4373   if (r[0] == BFD_RELOC_UNUSED && ex.X_op == O_constant)
4374     *value = ex.X_add_number;
4375   else
4376     {
4377       match_not_constant (arg);
4378       return FALSE;
4379     }
4380   return TRUE;
4381 }
4382
4383 /* Return the RTYPE_* flags for a register operand of type TYPE that
4384    appears in instruction OPCODE.  */
4385
4386 static unsigned int
4387 convert_reg_type (const struct mips_opcode *opcode,
4388                   enum mips_reg_operand_type type)
4389 {
4390   switch (type)
4391     {
4392     case OP_REG_GP:
4393       return RTYPE_NUM | RTYPE_GP;
4394
4395     case OP_REG_FP:
4396       /* Allow vector register names for MDMX if the instruction is a 64-bit
4397          FPR load, store or move (including moves to and from GPRs).  */
4398       if ((mips_opts.ase & ASE_MDMX)
4399           && (opcode->pinfo & FP_D)
4400           && (opcode->pinfo & (INSN_COPROC_MOVE_DELAY
4401                                | INSN_COPROC_MEMORY_DELAY
4402                                | INSN_LOAD_COPROC_DELAY
4403                                | INSN_LOAD_MEMORY_DELAY
4404                                | INSN_STORE_MEMORY)))
4405         return RTYPE_FPU | RTYPE_VEC;
4406       return RTYPE_FPU;
4407
4408     case OP_REG_CCC:
4409       if (opcode->pinfo & (FP_D | FP_S))
4410         return RTYPE_CCC | RTYPE_FCC;
4411       return RTYPE_CCC;
4412
4413     case OP_REG_VEC:
4414       if (opcode->membership & INSN_5400)
4415         return RTYPE_FPU;
4416       return RTYPE_FPU | RTYPE_VEC;
4417
4418     case OP_REG_ACC:
4419       return RTYPE_ACC;
4420
4421     case OP_REG_COPRO:
4422       if (opcode->name[strlen (opcode->name) - 1] == '0')
4423         return RTYPE_NUM | RTYPE_CP0;
4424       return RTYPE_NUM;
4425
4426     case OP_REG_HW:
4427       return RTYPE_NUM;
4428
4429     case OP_REG_VI:
4430       return RTYPE_NUM | RTYPE_VI;
4431
4432     case OP_REG_VF:
4433       return RTYPE_NUM | RTYPE_VF;
4434
4435     case OP_REG_R5900_I:
4436       return RTYPE_R5900_I;
4437
4438     case OP_REG_R5900_Q:
4439       return RTYPE_R5900_Q;
4440
4441     case OP_REG_R5900_R:
4442       return RTYPE_R5900_R;
4443
4444     case OP_REG_R5900_ACC:
4445       return RTYPE_R5900_ACC;
4446     }
4447   abort ();
4448 }
4449
4450 /* ARG is register REGNO, of type TYPE.  Warn about any dubious registers.  */
4451
4452 static void
4453 check_regno (struct mips_arg_info *arg,
4454              enum mips_reg_operand_type type, unsigned int regno)
4455 {
4456   if (AT && type == OP_REG_GP && regno == AT)
4457     arg->seen_at = TRUE;
4458
4459   if (type == OP_REG_FP
4460       && (regno & 1) != 0
4461       && HAVE_32BIT_FPRS
4462       && !mips_oddfpreg_ok (arg->insn->insn_mo, arg->opnum))
4463     as_warn (_("Float register should be even, was %d"), regno);
4464
4465   if (type == OP_REG_CCC)
4466     {
4467       const char *name;
4468       size_t length;
4469
4470       name = arg->insn->insn_mo->name;
4471       length = strlen (name);
4472       if ((regno & 1) != 0
4473           && ((length >= 3 && strcmp (name + length - 3, ".ps") == 0)
4474               || (length >= 5 && strncmp (name + length - 5, "any2", 4) == 0)))
4475         as_warn (_("Condition code register should be even for %s, was %d"),
4476                  name, regno);
4477
4478       if ((regno & 3) != 0
4479           && (length >= 5 && strncmp (name + length - 5, "any4", 4) == 0))
4480         as_warn (_("Condition code register should be 0 or 4 for %s, was %d"),
4481                  name, regno);
4482     }
4483 }
4484
4485 /* ARG is a register with symbol value SYMVAL.  Try to interpret it as
4486    a register of type TYPE.  Return true on success, storing the register
4487    number in *REGNO and warning about any dubious uses.  */
4488
4489 static bfd_boolean
4490 match_regno (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4491              unsigned int symval, unsigned int *regno)
4492 {
4493   if (type == OP_REG_VEC)
4494     symval = mips_prefer_vec_regno (symval);
4495   if (!(symval & convert_reg_type (arg->insn->insn_mo, type)))
4496     return FALSE;
4497
4498   *regno = symval & RNUM_MASK;
4499   check_regno (arg, type, *regno);
4500   return TRUE;
4501 }
4502
4503 /* Try to interpret the next token in ARG as a register of type TYPE.
4504    Consume the token and return true on success, storing the register
4505    number in *REGNO.  Return false on failure.  */
4506
4507 static bfd_boolean
4508 match_reg (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4509            unsigned int *regno)
4510 {
4511   if (arg->token->type == OT_REG
4512       && match_regno (arg, type, arg->token->u.regno, regno))
4513     {
4514       ++arg->token;
4515       return TRUE;
4516     }
4517   return FALSE;
4518 }
4519
4520 /* Try to interpret the next token in ARG as a range of registers of type TYPE.
4521    Consume the token and return true on success, storing the register numbers
4522    in *REGNO1 and *REGNO2.  Return false on failure.  */
4523
4524 static bfd_boolean
4525 match_reg_range (struct mips_arg_info *arg, enum mips_reg_operand_type type,
4526                  unsigned int *regno1, unsigned int *regno2)
4527 {
4528   if (match_reg (arg, type, regno1))
4529     {
4530       *regno2 = *regno1;
4531       return TRUE;
4532     }
4533   if (arg->token->type == OT_REG_RANGE
4534       && match_regno (arg, type, arg->token->u.reg_range.regno1, regno1)
4535       && match_regno (arg, type, arg->token->u.reg_range.regno2, regno2)
4536       && *regno1 <= *regno2)
4537     {
4538       ++arg->token;
4539       return TRUE;
4540     }
4541   return FALSE;
4542 }
4543
4544 /* OP_INT matcher.  */
4545
4546 static bfd_boolean
4547 match_int_operand (struct mips_arg_info *arg,
4548                    const struct mips_operand *operand_base)
4549 {
4550   const struct mips_int_operand *operand;
4551   unsigned int uval;
4552   int min_val, max_val, factor;
4553   offsetT sval;
4554
4555   operand = (const struct mips_int_operand *) operand_base;
4556   factor = 1 << operand->shift;
4557   min_val = mips_int_operand_min (operand);
4558   max_val = mips_int_operand_max (operand);
4559
4560   if (operand_base->lsb == 0
4561       && operand_base->size == 16
4562       && operand->shift == 0
4563       && operand->bias == 0
4564       && (operand->max_val == 32767 || operand->max_val == 65535))
4565     {
4566       /* The operand can be relocated.  */
4567       if (!match_expression (arg, &offset_expr, offset_reloc))
4568         return FALSE;
4569
4570       if (offset_reloc[0] != BFD_RELOC_UNUSED)
4571         /* Relocation operators were used.  Accept the arguent and
4572            leave the relocation value in offset_expr and offset_relocs
4573            for the caller to process.  */
4574         return TRUE;
4575
4576       if (offset_expr.X_op != O_constant)
4577         {
4578           /* Accept non-constant operands if no later alternative matches,
4579              leaving it for the caller to process.  */
4580           if (!arg->lax_match)
4581             return FALSE;
4582           offset_reloc[0] = BFD_RELOC_LO16;
4583           return TRUE;
4584         }
4585
4586       /* Clear the global state; we're going to install the operand
4587          ourselves.  */
4588       sval = offset_expr.X_add_number;
4589       offset_expr.X_op = O_absent;
4590
4591       /* For compatibility with older assemblers, we accept
4592          0x8000-0xffff as signed 16-bit numbers when only
4593          signed numbers are allowed.  */
4594       if (sval > max_val)
4595         {
4596           max_val = ((1 << operand_base->size) - 1) << operand->shift;
4597           if (!arg->lax_match && sval <= max_val)
4598             return FALSE;
4599         }
4600     }
4601   else
4602     {
4603       if (!match_const_int (arg, &sval))
4604         return FALSE;
4605     }
4606
4607   arg->last_op_int = sval;
4608
4609   if (sval < min_val || sval > max_val || sval % factor)
4610     {
4611       match_out_of_range (arg);
4612       return FALSE;
4613     }
4614
4615   uval = (unsigned int) sval >> operand->shift;
4616   uval -= operand->bias;
4617
4618   /* Handle -mfix-cn63xxp1.  */
4619   if (arg->opnum == 1
4620       && mips_fix_cn63xxp1
4621       && !mips_opts.micromips
4622       && strcmp ("pref", arg->insn->insn_mo->name) == 0)
4623     switch (uval)
4624       {
4625       case 5:
4626       case 25:
4627       case 26:
4628       case 27:
4629       case 28:
4630       case 29:
4631       case 30:
4632       case 31:
4633         /* These are ok.  */
4634         break;
4635
4636       default:
4637         /* The rest must be changed to 28.  */
4638         uval = 28;
4639         break;
4640       }
4641
4642   insn_insert_operand (arg->insn, operand_base, uval);
4643   return TRUE;
4644 }
4645
4646 /* OP_MAPPED_INT matcher.  */
4647
4648 static bfd_boolean
4649 match_mapped_int_operand (struct mips_arg_info *arg,
4650                           const struct mips_operand *operand_base)
4651 {
4652   const struct mips_mapped_int_operand *operand;
4653   unsigned int uval, num_vals;
4654   offsetT sval;
4655
4656   operand = (const struct mips_mapped_int_operand *) operand_base;
4657   if (!match_const_int (arg, &sval))
4658     return FALSE;
4659
4660   num_vals = 1 << operand_base->size;
4661   for (uval = 0; uval < num_vals; uval++)
4662     if (operand->int_map[uval] == sval)
4663       break;
4664   if (uval == num_vals)
4665     {
4666       match_out_of_range (arg);
4667       return FALSE;
4668     }
4669
4670   insn_insert_operand (arg->insn, operand_base, uval);
4671   return TRUE;
4672 }
4673
4674 /* OP_MSB matcher.  */
4675
4676 static bfd_boolean
4677 match_msb_operand (struct mips_arg_info *arg,
4678                    const struct mips_operand *operand_base)
4679 {
4680   const struct mips_msb_operand *operand;
4681   int min_val, max_val, max_high;
4682   offsetT size, sval, high;
4683
4684   operand = (const struct mips_msb_operand *) operand_base;
4685   min_val = operand->bias;
4686   max_val = min_val + (1 << operand_base->size) - 1;
4687   max_high = operand->opsize;
4688
4689   if (!match_const_int (arg, &size))
4690     return FALSE;
4691
4692   high = size + arg->last_op_int;
4693   sval = operand->add_lsb ? high : size;
4694
4695   if (size < 0 || high > max_high || sval < min_val || sval > max_val)
4696     {
4697       match_out_of_range (arg);
4698       return FALSE;
4699     }
4700   insn_insert_operand (arg->insn, operand_base, sval - min_val);
4701   return TRUE;
4702 }
4703
4704 /* OP_REG matcher.  */
4705
4706 static bfd_boolean
4707 match_reg_operand (struct mips_arg_info *arg,
4708                    const struct mips_operand *operand_base)
4709 {
4710   const struct mips_reg_operand *operand;
4711   unsigned int regno, uval, num_vals;
4712
4713   operand = (const struct mips_reg_operand *) operand_base;
4714   if (!match_reg (arg, operand->reg_type, &regno))
4715     return FALSE;
4716
4717   if (operand->reg_map)
4718     {
4719       num_vals = 1 << operand->root.size;
4720       for (uval = 0; uval < num_vals; uval++)
4721         if (operand->reg_map[uval] == regno)
4722           break;
4723       if (num_vals == uval)
4724         return FALSE;
4725     }
4726   else
4727     uval = regno;
4728
4729   arg->last_regno = regno;
4730   if (arg->opnum == 1)
4731     arg->dest_regno = regno;
4732   insn_insert_operand (arg->insn, operand_base, uval);
4733   return TRUE;
4734 }
4735
4736 /* OP_REG_PAIR matcher.  */
4737
4738 static bfd_boolean
4739 match_reg_pair_operand (struct mips_arg_info *arg,
4740                         const struct mips_operand *operand_base)
4741 {
4742   const struct mips_reg_pair_operand *operand;
4743   unsigned int regno1, regno2, uval, num_vals;
4744
4745   operand = (const struct mips_reg_pair_operand *) operand_base;
4746   if (!match_reg (arg, operand->reg_type, &regno1)
4747       || !match_char (arg, ',')
4748       || !match_reg (arg, operand->reg_type, &regno2))
4749     return FALSE;
4750
4751   num_vals = 1 << operand_base->size;
4752   for (uval = 0; uval < num_vals; uval++)
4753     if (operand->reg1_map[uval] == regno1 && operand->reg2_map[uval] == regno2)
4754       break;
4755   if (uval == num_vals)
4756     return FALSE;
4757
4758   insn_insert_operand (arg->insn, operand_base, uval);
4759   return TRUE;
4760 }
4761
4762 /* OP_PCREL matcher.  The caller chooses the relocation type.  */
4763
4764 static bfd_boolean
4765 match_pcrel_operand (struct mips_arg_info *arg)
4766 {
4767   bfd_reloc_code_real_type r[3];
4768
4769   return match_expression (arg, &offset_expr, r) && r[0] == BFD_RELOC_UNUSED;
4770 }
4771
4772 /* OP_PERF_REG matcher.  */
4773
4774 static bfd_boolean
4775 match_perf_reg_operand (struct mips_arg_info *arg,
4776                         const struct mips_operand *operand)
4777 {
4778   offsetT sval;
4779
4780   if (!match_const_int (arg, &sval))
4781     return FALSE;
4782
4783   if (sval != 0
4784       && (sval != 1
4785           || (mips_opts.arch == CPU_R5900
4786               && (strcmp (arg->insn->insn_mo->name, "mfps") == 0
4787                   || strcmp (arg->insn->insn_mo->name, "mtps") == 0))))
4788     {
4789       set_insn_error (arg->argnum, _("invalid performance register"));
4790       return FALSE;
4791     }
4792
4793   insn_insert_operand (arg->insn, operand, sval);
4794   return TRUE;
4795 }
4796
4797 /* OP_ADDIUSP matcher.  */
4798
4799 static bfd_boolean
4800 match_addiusp_operand (struct mips_arg_info *arg,
4801                        const struct mips_operand *operand)
4802 {
4803   offsetT sval;
4804   unsigned int uval;
4805
4806   if (!match_const_int (arg, &sval))
4807     return FALSE;
4808
4809   if (sval % 4)
4810     {
4811       match_out_of_range (arg);
4812       return FALSE;
4813     }
4814
4815   sval /= 4;
4816   if (!(sval >= -258 && sval <= 257) || (sval >= -2 && sval <= 1))
4817     {
4818       match_out_of_range (arg);
4819       return FALSE;
4820     }
4821
4822   uval = (unsigned int) sval;
4823   uval = ((uval >> 1) & ~0xff) | (uval & 0xff);
4824   insn_insert_operand (arg->insn, operand, uval);
4825   return TRUE;
4826 }
4827
4828 /* OP_CLO_CLZ_DEST matcher.  */
4829
4830 static bfd_boolean
4831 match_clo_clz_dest_operand (struct mips_arg_info *arg,
4832                             const struct mips_operand *operand)
4833 {
4834   unsigned int regno;
4835
4836   if (!match_reg (arg, OP_REG_GP, &regno))
4837     return FALSE;
4838
4839   insn_insert_operand (arg->insn, operand, regno | (regno << 5));
4840   return TRUE;
4841 }
4842
4843 /* OP_LWM_SWM_LIST matcher.  */
4844
4845 static bfd_boolean
4846 match_lwm_swm_list_operand (struct mips_arg_info *arg,
4847                             const struct mips_operand *operand)
4848 {
4849   unsigned int reglist, sregs, ra, regno1, regno2;
4850   struct mips_arg_info reset;
4851
4852   reglist = 0;
4853   if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
4854     return FALSE;
4855   do
4856     {
4857       if (regno2 == FP && regno1 >= S0 && regno1 <= S7)
4858         {
4859           reglist |= 1 << FP;
4860           regno2 = S7;
4861         }
4862       reglist |= ((1U << regno2 << 1) - 1) & -(1U << regno1);
4863       reset = *arg;
4864     }
4865   while (match_char (arg, ',')
4866          && match_reg_range (arg, OP_REG_GP, &regno1, &regno2));
4867   *arg = reset;
4868
4869   if (operand->size == 2)
4870     {
4871       /* The list must include both ra and s0-sN, for 0 <= N <= 3.  E.g.:
4872
4873          s0, ra
4874          s0, s1, ra, s2, s3
4875          s0-s2, ra
4876
4877          and any permutations of these.  */
4878       if ((reglist & 0xfff1ffff) != 0x80010000)
4879         return FALSE;
4880
4881       sregs = (reglist >> 17) & 7;
4882       ra = 0;
4883     }
4884   else
4885     {
4886       /* The list must include at least one of ra and s0-sN,
4887          for 0 <= N <= 8.  (Note that there is a gap between s7 and s8,
4888          which are $23 and $30 respectively.)  E.g.:
4889
4890          ra
4891          s0
4892          ra, s0, s1, s2
4893          s0-s8
4894          s0-s5, ra
4895
4896          and any permutations of these.  */
4897       if ((reglist & 0x3f00ffff) != 0)
4898         return FALSE;
4899
4900       ra = (reglist >> 27) & 0x10;
4901       sregs = ((reglist >> 22) & 0x100) | ((reglist >> 16) & 0xff);
4902     }
4903   sregs += 1;
4904   if ((sregs & -sregs) != sregs)
4905     return FALSE;
4906
4907   insn_insert_operand (arg->insn, operand, (ffs (sregs) - 1) | ra);
4908   return TRUE;
4909 }
4910
4911 /* OP_ENTRY_EXIT_LIST matcher.  */
4912
4913 static unsigned int
4914 match_entry_exit_operand (struct mips_arg_info *arg,
4915                           const struct mips_operand *operand)
4916 {
4917   unsigned int mask;
4918   bfd_boolean is_exit;
4919
4920   /* The format is the same for both ENTRY and EXIT, but the constraints
4921      are different.  */
4922   is_exit = strcmp (arg->insn->insn_mo->name, "exit") == 0;
4923   mask = (is_exit ? 7 << 3 : 0);
4924   do
4925     {
4926       unsigned int regno1, regno2;
4927       bfd_boolean is_freg;
4928
4929       if (match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
4930         is_freg = FALSE;
4931       else if (match_reg_range (arg, OP_REG_FP, &regno1, &regno2))
4932         is_freg = TRUE;
4933       else
4934         return FALSE;
4935
4936       if (is_exit && is_freg && regno1 == 0 && regno2 < 2)
4937         {
4938           mask &= ~(7 << 3);
4939           mask |= (5 + regno2) << 3;
4940         }
4941       else if (!is_exit && regno1 == 4 && regno2 >= 4 && regno2 <= 7)
4942         mask |= (regno2 - 3) << 3;
4943       else if (regno1 == 16 && regno2 >= 16 && regno2 <= 17)
4944         mask |= (regno2 - 15) << 1;
4945       else if (regno1 == RA && regno2 == RA)
4946         mask |= 1;
4947       else
4948         return FALSE;
4949     }
4950   while (match_char (arg, ','));
4951
4952   insn_insert_operand (arg->insn, operand, mask);
4953   return TRUE;
4954 }
4955
4956 /* OP_SAVE_RESTORE_LIST matcher.  */
4957
4958 static bfd_boolean
4959 match_save_restore_list_operand (struct mips_arg_info *arg)
4960 {
4961   unsigned int opcode, args, statics, sregs;
4962   unsigned int num_frame_sizes, num_args, num_statics, num_sregs;
4963   offsetT frame_size;
4964
4965   opcode = arg->insn->insn_opcode;
4966   frame_size = 0;
4967   num_frame_sizes = 0;
4968   args = 0;
4969   statics = 0;
4970   sregs = 0;
4971   do
4972     {
4973       unsigned int regno1, regno2;
4974
4975       if (arg->token->type == OT_INTEGER)
4976         {
4977           /* Handle the frame size.  */
4978           if (!match_const_int (arg, &frame_size))
4979             return FALSE;
4980           num_frame_sizes += 1;
4981         }
4982       else
4983         {
4984           if (!match_reg_range (arg, OP_REG_GP, &regno1, &regno2))
4985             return FALSE;
4986
4987           while (regno1 <= regno2)
4988             {
4989               if (regno1 >= 4 && regno1 <= 7)
4990                 {
4991                   if (num_frame_sizes == 0)
4992                     /* args $a0-$a3 */
4993                     args |= 1 << (regno1 - 4);
4994                   else
4995                     /* statics $a0-$a3 */
4996                     statics |= 1 << (regno1 - 4);
4997                 }
4998               else if (regno1 >= 16 && regno1 <= 23)
4999                 /* $s0-$s7 */
5000                 sregs |= 1 << (regno1 - 16);
5001               else if (regno1 == 30)
5002                 /* $s8 */
5003                 sregs |= 1 << 8;
5004               else if (regno1 == 31)
5005                 /* Add $ra to insn.  */
5006                 opcode |= 0x40;
5007               else
5008                 return FALSE;
5009               regno1 += 1;
5010               if (regno1 == 24)
5011                 regno1 = 30;
5012             }
5013         }
5014     }
5015   while (match_char (arg, ','));
5016
5017   /* Encode args/statics combination.  */
5018   if (args & statics)
5019     return FALSE;
5020   else if (args == 0xf)
5021     /* All $a0-$a3 are args.  */
5022     opcode |= MIPS16_ALL_ARGS << 16;
5023   else if (statics == 0xf)
5024     /* All $a0-$a3 are statics.  */
5025     opcode |= MIPS16_ALL_STATICS << 16;
5026   else
5027     {
5028       /* Count arg registers.  */
5029       num_args = 0;
5030       while (args & 0x1)
5031         {
5032           args >>= 1;
5033           num_args += 1;
5034         }
5035       if (args != 0)
5036         return FALSE;
5037
5038       /* Count static registers.  */
5039       num_statics = 0;
5040       while (statics & 0x8)
5041         {
5042           statics = (statics << 1) & 0xf;
5043           num_statics += 1;
5044         }
5045       if (statics != 0)
5046         return FALSE;
5047
5048       /* Encode args/statics.  */
5049       opcode |= ((num_args << 2) | num_statics) << 16;
5050     }
5051
5052   /* Encode $s0/$s1.  */
5053   if (sregs & (1 << 0))         /* $s0 */
5054     opcode |= 0x20;
5055   if (sregs & (1 << 1))         /* $s1 */
5056     opcode |= 0x10;
5057   sregs >>= 2;
5058
5059   /* Encode $s2-$s8. */
5060   num_sregs = 0;
5061   while (sregs & 1)
5062     {
5063       sregs >>= 1;
5064       num_sregs += 1;
5065     }
5066   if (sregs != 0)
5067     return FALSE;
5068   opcode |= num_sregs << 24;
5069
5070   /* Encode frame size.  */
5071   if (num_frame_sizes == 0)
5072     {
5073       set_insn_error (arg->argnum, _("missing frame size"));
5074       return FALSE;
5075     }
5076   if (num_frame_sizes > 1)
5077     {
5078       set_insn_error (arg->argnum, _("frame size specified twice"));
5079       return FALSE;
5080     }
5081   if ((frame_size & 7) != 0 || frame_size < 0 || frame_size > 0xff * 8)
5082     {
5083       set_insn_error (arg->argnum, _("invalid frame size"));
5084       return FALSE;
5085     }
5086   if (frame_size != 128 || (opcode >> 16) != 0)
5087     {
5088       frame_size /= 8;
5089       opcode |= (((frame_size & 0xf0) << 16)
5090                  | (frame_size & 0x0f));
5091     }
5092
5093   /* Finally build the instruction.  */
5094   if ((opcode >> 16) != 0 || frame_size == 0)
5095     opcode |= MIPS16_EXTEND;
5096   arg->insn->insn_opcode = opcode;
5097   return TRUE;
5098 }
5099
5100 /* OP_MDMX_IMM_REG matcher.  */
5101
5102 static bfd_boolean
5103 match_mdmx_imm_reg_operand (struct mips_arg_info *arg,
5104                             const struct mips_operand *operand)
5105 {
5106   unsigned int regno, uval;
5107   bfd_boolean is_qh;
5108   const struct mips_opcode *opcode;
5109
5110   /* The mips_opcode records whether this is an octobyte or quadhalf
5111      instruction.  Start out with that bit in place.  */
5112   opcode = arg->insn->insn_mo;
5113   uval = mips_extract_operand (operand, opcode->match);
5114   is_qh = (uval != 0);
5115
5116   if (arg->token->type == OT_REG || arg->token->type == OT_REG_ELEMENT)
5117     {
5118       if ((opcode->membership & INSN_5400)
5119           && strcmp (opcode->name, "rzu.ob") == 0)
5120         {
5121           set_insn_error_i (arg->argnum, _("operand %d must be an immediate"),
5122                             arg->argnum);
5123           return FALSE;
5124         }
5125
5126       /* Check whether this is a vector register or a broadcast of
5127          a single element.  */
5128       if (arg->token->type == OT_REG_ELEMENT)
5129         {
5130           if (!match_regno (arg, OP_REG_VEC, arg->token->u.reg_element.regno,
5131                             &regno))
5132             return FALSE;
5133           if (arg->token->u.reg_element.index > (is_qh ? 3 : 7))
5134             {
5135               set_insn_error (arg->argnum, _("invalid element selector"));
5136               return FALSE;
5137             }
5138           else
5139             uval |= arg->token->u.reg_element.index << (is_qh ? 2 : 1) << 5;
5140         }
5141       else
5142         {
5143           /* A full vector.  */
5144           if ((opcode->membership & INSN_5400)
5145               && (strcmp (opcode->name, "sll.ob") == 0
5146                   || strcmp (opcode->name, "srl.ob") == 0))
5147             {
5148               set_insn_error_i (arg->argnum, _("operand %d must be scalar"),
5149                                 arg->argnum);
5150               return FALSE;
5151             }
5152
5153           if (!match_regno (arg, OP_REG_VEC, arg->token->u.regno, &regno))
5154             return FALSE;
5155           if (is_qh)
5156             uval |= MDMX_FMTSEL_VEC_QH << 5;
5157           else
5158             uval |= MDMX_FMTSEL_VEC_OB << 5;
5159         }
5160       uval |= regno;
5161       ++arg->token;
5162     }
5163   else
5164     {
5165       offsetT sval;
5166
5167       if (!match_const_int (arg, &sval))
5168         return FALSE;
5169       if (sval < 0 || sval > 31)
5170         {
5171           match_out_of_range (arg);
5172           return FALSE;
5173         }
5174       uval |= (sval & 31);
5175       if (is_qh)
5176         uval |= MDMX_FMTSEL_IMM_QH << 5;
5177       else
5178         uval |= MDMX_FMTSEL_IMM_OB << 5;
5179     }
5180   insn_insert_operand (arg->insn, operand, uval);
5181   return TRUE;
5182 }
5183
5184 /* OP_PC matcher.  */
5185
5186 static bfd_boolean
5187 match_pc_operand (struct mips_arg_info *arg)
5188 {
5189   if (arg->token->type == OT_REG && (arg->token->u.regno & RTYPE_PC))
5190     {
5191       ++arg->token;
5192       return TRUE;
5193     }
5194   return FALSE;
5195 }
5196
5197 /* OP_REPEAT_DEST_REG and OP_REPEAT_PREV_REG matcher.  OTHER_REGNO is the
5198    register that we need to match.  */
5199
5200 static bfd_boolean
5201 match_tied_reg_operand (struct mips_arg_info *arg, unsigned int other_regno)
5202 {
5203   unsigned int regno;
5204
5205   return match_reg (arg, OP_REG_GP, &regno) && regno == other_regno;
5206 }
5207
5208 /* Read a floating-point constant from S for LI.S or LI.D.  LENGTH is
5209    the length of the value in bytes (4 for float, 8 for double) and
5210    USING_GPRS says whether the destination is a GPR rather than an FPR.
5211
5212    Return the constant in IMM and OFFSET as follows:
5213
5214    - If the constant should be loaded via memory, set IMM to O_absent and
5215      OFFSET to the memory address.
5216
5217    - Otherwise, if the constant should be loaded into two 32-bit registers,
5218      set IMM to the O_constant to load into the high register and OFFSET
5219      to the corresponding value for the low register.
5220
5221    - Otherwise, set IMM to the full O_constant and set OFFSET to O_absent.
5222
5223    These constants only appear as the last operand in an instruction,
5224    and every instruction that accepts them in any variant accepts them
5225    in all variants.  This means we don't have to worry about backing out
5226    any changes if the instruction does not match.  We just match
5227    unconditionally and report an error if the constant is invalid.  */
5228
5229 static bfd_boolean
5230 match_float_constant (struct mips_arg_info *arg, expressionS *imm,
5231                       expressionS *offset, int length, bfd_boolean using_gprs)
5232 {
5233   char *p;
5234   segT seg, new_seg;
5235   subsegT subseg;
5236   const char *newname;
5237   unsigned char *data;
5238
5239   /* Where the constant is placed is based on how the MIPS assembler
5240      does things:
5241
5242      length == 4 && using_gprs  -- immediate value only
5243      length == 8 && using_gprs  -- .rdata or immediate value
5244      length == 4 && !using_gprs -- .lit4 or immediate value
5245      length == 8 && !using_gprs -- .lit8 or immediate value
5246
5247      The .lit4 and .lit8 sections are only used if permitted by the
5248      -G argument.  */
5249   if (arg->token->type != OT_FLOAT)
5250     {
5251       set_insn_error (arg->argnum, _("floating-point expression required"));
5252       return FALSE;
5253     }
5254
5255   gas_assert (arg->token->u.flt.length == length);
5256   data = arg->token->u.flt.data;
5257   ++arg->token;
5258
5259   /* Handle 32-bit constants for which an immediate value is best.  */
5260   if (length == 4
5261       && (using_gprs
5262           || g_switch_value < 4
5263           || (data[0] == 0 && data[1] == 0)
5264           || (data[2] == 0 && data[3] == 0)))
5265     {
5266       imm->X_op = O_constant;
5267       if (!target_big_endian)
5268         imm->X_add_number = bfd_getl32 (data);
5269       else
5270         imm->X_add_number = bfd_getb32 (data);
5271       offset->X_op = O_absent;
5272       return TRUE;
5273     }
5274
5275   /* Handle 64-bit constants for which an immediate value is best.  */
5276   if (length == 8
5277       && !mips_disable_float_construction
5278       /* Constants can only be constructed in GPRs and copied
5279          to FPRs if the GPRs are at least as wide as the FPRs.
5280          Force the constant into memory if we are using 64-bit FPRs
5281          but the GPRs are only 32 bits wide.  */
5282       /* ??? No longer true with the addition of MTHC1, but this
5283          is legacy code...  */
5284       && (using_gprs || !(HAVE_64BIT_FPRS && HAVE_32BIT_GPRS))
5285       && ((data[0] == 0 && data[1] == 0)
5286           || (data[2] == 0 && data[3] == 0))
5287       && ((data[4] == 0 && data[5] == 0)
5288           || (data[6] == 0 && data[7] == 0)))
5289     {
5290       /* The value is simple enough to load with a couple of instructions.
5291          If using 32-bit registers, set IMM to the high order 32 bits and
5292          OFFSET to the low order 32 bits.  Otherwise, set IMM to the entire
5293          64 bit constant.  */
5294       if (using_gprs ? HAVE_32BIT_GPRS : HAVE_32BIT_FPRS)
5295         {
5296           imm->X_op = O_constant;
5297           offset->X_op = O_constant;
5298           if (!target_big_endian)
5299             {
5300               imm->X_add_number = bfd_getl32 (data + 4);
5301               offset->X_add_number = bfd_getl32 (data);
5302             }
5303           else
5304             {
5305               imm->X_add_number = bfd_getb32 (data);
5306               offset->X_add_number = bfd_getb32 (data + 4);
5307             }
5308           if (offset->X_add_number == 0)
5309             offset->X_op = O_absent;
5310         }
5311       else
5312         {
5313           imm->X_op = O_constant;
5314           if (!target_big_endian)
5315             imm->X_add_number = bfd_getl64 (data);
5316           else
5317             imm->X_add_number = bfd_getb64 (data);
5318           offset->X_op = O_absent;
5319         }
5320       return TRUE;
5321     }
5322
5323   /* Switch to the right section.  */
5324   seg = now_seg;
5325   subseg = now_subseg;
5326   if (length == 4)
5327     {
5328       gas_assert (!using_gprs && g_switch_value >= 4);
5329       newname = ".lit4";
5330     }
5331   else
5332     {
5333       if (using_gprs || g_switch_value < 8)
5334         newname = RDATA_SECTION_NAME;
5335       else
5336         newname = ".lit8";
5337     }
5338
5339   new_seg = subseg_new (newname, (subsegT) 0);
5340   bfd_set_section_flags (stdoutput, new_seg,
5341                          SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA);
5342   frag_align (length == 4 ? 2 : 3, 0, 0);
5343   if (strncmp (TARGET_OS, "elf", 3) != 0)
5344     record_alignment (new_seg, 4);
5345   else
5346     record_alignment (new_seg, length == 4 ? 2 : 3);
5347   if (seg == now_seg)
5348     as_bad (_("Can't use floating point insn in this section"));
5349
5350   /* Set the argument to the current address in the section.  */
5351   imm->X_op = O_absent;
5352   offset->X_op = O_symbol;
5353   offset->X_add_symbol = symbol_temp_new_now ();
5354   offset->X_add_number = 0;
5355
5356   /* Put the floating point number into the section.  */
5357   p = frag_more (length);
5358   memcpy (p, data, length);
5359
5360   /* Switch back to the original section.  */
5361   subseg_set (seg, subseg);
5362   return TRUE;
5363 }
5364
5365 /* OP_VU0_SUFFIX and OP_VU0_MATCH_SUFFIX matcher; MATCH_P selects between
5366    them.  */
5367
5368 static bfd_boolean
5369 match_vu0_suffix_operand (struct mips_arg_info *arg,
5370                           const struct mips_operand *operand,
5371                           bfd_boolean match_p)
5372 {
5373   unsigned int uval;
5374
5375   /* The operand can be an XYZW mask or a single 2-bit channel index
5376      (with X being 0).  */
5377   gas_assert (operand->size == 2 || operand->size == 4);
5378
5379   /* The suffix can be omitted when it is already part of the opcode.  */
5380   if (arg->token->type != OT_CHANNELS)
5381     return match_p;
5382
5383   uval = arg->token->u.channels;
5384   if (operand->size == 2)
5385     {
5386       /* Check that a single bit is set and convert it into a 2-bit index.  */
5387       if ((uval & -uval) != uval)
5388         return FALSE;
5389       uval = 4 - ffs (uval);
5390     }
5391
5392   if (match_p && insn_extract_operand (arg->insn, operand) != uval)
5393     return FALSE;
5394
5395   ++arg->token;
5396   if (!match_p)
5397     insn_insert_operand (arg->insn, operand, uval);
5398   return TRUE;
5399 }
5400
5401 /* S is the text seen for ARG.  Match it against OPERAND.  Return the end
5402    of the argument text if the match is successful, otherwise return null.  */
5403
5404 static bfd_boolean
5405 match_operand (struct mips_arg_info *arg,
5406                const struct mips_operand *operand)
5407 {
5408   switch (operand->type)
5409     {
5410     case OP_INT:
5411       return match_int_operand (arg, operand);
5412
5413     case OP_MAPPED_INT:
5414       return match_mapped_int_operand (arg, operand);
5415
5416     case OP_MSB:
5417       return match_msb_operand (arg, operand);
5418
5419     case OP_REG:
5420     case OP_OPTIONAL_REG:
5421       return match_reg_operand (arg, operand);
5422
5423     case OP_REG_PAIR:
5424       return match_reg_pair_operand (arg, operand);
5425
5426     case OP_PCREL:
5427       return match_pcrel_operand (arg);
5428
5429     case OP_PERF_REG:
5430       return match_perf_reg_operand (arg, operand);
5431
5432     case OP_ADDIUSP_INT:
5433       return match_addiusp_operand (arg, operand);
5434
5435     case OP_CLO_CLZ_DEST:
5436       return match_clo_clz_dest_operand (arg, operand);
5437
5438     case OP_LWM_SWM_LIST:
5439       return match_lwm_swm_list_operand (arg, operand);
5440
5441     case OP_ENTRY_EXIT_LIST:
5442       return match_entry_exit_operand (arg, operand);
5443
5444     case OP_SAVE_RESTORE_LIST:
5445       return match_save_restore_list_operand (arg);
5446
5447     case OP_MDMX_IMM_REG:
5448       return match_mdmx_imm_reg_operand (arg, operand);
5449
5450     case OP_REPEAT_DEST_REG:
5451       return match_tied_reg_operand (arg, arg->dest_regno);
5452
5453     case OP_REPEAT_PREV_REG:
5454       return match_tied_reg_operand (arg, arg->last_regno);
5455
5456     case OP_PC:
5457       return match_pc_operand (arg);
5458
5459     case OP_VU0_SUFFIX:
5460       return match_vu0_suffix_operand (arg, operand, FALSE);
5461
5462     case OP_VU0_MATCH_SUFFIX:
5463       return match_vu0_suffix_operand (arg, operand, TRUE);
5464     }
5465   abort ();
5466 }
5467
5468 /* ARG is the state after successfully matching an instruction.
5469    Issue any queued-up warnings.  */
5470
5471 static void
5472 check_completed_insn (struct mips_arg_info *arg)
5473 {
5474   if (arg->seen_at)
5475     {
5476       if (AT == ATREG)
5477         as_warn (_("Used $at without \".set noat\""));
5478       else
5479         as_warn (_("Used $%u with \".set at=$%u\""), AT, AT);
5480     }
5481 }
5482
5483 /* Return true if modifying general-purpose register REG needs a delay.  */
5484
5485 static bfd_boolean
5486 reg_needs_delay (unsigned int reg)
5487 {
5488   unsigned long prev_pinfo;
5489
5490   prev_pinfo = history[0].insn_mo->pinfo;
5491   if (!mips_opts.noreorder
5492       && (((prev_pinfo & INSN_LOAD_MEMORY_DELAY) && !gpr_interlocks)
5493           || ((prev_pinfo & INSN_LOAD_COPROC_DELAY) && !cop_interlocks))
5494       && (gpr_write_mask (&history[0]) & (1 << reg)))
5495     return TRUE;
5496
5497   return FALSE;
5498 }
5499
5500 /* Classify an instruction according to the FIX_VR4120_* enumeration.
5501    Return NUM_FIX_VR4120_CLASSES if the instruction isn't affected
5502    by VR4120 errata.  */
5503
5504 static unsigned int
5505 classify_vr4120_insn (const char *name)
5506 {
5507   if (strncmp (name, "macc", 4) == 0)
5508     return FIX_VR4120_MACC;
5509   if (strncmp (name, "dmacc", 5) == 0)
5510     return FIX_VR4120_DMACC;
5511   if (strncmp (name, "mult", 4) == 0)
5512     return FIX_VR4120_MULT;
5513   if (strncmp (name, "dmult", 5) == 0)
5514     return FIX_VR4120_DMULT;
5515   if (strstr (name, "div"))
5516     return FIX_VR4120_DIV;
5517   if (strcmp (name, "mtlo") == 0 || strcmp (name, "mthi") == 0)
5518     return FIX_VR4120_MTHILO;
5519   return NUM_FIX_VR4120_CLASSES;
5520 }
5521
5522 #define INSN_ERET  0x42000018
5523 #define INSN_DERET 0x4200001f
5524
5525 /* Return the number of instructions that must separate INSN1 and INSN2,
5526    where INSN1 is the earlier instruction.  Return the worst-case value
5527    for any INSN2 if INSN2 is null.  */
5528
5529 static unsigned int
5530 insns_between (const struct mips_cl_insn *insn1,
5531                const struct mips_cl_insn *insn2)
5532 {
5533   unsigned long pinfo1, pinfo2;
5534   unsigned int mask;
5535
5536   /* If INFO2 is null, pessimistically assume that all flags are set for
5537      the second instruction.  */
5538   pinfo1 = insn1->insn_mo->pinfo;
5539   pinfo2 = insn2 ? insn2->insn_mo->pinfo : ~0U;
5540
5541   /* For most targets, write-after-read dependencies on the HI and LO
5542      registers must be separated by at least two instructions.  */
5543   if (!hilo_interlocks)
5544     {
5545       if ((pinfo1 & INSN_READ_LO) && (pinfo2 & INSN_WRITE_LO))
5546         return 2;
5547       if ((pinfo1 & INSN_READ_HI) && (pinfo2 & INSN_WRITE_HI))
5548         return 2;
5549     }
5550
5551   /* If we're working around r7000 errata, there must be two instructions
5552      between an mfhi or mflo and any instruction that uses the result.  */
5553   if (mips_7000_hilo_fix
5554       && !mips_opts.micromips
5555       && MF_HILO_INSN (pinfo1)
5556       && (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1))))
5557     return 2;
5558
5559   /* If we're working around 24K errata, one instruction is required
5560      if an ERET or DERET is followed by a branch instruction.  */
5561   if (mips_fix_24k && !mips_opts.micromips)
5562     {
5563       if (insn1->insn_opcode == INSN_ERET
5564           || insn1->insn_opcode == INSN_DERET)
5565         {
5566           if (insn2 == NULL
5567               || insn2->insn_opcode == INSN_ERET
5568               || insn2->insn_opcode == INSN_DERET
5569               || delayed_branch_p (insn2))
5570             return 1;
5571         }
5572     }
5573
5574   /* If working around VR4120 errata, check for combinations that need
5575      a single intervening instruction.  */
5576   if (mips_fix_vr4120 && !mips_opts.micromips)
5577     {
5578       unsigned int class1, class2;
5579
5580       class1 = classify_vr4120_insn (insn1->insn_mo->name);
5581       if (class1 != NUM_FIX_VR4120_CLASSES && vr4120_conflicts[class1] != 0)
5582         {
5583           if (insn2 == NULL)
5584             return 1;
5585           class2 = classify_vr4120_insn (insn2->insn_mo->name);
5586           if (vr4120_conflicts[class1] & (1 << class2))
5587             return 1;
5588         }
5589     }
5590
5591   if (!HAVE_CODE_COMPRESSION)
5592     {
5593       /* Check for GPR or coprocessor load delays.  All such delays
5594          are on the RT register.  */
5595       /* Itbl support may require additional care here.  */
5596       if ((!gpr_interlocks && (pinfo1 & INSN_LOAD_MEMORY_DELAY))
5597           || (!cop_interlocks && (pinfo1 & INSN_LOAD_COPROC_DELAY)))
5598         {
5599           if (insn2 == NULL || (gpr_read_mask (insn2) & gpr_write_mask (insn1)))
5600             return 1;
5601         }
5602
5603       /* Check for generic coprocessor hazards.
5604
5605          This case is not handled very well.  There is no special
5606          knowledge of CP0 handling, and the coprocessors other than
5607          the floating point unit are not distinguished at all.  */
5608       /* Itbl support may require additional care here. FIXME!
5609          Need to modify this to include knowledge about
5610          user specified delays!  */
5611       else if ((!cop_interlocks && (pinfo1 & INSN_COPROC_MOVE_DELAY))
5612                || (!cop_mem_interlocks && (pinfo1 & INSN_COPROC_MEMORY_DELAY)))
5613         {
5614           /* Handle cases where INSN1 writes to a known general coprocessor
5615              register.  There must be a one instruction delay before INSN2
5616              if INSN2 reads that register, otherwise no delay is needed.  */
5617           mask = fpr_write_mask (insn1);
5618           if (mask != 0)
5619             {
5620               if (!insn2 || (mask & fpr_read_mask (insn2)) != 0)
5621                 return 1;
5622             }
5623           else
5624             {
5625               /* Read-after-write dependencies on the control registers
5626                  require a two-instruction gap.  */
5627               if ((pinfo1 & INSN_WRITE_COND_CODE)
5628                   && (pinfo2 & INSN_READ_COND_CODE))
5629                 return 2;
5630
5631               /* We don't know exactly what INSN1 does.  If INSN2 is
5632                  also a coprocessor instruction, assume there must be
5633                  a one instruction gap.  */
5634               if (pinfo2 & INSN_COP)
5635                 return 1;
5636             }
5637         }
5638
5639       /* Check for read-after-write dependencies on the coprocessor
5640          control registers in cases where INSN1 does not need a general
5641          coprocessor delay.  This means that INSN1 is a floating point
5642          comparison instruction.  */
5643       /* Itbl support may require additional care here.  */
5644       else if (!cop_interlocks
5645                && (pinfo1 & INSN_WRITE_COND_CODE)
5646                && (pinfo2 & INSN_READ_COND_CODE))
5647         return 1;
5648     }
5649
5650   return 0;
5651 }
5652
5653 /* Return the number of nops that would be needed to work around the
5654    VR4130 mflo/mfhi errata if instruction INSN immediately followed
5655    the MAX_VR4130_NOPS instructions described by HIST.  Ignore hazards
5656    that are contained within the first IGNORE instructions of HIST.  */
5657
5658 static int
5659 nops_for_vr4130 (int ignore, const struct mips_cl_insn *hist,
5660                  const struct mips_cl_insn *insn)
5661 {
5662   int i, j;
5663   unsigned int mask;
5664
5665   /* Check if the instruction writes to HI or LO.  MTHI and MTLO
5666      are not affected by the errata.  */
5667   if (insn != 0
5668       && ((insn->insn_mo->pinfo & (INSN_WRITE_HI | INSN_WRITE_LO)) == 0
5669           || strcmp (insn->insn_mo->name, "mtlo") == 0
5670           || strcmp (insn->insn_mo->name, "mthi") == 0))
5671     return 0;
5672
5673   /* Search for the first MFLO or MFHI.  */
5674   for (i = 0; i < MAX_VR4130_NOPS; i++)
5675     if (MF_HILO_INSN (hist[i].insn_mo->pinfo))
5676       {
5677         /* Extract the destination register.  */
5678         mask = gpr_write_mask (&hist[i]);
5679
5680         /* No nops are needed if INSN reads that register.  */
5681         if (insn != NULL && (gpr_read_mask (insn) & mask) != 0)
5682           return 0;
5683
5684         /* ...or if any of the intervening instructions do.  */
5685         for (j = 0; j < i; j++)
5686           if (gpr_read_mask (&hist[j]) & mask)
5687             return 0;
5688
5689         if (i >= ignore)
5690           return MAX_VR4130_NOPS - i;
5691       }
5692   return 0;
5693 }
5694
5695 #define BASE_REG_EQ(INSN1, INSN2)       \
5696   ((((INSN1) >> OP_SH_RS) & OP_MASK_RS) \
5697       == (((INSN2) >> OP_SH_RS) & OP_MASK_RS))
5698
5699 /* Return the minimum alignment for this store instruction.  */
5700
5701 static int
5702 fix_24k_align_to (const struct mips_opcode *mo)
5703 {
5704   if (strcmp (mo->name, "sh") == 0)
5705     return 2;
5706
5707   if (strcmp (mo->name, "swc1") == 0
5708       || strcmp (mo->name, "swc2") == 0
5709       || strcmp (mo->name, "sw") == 0
5710       || strcmp (mo->name, "sc") == 0
5711       || strcmp (mo->name, "s.s") == 0)
5712     return 4;
5713
5714   if (strcmp (mo->name, "sdc1") == 0
5715       || strcmp (mo->name, "sdc2") == 0
5716       || strcmp (mo->name, "s.d") == 0)
5717     return 8;
5718
5719   /* sb, swl, swr */
5720   return 1;
5721 }
5722
5723 struct fix_24k_store_info
5724   {
5725     /* Immediate offset, if any, for this store instruction.  */
5726     short off;
5727     /* Alignment required by this store instruction.  */
5728     int align_to;
5729     /* True for register offsets.  */
5730     int register_offset;
5731   };
5732
5733 /* Comparison function used by qsort.  */
5734
5735 static int
5736 fix_24k_sort (const void *a, const void *b)
5737 {
5738   const struct fix_24k_store_info *pos1 = a;
5739   const struct fix_24k_store_info *pos2 = b;
5740
5741   return (pos1->off - pos2->off);
5742 }
5743
5744 /* INSN is a store instruction.  Try to record the store information
5745    in STINFO.  Return false if the information isn't known.  */
5746
5747 static bfd_boolean
5748 fix_24k_record_store_info (struct fix_24k_store_info *stinfo,
5749                            const struct mips_cl_insn *insn)
5750 {
5751   /* The instruction must have a known offset.  */
5752   if (!insn->complete_p || !strstr (insn->insn_mo->args, "o("))
5753     return FALSE;
5754
5755   stinfo->off = (insn->insn_opcode >> OP_SH_IMMEDIATE) & OP_MASK_IMMEDIATE;
5756   stinfo->align_to = fix_24k_align_to (insn->insn_mo);
5757   return TRUE;
5758 }
5759
5760 /* Return the number of nops that would be needed to work around the 24k
5761    "lost data on stores during refill" errata if instruction INSN
5762    immediately followed the 2 instructions described by HIST.
5763    Ignore hazards that are contained within the first IGNORE
5764    instructions of HIST.
5765
5766    Problem: The FSB (fetch store buffer) acts as an intermediate buffer
5767    for the data cache refills and store data. The following describes
5768    the scenario where the store data could be lost.
5769
5770    * A data cache miss, due to either a load or a store, causing fill
5771      data to be supplied by the memory subsystem
5772    * The first three doublewords of fill data are returned and written
5773      into the cache
5774    * A sequence of four stores occurs in consecutive cycles around the
5775      final doubleword of the fill:
5776    * Store A
5777    * Store B
5778    * Store C
5779    * Zero, One or more instructions
5780    * Store D
5781
5782    The four stores A-D must be to different doublewords of the line that
5783    is being filled. The fourth instruction in the sequence above permits
5784    the fill of the final doubleword to be transferred from the FSB into
5785    the cache. In the sequence above, the stores may be either integer
5786    (sb, sh, sw, swr, swl, sc) or coprocessor (swc1/swc2, sdc1/sdc2,
5787    swxc1, sdxc1, suxc1) stores, as long as the four stores are to
5788    different doublewords on the line. If the floating point unit is
5789    running in 1:2 mode, it is not possible to create the sequence above
5790    using only floating point store instructions.
5791
5792    In this case, the cache line being filled is incorrectly marked
5793    invalid, thereby losing the data from any store to the line that
5794    occurs between the original miss and the completion of the five
5795    cycle sequence shown above.
5796
5797    The workarounds are:
5798
5799    * Run the data cache in write-through mode.
5800    * Insert a non-store instruction between
5801      Store A and Store B or Store B and Store C.  */
5802   
5803 static int
5804 nops_for_24k (int ignore, const struct mips_cl_insn *hist,
5805               const struct mips_cl_insn *insn)
5806 {
5807   struct fix_24k_store_info pos[3];
5808   int align, i, base_offset;
5809
5810   if (ignore >= 2)
5811     return 0;
5812
5813   /* If the previous instruction wasn't a store, there's nothing to
5814      worry about.  */
5815   if ((hist[0].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
5816     return 0;
5817
5818   /* If the instructions after the previous one are unknown, we have
5819      to assume the worst.  */
5820   if (!insn)
5821     return 1;
5822
5823   /* Check whether we are dealing with three consecutive stores.  */
5824   if ((insn->insn_mo->pinfo & INSN_STORE_MEMORY) == 0
5825       || (hist[1].insn_mo->pinfo & INSN_STORE_MEMORY) == 0)
5826     return 0;
5827
5828   /* If we don't know the relationship between the store addresses,
5829      assume the worst.  */
5830   if (!BASE_REG_EQ (insn->insn_opcode, hist[0].insn_opcode)
5831       || !BASE_REG_EQ (insn->insn_opcode, hist[1].insn_opcode))
5832     return 1;
5833
5834   if (!fix_24k_record_store_info (&pos[0], insn)
5835       || !fix_24k_record_store_info (&pos[1], &hist[0])
5836       || !fix_24k_record_store_info (&pos[2], &hist[1]))
5837     return 1;
5838
5839   qsort (&pos, 3, sizeof (struct fix_24k_store_info), fix_24k_sort);
5840
5841   /* Pick a value of ALIGN and X such that all offsets are adjusted by
5842      X bytes and such that the base register + X is known to be aligned
5843      to align bytes.  */
5844
5845   if (((insn->insn_opcode >> OP_SH_RS) & OP_MASK_RS) == SP)
5846     align = 8;
5847   else
5848     {
5849       align = pos[0].align_to;
5850       base_offset = pos[0].off;
5851       for (i = 1; i < 3; i++)
5852         if (align < pos[i].align_to)
5853           {
5854             align = pos[i].align_to;
5855             base_offset = pos[i].off;
5856           }
5857       for (i = 0; i < 3; i++)
5858         pos[i].off -= base_offset;
5859     }
5860
5861   pos[0].off &= ~align + 1;
5862   pos[1].off &= ~align + 1;
5863   pos[2].off &= ~align + 1;
5864
5865   /* If any two stores write to the same chunk, they also write to the
5866      same doubleword.  The offsets are still sorted at this point.  */
5867   if (pos[0].off == pos[1].off || pos[1].off == pos[2].off)
5868     return 0;
5869
5870   /* A range of at least 9 bytes is needed for the stores to be in
5871      non-overlapping doublewords.  */
5872   if (pos[2].off - pos[0].off <= 8)
5873     return 0;
5874
5875   if (pos[2].off - pos[1].off >= 24
5876       || pos[1].off - pos[0].off >= 24
5877       || pos[2].off - pos[0].off >= 32)
5878     return 0;
5879
5880   return 1;
5881 }
5882
5883 /* Return the number of nops that would be needed if instruction INSN
5884    immediately followed the MAX_NOPS instructions given by HIST,
5885    where HIST[0] is the most recent instruction.  Ignore hazards
5886    between INSN and the first IGNORE instructions in HIST.
5887
5888    If INSN is null, return the worse-case number of nops for any
5889    instruction.  */
5890
5891 static int
5892 nops_for_insn (int ignore, const struct mips_cl_insn *hist,
5893                const struct mips_cl_insn *insn)
5894 {
5895   int i, nops, tmp_nops;
5896
5897   nops = 0;
5898   for (i = ignore; i < MAX_DELAY_NOPS; i++)
5899     {
5900       tmp_nops = insns_between (hist + i, insn) - i;
5901       if (tmp_nops > nops)
5902         nops = tmp_nops;
5903     }
5904
5905   if (mips_fix_vr4130 && !mips_opts.micromips)
5906     {
5907       tmp_nops = nops_for_vr4130 (ignore, hist, insn);
5908       if (tmp_nops > nops)
5909         nops = tmp_nops;
5910     }
5911
5912   if (mips_fix_24k && !mips_opts.micromips)
5913     {
5914       tmp_nops = nops_for_24k (ignore, hist, insn);
5915       if (tmp_nops > nops)
5916         nops = tmp_nops;
5917     }
5918
5919   return nops;
5920 }
5921
5922 /* The variable arguments provide NUM_INSNS extra instructions that
5923    might be added to HIST.  Return the largest number of nops that
5924    would be needed after the extended sequence, ignoring hazards
5925    in the first IGNORE instructions.  */
5926
5927 static int
5928 nops_for_sequence (int num_insns, int ignore,
5929                    const struct mips_cl_insn *hist, ...)
5930 {
5931   va_list args;
5932   struct mips_cl_insn buffer[MAX_NOPS];
5933   struct mips_cl_insn *cursor;
5934   int nops;
5935
5936   va_start (args, hist);
5937   cursor = buffer + num_insns;
5938   memcpy (cursor, hist, (MAX_NOPS - num_insns) * sizeof (*cursor));
5939   while (cursor > buffer)
5940     *--cursor = *va_arg (args, const struct mips_cl_insn *);
5941
5942   nops = nops_for_insn (ignore, buffer, NULL);
5943   va_end (args);
5944   return nops;
5945 }
5946
5947 /* Like nops_for_insn, but if INSN is a branch, take into account the
5948    worst-case delay for the branch target.  */
5949
5950 static int
5951 nops_for_insn_or_target (int ignore, const struct mips_cl_insn *hist,
5952                          const struct mips_cl_insn *insn)
5953 {
5954   int nops, tmp_nops;
5955
5956   nops = nops_for_insn (ignore, hist, insn);
5957   if (delayed_branch_p (insn))
5958     {
5959       tmp_nops = nops_for_sequence (2, ignore ? ignore + 2 : 0,
5960                                     hist, insn, get_delay_slot_nop (insn));
5961       if (tmp_nops > nops)
5962         nops = tmp_nops;
5963     }
5964   else if (compact_branch_p (insn))
5965     {
5966       tmp_nops = nops_for_sequence (1, ignore ? ignore + 1 : 0, hist, insn);
5967       if (tmp_nops > nops)
5968         nops = tmp_nops;
5969     }
5970   return nops;
5971 }
5972
5973 /* Fix NOP issue: Replace nops by "or at,at,zero".  */
5974
5975 static void
5976 fix_loongson2f_nop (struct mips_cl_insn * ip)
5977 {
5978   gas_assert (!HAVE_CODE_COMPRESSION);
5979   if (strcmp (ip->insn_mo->name, "nop") == 0)
5980     ip->insn_opcode = LOONGSON2F_NOP_INSN;
5981 }
5982
5983 /* Fix Jump Issue: Eliminate instruction fetch from outside 256M region
5984                    jr target pc &= 'hffff_ffff_cfff_ffff.  */
5985
5986 static void
5987 fix_loongson2f_jump (struct mips_cl_insn * ip)
5988 {
5989   gas_assert (!HAVE_CODE_COMPRESSION);
5990   if (strcmp (ip->insn_mo->name, "j") == 0
5991       || strcmp (ip->insn_mo->name, "jr") == 0
5992       || strcmp (ip->insn_mo->name, "jalr") == 0)
5993     {
5994       int sreg;
5995       expressionS ep;
5996
5997       if (! mips_opts.at)
5998         return;
5999
6000       sreg = EXTRACT_OPERAND (0, RS, *ip);
6001       if (sreg == ZERO || sreg == KT0 || sreg == KT1 || sreg == ATREG)
6002         return;
6003
6004       ep.X_op = O_constant;
6005       ep.X_add_number = 0xcfff0000;
6006       macro_build (&ep, "lui", "t,u", ATREG, BFD_RELOC_HI16);
6007       ep.X_add_number = 0xffff;
6008       macro_build (&ep, "ori", "t,r,i", ATREG, ATREG, BFD_RELOC_LO16);
6009       macro_build (NULL, "and", "d,v,t", sreg, sreg, ATREG);
6010     }
6011 }
6012
6013 static void
6014 fix_loongson2f (struct mips_cl_insn * ip)
6015 {
6016   if (mips_fix_loongson2f_nop)
6017     fix_loongson2f_nop (ip);
6018
6019   if (mips_fix_loongson2f_jump)
6020     fix_loongson2f_jump (ip);
6021 }
6022
6023 /* IP is a branch that has a delay slot, and we need to fill it
6024    automatically.   Return true if we can do that by swapping IP
6025    with the previous instruction.
6026    ADDRESS_EXPR is an operand of the instruction to be used with
6027    RELOC_TYPE.  */
6028
6029 static bfd_boolean
6030 can_swap_branch_p (struct mips_cl_insn *ip, expressionS *address_expr,
6031                    bfd_reloc_code_real_type *reloc_type)
6032 {
6033   unsigned long pinfo, pinfo2, prev_pinfo, prev_pinfo2;
6034   unsigned int gpr_read, gpr_write, prev_gpr_read, prev_gpr_write;
6035
6036   /* -O2 and above is required for this optimization.  */
6037   if (mips_optimize < 2)
6038     return FALSE;
6039
6040   /* If we have seen .set volatile or .set nomove, don't optimize.  */
6041   if (mips_opts.nomove)
6042     return FALSE;
6043
6044   /* We can't swap if the previous instruction's position is fixed.  */
6045   if (history[0].fixed_p)
6046     return FALSE;
6047
6048   /* If the previous previous insn was in a .set noreorder, we can't
6049      swap.  Actually, the MIPS assembler will swap in this situation.
6050      However, gcc configured -with-gnu-as will generate code like
6051
6052         .set    noreorder
6053         lw      $4,XXX
6054         .set    reorder
6055         INSN
6056         bne     $4,$0,foo
6057
6058      in which we can not swap the bne and INSN.  If gcc is not configured
6059      -with-gnu-as, it does not output the .set pseudo-ops.  */
6060   if (history[1].noreorder_p)
6061     return FALSE;
6062
6063   /* If the previous instruction had a fixup in mips16 mode, we can not swap.
6064      This means that the previous instruction was a 4-byte one anyhow.  */
6065   if (mips_opts.mips16 && history[0].fixp[0])
6066     return FALSE;
6067
6068   /* If the branch is itself the target of a branch, we can not swap.
6069      We cheat on this; all we check for is whether there is a label on
6070      this instruction.  If there are any branches to anything other than
6071      a label, users must use .set noreorder.  */
6072   if (seg_info (now_seg)->label_list)
6073     return FALSE;
6074
6075   /* If the previous instruction is in a variant frag other than this
6076      branch's one, we cannot do the swap.  This does not apply to
6077      MIPS16 code, which uses variant frags for different purposes.  */
6078   if (!mips_opts.mips16
6079       && history[0].frag
6080       && history[0].frag->fr_type == rs_machine_dependent)
6081     return FALSE;
6082
6083   /* We do not swap with instructions that cannot architecturally
6084      be placed in a branch delay slot, such as SYNC or ERET.  We
6085      also refrain from swapping with a trap instruction, since it
6086      complicates trap handlers to have the trap instruction be in
6087      a delay slot.  */
6088   prev_pinfo = history[0].insn_mo->pinfo;
6089   if (prev_pinfo & INSN_NO_DELAY_SLOT)
6090     return FALSE;
6091
6092   /* Check for conflicts between the branch and the instructions
6093      before the candidate delay slot.  */
6094   if (nops_for_insn (0, history + 1, ip) > 0)
6095     return FALSE;
6096
6097   /* Check for conflicts between the swapped sequence and the
6098      target of the branch.  */
6099   if (nops_for_sequence (2, 0, history + 1, ip, history) > 0)
6100     return FALSE;
6101
6102   /* If the branch reads a register that the previous
6103      instruction sets, we can not swap.  */
6104   gpr_read = gpr_read_mask (ip);
6105   prev_gpr_write = gpr_write_mask (&history[0]);
6106   if (gpr_read & prev_gpr_write)
6107     return FALSE;
6108
6109   /* If the branch writes a register that the previous
6110      instruction sets, we can not swap.  */
6111   gpr_write = gpr_write_mask (ip);
6112   if (gpr_write & prev_gpr_write)
6113     return FALSE;
6114
6115   /* If the branch writes a register that the previous
6116      instruction reads, we can not swap.  */
6117   prev_gpr_read = gpr_read_mask (&history[0]);
6118   if (gpr_write & prev_gpr_read)
6119     return FALSE;
6120
6121   /* If one instruction sets a condition code and the
6122      other one uses a condition code, we can not swap.  */
6123   pinfo = ip->insn_mo->pinfo;
6124   if ((pinfo & INSN_READ_COND_CODE)
6125       && (prev_pinfo & INSN_WRITE_COND_CODE))
6126     return FALSE;
6127   if ((pinfo & INSN_WRITE_COND_CODE)
6128       && (prev_pinfo & INSN_READ_COND_CODE))
6129     return FALSE;
6130
6131   /* If the previous instruction uses the PC, we can not swap.  */
6132   prev_pinfo2 = history[0].insn_mo->pinfo2;
6133   if (prev_pinfo2 & INSN2_READ_PC)
6134     return FALSE;
6135
6136   /* If the previous instruction has an incorrect size for a fixed
6137      branch delay slot in microMIPS mode, we cannot swap.  */
6138   pinfo2 = ip->insn_mo->pinfo2;
6139   if (mips_opts.micromips
6140       && (pinfo2 & INSN2_BRANCH_DELAY_16BIT)
6141       && insn_length (history) != 2)
6142     return FALSE;
6143   if (mips_opts.micromips
6144       && (pinfo2 & INSN2_BRANCH_DELAY_32BIT)
6145       && insn_length (history) != 4)
6146     return FALSE;
6147
6148   /* On R5900 short loops need to be fixed by inserting a nop in
6149      the branch delay slots.
6150      A short loop can be terminated too early.  */
6151   if (mips_opts.arch == CPU_R5900
6152       /* Check if instruction has a parameter, ignore "j $31". */
6153       && (address_expr != NULL)
6154       /* Parameter must be 16 bit. */
6155       && (*reloc_type == BFD_RELOC_16_PCREL_S2)
6156       /* Branch to same segment. */
6157       && (S_GET_SEGMENT(address_expr->X_add_symbol) == now_seg)
6158       /* Branch to same code fragment. */
6159       && (symbol_get_frag(address_expr->X_add_symbol) == frag_now)
6160       /* Can only calculate branch offset if value is known. */
6161       && symbol_constant_p(address_expr->X_add_symbol)
6162       /* Check if branch is really conditional. */
6163       && !((ip->insn_opcode & 0xffff0000) == 0x10000000   /* beq $0,$0 */
6164         || (ip->insn_opcode & 0xffff0000) == 0x04010000   /* bgez $0 */
6165         || (ip->insn_opcode & 0xffff0000) == 0x04110000)) /* bgezal $0 */
6166     {
6167       int distance;
6168       /* Check if loop is shorter than 6 instructions including
6169          branch and delay slot.  */
6170       distance = frag_now_fix() - S_GET_VALUE(address_expr->X_add_symbol);
6171       if (distance <= 20)
6172         {
6173           int i;
6174           int rv;
6175
6176           rv = FALSE;
6177           /* When the loop includes branches or jumps,
6178              it is not a short loop. */
6179           for (i = 0; i < (distance / 4); i++)
6180             {
6181               if ((history[i].cleared_p)
6182                   || delayed_branch_p(&history[i]))
6183                 {
6184                   rv = TRUE;
6185                   break;
6186                 }
6187             }
6188           if (rv == FALSE)
6189             {
6190               /* Insert nop after branch to fix short loop. */
6191               return FALSE;
6192             }
6193         }
6194     }
6195
6196   return TRUE;
6197 }
6198
6199 /* Decide how we should add IP to the instruction stream.
6200    ADDRESS_EXPR is an operand of the instruction to be used with
6201    RELOC_TYPE.  */
6202
6203 static enum append_method
6204 get_append_method (struct mips_cl_insn *ip, expressionS *address_expr,
6205                    bfd_reloc_code_real_type *reloc_type)
6206 {
6207   /* The relaxed version of a macro sequence must be inherently
6208      hazard-free.  */
6209   if (mips_relax.sequence == 2)
6210     return APPEND_ADD;
6211
6212   /* We must not dabble with instructions in a ".set norerorder" block.  */
6213   if (mips_opts.noreorder)
6214     return APPEND_ADD;
6215
6216   /* Otherwise, it's our responsibility to fill branch delay slots.  */
6217   if (delayed_branch_p (ip))
6218     {
6219       if (!branch_likely_p (ip)
6220           && can_swap_branch_p (ip, address_expr, reloc_type))
6221         return APPEND_SWAP;
6222
6223       if (mips_opts.mips16
6224           && ISA_SUPPORTS_MIPS16E
6225           && gpr_read_mask (ip) != 0)
6226         return APPEND_ADD_COMPACT;
6227
6228       return APPEND_ADD_WITH_NOP;
6229     }
6230
6231   return APPEND_ADD;
6232 }
6233
6234 /* IP is a MIPS16 instruction whose opcode we have just changed.
6235    Point IP->insn_mo to the new opcode's definition.  */
6236
6237 static void
6238 find_altered_mips16_opcode (struct mips_cl_insn *ip)
6239 {
6240   const struct mips_opcode *mo, *end;
6241
6242   end = &mips16_opcodes[bfd_mips16_num_opcodes];
6243   for (mo = ip->insn_mo; mo < end; mo++)
6244     if ((ip->insn_opcode & mo->mask) == mo->match)
6245       {
6246         ip->insn_mo = mo;
6247         return;
6248       }
6249   abort ();
6250 }
6251
6252 /* For microMIPS macros, we need to generate a local number label
6253    as the target of branches.  */
6254 #define MICROMIPS_LABEL_CHAR            '\037'
6255 static unsigned long micromips_target_label;
6256 static char micromips_target_name[32];
6257
6258 static char *
6259 micromips_label_name (void)
6260 {
6261   char *p = micromips_target_name;
6262   char symbol_name_temporary[24];
6263   unsigned long l;
6264   int i;
6265
6266   if (*p)
6267     return p;
6268
6269   i = 0;
6270   l = micromips_target_label;
6271 #ifdef LOCAL_LABEL_PREFIX
6272   *p++ = LOCAL_LABEL_PREFIX;
6273 #endif
6274   *p++ = 'L';
6275   *p++ = MICROMIPS_LABEL_CHAR;
6276   do
6277     {
6278       symbol_name_temporary[i++] = l % 10 + '0';
6279       l /= 10;
6280     }
6281   while (l != 0);
6282   while (i > 0)
6283     *p++ = symbol_name_temporary[--i];
6284   *p = '\0';
6285
6286   return micromips_target_name;
6287 }
6288
6289 static void
6290 micromips_label_expr (expressionS *label_expr)
6291 {
6292   label_expr->X_op = O_symbol;
6293   label_expr->X_add_symbol = symbol_find_or_make (micromips_label_name ());
6294   label_expr->X_add_number = 0;
6295 }
6296
6297 static void
6298 micromips_label_inc (void)
6299 {
6300   micromips_target_label++;
6301   *micromips_target_name = '\0';
6302 }
6303
6304 static void
6305 micromips_add_label (void)
6306 {
6307   symbolS *s;
6308
6309   s = colon (micromips_label_name ());
6310   micromips_label_inc ();
6311   S_SET_OTHER (s, ELF_ST_SET_MICROMIPS (S_GET_OTHER (s)));
6312 }
6313
6314 /* If assembling microMIPS code, then return the microMIPS reloc
6315    corresponding to the requested one if any.  Otherwise return
6316    the reloc unchanged.  */
6317
6318 static bfd_reloc_code_real_type
6319 micromips_map_reloc (bfd_reloc_code_real_type reloc)
6320 {
6321   static const bfd_reloc_code_real_type relocs[][2] =
6322     {
6323       /* Keep sorted incrementally by the left-hand key.  */
6324       { BFD_RELOC_16_PCREL_S2, BFD_RELOC_MICROMIPS_16_PCREL_S1 },
6325       { BFD_RELOC_GPREL16, BFD_RELOC_MICROMIPS_GPREL16 },
6326       { BFD_RELOC_MIPS_JMP, BFD_RELOC_MICROMIPS_JMP },
6327       { BFD_RELOC_HI16, BFD_RELOC_MICROMIPS_HI16 },
6328       { BFD_RELOC_HI16_S, BFD_RELOC_MICROMIPS_HI16_S },
6329       { BFD_RELOC_LO16, BFD_RELOC_MICROMIPS_LO16 },
6330       { BFD_RELOC_MIPS_LITERAL, BFD_RELOC_MICROMIPS_LITERAL },
6331       { BFD_RELOC_MIPS_GOT16, BFD_RELOC_MICROMIPS_GOT16 },
6332       { BFD_RELOC_MIPS_CALL16, BFD_RELOC_MICROMIPS_CALL16 },
6333       { BFD_RELOC_MIPS_GOT_HI16, BFD_RELOC_MICROMIPS_GOT_HI16 },
6334       { BFD_RELOC_MIPS_GOT_LO16, BFD_RELOC_MICROMIPS_GOT_LO16 },
6335       { BFD_RELOC_MIPS_CALL_HI16, BFD_RELOC_MICROMIPS_CALL_HI16 },
6336       { BFD_RELOC_MIPS_CALL_LO16, BFD_RELOC_MICROMIPS_CALL_LO16 },
6337       { BFD_RELOC_MIPS_SUB, BFD_RELOC_MICROMIPS_SUB },
6338       { BFD_RELOC_MIPS_GOT_PAGE, BFD_RELOC_MICROMIPS_GOT_PAGE },
6339       { BFD_RELOC_MIPS_GOT_OFST, BFD_RELOC_MICROMIPS_GOT_OFST },
6340       { BFD_RELOC_MIPS_GOT_DISP, BFD_RELOC_MICROMIPS_GOT_DISP },
6341       { BFD_RELOC_MIPS_HIGHEST, BFD_RELOC_MICROMIPS_HIGHEST },
6342       { BFD_RELOC_MIPS_HIGHER, BFD_RELOC_MICROMIPS_HIGHER },
6343       { BFD_RELOC_MIPS_SCN_DISP, BFD_RELOC_MICROMIPS_SCN_DISP },
6344       { BFD_RELOC_MIPS_TLS_GD, BFD_RELOC_MICROMIPS_TLS_GD },
6345       { BFD_RELOC_MIPS_TLS_LDM, BFD_RELOC_MICROMIPS_TLS_LDM },
6346       { BFD_RELOC_MIPS_TLS_DTPREL_HI16, BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16 },
6347       { BFD_RELOC_MIPS_TLS_DTPREL_LO16, BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16 },
6348       { BFD_RELOC_MIPS_TLS_GOTTPREL, BFD_RELOC_MICROMIPS_TLS_GOTTPREL },
6349       { BFD_RELOC_MIPS_TLS_TPREL_HI16, BFD_RELOC_MICROMIPS_TLS_TPREL_HI16 },
6350       { BFD_RELOC_MIPS_TLS_TPREL_LO16, BFD_RELOC_MICROMIPS_TLS_TPREL_LO16 }
6351     };
6352   bfd_reloc_code_real_type r;
6353   size_t i;
6354
6355   if (!mips_opts.micromips)
6356     return reloc;
6357   for (i = 0; i < ARRAY_SIZE (relocs); i++)
6358     {
6359       r = relocs[i][0];
6360       if (r > reloc)
6361         return reloc;
6362       if (r == reloc)
6363         return relocs[i][1];
6364     }
6365   return reloc;
6366 }
6367
6368 /* Try to resolve relocation RELOC against constant OPERAND at assembly time.
6369    Return true on success, storing the resolved value in RESULT.  */
6370
6371 static bfd_boolean
6372 calculate_reloc (bfd_reloc_code_real_type reloc, offsetT operand,
6373                  offsetT *result)
6374 {
6375   switch (reloc)
6376     {
6377     case BFD_RELOC_MIPS_HIGHEST:
6378     case BFD_RELOC_MICROMIPS_HIGHEST:
6379       *result = ((operand + 0x800080008000ull) >> 48) & 0xffff;
6380       return TRUE;
6381
6382     case BFD_RELOC_MIPS_HIGHER:
6383     case BFD_RELOC_MICROMIPS_HIGHER:
6384       *result = ((operand + 0x80008000ull) >> 32) & 0xffff;
6385       return TRUE;
6386
6387     case BFD_RELOC_HI16_S:
6388     case BFD_RELOC_MICROMIPS_HI16_S:
6389     case BFD_RELOC_MIPS16_HI16_S:
6390       *result = ((operand + 0x8000) >> 16) & 0xffff;
6391       return TRUE;
6392
6393     case BFD_RELOC_HI16:
6394     case BFD_RELOC_MICROMIPS_HI16:
6395     case BFD_RELOC_MIPS16_HI16:
6396       *result = (operand >> 16) & 0xffff;
6397       return TRUE;
6398
6399     case BFD_RELOC_LO16:
6400     case BFD_RELOC_MICROMIPS_LO16:
6401     case BFD_RELOC_MIPS16_LO16:
6402       *result = operand & 0xffff;
6403       return TRUE;
6404
6405     case BFD_RELOC_UNUSED:
6406       *result = operand;
6407       return TRUE;
6408
6409     default:
6410       return FALSE;
6411     }
6412 }
6413
6414 /* Output an instruction.  IP is the instruction information.
6415    ADDRESS_EXPR is an operand of the instruction to be used with
6416    RELOC_TYPE.  EXPANSIONP is true if the instruction is part of
6417    a macro expansion.  */
6418
6419 static void
6420 append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
6421              bfd_reloc_code_real_type *reloc_type, bfd_boolean expansionp)
6422 {
6423   unsigned long prev_pinfo2, pinfo;
6424   bfd_boolean relaxed_branch = FALSE;
6425   enum append_method method;
6426   bfd_boolean relax32;
6427   int branch_disp;
6428
6429   if (mips_fix_loongson2f && !HAVE_CODE_COMPRESSION)
6430     fix_loongson2f (ip);
6431
6432   file_ase_mips16 |= mips_opts.mips16;
6433   file_ase_micromips |= mips_opts.micromips;
6434
6435   prev_pinfo2 = history[0].insn_mo->pinfo2;
6436   pinfo = ip->insn_mo->pinfo;
6437
6438   if (mips_opts.micromips
6439       && !expansionp
6440       && (((prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0
6441            && micromips_insn_length (ip->insn_mo) != 2)
6442           || ((prev_pinfo2 & INSN2_BRANCH_DELAY_32BIT) != 0
6443               && micromips_insn_length (ip->insn_mo) != 4)))
6444     as_warn (_("Wrong size instruction in a %u-bit branch delay slot"),
6445              (prev_pinfo2 & INSN2_BRANCH_DELAY_16BIT) != 0 ? 16 : 32);
6446
6447   if (address_expr == NULL)
6448     ip->complete_p = 1;
6449   else if (reloc_type[0] <= BFD_RELOC_UNUSED
6450            && reloc_type[1] == BFD_RELOC_UNUSED
6451            && reloc_type[2] == BFD_RELOC_UNUSED
6452            && address_expr->X_op == O_constant)
6453     {
6454       switch (*reloc_type)
6455         {
6456         case BFD_RELOC_MIPS_JMP:
6457           {
6458             int shift;
6459
6460             shift = mips_opts.micromips ? 1 : 2;
6461             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
6462               as_bad (_("jump to misaligned address (0x%lx)"),
6463                       (unsigned long) address_expr->X_add_number);
6464             ip->insn_opcode |= ((address_expr->X_add_number >> shift)
6465                                 & 0x3ffffff);
6466             ip->complete_p = 1;
6467           }
6468           break;
6469
6470         case BFD_RELOC_MIPS16_JMP:
6471           if ((address_expr->X_add_number & 3) != 0)
6472             as_bad (_("jump to misaligned address (0x%lx)"),
6473                     (unsigned long) address_expr->X_add_number);
6474           ip->insn_opcode |=
6475             (((address_expr->X_add_number & 0x7c0000) << 3)
6476                | ((address_expr->X_add_number & 0xf800000) >> 7)
6477                | ((address_expr->X_add_number & 0x3fffc) >> 2));
6478           ip->complete_p = 1;
6479           break;
6480
6481         case BFD_RELOC_16_PCREL_S2:
6482           {
6483             int shift;
6484
6485             shift = mips_opts.micromips ? 1 : 2;
6486             if ((address_expr->X_add_number & ((1 << shift) - 1)) != 0)
6487               as_bad (_("branch to misaligned address (0x%lx)"),
6488                       (unsigned long) address_expr->X_add_number);
6489             if (!mips_relax_branch)
6490               {
6491                 if ((address_expr->X_add_number + (1 << (shift + 15)))
6492                     & ~((1 << (shift + 16)) - 1))
6493                   as_bad (_("branch address range overflow (0x%lx)"),
6494                           (unsigned long) address_expr->X_add_number);
6495                 ip->insn_opcode |= ((address_expr->X_add_number >> shift)
6496                                     & 0xffff);
6497               }
6498           }
6499           break;
6500
6501         default:
6502           {
6503             offsetT value;
6504
6505             if (calculate_reloc (*reloc_type, address_expr->X_add_number,
6506                                  &value))
6507               {
6508                 ip->insn_opcode |= value & 0xffff;
6509                 ip->complete_p = 1;
6510               }
6511           }
6512           break;
6513         }
6514     }
6515
6516   if (mips_relax.sequence != 2 && !mips_opts.noreorder)
6517     {
6518       /* There are a lot of optimizations we could do that we don't.
6519          In particular, we do not, in general, reorder instructions.
6520          If you use gcc with optimization, it will reorder
6521          instructions and generally do much more optimization then we
6522          do here; repeating all that work in the assembler would only
6523          benefit hand written assembly code, and does not seem worth
6524          it.  */
6525       int nops = (mips_optimize == 0
6526                   ? nops_for_insn (0, history, NULL)
6527                   : nops_for_insn_or_target (0, history, ip));
6528       if (nops > 0)
6529         {
6530           fragS *old_frag;
6531           unsigned long old_frag_offset;
6532           int i;
6533
6534           old_frag = frag_now;
6535           old_frag_offset = frag_now_fix ();
6536
6537           for (i = 0; i < nops; i++)
6538             add_fixed_insn (NOP_INSN);
6539           insert_into_history (0, nops, NOP_INSN);
6540
6541           if (listing)
6542             {
6543               listing_prev_line ();
6544               /* We may be at the start of a variant frag.  In case we
6545                  are, make sure there is enough space for the frag
6546                  after the frags created by listing_prev_line.  The
6547                  argument to frag_grow here must be at least as large
6548                  as the argument to all other calls to frag_grow in
6549                  this file.  We don't have to worry about being in the
6550                  middle of a variant frag, because the variants insert
6551                  all needed nop instructions themselves.  */
6552               frag_grow (40);
6553             }
6554
6555           mips_move_text_labels ();
6556
6557 #ifndef NO_ECOFF_DEBUGGING
6558           if (ECOFF_DEBUGGING)
6559             ecoff_fix_loc (old_frag, old_frag_offset);
6560 #endif
6561         }
6562     }
6563   else if (mips_relax.sequence != 2 && prev_nop_frag != NULL)
6564     {
6565       int nops;
6566
6567       /* Work out how many nops in prev_nop_frag are needed by IP,
6568          ignoring hazards generated by the first prev_nop_frag_since
6569          instructions.  */
6570       nops = nops_for_insn_or_target (prev_nop_frag_since, history, ip);
6571       gas_assert (nops <= prev_nop_frag_holds);
6572
6573       /* Enforce NOPS as a minimum.  */
6574       if (nops > prev_nop_frag_required)
6575         prev_nop_frag_required = nops;
6576
6577       if (prev_nop_frag_holds == prev_nop_frag_required)
6578         {
6579           /* Settle for the current number of nops.  Update the history
6580              accordingly (for the benefit of any future .set reorder code).  */
6581           prev_nop_frag = NULL;
6582           insert_into_history (prev_nop_frag_since,
6583                                prev_nop_frag_holds, NOP_INSN);
6584         }
6585       else
6586         {
6587           /* Allow this instruction to replace one of the nops that was
6588              tentatively added to prev_nop_frag.  */
6589           prev_nop_frag->fr_fix -= NOP_INSN_SIZE;
6590           prev_nop_frag_holds--;
6591           prev_nop_frag_since++;
6592         }
6593     }
6594
6595   method = get_append_method (ip, address_expr, reloc_type);
6596   branch_disp = method == APPEND_SWAP ? insn_length (history) : 0;
6597
6598   dwarf2_emit_insn (0);
6599   /* We want MIPS16 and microMIPS debug info to use ISA-encoded addresses,
6600      so "move" the instruction address accordingly.
6601
6602      Also, it doesn't seem appropriate for the assembler to reorder .loc
6603      entries.  If this instruction is a branch that we are going to swap
6604      with the previous instruction, the two instructions should be
6605      treated as a unit, and the debug information for both instructions
6606      should refer to the start of the branch sequence.  Using the
6607      current position is certainly wrong when swapping a 32-bit branch
6608      and a 16-bit delay slot, since the current position would then be
6609      in the middle of a branch.  */
6610   dwarf2_move_insn ((HAVE_CODE_COMPRESSION ? 1 : 0) - branch_disp);
6611
6612   relax32 = (mips_relax_branch
6613              /* Don't try branch relaxation within .set nomacro, or within
6614                 .set noat if we use $at for PIC computations.  If it turns
6615                 out that the branch was out-of-range, we'll get an error.  */
6616              && !mips_opts.warn_about_macros
6617              && (mips_opts.at || mips_pic == NO_PIC)
6618              /* Don't relax BPOSGE32/64 or BC1ANY2T/F and BC1ANY4T/F
6619                 as they have no complementing branches.  */
6620              && !(ip->insn_mo->ase & (ASE_MIPS3D | ASE_DSP64 | ASE_DSP)));
6621
6622   if (!HAVE_CODE_COMPRESSION
6623       && address_expr
6624       && relax32
6625       && *reloc_type == BFD_RELOC_16_PCREL_S2
6626       && delayed_branch_p (ip))
6627     {
6628       relaxed_branch = TRUE;
6629       add_relaxed_insn (ip, (relaxed_branch_length
6630                              (NULL, NULL,
6631                               uncond_branch_p (ip) ? -1
6632                               : branch_likely_p (ip) ? 1
6633                               : 0)), 4,
6634                         RELAX_BRANCH_ENCODE
6635                         (AT,
6636                          uncond_branch_p (ip),
6637                          branch_likely_p (ip),
6638                          pinfo & INSN_WRITE_GPR_31,
6639                          0),
6640                         address_expr->X_add_symbol,
6641                         address_expr->X_add_number);
6642       *reloc_type = BFD_RELOC_UNUSED;
6643     }
6644   else if (mips_opts.micromips
6645            && address_expr
6646            && ((relax32 && *reloc_type == BFD_RELOC_16_PCREL_S2)
6647                || *reloc_type > BFD_RELOC_UNUSED)
6648            && (delayed_branch_p (ip) || compact_branch_p (ip))
6649            /* Don't try branch relaxation when users specify
6650               16-bit/32-bit instructions.  */
6651            && !forced_insn_length)
6652     {
6653       bfd_boolean relax16 = *reloc_type > BFD_RELOC_UNUSED;
6654       int type = relax16 ? *reloc_type - BFD_RELOC_UNUSED : 0;
6655       int uncond = uncond_branch_p (ip) ? -1 : 0;
6656       int compact = compact_branch_p (ip);
6657       int al = pinfo & INSN_WRITE_GPR_31;
6658       int length32;
6659
6660       gas_assert (address_expr != NULL);
6661       gas_assert (!mips_relax.sequence);
6662
6663       relaxed_branch = TRUE;
6664       length32 = relaxed_micromips_32bit_branch_length (NULL, NULL, uncond);
6665       add_relaxed_insn (ip, relax32 ? length32 : 4, relax16 ? 2 : 4,
6666                         RELAX_MICROMIPS_ENCODE (type, AT, uncond, compact, al,
6667                                                 relax32, 0, 0),
6668                         address_expr->X_add_symbol,
6669                         address_expr->X_add_number);
6670       *reloc_type = BFD_RELOC_UNUSED;
6671     }
6672   else if (mips_opts.mips16 && *reloc_type > BFD_RELOC_UNUSED)
6673     {
6674       /* We need to set up a variant frag.  */
6675       gas_assert (address_expr != NULL);
6676       add_relaxed_insn (ip, 4, 0,
6677                         RELAX_MIPS16_ENCODE
6678                         (*reloc_type - BFD_RELOC_UNUSED,
6679                          forced_insn_length == 2, forced_insn_length == 4,
6680                          delayed_branch_p (&history[0]),
6681                          history[0].mips16_absolute_jump_p),
6682                         make_expr_symbol (address_expr), 0);
6683     }
6684   else if (mips_opts.mips16 && insn_length (ip) == 2)
6685     {
6686       if (!delayed_branch_p (ip))
6687         /* Make sure there is enough room to swap this instruction with
6688            a following jump instruction.  */
6689         frag_grow (6);
6690       add_fixed_insn (ip);
6691     }
6692   else
6693     {
6694       if (mips_opts.mips16
6695           && mips_opts.noreorder
6696           && delayed_branch_p (&history[0]))
6697         as_warn (_("extended instruction in delay slot"));
6698
6699       if (mips_relax.sequence)
6700         {
6701           /* If we've reached the end of this frag, turn it into a variant
6702              frag and record the information for the instructions we've
6703              written so far.  */
6704           if (frag_room () < 4)
6705             relax_close_frag ();
6706           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (ip);
6707         }
6708
6709       if (mips_relax.sequence != 2)
6710         {
6711           if (mips_macro_warning.first_insn_sizes[0] == 0)
6712             mips_macro_warning.first_insn_sizes[0] = insn_length (ip);
6713           mips_macro_warning.sizes[0] += insn_length (ip);
6714           mips_macro_warning.insns[0]++;
6715         }
6716       if (mips_relax.sequence != 1)
6717         {
6718           if (mips_macro_warning.first_insn_sizes[1] == 0)
6719             mips_macro_warning.first_insn_sizes[1] = insn_length (ip);
6720           mips_macro_warning.sizes[1] += insn_length (ip);
6721           mips_macro_warning.insns[1]++;
6722         }
6723
6724       if (mips_opts.mips16)
6725         {
6726           ip->fixed_p = 1;
6727           ip->mips16_absolute_jump_p = (*reloc_type == BFD_RELOC_MIPS16_JMP);
6728         }
6729       add_fixed_insn (ip);
6730     }
6731
6732   if (!ip->complete_p && *reloc_type < BFD_RELOC_UNUSED)
6733     {
6734       bfd_reloc_code_real_type final_type[3];
6735       reloc_howto_type *howto0;
6736       reloc_howto_type *howto;
6737       int i;
6738
6739       /* Perform any necessary conversion to microMIPS relocations
6740          and find out how many relocations there actually are.  */
6741       for (i = 0; i < 3 && reloc_type[i] != BFD_RELOC_UNUSED; i++)
6742         final_type[i] = micromips_map_reloc (reloc_type[i]);
6743
6744       /* In a compound relocation, it is the final (outermost)
6745          operator that determines the relocated field.  */
6746       howto = howto0 = bfd_reloc_type_lookup (stdoutput, final_type[i - 1]);
6747       if (!howto)
6748         abort ();
6749
6750       if (i > 1)
6751         howto0 = bfd_reloc_type_lookup (stdoutput, final_type[0]);
6752       ip->fixp[0] = fix_new_exp (ip->frag, ip->where,
6753                                  bfd_get_reloc_size (howto),
6754                                  address_expr,
6755                                  howto0 && howto0->pc_relative,
6756                                  final_type[0]);
6757
6758       /* Tag symbols that have a R_MIPS16_26 relocation against them.  */
6759       if (final_type[0] == BFD_RELOC_MIPS16_JMP && ip->fixp[0]->fx_addsy)
6760         *symbol_get_tc (ip->fixp[0]->fx_addsy) = 1;
6761
6762       /* These relocations can have an addend that won't fit in
6763          4 octets for 64bit assembly.  */
6764       if (HAVE_64BIT_GPRS
6765           && ! howto->partial_inplace
6766           && (reloc_type[0] == BFD_RELOC_16
6767               || reloc_type[0] == BFD_RELOC_32
6768               || reloc_type[0] == BFD_RELOC_MIPS_JMP
6769               || reloc_type[0] == BFD_RELOC_GPREL16
6770               || reloc_type[0] == BFD_RELOC_MIPS_LITERAL
6771               || reloc_type[0] == BFD_RELOC_GPREL32
6772               || reloc_type[0] == BFD_RELOC_64
6773               || reloc_type[0] == BFD_RELOC_CTOR
6774               || reloc_type[0] == BFD_RELOC_MIPS_SUB
6775               || reloc_type[0] == BFD_RELOC_MIPS_HIGHEST
6776               || reloc_type[0] == BFD_RELOC_MIPS_HIGHER
6777               || reloc_type[0] == BFD_RELOC_MIPS_SCN_DISP
6778               || reloc_type[0] == BFD_RELOC_MIPS_REL16
6779               || reloc_type[0] == BFD_RELOC_MIPS_RELGOT
6780               || reloc_type[0] == BFD_RELOC_MIPS16_GPREL
6781               || hi16_reloc_p (reloc_type[0])
6782               || lo16_reloc_p (reloc_type[0])))
6783         ip->fixp[0]->fx_no_overflow = 1;
6784
6785       /* These relocations can have an addend that won't fit in 2 octets.  */
6786       if (reloc_type[0] == BFD_RELOC_MICROMIPS_7_PCREL_S1
6787           || reloc_type[0] == BFD_RELOC_MICROMIPS_10_PCREL_S1)
6788         ip->fixp[0]->fx_no_overflow = 1;
6789
6790       if (mips_relax.sequence)
6791         {
6792           if (mips_relax.first_fixup == 0)
6793             mips_relax.first_fixup = ip->fixp[0];
6794         }
6795       else if (reloc_needs_lo_p (*reloc_type))
6796         {
6797           struct mips_hi_fixup *hi_fixup;
6798
6799           /* Reuse the last entry if it already has a matching %lo.  */
6800           hi_fixup = mips_hi_fixup_list;
6801           if (hi_fixup == 0
6802               || !fixup_has_matching_lo_p (hi_fixup->fixp))
6803             {
6804               hi_fixup = ((struct mips_hi_fixup *)
6805                           xmalloc (sizeof (struct mips_hi_fixup)));
6806               hi_fixup->next = mips_hi_fixup_list;
6807               mips_hi_fixup_list = hi_fixup;
6808             }
6809           hi_fixup->fixp = ip->fixp[0];
6810           hi_fixup->seg = now_seg;
6811         }
6812
6813       /* Add fixups for the second and third relocations, if given.
6814          Note that the ABI allows the second relocation to be
6815          against RSS_UNDEF, RSS_GP, RSS_GP0 or RSS_LOC.  At the
6816          moment we only use RSS_UNDEF, but we could add support
6817          for the others if it ever becomes necessary.  */
6818       for (i = 1; i < 3; i++)
6819         if (reloc_type[i] != BFD_RELOC_UNUSED)
6820           {
6821             ip->fixp[i] = fix_new (ip->frag, ip->where,
6822                                    ip->fixp[0]->fx_size, NULL, 0,
6823                                    FALSE, final_type[i]);
6824
6825             /* Use fx_tcbit to mark compound relocs.  */
6826             ip->fixp[0]->fx_tcbit = 1;
6827             ip->fixp[i]->fx_tcbit = 1;
6828           }
6829     }
6830   install_insn (ip);
6831
6832   /* Update the register mask information.  */
6833   mips_gprmask |= gpr_read_mask (ip) | gpr_write_mask (ip);
6834   mips_cprmask[1] |= fpr_read_mask (ip) | fpr_write_mask (ip);
6835
6836   switch (method)
6837     {
6838     case APPEND_ADD:
6839       insert_into_history (0, 1, ip);
6840       break;
6841
6842     case APPEND_ADD_WITH_NOP:
6843       {
6844         struct mips_cl_insn *nop;
6845
6846         insert_into_history (0, 1, ip);
6847         nop = get_delay_slot_nop (ip);
6848         add_fixed_insn (nop);
6849         insert_into_history (0, 1, nop);
6850         if (mips_relax.sequence)
6851           mips_relax.sizes[mips_relax.sequence - 1] += insn_length (nop);
6852       }
6853       break;
6854
6855     case APPEND_ADD_COMPACT:
6856       /* Convert MIPS16 jr/jalr into a "compact" jump.  */
6857       gas_assert (mips_opts.mips16);
6858       ip->insn_opcode |= 0x0080;
6859       find_altered_mips16_opcode (ip);
6860       install_insn (ip);
6861       insert_into_history (0, 1, ip);
6862       break;
6863
6864     case APPEND_SWAP:
6865       {
6866         struct mips_cl_insn delay = history[0];
6867         if (mips_opts.mips16)
6868           {
6869             know (delay.frag == ip->frag);
6870             move_insn (ip, delay.frag, delay.where);
6871             move_insn (&delay, ip->frag, ip->where + insn_length (ip));
6872           }
6873         else if (relaxed_branch || delay.frag != ip->frag)
6874           {
6875             /* Add the delay slot instruction to the end of the
6876                current frag and shrink the fixed part of the
6877                original frag.  If the branch occupies the tail of
6878                the latter, move it backwards to cover the gap.  */
6879             delay.frag->fr_fix -= branch_disp;
6880             if (delay.frag == ip->frag)
6881               move_insn (ip, ip->frag, ip->where - branch_disp);
6882             add_fixed_insn (&delay);
6883           }
6884         else
6885           {
6886             move_insn (&delay, ip->frag,
6887                        ip->where - branch_disp + insn_length (ip));
6888             move_insn (ip, history[0].frag, history[0].where);
6889           }
6890         history[0] = *ip;
6891         delay.fixed_p = 1;
6892         insert_into_history (0, 1, &delay);
6893       }
6894       break;
6895     }
6896
6897   /* If we have just completed an unconditional branch, clear the history.  */
6898   if ((delayed_branch_p (&history[1]) && uncond_branch_p (&history[1]))
6899       || (compact_branch_p (&history[0]) && uncond_branch_p (&history[0])))
6900     {
6901       unsigned int i;
6902
6903       mips_no_prev_insn ();
6904
6905       for (i = 0; i < ARRAY_SIZE (history); i++)
6906         history[i].cleared_p = 1;
6907     }
6908
6909   /* We need to emit a label at the end of branch-likely macros.  */
6910   if (emit_branch_likely_macro)
6911     {
6912       emit_branch_likely_macro = FALSE;
6913       micromips_add_label ();
6914     }
6915
6916   /* We just output an insn, so the next one doesn't have a label.  */
6917   mips_clear_insn_labels ();
6918 }
6919
6920 /* Forget that there was any previous instruction or label.
6921    When BRANCH is true, the branch history is also flushed.  */
6922
6923 static void
6924 mips_no_prev_insn (void)
6925 {
6926   prev_nop_frag = NULL;
6927   insert_into_history (0, ARRAY_SIZE (history), NOP_INSN);
6928   mips_clear_insn_labels ();
6929 }
6930
6931 /* This function must be called before we emit something other than
6932    instructions.  It is like mips_no_prev_insn except that it inserts
6933    any NOPS that might be needed by previous instructions.  */
6934
6935 void
6936 mips_emit_delays (void)
6937 {
6938   if (! mips_opts.noreorder)
6939     {
6940       int nops = nops_for_insn (0, history, NULL);
6941       if (nops > 0)
6942         {
6943           while (nops-- > 0)
6944             add_fixed_insn (NOP_INSN);
6945           mips_move_text_labels ();
6946         }
6947     }
6948   mips_no_prev_insn ();
6949 }
6950
6951 /* Start a (possibly nested) noreorder block.  */
6952
6953 static void
6954 start_noreorder (void)
6955 {
6956   if (mips_opts.noreorder == 0)
6957     {
6958       unsigned int i;
6959       int nops;
6960
6961       /* None of the instructions before the .set noreorder can be moved.  */
6962       for (i = 0; i < ARRAY_SIZE (history); i++)
6963         history[i].fixed_p = 1;
6964
6965       /* Insert any nops that might be needed between the .set noreorder
6966          block and the previous instructions.  We will later remove any
6967          nops that turn out not to be needed.  */
6968       nops = nops_for_insn (0, history, NULL);
6969       if (nops > 0)
6970         {
6971           if (mips_optimize != 0)
6972             {
6973               /* Record the frag which holds the nop instructions, so
6974                  that we can remove them if we don't need them.  */
6975               frag_grow (nops * NOP_INSN_SIZE);
6976               prev_nop_frag = frag_now;
6977               prev_nop_frag_holds = nops;
6978               prev_nop_frag_required = 0;
6979               prev_nop_frag_since = 0;
6980             }
6981
6982           for (; nops > 0; --nops)
6983             add_fixed_insn (NOP_INSN);
6984
6985           /* Move on to a new frag, so that it is safe to simply
6986              decrease the size of prev_nop_frag.  */
6987           frag_wane (frag_now);
6988           frag_new (0);
6989           mips_move_text_labels ();
6990         }
6991       mips_mark_labels ();
6992       mips_clear_insn_labels ();
6993     }
6994   mips_opts.noreorder++;
6995   mips_any_noreorder = 1;
6996 }
6997
6998 /* End a nested noreorder block.  */
6999
7000 static void
7001 end_noreorder (void)
7002 {
7003   mips_opts.noreorder--;
7004   if (mips_opts.noreorder == 0 && prev_nop_frag != NULL)
7005     {
7006       /* Commit to inserting prev_nop_frag_required nops and go back to
7007          handling nop insertion the .set reorder way.  */
7008       prev_nop_frag->fr_fix -= ((prev_nop_frag_holds - prev_nop_frag_required)
7009                                 * NOP_INSN_SIZE);
7010       insert_into_history (prev_nop_frag_since,
7011                            prev_nop_frag_required, NOP_INSN);
7012       prev_nop_frag = NULL;
7013     }
7014 }
7015
7016 /* Sign-extend 32-bit mode constants that have bit 31 set and all
7017    higher bits unset.  */
7018
7019 static void
7020 normalize_constant_expr (expressionS *ex)
7021 {
7022   if (ex->X_op == O_constant
7023       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7024     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7025                         - 0x80000000);
7026 }
7027
7028 /* Sign-extend 32-bit mode address offsets that have bit 31 set and
7029    all higher bits unset.  */
7030
7031 static void
7032 normalize_address_expr (expressionS *ex)
7033 {
7034   if (((ex->X_op == O_constant && HAVE_32BIT_ADDRESSES)
7035         || (ex->X_op == O_symbol && HAVE_32BIT_SYMBOLS))
7036       && IS_ZEXT_32BIT_NUM (ex->X_add_number))
7037     ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
7038                         - 0x80000000);
7039 }
7040
7041 /* Try to match TOKENS against OPCODE, storing the result in INSN.
7042    Return true if the match was successful.
7043
7044    OPCODE_EXTRA is a value that should be ORed into the opcode
7045    (used for VU0 channel suffixes, etc.).  MORE_ALTS is true if
7046    there are more alternatives after OPCODE and SOFT_MATCH is
7047    as for mips_arg_info.  */
7048
7049 static bfd_boolean
7050 match_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
7051             struct mips_operand_token *tokens, unsigned int opcode_extra,
7052             bfd_boolean lax_match, bfd_boolean complete_p)
7053 {
7054   const char *args;
7055   struct mips_arg_info arg;
7056   const struct mips_operand *operand;
7057   char c;
7058
7059   imm_expr.X_op = O_absent;
7060   imm2_expr.X_op = O_absent;
7061   offset_expr.X_op = O_absent;
7062   offset_reloc[0] = BFD_RELOC_UNUSED;
7063   offset_reloc[1] = BFD_RELOC_UNUSED;
7064   offset_reloc[2] = BFD_RELOC_UNUSED;
7065
7066   create_insn (insn, opcode);
7067   /* When no opcode suffix is specified, assume ".xyzw". */
7068   if ((opcode->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0 && opcode_extra == 0)
7069     insn->insn_opcode |= 0xf << mips_vu0_channel_mask.lsb;
7070   else
7071     insn->insn_opcode |= opcode_extra;
7072   memset (&arg, 0, sizeof (arg));
7073   arg.insn = insn;
7074   arg.token = tokens;
7075   arg.argnum = 1;
7076   arg.last_regno = ILLEGAL_REG;
7077   arg.dest_regno = ILLEGAL_REG;
7078   arg.lax_match = lax_match;
7079   for (args = opcode->args;; ++args)
7080     {
7081       if (arg.token->type == OT_END)
7082         {
7083           /* Handle unary instructions in which only one operand is given.
7084              The source is then the same as the destination.  */
7085           if (arg.opnum == 1 && *args == ',')
7086             {
7087               operand = (mips_opts.micromips
7088                          ? decode_micromips_operand (args + 1)
7089                          : decode_mips_operand (args + 1));
7090               if (operand && mips_optional_operand_p (operand))
7091                 {
7092                   arg.token = tokens;
7093                   arg.argnum = 1;
7094                   continue;
7095                 }
7096             }
7097
7098           /* Treat elided base registers as $0.  */
7099           if (strcmp (args, "(b)") == 0)
7100             args += 3;
7101
7102           if (args[0] == '+')
7103             switch (args[1])
7104               {
7105               case 'K':
7106               case 'N':
7107                 /* The register suffix is optional. */
7108                 args += 2;
7109                 break;
7110               }
7111
7112           /* Fail the match if there were too few operands.  */
7113           if (*args)
7114             return FALSE;
7115
7116           /* Successful match.  */
7117           if (!complete_p)
7118             return TRUE;
7119           clear_insn_error ();
7120           if (arg.dest_regno == arg.last_regno
7121               && strncmp (insn->insn_mo->name, "jalr", 4) == 0)
7122             {
7123               if (arg.opnum == 2)
7124                 set_insn_error
7125                   (0, _("Source and destination must be different"));
7126               else if (arg.last_regno == 31)
7127                 set_insn_error
7128                   (0, _("A destination register must be supplied"));
7129             }
7130           check_completed_insn (&arg);
7131           return TRUE;
7132         }
7133
7134       /* Fail the match if the line has too many operands.   */
7135       if (*args == 0)
7136         return FALSE;
7137
7138       /* Handle characters that need to match exactly.  */
7139       if (*args == '(' || *args == ')' || *args == ',')
7140         {
7141           if (match_char (&arg, *args))
7142             continue;
7143           return FALSE;
7144         }
7145       if (*args == '#')
7146         {
7147           ++args;
7148           if (arg.token->type == OT_DOUBLE_CHAR
7149               && arg.token->u.ch == *args)
7150             {
7151               ++arg.token;
7152               continue;
7153             }
7154           return FALSE;
7155         }
7156
7157       /* Handle special macro operands.  Work out the properties of
7158          other operands.  */
7159       arg.opnum += 1;
7160       switch (*args)
7161         {
7162         case '+':
7163           switch (args[1])
7164             {
7165             case 'I':
7166               /* "+I" is like "I", except that imm2_expr is used.  */
7167               if (!match_const_int (&arg, &imm2_expr.X_add_number))
7168                 return FALSE;
7169               imm2_expr.X_op = O_constant;
7170               if (HAVE_32BIT_GPRS)
7171                 normalize_constant_expr (&imm2_expr);
7172               ++args;
7173               continue;
7174
7175             case 'i':
7176               *offset_reloc = BFD_RELOC_MIPS_JMP;
7177               break;
7178             }
7179           break;
7180
7181         case 'I':
7182           if (!match_const_int (&arg, &imm_expr.X_add_number))
7183             return FALSE;
7184           imm_expr.X_op = O_constant;
7185           if (HAVE_32BIT_GPRS)
7186             normalize_constant_expr (&imm_expr);
7187           continue;
7188
7189         case 'A':
7190           if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
7191             {
7192               /* Assume that the offset has been elided and that what
7193                  we saw was a base register.  The match will fail later
7194                  if that assumption turns out to be wrong.  */
7195               offset_expr.X_op = O_constant;
7196               offset_expr.X_add_number = 0;
7197             }
7198           else
7199             {
7200               if (!match_expression (&arg, &offset_expr, offset_reloc))
7201                 return FALSE;
7202               normalize_address_expr (&offset_expr);
7203             }
7204           continue;
7205
7206         case 'F':
7207           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7208                                      8, TRUE))
7209             return FALSE;
7210           continue;
7211
7212         case 'L':
7213           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7214                                      8, FALSE))
7215             return FALSE;
7216           continue;
7217
7218         case 'f':
7219           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7220                                      4, TRUE))
7221             return FALSE;
7222           continue;
7223
7224         case 'l':
7225           if (!match_float_constant (&arg, &imm_expr, &offset_expr,
7226                                      4, FALSE))
7227             return FALSE;
7228           continue;
7229
7230         case 'p':
7231           *offset_reloc = BFD_RELOC_16_PCREL_S2;
7232           break;
7233
7234         case 'a':
7235           *offset_reloc = BFD_RELOC_MIPS_JMP;
7236           break;
7237
7238         case 'm':
7239           gas_assert (mips_opts.micromips);
7240           c = args[1];
7241           switch (c)
7242             {
7243             case 'D':
7244             case 'E':
7245               if (!forced_insn_length)
7246                 *offset_reloc = (int) BFD_RELOC_UNUSED + c;
7247               else if (c == 'D')
7248                 *offset_reloc = BFD_RELOC_MICROMIPS_10_PCREL_S1;
7249               else
7250                 *offset_reloc = BFD_RELOC_MICROMIPS_7_PCREL_S1;
7251               break;
7252             }
7253           break;
7254         }
7255
7256       operand = (mips_opts.micromips
7257                  ? decode_micromips_operand (args)
7258                  : decode_mips_operand (args));
7259       if (!operand)
7260         abort ();
7261
7262       /* Skip prefixes.  */
7263       if (*args == '+' || *args == 'm')
7264         args++;
7265
7266       if (mips_optional_operand_p (operand)
7267           && args[1] == ','
7268           && (arg.token[0].type != OT_REG
7269               || arg.token[1].type == OT_END))
7270         {
7271           /* Assume that the register has been elided and is the
7272              same as the first operand.  */
7273           arg.token = tokens;
7274           arg.argnum = 1;
7275         }
7276
7277       if (!match_operand (&arg, operand))
7278         return FALSE;
7279     }
7280 }
7281
7282 /* Like match_insn, but for MIPS16.  */
7283
7284 static bfd_boolean
7285 match_mips16_insn (struct mips_cl_insn *insn, const struct mips_opcode *opcode,
7286                    struct mips_operand_token *tokens)
7287 {
7288   const char *args;
7289   const struct mips_operand *operand;
7290   const struct mips_operand *ext_operand;
7291   struct mips_arg_info arg;
7292   int relax_char;
7293
7294   create_insn (insn, opcode);
7295   imm_expr.X_op = O_absent;
7296   imm2_expr.X_op = O_absent;
7297   offset_expr.X_op = O_absent;
7298   offset_reloc[0] = BFD_RELOC_UNUSED;
7299   offset_reloc[1] = BFD_RELOC_UNUSED;
7300   offset_reloc[2] = BFD_RELOC_UNUSED;
7301   relax_char = 0;
7302
7303   memset (&arg, 0, sizeof (arg));
7304   arg.insn = insn;
7305   arg.token = tokens;
7306   arg.argnum = 1;
7307   arg.last_regno = ILLEGAL_REG;
7308   arg.dest_regno = ILLEGAL_REG;
7309   relax_char = 0;
7310   for (args = opcode->args;; ++args)
7311     {
7312       int c;
7313
7314       if (arg.token->type == OT_END)
7315         {
7316           offsetT value;
7317
7318           /* Handle unary instructions in which only one operand is given.
7319              The source is then the same as the destination.  */
7320           if (arg.opnum == 1 && *args == ',')
7321             {
7322               operand = decode_mips16_operand (args[1], FALSE);
7323               if (operand && mips_optional_operand_p (operand))
7324                 {
7325                   arg.token = tokens;
7326                   arg.argnum = 1;
7327                   continue;
7328                 }
7329             }
7330
7331           /* Fail the match if there were too few operands.  */
7332           if (*args)
7333             return FALSE;
7334
7335           /* Successful match.  Stuff the immediate value in now, if
7336              we can.  */
7337           clear_insn_error ();
7338           if (opcode->pinfo == INSN_MACRO)
7339             {
7340               gas_assert (relax_char == 0 || relax_char == 'p');
7341               gas_assert (*offset_reloc == BFD_RELOC_UNUSED);
7342             }
7343           else if (relax_char
7344                    && offset_expr.X_op == O_constant
7345                    && calculate_reloc (*offset_reloc,
7346                                        offset_expr.X_add_number,
7347                                        &value))
7348             {
7349               mips16_immed (NULL, 0, relax_char, *offset_reloc, value,
7350                             forced_insn_length, &insn->insn_opcode);
7351               offset_expr.X_op = O_absent;
7352               *offset_reloc = BFD_RELOC_UNUSED;
7353             }
7354           else if (relax_char && *offset_reloc != BFD_RELOC_UNUSED)
7355             {
7356               if (forced_insn_length == 2)
7357                 set_insn_error (0, _("invalid unextended operand value"));
7358               forced_insn_length = 4;
7359               insn->insn_opcode |= MIPS16_EXTEND;
7360             }
7361           else if (relax_char)
7362             *offset_reloc = (int) BFD_RELOC_UNUSED + relax_char;
7363
7364           check_completed_insn (&arg);
7365           return TRUE;
7366         }
7367
7368       /* Fail the match if the line has too many operands.   */
7369       if (*args == 0)
7370         return FALSE;
7371
7372       /* Handle characters that need to match exactly.  */
7373       if (*args == '(' || *args == ')' || *args == ',')
7374         {
7375           if (match_char (&arg, *args))
7376             continue;
7377           return FALSE;
7378         }
7379
7380       arg.opnum += 1;
7381       c = *args;
7382       switch (c)
7383         {
7384         case 'p':
7385         case 'q':
7386         case 'A':
7387         case 'B':
7388         case 'E':
7389           relax_char = c;
7390           break;
7391
7392         case 'I':
7393           if (!match_const_int (&arg, &imm_expr.X_add_number))
7394             return FALSE;
7395           imm_expr.X_op = O_constant;
7396           if (HAVE_32BIT_GPRS)
7397             normalize_constant_expr (&imm_expr);
7398           continue;
7399
7400         case 'a':
7401         case 'i':
7402           *offset_reloc = BFD_RELOC_MIPS16_JMP;
7403           insn->insn_opcode <<= 16;
7404           break;
7405         }
7406
7407       operand = decode_mips16_operand (c, FALSE);
7408       if (!operand)
7409         abort ();
7410
7411       /* '6' is a special case.  It is used for BREAK and SDBBP,
7412          whose operands are only meaningful to the software that decodes
7413          them.  This means that there is no architectural reason why
7414          they cannot be prefixed by EXTEND, but in practice,
7415          exception handlers will only look at the instruction
7416          itself.  We therefore allow '6' to be extended when
7417          disassembling but not when assembling.  */
7418       if (operand->type != OP_PCREL && c != '6')
7419         {
7420           ext_operand = decode_mips16_operand (c, TRUE);
7421           if (operand != ext_operand)
7422             {
7423               if (arg.token->type == OT_CHAR && arg.token->u.ch == '(')
7424                 {
7425                   offset_expr.X_op = O_constant;
7426                   offset_expr.X_add_number = 0;
7427                   relax_char = c;
7428                   continue;
7429                 }
7430
7431               /* We need the OT_INTEGER check because some MIPS16
7432                  immediate variants are listed before the register ones.  */
7433               if (arg.token->type != OT_INTEGER
7434                   || !match_expression (&arg, &offset_expr, offset_reloc))
7435                 return FALSE;
7436
7437               /* '8' is used for SLTI(U) and has traditionally not
7438                  been allowed to take relocation operators.  */
7439               if (offset_reloc[0] != BFD_RELOC_UNUSED
7440                   && (ext_operand->size != 16 || c == '8'))
7441                 return FALSE;
7442
7443               relax_char = c;
7444               continue;
7445             }
7446         }
7447
7448       if (mips_optional_operand_p (operand)
7449           && args[1] == ','
7450           && (arg.token[0].type != OT_REG
7451               || arg.token[1].type == OT_END))
7452         {
7453           /* Assume that the register has been elided and is the
7454              same as the first operand.  */
7455           arg.token = tokens;
7456           arg.argnum = 1;
7457         }
7458
7459       if (!match_operand (&arg, operand))
7460         return FALSE;
7461     }
7462 }
7463
7464 /* Record that the current instruction is invalid for the current ISA.  */
7465
7466 static void
7467 match_invalid_for_isa (void)
7468 {
7469   set_insn_error_ss
7470     (0, _("Opcode not supported on this processor: %s (%s)"),
7471      mips_cpu_info_from_arch (mips_opts.arch)->name,
7472      mips_cpu_info_from_isa (mips_opts.isa)->name);
7473 }
7474
7475 /* Try to match TOKENS against a series of opcode entries, starting at FIRST.
7476    Return true if a definite match or failure was found, storing any match
7477    in INSN.  OPCODE_EXTRA is a value that should be ORed into the opcode
7478    (to handle things like VU0 suffixes).  LAX_MATCH is true if we have already
7479    tried and failed to match under normal conditions and now want to try a
7480    more relaxed match.  */
7481
7482 static bfd_boolean
7483 match_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
7484              const struct mips_opcode *past, struct mips_operand_token *tokens,
7485              int opcode_extra, bfd_boolean lax_match)
7486 {
7487   const struct mips_opcode *opcode;
7488   const struct mips_opcode *invalid_delay_slot;
7489   bfd_boolean seen_valid_for_isa, seen_valid_for_size;
7490
7491   /* Search for a match, ignoring alternatives that don't satisfy the
7492      current ISA or forced_length.  */
7493   invalid_delay_slot = 0;
7494   seen_valid_for_isa = FALSE;
7495   seen_valid_for_size = FALSE;
7496   opcode = first;
7497   do
7498     {
7499       gas_assert (strcmp (opcode->name, first->name) == 0);
7500       if (is_opcode_valid (opcode))
7501         {
7502           seen_valid_for_isa = TRUE;
7503           if (is_size_valid (opcode))
7504             {
7505               bfd_boolean delay_slot_ok;
7506
7507               seen_valid_for_size = TRUE;
7508               delay_slot_ok = is_delay_slot_valid (opcode);
7509               if (match_insn (insn, opcode, tokens, opcode_extra,
7510                               lax_match, delay_slot_ok))
7511                 {
7512                   if (!delay_slot_ok)
7513                     {
7514                       if (!invalid_delay_slot)
7515                         invalid_delay_slot = opcode;
7516                     }
7517                   else
7518                     return TRUE;
7519                 }
7520             }
7521         }
7522       ++opcode;
7523     }
7524   while (opcode < past && strcmp (opcode->name, first->name) == 0);
7525
7526   /* If the only matches we found had the wrong length for the delay slot,
7527      pick the first such match.  We'll issue an appropriate warning later.  */
7528   if (invalid_delay_slot)
7529     {
7530       if (match_insn (insn, invalid_delay_slot, tokens, opcode_extra,
7531                       lax_match, TRUE))
7532         return TRUE;
7533       abort ();
7534     }
7535
7536   /* Handle the case where we didn't try to match an instruction because
7537      all the alternatives were incompatible with the current ISA.  */
7538   if (!seen_valid_for_isa)
7539     {
7540       match_invalid_for_isa ();
7541       return TRUE;
7542     }
7543
7544   /* Handle the case where we didn't try to match an instruction because
7545      all the alternatives were of the wrong size.  */
7546   if (!seen_valid_for_size)
7547     {
7548       if (mips_opts.insn32)
7549         set_insn_error (0, _("Opcode not supported in the `insn32' mode"));
7550       else
7551         set_insn_error_i
7552           (0, _("Unrecognized %d-bit version of microMIPS opcode"),
7553            8 * forced_insn_length);
7554       return TRUE;
7555     }
7556
7557   return FALSE;
7558 }
7559
7560 /* Like match_insns, but for MIPS16.  */
7561
7562 static bfd_boolean
7563 match_mips16_insns (struct mips_cl_insn *insn, const struct mips_opcode *first,
7564                     struct mips_operand_token *tokens)
7565 {
7566   const struct mips_opcode *opcode;
7567   bfd_boolean seen_valid_for_isa;
7568
7569   /* Search for a match, ignoring alternatives that don't satisfy the
7570      current ISA.  There are no separate entries for extended forms so
7571      we deal with forced_length later.  */
7572   seen_valid_for_isa = FALSE;
7573   opcode = first;
7574   do
7575     {
7576       gas_assert (strcmp (opcode->name, first->name) == 0);
7577       if (is_opcode_valid_16 (opcode))
7578         {
7579           seen_valid_for_isa = TRUE;
7580           if (match_mips16_insn (insn, opcode, tokens))
7581             return TRUE;
7582         }
7583       ++opcode;
7584     }
7585   while (opcode < &mips16_opcodes[bfd_mips16_num_opcodes]
7586          && strcmp (opcode->name, first->name) == 0);
7587
7588   /* Handle the case where we didn't try to match an instruction because
7589      all the alternatives were incompatible with the current ISA.  */
7590   if (!seen_valid_for_isa)
7591     {
7592       match_invalid_for_isa ();
7593       return TRUE;
7594     }
7595
7596   return FALSE;
7597 }
7598
7599 /* Set up global variables for the start of a new macro.  */
7600
7601 static void
7602 macro_start (void)
7603 {
7604   memset (&mips_macro_warning.sizes, 0, sizeof (mips_macro_warning.sizes));
7605   memset (&mips_macro_warning.first_insn_sizes, 0,
7606           sizeof (mips_macro_warning.first_insn_sizes));
7607   memset (&mips_macro_warning.insns, 0, sizeof (mips_macro_warning.insns));
7608   mips_macro_warning.delay_slot_p = (mips_opts.noreorder
7609                                      && delayed_branch_p (&history[0]));
7610   switch (history[0].insn_mo->pinfo2
7611           & (INSN2_BRANCH_DELAY_32BIT | INSN2_BRANCH_DELAY_16BIT))
7612     {
7613     case INSN2_BRANCH_DELAY_32BIT:
7614       mips_macro_warning.delay_slot_length = 4;
7615       break;
7616     case INSN2_BRANCH_DELAY_16BIT:
7617       mips_macro_warning.delay_slot_length = 2;
7618       break;
7619     default:
7620       mips_macro_warning.delay_slot_length = 0;
7621       break;
7622     }
7623   mips_macro_warning.first_frag = NULL;
7624 }
7625
7626 /* Given that a macro is longer than one instruction or of the wrong size,
7627    return the appropriate warning for it.  Return null if no warning is
7628    needed.  SUBTYPE is a bitmask of RELAX_DELAY_SLOT, RELAX_DELAY_SLOT_16BIT,
7629    RELAX_DELAY_SLOT_SIZE_FIRST, RELAX_DELAY_SLOT_SIZE_SECOND,
7630    and RELAX_NOMACRO.  */
7631
7632 static const char *
7633 macro_warning (relax_substateT subtype)
7634 {
7635   if (subtype & RELAX_DELAY_SLOT)
7636     return _("Macro instruction expanded into multiple instructions"
7637              " in a branch delay slot");
7638   else if (subtype & RELAX_NOMACRO)
7639     return _("Macro instruction expanded into multiple instructions");
7640   else if (subtype & (RELAX_DELAY_SLOT_SIZE_FIRST
7641                       | RELAX_DELAY_SLOT_SIZE_SECOND))
7642     return ((subtype & RELAX_DELAY_SLOT_16BIT)
7643             ? _("Macro instruction expanded into a wrong size instruction"
7644                 " in a 16-bit branch delay slot")
7645             : _("Macro instruction expanded into a wrong size instruction"
7646                 " in a 32-bit branch delay slot"));
7647   else
7648     return 0;
7649 }
7650
7651 /* Finish up a macro.  Emit warnings as appropriate.  */
7652
7653 static void
7654 macro_end (void)
7655 {
7656   /* Relaxation warning flags.  */
7657   relax_substateT subtype = 0;
7658
7659   /* Check delay slot size requirements.  */
7660   if (mips_macro_warning.delay_slot_length == 2)
7661     subtype |= RELAX_DELAY_SLOT_16BIT;
7662   if (mips_macro_warning.delay_slot_length != 0)
7663     {
7664       if (mips_macro_warning.delay_slot_length
7665           != mips_macro_warning.first_insn_sizes[0])
7666         subtype |= RELAX_DELAY_SLOT_SIZE_FIRST;
7667       if (mips_macro_warning.delay_slot_length
7668           != mips_macro_warning.first_insn_sizes[1])
7669         subtype |= RELAX_DELAY_SLOT_SIZE_SECOND;
7670     }
7671
7672   /* Check instruction count requirements.  */
7673   if (mips_macro_warning.insns[0] > 1 || mips_macro_warning.insns[1] > 1)
7674     {
7675       if (mips_macro_warning.insns[1] > mips_macro_warning.insns[0])
7676         subtype |= RELAX_SECOND_LONGER;
7677       if (mips_opts.warn_about_macros)
7678         subtype |= RELAX_NOMACRO;
7679       if (mips_macro_warning.delay_slot_p)
7680         subtype |= RELAX_DELAY_SLOT;
7681     }
7682
7683   /* If both alternatives fail to fill a delay slot correctly,
7684      emit the warning now.  */
7685   if ((subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0
7686       && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0)
7687     {
7688       relax_substateT s;
7689       const char *msg;
7690
7691       s = subtype & (RELAX_DELAY_SLOT_16BIT
7692                      | RELAX_DELAY_SLOT_SIZE_FIRST
7693                      | RELAX_DELAY_SLOT_SIZE_SECOND);
7694       msg = macro_warning (s);
7695       if (msg != NULL)
7696         as_warn ("%s", msg);
7697       subtype &= ~s;
7698     }
7699
7700   /* If both implementations are longer than 1 instruction, then emit the
7701      warning now.  */
7702   if (mips_macro_warning.insns[0] > 1 && mips_macro_warning.insns[1] > 1)
7703     {
7704       relax_substateT s;
7705       const char *msg;
7706
7707       s = subtype & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT);
7708       msg = macro_warning (s);
7709       if (msg != NULL)
7710         as_warn ("%s", msg);
7711       subtype &= ~s;
7712     }
7713
7714   /* If any flags still set, then one implementation might need a warning
7715      and the other either will need one of a different kind or none at all.
7716      Pass any remaining flags over to relaxation.  */
7717   if (mips_macro_warning.first_frag != NULL)
7718     mips_macro_warning.first_frag->fr_subtype |= subtype;
7719 }
7720
7721 /* Instruction operand formats used in macros that vary between
7722    standard MIPS and microMIPS code.  */
7723
7724 static const char * const brk_fmt[2][2] = { { "c", "c" }, { "mF", "c" } };
7725 static const char * const cop12_fmt[2] = { "E,o(b)", "E,~(b)" };
7726 static const char * const jalr_fmt[2] = { "d,s", "t,s" };
7727 static const char * const lui_fmt[2] = { "t,u", "s,u" };
7728 static const char * const mem12_fmt[2] = { "t,o(b)", "t,~(b)" };
7729 static const char * const mfhl_fmt[2][2] = { { "d", "d" }, { "mj", "s" } };
7730 static const char * const shft_fmt[2] = { "d,w,<", "t,r,<" };
7731 static const char * const trap_fmt[2] = { "s,t,q", "s,t,|" };
7732
7733 #define BRK_FMT (brk_fmt[mips_opts.micromips][mips_opts.insn32])
7734 #define COP12_FMT (cop12_fmt[mips_opts.micromips])
7735 #define JALR_FMT (jalr_fmt[mips_opts.micromips])
7736 #define LUI_FMT (lui_fmt[mips_opts.micromips])
7737 #define MEM12_FMT (mem12_fmt[mips_opts.micromips])
7738 #define MFHL_FMT (mfhl_fmt[mips_opts.micromips][mips_opts.insn32])
7739 #define SHFT_FMT (shft_fmt[mips_opts.micromips])
7740 #define TRAP_FMT (trap_fmt[mips_opts.micromips])
7741
7742 /* Read a macro's relocation codes from *ARGS and store them in *R.
7743    The first argument in *ARGS will be either the code for a single
7744    relocation or -1 followed by the three codes that make up a
7745    composite relocation.  */
7746
7747 static void
7748 macro_read_relocs (va_list *args, bfd_reloc_code_real_type *r)
7749 {
7750   int i, next;
7751
7752   next = va_arg (*args, int);
7753   if (next >= 0)
7754     r[0] = (bfd_reloc_code_real_type) next;
7755   else
7756     {
7757       for (i = 0; i < 3; i++)
7758         r[i] = (bfd_reloc_code_real_type) va_arg (*args, int);
7759       /* This function is only used for 16-bit relocation fields.
7760          To make the macro code simpler, treat an unrelocated value
7761          in the same way as BFD_RELOC_LO16.  */
7762       if (r[0] == BFD_RELOC_UNUSED)
7763         r[0] = BFD_RELOC_LO16;
7764     }
7765 }
7766
7767 /* Build an instruction created by a macro expansion.  This is passed
7768    a pointer to the count of instructions created so far, an
7769    expression, the name of the instruction to build, an operand format
7770    string, and corresponding arguments.  */
7771
7772 static void
7773 macro_build (expressionS *ep, const char *name, const char *fmt, ...)
7774 {
7775   const struct mips_opcode *mo = NULL;
7776   bfd_reloc_code_real_type r[3];
7777   const struct mips_opcode *amo;
7778   const struct mips_operand *operand;
7779   struct hash_control *hash;
7780   struct mips_cl_insn insn;
7781   va_list args;
7782   unsigned int uval;
7783
7784   va_start (args, fmt);
7785
7786   if (mips_opts.mips16)
7787     {
7788       mips16_macro_build (ep, name, fmt, &args);
7789       va_end (args);
7790       return;
7791     }
7792
7793   r[0] = BFD_RELOC_UNUSED;
7794   r[1] = BFD_RELOC_UNUSED;
7795   r[2] = BFD_RELOC_UNUSED;
7796   hash = mips_opts.micromips ? micromips_op_hash : op_hash;
7797   amo = (struct mips_opcode *) hash_find (hash, name);
7798   gas_assert (amo);
7799   gas_assert (strcmp (name, amo->name) == 0);
7800
7801   do
7802     {
7803       /* Search until we get a match for NAME.  It is assumed here that
7804          macros will never generate MDMX, MIPS-3D, or MT instructions.
7805          We try to match an instruction that fulfils the branch delay
7806          slot instruction length requirement (if any) of the previous
7807          instruction.  While doing this we record the first instruction
7808          seen that matches all the other conditions and use it anyway
7809          if the requirement cannot be met; we will issue an appropriate
7810          warning later on.  */
7811       if (strcmp (fmt, amo->args) == 0
7812           && amo->pinfo != INSN_MACRO
7813           && is_opcode_valid (amo)
7814           && is_size_valid (amo))
7815         {
7816           if (is_delay_slot_valid (amo))
7817             {
7818               mo = amo;
7819               break;
7820             }
7821           else if (!mo)
7822             mo = amo;
7823         }
7824
7825       ++amo;
7826       gas_assert (amo->name);
7827     }
7828   while (strcmp (name, amo->name) == 0);
7829
7830   gas_assert (mo);
7831   create_insn (&insn, mo);
7832   for (; *fmt; ++fmt)
7833     {
7834       switch (*fmt)
7835         {
7836         case ',':
7837         case '(':
7838         case ')':
7839         case 'z':
7840           break;
7841
7842         case 'i':
7843         case 'j':
7844           macro_read_relocs (&args, r);
7845           gas_assert (*r == BFD_RELOC_GPREL16
7846                       || *r == BFD_RELOC_MIPS_HIGHER
7847                       || *r == BFD_RELOC_HI16_S
7848                       || *r == BFD_RELOC_LO16
7849                       || *r == BFD_RELOC_MIPS_GOT_OFST);
7850           break;
7851
7852         case 'o':
7853           macro_read_relocs (&args, r);
7854           break;
7855
7856         case 'u':
7857           macro_read_relocs (&args, r);
7858           gas_assert (ep != NULL
7859                       && (ep->X_op == O_constant
7860                           || (ep->X_op == O_symbol
7861                               && (*r == BFD_RELOC_MIPS_HIGHEST
7862                                   || *r == BFD_RELOC_HI16_S
7863                                   || *r == BFD_RELOC_HI16
7864                                   || *r == BFD_RELOC_GPREL16
7865                                   || *r == BFD_RELOC_MIPS_GOT_HI16
7866                                   || *r == BFD_RELOC_MIPS_CALL_HI16))));
7867           break;
7868
7869         case 'p':
7870           gas_assert (ep != NULL);
7871
7872           /*
7873            * This allows macro() to pass an immediate expression for
7874            * creating short branches without creating a symbol.
7875            *
7876            * We don't allow branch relaxation for these branches, as
7877            * they should only appear in ".set nomacro" anyway.
7878            */
7879           if (ep->X_op == O_constant)
7880             {
7881               /* For microMIPS we always use relocations for branches.
7882                  So we should not resolve immediate values.  */
7883               gas_assert (!mips_opts.micromips);
7884
7885               if ((ep->X_add_number & 3) != 0)
7886                 as_bad (_("branch to misaligned address (0x%lx)"),
7887                         (unsigned long) ep->X_add_number);
7888               if ((ep->X_add_number + 0x20000) & ~0x3ffff)
7889                 as_bad (_("branch address range overflow (0x%lx)"),
7890                         (unsigned long) ep->X_add_number);
7891               insn.insn_opcode |= (ep->X_add_number >> 2) & 0xffff;
7892               ep = NULL;
7893             }
7894           else
7895             *r = BFD_RELOC_16_PCREL_S2;
7896           break;
7897
7898         case 'a':
7899           gas_assert (ep != NULL);
7900           *r = BFD_RELOC_MIPS_JMP;
7901           break;
7902
7903         default:
7904           operand = (mips_opts.micromips
7905                      ? decode_micromips_operand (fmt)
7906                      : decode_mips_operand (fmt));
7907           if (!operand)
7908             abort ();
7909
7910           uval = va_arg (args, int);
7911           if (operand->type == OP_CLO_CLZ_DEST)
7912             uval |= (uval << 5);
7913           insn_insert_operand (&insn, operand, uval);
7914
7915           if (*fmt == '+' || *fmt == 'm')
7916             ++fmt;
7917           break;
7918         }
7919     }
7920   va_end (args);
7921   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
7922
7923   append_insn (&insn, ep, r, TRUE);
7924 }
7925
7926 static void
7927 mips16_macro_build (expressionS *ep, const char *name, const char *fmt,
7928                     va_list *args)
7929 {
7930   struct mips_opcode *mo;
7931   struct mips_cl_insn insn;
7932   const struct mips_operand *operand;
7933   bfd_reloc_code_real_type r[3]
7934     = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
7935
7936   mo = (struct mips_opcode *) hash_find (mips16_op_hash, name);
7937   gas_assert (mo);
7938   gas_assert (strcmp (name, mo->name) == 0);
7939
7940   while (strcmp (fmt, mo->args) != 0 || mo->pinfo == INSN_MACRO)
7941     {
7942       ++mo;
7943       gas_assert (mo->name);
7944       gas_assert (strcmp (name, mo->name) == 0);
7945     }
7946
7947   create_insn (&insn, mo);
7948   for (; *fmt; ++fmt)
7949     {
7950       int c;
7951
7952       c = *fmt;
7953       switch (c)
7954         {
7955         case ',':
7956         case '(':
7957         case ')':
7958           break;
7959
7960         case '0':
7961         case 'S':
7962         case 'P':
7963         case 'R':
7964           break;
7965
7966         case '<':
7967         case '>':
7968         case '4':
7969         case '5':
7970         case 'H':
7971         case 'W':
7972         case 'D':
7973         case 'j':
7974         case '8':
7975         case 'V':
7976         case 'C':
7977         case 'U':
7978         case 'k':
7979         case 'K':
7980         case 'p':
7981         case 'q':
7982           {
7983             offsetT value;
7984
7985             gas_assert (ep != NULL);
7986
7987             if (ep->X_op != O_constant)
7988               *r = (int) BFD_RELOC_UNUSED + c;
7989             else if (calculate_reloc (*r, ep->X_add_number, &value))
7990               {
7991                 mips16_immed (NULL, 0, c, *r, value, 0, &insn.insn_opcode);
7992                 ep = NULL;
7993                 *r = BFD_RELOC_UNUSED;
7994               }
7995           }
7996           break;
7997
7998         default:
7999           operand = decode_mips16_operand (c, FALSE);
8000           if (!operand)
8001             abort ();
8002
8003           insn_insert_operand (&insn, operand, va_arg (*args, int));
8004           break;
8005         }
8006     }
8007
8008   gas_assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
8009
8010   append_insn (&insn, ep, r, TRUE);
8011 }
8012
8013 /*
8014  * Generate a "jalr" instruction with a relocation hint to the called
8015  * function.  This occurs in NewABI PIC code.
8016  */
8017 static void
8018 macro_build_jalr (expressionS *ep, int cprestore)
8019 {
8020   static const bfd_reloc_code_real_type jalr_relocs[2]
8021     = { BFD_RELOC_MIPS_JALR, BFD_RELOC_MICROMIPS_JALR };
8022   bfd_reloc_code_real_type jalr_reloc = jalr_relocs[mips_opts.micromips];
8023   const char *jalr;
8024   char *f = NULL;
8025
8026   if (MIPS_JALR_HINT_P (ep))
8027     {
8028       frag_grow (8);
8029       f = frag_more (0);
8030     }
8031   if (mips_opts.micromips)
8032     {
8033       jalr = ((mips_opts.noreorder && !cprestore) || mips_opts.insn32
8034               ? "jalr" : "jalrs");
8035       if (MIPS_JALR_HINT_P (ep)
8036           || mips_opts.insn32
8037           || (history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
8038         macro_build (NULL, jalr, "t,s", RA, PIC_CALL_REG);
8039       else
8040         macro_build (NULL, jalr, "mj", PIC_CALL_REG);
8041     }
8042   else
8043     macro_build (NULL, "jalr", "d,s", RA, PIC_CALL_REG);
8044   if (MIPS_JALR_HINT_P (ep))
8045     fix_new_exp (frag_now, f - frag_now->fr_literal, 4, ep, FALSE, jalr_reloc);
8046 }
8047
8048 /*
8049  * Generate a "lui" instruction.
8050  */
8051 static void
8052 macro_build_lui (expressionS *ep, int regnum)
8053 {
8054   gas_assert (! mips_opts.mips16);
8055
8056   if (ep->X_op != O_constant)
8057     {
8058       gas_assert (ep->X_op == O_symbol);
8059       /* _gp_disp is a special case, used from s_cpload.
8060          __gnu_local_gp is used if mips_no_shared.  */
8061       gas_assert (mips_pic == NO_PIC
8062               || (! HAVE_NEWABI
8063                   && strcmp (S_GET_NAME (ep->X_add_symbol), "_gp_disp") == 0)
8064               || (! mips_in_shared
8065                   && strcmp (S_GET_NAME (ep->X_add_symbol),
8066                              "__gnu_local_gp") == 0));
8067     }
8068
8069   macro_build (ep, "lui", LUI_FMT, regnum, BFD_RELOC_HI16_S);
8070 }
8071
8072 /* Generate a sequence of instructions to do a load or store from a constant
8073    offset off of a base register (breg) into/from a target register (treg),
8074    using AT if necessary.  */
8075 static void
8076 macro_build_ldst_constoffset (expressionS *ep, const char *op,
8077                               int treg, int breg, int dbl)
8078 {
8079   gas_assert (ep->X_op == O_constant);
8080
8081   /* Sign-extending 32-bit constants makes their handling easier.  */
8082   if (!dbl)
8083     normalize_constant_expr (ep);
8084
8085   /* Right now, this routine can only handle signed 32-bit constants.  */
8086   if (! IS_SEXT_32BIT_NUM(ep->X_add_number + 0x8000))
8087     as_warn (_("operand overflow"));
8088
8089   if (IS_SEXT_16BIT_NUM(ep->X_add_number))
8090     {
8091       /* Signed 16-bit offset will fit in the op.  Easy!  */
8092       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, breg);
8093     }
8094   else
8095     {
8096       /* 32-bit offset, need multiple instructions and AT, like:
8097            lui      $tempreg,const_hi       (BFD_RELOC_HI16_S)
8098            addu     $tempreg,$tempreg,$breg
8099            <op>     $treg,const_lo($tempreg)   (BFD_RELOC_LO16)
8100          to handle the complete offset.  */
8101       macro_build_lui (ep, AT);
8102       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
8103       macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, AT);
8104
8105       if (!mips_opts.at)
8106         as_bad (_("Macro used $at after \".set noat\""));
8107     }
8108 }
8109
8110 /*                      set_at()
8111  * Generates code to set the $at register to true (one)
8112  * if reg is less than the immediate expression.
8113  */
8114 static void
8115 set_at (int reg, int unsignedp)
8116 {
8117   if (imm_expr.X_op == O_constant
8118       && imm_expr.X_add_number >= -0x8000
8119       && imm_expr.X_add_number < 0x8000)
8120     macro_build (&imm_expr, unsignedp ? "sltiu" : "slti", "t,r,j",
8121                  AT, reg, BFD_RELOC_LO16);
8122   else
8123     {
8124       load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
8125       macro_build (NULL, unsignedp ? "sltu" : "slt", "d,v,t", AT, reg, AT);
8126     }
8127 }
8128
8129 /* Count the leading zeroes by performing a binary chop. This is a
8130    bulky bit of source, but performance is a LOT better for the
8131    majority of values than a simple loop to count the bits:
8132        for (lcnt = 0; (lcnt < 32); lcnt++)
8133          if ((v) & (1 << (31 - lcnt)))
8134            break;
8135   However it is not code size friendly, and the gain will drop a bit
8136   on certain cached systems.
8137 */
8138 #define COUNT_TOP_ZEROES(v)             \
8139   (((v) & ~0xffff) == 0                 \
8140    ? ((v) & ~0xff) == 0                 \
8141      ? ((v) & ~0xf) == 0                \
8142        ? ((v) & ~0x3) == 0              \
8143          ? ((v) & ~0x1) == 0            \
8144            ? !(v)                       \
8145              ? 32                       \
8146              : 31                       \
8147            : 30                         \
8148          : ((v) & ~0x7) == 0            \
8149            ? 29                         \
8150            : 28                         \
8151        : ((v) & ~0x3f) == 0             \
8152          ? ((v) & ~0x1f) == 0           \
8153            ? 27                         \
8154            : 26                         \
8155          : ((v) & ~0x7f) == 0           \
8156            ? 25                         \
8157            : 24                         \
8158      : ((v) & ~0xfff) == 0              \
8159        ? ((v) & ~0x3ff) == 0            \
8160          ? ((v) & ~0x1ff) == 0          \
8161            ? 23                         \
8162            : 22                         \
8163          : ((v) & ~0x7ff) == 0          \
8164            ? 21                         \
8165            : 20                         \
8166        : ((v) & ~0x3fff) == 0           \
8167          ? ((v) & ~0x1fff) == 0         \
8168            ? 19                         \
8169            : 18                         \
8170          : ((v) & ~0x7fff) == 0         \
8171            ? 17                         \
8172            : 16                         \
8173    : ((v) & ~0xffffff) == 0             \
8174      ? ((v) & ~0xfffff) == 0            \
8175        ? ((v) & ~0x3ffff) == 0          \
8176          ? ((v) & ~0x1ffff) == 0        \
8177            ? 15                         \
8178            : 14                         \
8179          : ((v) & ~0x7ffff) == 0        \
8180            ? 13                         \
8181            : 12                         \
8182        : ((v) & ~0x3fffff) == 0         \
8183          ? ((v) & ~0x1fffff) == 0       \
8184            ? 11                         \
8185            : 10                         \
8186          : ((v) & ~0x7fffff) == 0       \
8187            ? 9                          \
8188            : 8                          \
8189      : ((v) & ~0xfffffff) == 0          \
8190        ? ((v) & ~0x3ffffff) == 0        \
8191          ? ((v) & ~0x1ffffff) == 0      \
8192            ? 7                          \
8193            : 6                          \
8194          : ((v) & ~0x7ffffff) == 0      \
8195            ? 5                          \
8196            : 4                          \
8197        : ((v) & ~0x3fffffff) == 0       \
8198          ? ((v) & ~0x1fffffff) == 0     \
8199            ? 3                          \
8200            : 2                          \
8201          : ((v) & ~0x7fffffff) == 0     \
8202            ? 1                          \
8203            : 0)
8204
8205 /*                      load_register()
8206  *  This routine generates the least number of instructions necessary to load
8207  *  an absolute expression value into a register.
8208  */
8209 static void
8210 load_register (int reg, expressionS *ep, int dbl)
8211 {
8212   int freg;
8213   expressionS hi32, lo32;
8214
8215   if (ep->X_op != O_big)
8216     {
8217       gas_assert (ep->X_op == O_constant);
8218
8219       /* Sign-extending 32-bit constants makes their handling easier.  */
8220       if (!dbl)
8221         normalize_constant_expr (ep);
8222
8223       if (IS_SEXT_16BIT_NUM (ep->X_add_number))
8224         {
8225           /* We can handle 16 bit signed values with an addiu to
8226              $zero.  No need to ever use daddiu here, since $zero and
8227              the result are always correct in 32 bit mode.  */
8228           macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8229           return;
8230         }
8231       else if (ep->X_add_number >= 0 && ep->X_add_number < 0x10000)
8232         {
8233           /* We can handle 16 bit unsigned values with an ori to
8234              $zero.  */
8235           macro_build (ep, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
8236           return;
8237         }
8238       else if ((IS_SEXT_32BIT_NUM (ep->X_add_number)))
8239         {
8240           /* 32 bit values require an lui.  */
8241           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
8242           if ((ep->X_add_number & 0xffff) != 0)
8243             macro_build (ep, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
8244           return;
8245         }
8246     }
8247
8248   /* The value is larger than 32 bits.  */
8249
8250   if (!dbl || HAVE_32BIT_GPRS)
8251     {
8252       char value[32];
8253
8254       sprintf_vma (value, ep->X_add_number);
8255       as_bad (_("Number (0x%s) larger than 32 bits"), value);
8256       macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8257       return;
8258     }
8259
8260   if (ep->X_op != O_big)
8261     {
8262       hi32 = *ep;
8263       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
8264       hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
8265       hi32.X_add_number &= 0xffffffff;
8266       lo32 = *ep;
8267       lo32.X_add_number &= 0xffffffff;
8268     }
8269   else
8270     {
8271       gas_assert (ep->X_add_number > 2);
8272       if (ep->X_add_number == 3)
8273         generic_bignum[3] = 0;
8274       else if (ep->X_add_number > 4)
8275         as_bad (_("Number larger than 64 bits"));
8276       lo32.X_op = O_constant;
8277       lo32.X_add_number = generic_bignum[0] + (generic_bignum[1] << 16);
8278       hi32.X_op = O_constant;
8279       hi32.X_add_number = generic_bignum[2] + (generic_bignum[3] << 16);
8280     }
8281
8282   if (hi32.X_add_number == 0)
8283     freg = 0;
8284   else
8285     {
8286       int shift, bit;
8287       unsigned long hi, lo;
8288
8289       if (hi32.X_add_number == (offsetT) 0xffffffff)
8290         {
8291           if ((lo32.X_add_number & 0xffff8000) == 0xffff8000)
8292             {
8293               macro_build (&lo32, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8294               return;
8295             }
8296           if (lo32.X_add_number & 0x80000000)
8297             {
8298               macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
8299               if (lo32.X_add_number & 0xffff)
8300                 macro_build (&lo32, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
8301               return;
8302             }
8303         }
8304
8305       /* Check for 16bit shifted constant.  We know that hi32 is
8306          non-zero, so start the mask on the first bit of the hi32
8307          value.  */
8308       shift = 17;
8309       do
8310         {
8311           unsigned long himask, lomask;
8312
8313           if (shift < 32)
8314             {
8315               himask = 0xffff >> (32 - shift);
8316               lomask = (0xffff << shift) & 0xffffffff;
8317             }
8318           else
8319             {
8320               himask = 0xffff << (shift - 32);
8321               lomask = 0;
8322             }
8323           if ((hi32.X_add_number & ~(offsetT) himask) == 0
8324               && (lo32.X_add_number & ~(offsetT) lomask) == 0)
8325             {
8326               expressionS tmp;
8327
8328               tmp.X_op = O_constant;
8329               if (shift < 32)
8330                 tmp.X_add_number = ((hi32.X_add_number << (32 - shift))
8331                                     | (lo32.X_add_number >> shift));
8332               else
8333                 tmp.X_add_number = hi32.X_add_number >> (shift - 32);
8334               macro_build (&tmp, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
8335               macro_build (NULL, (shift >= 32) ? "dsll32" : "dsll", SHFT_FMT,
8336                            reg, reg, (shift >= 32) ? shift - 32 : shift);
8337               return;
8338             }
8339           ++shift;
8340         }
8341       while (shift <= (64 - 16));
8342
8343       /* Find the bit number of the lowest one bit, and store the
8344          shifted value in hi/lo.  */
8345       hi = (unsigned long) (hi32.X_add_number & 0xffffffff);
8346       lo = (unsigned long) (lo32.X_add_number & 0xffffffff);
8347       if (lo != 0)
8348         {
8349           bit = 0;
8350           while ((lo & 1) == 0)
8351             {
8352               lo >>= 1;
8353               ++bit;
8354             }
8355           lo |= (hi & (((unsigned long) 1 << bit) - 1)) << (32 - bit);
8356           hi >>= bit;
8357         }
8358       else
8359         {
8360           bit = 32;
8361           while ((hi & 1) == 0)
8362             {
8363               hi >>= 1;
8364               ++bit;
8365             }
8366           lo = hi;
8367           hi = 0;
8368         }
8369
8370       /* Optimize if the shifted value is a (power of 2) - 1.  */
8371       if ((hi == 0 && ((lo + 1) & lo) == 0)
8372           || (lo == 0xffffffff && ((hi + 1) & hi) == 0))
8373         {
8374           shift = COUNT_TOP_ZEROES ((unsigned int) hi32.X_add_number);
8375           if (shift != 0)
8376             {
8377               expressionS tmp;
8378
8379               /* This instruction will set the register to be all
8380                  ones.  */
8381               tmp.X_op = O_constant;
8382               tmp.X_add_number = (offsetT) -1;
8383               macro_build (&tmp, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
8384               if (bit != 0)
8385                 {
8386                   bit += shift;
8387                   macro_build (NULL, (bit >= 32) ? "dsll32" : "dsll", SHFT_FMT,
8388                                reg, reg, (bit >= 32) ? bit - 32 : bit);
8389                 }
8390               macro_build (NULL, (shift >= 32) ? "dsrl32" : "dsrl", SHFT_FMT,
8391                            reg, reg, (shift >= 32) ? shift - 32 : shift);
8392               return;
8393             }
8394         }
8395
8396       /* Sign extend hi32 before calling load_register, because we can
8397          generally get better code when we load a sign extended value.  */
8398       if ((hi32.X_add_number & 0x80000000) != 0)
8399         hi32.X_add_number |= ~(offsetT) 0xffffffff;
8400       load_register (reg, &hi32, 0);
8401       freg = reg;
8402     }
8403   if ((lo32.X_add_number & 0xffff0000) == 0)
8404     {
8405       if (freg != 0)
8406         {
8407           macro_build (NULL, "dsll32", SHFT_FMT, reg, freg, 0);
8408           freg = reg;
8409         }
8410     }
8411   else
8412     {
8413       expressionS mid16;
8414
8415       if ((freg == 0) && (lo32.X_add_number == (offsetT) 0xffffffff))
8416         {
8417           macro_build (&lo32, "lui", LUI_FMT, reg, BFD_RELOC_HI16);
8418           macro_build (NULL, "dsrl32", SHFT_FMT, reg, reg, 0);
8419           return;
8420         }
8421
8422       if (freg != 0)
8423         {
8424           macro_build (NULL, "dsll", SHFT_FMT, reg, freg, 16);
8425           freg = reg;
8426         }
8427       mid16 = lo32;
8428       mid16.X_add_number >>= 16;
8429       macro_build (&mid16, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
8430       macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
8431       freg = reg;
8432     }
8433   if ((lo32.X_add_number & 0xffff) != 0)
8434     macro_build (&lo32, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
8435 }
8436
8437 static inline void
8438 load_delay_nop (void)
8439 {
8440   if (!gpr_interlocks)
8441     macro_build (NULL, "nop", "");
8442 }
8443
8444 /* Load an address into a register.  */
8445
8446 static void
8447 load_address (int reg, expressionS *ep, int *used_at)
8448 {
8449   if (ep->X_op != O_constant
8450       && ep->X_op != O_symbol)
8451     {
8452       as_bad (_("expression too complex"));
8453       ep->X_op = O_constant;
8454     }
8455
8456   if (ep->X_op == O_constant)
8457     {
8458       load_register (reg, ep, HAVE_64BIT_ADDRESSES);
8459       return;
8460     }
8461
8462   if (mips_pic == NO_PIC)
8463     {
8464       /* If this is a reference to a GP relative symbol, we want
8465            addiu        $reg,$gp,<sym>          (BFD_RELOC_GPREL16)
8466          Otherwise we want
8467            lui          $reg,<sym>              (BFD_RELOC_HI16_S)
8468            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
8469          If we have an addend, we always use the latter form.
8470
8471          With 64bit address space and a usable $at we want
8472            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
8473            lui          $at,<sym>               (BFD_RELOC_HI16_S)
8474            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
8475            daddiu       $at,<sym>               (BFD_RELOC_LO16)
8476            dsll32       $reg,0
8477            daddu        $reg,$reg,$at
8478
8479          If $at is already in use, we use a path which is suboptimal
8480          on superscalar processors.
8481            lui          $reg,<sym>              (BFD_RELOC_MIPS_HIGHEST)
8482            daddiu       $reg,<sym>              (BFD_RELOC_MIPS_HIGHER)
8483            dsll         $reg,16
8484            daddiu       $reg,<sym>              (BFD_RELOC_HI16_S)
8485            dsll         $reg,16
8486            daddiu       $reg,<sym>              (BFD_RELOC_LO16)
8487
8488          For GP relative symbols in 64bit address space we can use
8489          the same sequence as in 32bit address space.  */
8490       if (HAVE_64BIT_SYMBOLS)
8491         {
8492           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
8493               && !nopic_need_relax (ep->X_add_symbol, 1))
8494             {
8495               relax_start (ep->X_add_symbol);
8496               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
8497                            mips_gp_register, BFD_RELOC_GPREL16);
8498               relax_switch ();
8499             }
8500
8501           if (*used_at == 0 && mips_opts.at)
8502             {
8503               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
8504               macro_build (ep, "lui", LUI_FMT, AT, BFD_RELOC_HI16_S);
8505               macro_build (ep, "daddiu", "t,r,j", reg, reg,
8506                            BFD_RELOC_MIPS_HIGHER);
8507               macro_build (ep, "daddiu", "t,r,j", AT, AT, BFD_RELOC_LO16);
8508               macro_build (NULL, "dsll32", SHFT_FMT, reg, reg, 0);
8509               macro_build (NULL, "daddu", "d,v,t", reg, reg, AT);
8510               *used_at = 1;
8511             }
8512           else
8513             {
8514               macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_HIGHEST);
8515               macro_build (ep, "daddiu", "t,r,j", reg, reg,
8516                            BFD_RELOC_MIPS_HIGHER);
8517               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
8518               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_HI16_S);
8519               macro_build (NULL, "dsll", SHFT_FMT, reg, reg, 16);
8520               macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_LO16);
8521             }
8522
8523           if (mips_relax.sequence)
8524             relax_end ();
8525         }
8526       else
8527         {
8528           if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
8529               && !nopic_need_relax (ep->X_add_symbol, 1))
8530             {
8531               relax_start (ep->X_add_symbol);
8532               macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
8533                            mips_gp_register, BFD_RELOC_GPREL16);
8534               relax_switch ();
8535             }
8536           macro_build_lui (ep, reg);
8537           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j",
8538                        reg, reg, BFD_RELOC_LO16);
8539           if (mips_relax.sequence)
8540             relax_end ();
8541         }
8542     }
8543   else if (!mips_big_got)
8544     {
8545       expressionS ex;
8546
8547       /* If this is a reference to an external symbol, we want
8548            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
8549          Otherwise we want
8550            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
8551            nop
8552            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
8553          If there is a constant, it must be added in after.
8554
8555          If we have NewABI, we want
8556            lw           $reg,<sym+cst>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
8557          unless we're referencing a global symbol with a non-zero
8558          offset, in which case cst must be added separately.  */
8559       if (HAVE_NEWABI)
8560         {
8561           if (ep->X_add_number)
8562             {
8563               ex.X_add_number = ep->X_add_number;
8564               ep->X_add_number = 0;
8565               relax_start (ep->X_add_symbol);
8566               macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
8567                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
8568               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
8569                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
8570               ex.X_op = O_constant;
8571               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
8572                            reg, reg, BFD_RELOC_LO16);
8573               ep->X_add_number = ex.X_add_number;
8574               relax_switch ();
8575             }
8576           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
8577                        BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
8578           if (mips_relax.sequence)
8579             relax_end ();
8580         }
8581       else
8582         {
8583           ex.X_add_number = ep->X_add_number;
8584           ep->X_add_number = 0;
8585           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
8586                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
8587           load_delay_nop ();
8588           relax_start (ep->X_add_symbol);
8589           relax_switch ();
8590           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
8591                        BFD_RELOC_LO16);
8592           relax_end ();
8593
8594           if (ex.X_add_number != 0)
8595             {
8596               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
8597                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
8598               ex.X_op = O_constant;
8599               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
8600                            reg, reg, BFD_RELOC_LO16);
8601             }
8602         }
8603     }
8604   else if (mips_big_got)
8605     {
8606       expressionS ex;
8607
8608       /* This is the large GOT case.  If this is a reference to an
8609          external symbol, we want
8610            lui          $reg,<sym>              (BFD_RELOC_MIPS_GOT_HI16)
8611            addu         $reg,$reg,$gp
8612            lw           $reg,<sym>($reg)        (BFD_RELOC_MIPS_GOT_LO16)
8613
8614          Otherwise, for a reference to a local symbol in old ABI, we want
8615            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT16)
8616            nop
8617            addiu        $reg,$reg,<sym>         (BFD_RELOC_LO16)
8618          If there is a constant, it must be added in after.
8619
8620          In the NewABI, for local symbols, with or without offsets, we want:
8621            lw           $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
8622            addiu        $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
8623       */
8624       if (HAVE_NEWABI)
8625         {
8626           ex.X_add_number = ep->X_add_number;
8627           ep->X_add_number = 0;
8628           relax_start (ep->X_add_symbol);
8629           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
8630           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
8631                        reg, reg, mips_gp_register);
8632           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
8633                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
8634           if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
8635             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
8636           else if (ex.X_add_number)
8637             {
8638               ex.X_op = O_constant;
8639               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
8640                            BFD_RELOC_LO16);
8641             }
8642
8643           ep->X_add_number = ex.X_add_number;
8644           relax_switch ();
8645           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
8646                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
8647           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
8648                        BFD_RELOC_MIPS_GOT_OFST);
8649           relax_end ();
8650         }
8651       else
8652         {
8653           ex.X_add_number = ep->X_add_number;
8654           ep->X_add_number = 0;
8655           relax_start (ep->X_add_symbol);
8656           macro_build (ep, "lui", LUI_FMT, reg, BFD_RELOC_MIPS_GOT_HI16);
8657           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
8658                        reg, reg, mips_gp_register);
8659           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
8660                        reg, BFD_RELOC_MIPS_GOT_LO16, reg);
8661           relax_switch ();
8662           if (reg_needs_delay (mips_gp_register))
8663             {
8664               /* We need a nop before loading from $gp.  This special
8665                  check is required because the lui which starts the main
8666                  instruction stream does not refer to $gp, and so will not
8667                  insert the nop which may be required.  */
8668               macro_build (NULL, "nop", "");
8669             }
8670           macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
8671                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
8672           load_delay_nop ();
8673           macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
8674                        BFD_RELOC_LO16);
8675           relax_end ();
8676
8677           if (ex.X_add_number != 0)
8678             {
8679               if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
8680                 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
8681               ex.X_op = O_constant;
8682               macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
8683                            BFD_RELOC_LO16);
8684             }
8685         }
8686     }
8687   else
8688     abort ();
8689
8690   if (!mips_opts.at && *used_at == 1)
8691     as_bad (_("Macro used $at after \".set noat\""));
8692 }
8693
8694 /* Move the contents of register SOURCE into register DEST.  */
8695
8696 static void
8697 move_register (int dest, int source)
8698 {
8699   /* Prefer to use a 16-bit microMIPS instruction unless the previous
8700      instruction specifically requires a 32-bit one.  */
8701   if (mips_opts.micromips
8702       && !mips_opts.insn32
8703       && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
8704     macro_build (NULL, "move", "mp,mj", dest, source);
8705   else
8706     macro_build (NULL, HAVE_32BIT_GPRS ? "addu" : "daddu", "d,v,t",
8707                  dest, source, 0);
8708 }
8709
8710 /* Emit an SVR4 PIC sequence to load address LOCAL into DEST, where
8711    LOCAL is the sum of a symbol and a 16-bit or 32-bit displacement.
8712    The two alternatives are:
8713
8714    Global symbol                Local sybmol
8715    -------------                ------------
8716    lw DEST,%got(SYMBOL)         lw DEST,%got(SYMBOL + OFFSET)
8717    ...                          ...
8718    addiu DEST,DEST,OFFSET       addiu DEST,DEST,%lo(SYMBOL + OFFSET)
8719
8720    load_got_offset emits the first instruction and add_got_offset
8721    emits the second for a 16-bit offset or add_got_offset_hilo emits
8722    a sequence to add a 32-bit offset using a scratch register.  */
8723
8724 static void
8725 load_got_offset (int dest, expressionS *local)
8726 {
8727   expressionS global;
8728
8729   global = *local;
8730   global.X_add_number = 0;
8731
8732   relax_start (local->X_add_symbol);
8733   macro_build (&global, ADDRESS_LOAD_INSN, "t,o(b)", dest,
8734                BFD_RELOC_MIPS_GOT16, mips_gp_register);
8735   relax_switch ();
8736   macro_build (local, ADDRESS_LOAD_INSN, "t,o(b)", dest,
8737                BFD_RELOC_MIPS_GOT16, mips_gp_register);
8738   relax_end ();
8739 }
8740
8741 static void
8742 add_got_offset (int dest, expressionS *local)
8743 {
8744   expressionS global;
8745
8746   global.X_op = O_constant;
8747   global.X_op_symbol = NULL;
8748   global.X_add_symbol = NULL;
8749   global.X_add_number = local->X_add_number;
8750
8751   relax_start (local->X_add_symbol);
8752   macro_build (&global, ADDRESS_ADDI_INSN, "t,r,j",
8753                dest, dest, BFD_RELOC_LO16);
8754   relax_switch ();
8755   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", dest, dest, BFD_RELOC_LO16);
8756   relax_end ();
8757 }
8758
8759 static void
8760 add_got_offset_hilo (int dest, expressionS *local, int tmp)
8761 {
8762   expressionS global;
8763   int hold_mips_optimize;
8764
8765   global.X_op = O_constant;
8766   global.X_op_symbol = NULL;
8767   global.X_add_symbol = NULL;
8768   global.X_add_number = local->X_add_number;
8769
8770   relax_start (local->X_add_symbol);
8771   load_register (tmp, &global, HAVE_64BIT_ADDRESSES);
8772   relax_switch ();
8773   /* Set mips_optimize around the lui instruction to avoid
8774      inserting an unnecessary nop after the lw.  */
8775   hold_mips_optimize = mips_optimize;
8776   mips_optimize = 2;
8777   macro_build_lui (&global, tmp);
8778   mips_optimize = hold_mips_optimize;
8779   macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", tmp, tmp, BFD_RELOC_LO16);
8780   relax_end ();
8781
8782   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dest, dest, tmp);
8783 }
8784
8785 /* Emit a sequence of instructions to emulate a branch likely operation.
8786    BR is an ordinary branch corresponding to one to be emulated.  BRNEG
8787    is its complementing branch with the original condition negated.
8788    CALL is set if the original branch specified the link operation.
8789    EP, FMT, SREG and TREG specify the usual macro_build() parameters.
8790
8791    Code like this is produced in the noreorder mode:
8792
8793         BRNEG   <args>, 1f
8794          nop
8795         b       <sym>
8796          delay slot (executed only if branch taken)
8797     1:
8798
8799    or, if CALL is set:
8800
8801         BRNEG   <args>, 1f
8802          nop
8803         bal     <sym>
8804          delay slot (executed only if branch taken)
8805     1:
8806
8807    In the reorder mode the delay slot would be filled with a nop anyway,
8808    so code produced is simply:
8809
8810         BR      <args>, <sym>
8811          nop
8812
8813    This function is used when producing code for the microMIPS ASE that
8814    does not implement branch likely instructions in hardware.  */
8815
8816 static void
8817 macro_build_branch_likely (const char *br, const char *brneg,
8818                            int call, expressionS *ep, const char *fmt,
8819                            unsigned int sreg, unsigned int treg)
8820 {
8821   int noreorder = mips_opts.noreorder;
8822   expressionS expr1;
8823
8824   gas_assert (mips_opts.micromips);
8825   start_noreorder ();
8826   if (noreorder)
8827     {
8828       micromips_label_expr (&expr1);
8829       macro_build (&expr1, brneg, fmt, sreg, treg);
8830       macro_build (NULL, "nop", "");
8831       macro_build (ep, call ? "bal" : "b", "p");
8832
8833       /* Set to true so that append_insn adds a label.  */
8834       emit_branch_likely_macro = TRUE;
8835     }
8836   else
8837     {
8838       macro_build (ep, br, fmt, sreg, treg);
8839       macro_build (NULL, "nop", "");
8840     }
8841   end_noreorder ();
8842 }
8843
8844 /* Emit a coprocessor branch-likely macro specified by TYPE, using CC as
8845    the condition code tested.  EP specifies the branch target.  */
8846
8847 static void
8848 macro_build_branch_ccl (int type, expressionS *ep, unsigned int cc)
8849 {
8850   const int call = 0;
8851   const char *brneg;
8852   const char *br;
8853
8854   switch (type)
8855     {
8856     case M_BC1FL:
8857       br = "bc1f";
8858       brneg = "bc1t";
8859       break;
8860     case M_BC1TL:
8861       br = "bc1t";
8862       brneg = "bc1f";
8863       break;
8864     case M_BC2FL:
8865       br = "bc2f";
8866       brneg = "bc2t";
8867       break;
8868     case M_BC2TL:
8869       br = "bc2t";
8870       brneg = "bc2f";
8871       break;
8872     default:
8873       abort ();
8874     }
8875   macro_build_branch_likely (br, brneg, call, ep, "N,p", cc, ZERO);
8876 }
8877
8878 /* Emit a two-argument branch macro specified by TYPE, using SREG as
8879    the register tested.  EP specifies the branch target.  */
8880
8881 static void
8882 macro_build_branch_rs (int type, expressionS *ep, unsigned int sreg)
8883 {
8884   const char *brneg = NULL;
8885   const char *br;
8886   int call = 0;
8887
8888   switch (type)
8889     {
8890     case M_BGEZ:
8891       br = "bgez";
8892       break;
8893     case M_BGEZL:
8894       br = mips_opts.micromips ? "bgez" : "bgezl";
8895       brneg = "bltz";
8896       break;
8897     case M_BGEZALL:
8898       gas_assert (mips_opts.micromips);
8899       br = mips_opts.insn32 ? "bgezal" : "bgezals";
8900       brneg = "bltz";
8901       call = 1;
8902       break;
8903     case M_BGTZ:
8904       br = "bgtz";
8905       break;
8906     case M_BGTZL:
8907       br = mips_opts.micromips ? "bgtz" : "bgtzl";
8908       brneg = "blez";
8909       break;
8910     case M_BLEZ:
8911       br = "blez";
8912       break;
8913     case M_BLEZL:
8914       br = mips_opts.micromips ? "blez" : "blezl";
8915       brneg = "bgtz";
8916       break;
8917     case M_BLTZ:
8918       br = "bltz";
8919       break;
8920     case M_BLTZL:
8921       br = mips_opts.micromips ? "bltz" : "bltzl";
8922       brneg = "bgez";
8923       break;
8924     case M_BLTZALL:
8925       gas_assert (mips_opts.micromips);
8926       br = mips_opts.insn32 ? "bltzal" : "bltzals";
8927       brneg = "bgez";
8928       call = 1;
8929       break;
8930     default:
8931       abort ();
8932     }
8933   if (mips_opts.micromips && brneg)
8934     macro_build_branch_likely (br, brneg, call, ep, "s,p", sreg, ZERO);
8935   else
8936     macro_build (ep, br, "s,p", sreg);
8937 }
8938
8939 /* Emit a three-argument branch macro specified by TYPE, using SREG and
8940    TREG as the registers tested.  EP specifies the branch target.  */
8941
8942 static void
8943 macro_build_branch_rsrt (int type, expressionS *ep,
8944                          unsigned int sreg, unsigned int treg)
8945 {
8946   const char *brneg = NULL;
8947   const int call = 0;
8948   const char *br;
8949
8950   switch (type)
8951     {
8952     case M_BEQ:
8953     case M_BEQ_I:
8954       br = "beq";
8955       break;
8956     case M_BEQL:
8957     case M_BEQL_I:
8958       br = mips_opts.micromips ? "beq" : "beql";
8959       brneg = "bne";
8960       break;
8961     case M_BNE:
8962     case M_BNE_I:
8963       br = "bne";
8964       break;
8965     case M_BNEL:
8966     case M_BNEL_I:
8967       br = mips_opts.micromips ? "bne" : "bnel";
8968       brneg = "beq";
8969       break;
8970     default:
8971       abort ();
8972     }
8973   if (mips_opts.micromips && brneg)
8974     macro_build_branch_likely (br, brneg, call, ep, "s,t,p", sreg, treg);
8975   else
8976     macro_build (ep, br, "s,t,p", sreg, treg);
8977 }
8978
8979 /* Return the high part that should be loaded in order to make the low
8980    part of VALUE accessible using an offset of OFFBITS bits.  */
8981
8982 static offsetT
8983 offset_high_part (offsetT value, unsigned int offbits)
8984 {
8985   offsetT bias;
8986   addressT low_mask;
8987
8988   if (offbits == 0)
8989     return value;
8990   bias = 1 << (offbits - 1);
8991   low_mask = bias * 2 - 1;
8992   return (value + bias) & ~low_mask;
8993 }
8994
8995 /* Return true if the value stored in offset_expr and offset_reloc
8996    fits into a signed offset of OFFBITS bits.  RANGE is the maximum
8997    amount that the caller wants to add without inducing overflow
8998    and ALIGN is the known alignment of the value in bytes.  */
8999
9000 static bfd_boolean
9001 small_offset_p (unsigned int range, unsigned int align, unsigned int offbits)
9002 {
9003   if (offbits == 16)
9004     {
9005       /* Accept any relocation operator if overflow isn't a concern.  */
9006       if (range < align && *offset_reloc != BFD_RELOC_UNUSED)
9007         return TRUE;
9008
9009       /* These relocations are guaranteed not to overflow in correct links.  */
9010       if (*offset_reloc == BFD_RELOC_MIPS_LITERAL
9011           || gprel16_reloc_p (*offset_reloc))
9012         return TRUE;
9013     }
9014   if (offset_expr.X_op == O_constant
9015       && offset_high_part (offset_expr.X_add_number, offbits) == 0
9016       && offset_high_part (offset_expr.X_add_number + range, offbits) == 0)
9017     return TRUE;
9018   return FALSE;
9019 }
9020
9021 /*
9022  *                      Build macros
9023  *   This routine implements the seemingly endless macro or synthesized
9024  * instructions and addressing modes in the mips assembly language. Many
9025  * of these macros are simple and are similar to each other. These could
9026  * probably be handled by some kind of table or grammar approach instead of
9027  * this verbose method. Others are not simple macros but are more like
9028  * optimizing code generation.
9029  *   One interesting optimization is when several store macros appear
9030  * consecutively that would load AT with the upper half of the same address.
9031  * The ensuing load upper instructions are ommited. This implies some kind
9032  * of global optimization. We currently only optimize within a single macro.
9033  *   For many of the load and store macros if the address is specified as a
9034  * constant expression in the first 64k of memory (ie ld $2,0x4000c) we
9035  * first load register 'at' with zero and use it as the base register. The
9036  * mips assembler simply uses register $zero. Just one tiny optimization
9037  * we're missing.
9038  */
9039 static void
9040 macro (struct mips_cl_insn *ip, char *str)
9041 {
9042   const struct mips_operand_array *operands;
9043   unsigned int breg, i;
9044   unsigned int tempreg;
9045   int mask;
9046   int used_at = 0;
9047   expressionS label_expr;
9048   expressionS expr1;
9049   expressionS *ep;
9050   const char *s;
9051   const char *s2;
9052   const char *fmt;
9053   int likely = 0;
9054   int coproc = 0;
9055   int offbits = 16;
9056   int call = 0;
9057   int jals = 0;
9058   int dbl = 0;
9059   int imm = 0;
9060   int ust = 0;
9061   int lp = 0;
9062   bfd_boolean large_offset;
9063   int off;
9064   int hold_mips_optimize;
9065   unsigned int align;
9066   unsigned int op[MAX_OPERANDS];
9067
9068   gas_assert (! mips_opts.mips16);
9069
9070   operands = insn_operands (ip);
9071   for (i = 0; i < MAX_OPERANDS; i++)
9072     if (operands->operand[i])
9073       op[i] = insn_extract_operand (ip, operands->operand[i]);
9074     else
9075       op[i] = -1;
9076
9077   mask = ip->insn_mo->mask;
9078
9079   label_expr.X_op = O_constant;
9080   label_expr.X_op_symbol = NULL;
9081   label_expr.X_add_symbol = NULL;
9082   label_expr.X_add_number = 0;
9083
9084   expr1.X_op = O_constant;
9085   expr1.X_op_symbol = NULL;
9086   expr1.X_add_symbol = NULL;
9087   expr1.X_add_number = 1;
9088   align = 1;
9089
9090   switch (mask)
9091     {
9092     case M_DABS:
9093       dbl = 1;
9094     case M_ABS:
9095       /*    bgez    $a0,1f
9096             move    v0,$a0
9097             sub     v0,$zero,$a0
9098          1:
9099        */
9100
9101       start_noreorder ();
9102
9103       if (mips_opts.micromips)
9104         micromips_label_expr (&label_expr);
9105       else
9106         label_expr.X_add_number = 8;
9107       macro_build (&label_expr, "bgez", "s,p", op[1]);
9108       if (op[0] == op[1])
9109         macro_build (NULL, "nop", "");
9110       else
9111         move_register (op[0], op[1]);
9112       macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", op[0], 0, op[1]);
9113       if (mips_opts.micromips)
9114         micromips_add_label ();
9115
9116       end_noreorder ();
9117       break;
9118
9119     case M_ADD_I:
9120       s = "addi";
9121       s2 = "add";
9122       goto do_addi;
9123     case M_ADDU_I:
9124       s = "addiu";
9125       s2 = "addu";
9126       goto do_addi;
9127     case M_DADD_I:
9128       dbl = 1;
9129       s = "daddi";
9130       s2 = "dadd";
9131       if (!mips_opts.micromips)
9132         goto do_addi;
9133       if (imm_expr.X_op == O_constant
9134           && imm_expr.X_add_number >= -0x200
9135           && imm_expr.X_add_number < 0x200)
9136         {
9137           macro_build (NULL, s, "t,r,.", op[0], op[1], imm_expr.X_add_number);
9138           break;
9139         }
9140       goto do_addi_i;
9141     case M_DADDU_I:
9142       dbl = 1;
9143       s = "daddiu";
9144       s2 = "daddu";
9145     do_addi:
9146       if (imm_expr.X_op == O_constant
9147           && imm_expr.X_add_number >= -0x8000
9148           && imm_expr.X_add_number < 0x8000)
9149         {
9150           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
9151           break;
9152         }
9153     do_addi_i:
9154       used_at = 1;
9155       load_register (AT, &imm_expr, dbl);
9156       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9157       break;
9158
9159     case M_AND_I:
9160       s = "andi";
9161       s2 = "and";
9162       goto do_bit;
9163     case M_OR_I:
9164       s = "ori";
9165       s2 = "or";
9166       goto do_bit;
9167     case M_NOR_I:
9168       s = "";
9169       s2 = "nor";
9170       goto do_bit;
9171     case M_XOR_I:
9172       s = "xori";
9173       s2 = "xor";
9174     do_bit:
9175       if (imm_expr.X_op == O_constant
9176           && imm_expr.X_add_number >= 0
9177           && imm_expr.X_add_number < 0x10000)
9178         {
9179           if (mask != M_NOR_I)
9180             macro_build (&imm_expr, s, "t,r,i", op[0], op[1], BFD_RELOC_LO16);
9181           else
9182             {
9183               macro_build (&imm_expr, "ori", "t,r,i",
9184                            op[0], op[1], BFD_RELOC_LO16);
9185               macro_build (NULL, "nor", "d,v,t", op[0], op[0], 0);
9186             }
9187           break;
9188         }
9189
9190       used_at = 1;
9191       load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
9192       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
9193       break;
9194
9195     case M_BALIGN:
9196       switch (imm_expr.X_add_number)
9197         {
9198         case 0:
9199           macro_build (NULL, "nop", "");
9200           break;
9201         case 2:
9202           macro_build (NULL, "packrl.ph", "d,s,t", op[0], op[0], op[1]);
9203           break;
9204         case 1:
9205         case 3:
9206           macro_build (NULL, "balign", "t,s,2", op[0], op[1],
9207                        (int) imm_expr.X_add_number);
9208           break;
9209         default:
9210           as_bad (_("BALIGN immediate not 0, 1, 2 or 3 (%lu)"),
9211                   (unsigned long) imm_expr.X_add_number);
9212           break;
9213         }
9214       break;
9215
9216     case M_BC1FL:
9217     case M_BC1TL:
9218     case M_BC2FL:
9219     case M_BC2TL:
9220       gas_assert (mips_opts.micromips);
9221       macro_build_branch_ccl (mask, &offset_expr,
9222                               EXTRACT_OPERAND (1, BCC, *ip));
9223       break;
9224
9225     case M_BEQ_I:
9226     case M_BEQL_I:
9227     case M_BNE_I:
9228     case M_BNEL_I:
9229       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
9230         op[1] = 0;
9231       else
9232         {
9233           op[1] = AT;
9234           used_at = 1;
9235           load_register (op[1], &imm_expr, HAVE_64BIT_GPRS);
9236         }
9237       /* Fall through.  */
9238     case M_BEQL:
9239     case M_BNEL:
9240       macro_build_branch_rsrt (mask, &offset_expr, op[0], op[1]);
9241       break;
9242
9243     case M_BGEL:
9244       likely = 1;
9245     case M_BGE:
9246       if (op[1] == 0)
9247         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[0]);
9248       else if (op[0] == 0)
9249         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[1]);
9250       else
9251         {
9252           used_at = 1;
9253           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
9254           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9255                                    &offset_expr, AT, ZERO);
9256         }
9257       break;
9258
9259     case M_BGEZL:
9260     case M_BGEZALL:
9261     case M_BGTZL:
9262     case M_BLEZL:
9263     case M_BLTZL:
9264     case M_BLTZALL:
9265       macro_build_branch_rs (mask, &offset_expr, op[0]);
9266       break;
9267
9268     case M_BGTL_I:
9269       likely = 1;
9270     case M_BGT_I:
9271       /* Check for > max integer.  */
9272       if (imm_expr.X_op == O_constant && imm_expr.X_add_number >= GPR_SMAX)
9273         {
9274         do_false:
9275           /* Result is always false.  */
9276           if (! likely)
9277             macro_build (NULL, "nop", "");
9278           else
9279             macro_build_branch_rsrt (M_BNEL, &offset_expr, ZERO, ZERO);
9280           break;
9281         }
9282       if (imm_expr.X_op != O_constant)
9283         as_bad (_("Unsupported large constant"));
9284       ++imm_expr.X_add_number;
9285       /* FALLTHROUGH */
9286     case M_BGE_I:
9287     case M_BGEL_I:
9288       if (mask == M_BGEL_I)
9289         likely = 1;
9290       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
9291         {
9292           macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ,
9293                                  &offset_expr, op[0]);
9294           break;
9295         }
9296       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
9297         {
9298           macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ,
9299                                  &offset_expr, op[0]);
9300           break;
9301         }
9302       if (imm_expr.X_op == O_constant && imm_expr.X_add_number <= GPR_SMIN)
9303         {
9304         do_true:
9305           /* result is always true */
9306           as_warn (_("Branch %s is always true"), ip->insn_mo->name);
9307           macro_build (&offset_expr, "b", "p");
9308           break;
9309         }
9310       used_at = 1;
9311       set_at (op[0], 0);
9312       macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9313                                &offset_expr, AT, ZERO);
9314       break;
9315
9316     case M_BGEUL:
9317       likely = 1;
9318     case M_BGEU:
9319       if (op[1] == 0)
9320         goto do_true;
9321       else if (op[0] == 0)
9322         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9323                                  &offset_expr, ZERO, op[1]);
9324       else
9325         {
9326           used_at = 1;
9327           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
9328           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9329                                    &offset_expr, AT, ZERO);
9330         }
9331       break;
9332
9333     case M_BGTUL_I:
9334       likely = 1;
9335     case M_BGTU_I:
9336       if (op[0] == 0
9337           || (HAVE_32BIT_GPRS
9338               && imm_expr.X_op == O_constant
9339               && imm_expr.X_add_number == -1))
9340         goto do_false;
9341       if (imm_expr.X_op != O_constant)
9342         as_bad (_("Unsupported large constant"));
9343       ++imm_expr.X_add_number;
9344       /* FALLTHROUGH */
9345     case M_BGEU_I:
9346     case M_BGEUL_I:
9347       if (mask == M_BGEUL_I)
9348         likely = 1;
9349       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
9350         goto do_true;
9351       else if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
9352         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9353                                  &offset_expr, op[0], ZERO);
9354       else
9355         {
9356           used_at = 1;
9357           set_at (op[0], 1);
9358           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9359                                    &offset_expr, AT, ZERO);
9360         }
9361       break;
9362
9363     case M_BGTL:
9364       likely = 1;
9365     case M_BGT:
9366       if (op[1] == 0)
9367         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[0]);
9368       else if (op[0] == 0)
9369         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[1]);
9370       else
9371         {
9372           used_at = 1;
9373           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
9374           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9375                                    &offset_expr, AT, ZERO);
9376         }
9377       break;
9378
9379     case M_BGTUL:
9380       likely = 1;
9381     case M_BGTU:
9382       if (op[1] == 0)
9383         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9384                                  &offset_expr, op[0], ZERO);
9385       else if (op[0] == 0)
9386         goto do_false;
9387       else
9388         {
9389           used_at = 1;
9390           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
9391           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9392                                    &offset_expr, AT, ZERO);
9393         }
9394       break;
9395
9396     case M_BLEL:
9397       likely = 1;
9398     case M_BLE:
9399       if (op[1] == 0)
9400         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
9401       else if (op[0] == 0)
9402         macro_build_branch_rs (likely ? M_BGEZL : M_BGEZ, &offset_expr, op[1]);
9403       else
9404         {
9405           used_at = 1;
9406           macro_build (NULL, "slt", "d,v,t", AT, op[1], op[0]);
9407           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9408                                    &offset_expr, AT, ZERO);
9409         }
9410       break;
9411
9412     case M_BLEL_I:
9413       likely = 1;
9414     case M_BLE_I:
9415       if (imm_expr.X_op == O_constant && imm_expr.X_add_number >= GPR_SMAX)
9416         goto do_true;
9417       if (imm_expr.X_op != O_constant)
9418         as_bad (_("Unsupported large constant"));
9419       ++imm_expr.X_add_number;
9420       /* FALLTHROUGH */
9421     case M_BLT_I:
9422     case M_BLTL_I:
9423       if (mask == M_BLTL_I)
9424         likely = 1;
9425       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
9426         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
9427       else if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
9428         macro_build_branch_rs (likely ? M_BLEZL : M_BLEZ, &offset_expr, op[0]);
9429       else
9430         {
9431           used_at = 1;
9432           set_at (op[0], 0);
9433           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9434                                    &offset_expr, AT, ZERO);
9435         }
9436       break;
9437
9438     case M_BLEUL:
9439       likely = 1;
9440     case M_BLEU:
9441       if (op[1] == 0)
9442         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9443                                  &offset_expr, op[0], ZERO);
9444       else if (op[0] == 0)
9445         goto do_true;
9446       else
9447         {
9448           used_at = 1;
9449           macro_build (NULL, "sltu", "d,v,t", AT, op[1], op[0]);
9450           macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9451                                    &offset_expr, AT, ZERO);
9452         }
9453       break;
9454
9455     case M_BLEUL_I:
9456       likely = 1;
9457     case M_BLEU_I:
9458       if (op[0] == 0
9459           || (HAVE_32BIT_GPRS
9460               && imm_expr.X_op == O_constant
9461               && imm_expr.X_add_number == -1))
9462         goto do_true;
9463       if (imm_expr.X_op != O_constant)
9464         as_bad (_("Unsupported large constant"));
9465       ++imm_expr.X_add_number;
9466       /* FALLTHROUGH */
9467     case M_BLTU_I:
9468     case M_BLTUL_I:
9469       if (mask == M_BLTUL_I)
9470         likely = 1;
9471       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
9472         goto do_false;
9473       else if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
9474         macro_build_branch_rsrt (likely ? M_BEQL : M_BEQ,
9475                                  &offset_expr, op[0], ZERO);
9476       else
9477         {
9478           used_at = 1;
9479           set_at (op[0], 1);
9480           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9481                                    &offset_expr, AT, ZERO);
9482         }
9483       break;
9484
9485     case M_BLTL:
9486       likely = 1;
9487     case M_BLT:
9488       if (op[1] == 0)
9489         macro_build_branch_rs (likely ? M_BLTZL : M_BLTZ, &offset_expr, op[0]);
9490       else if (op[0] == 0)
9491         macro_build_branch_rs (likely ? M_BGTZL : M_BGTZ, &offset_expr, op[1]);
9492       else
9493         {
9494           used_at = 1;
9495           macro_build (NULL, "slt", "d,v,t", AT, op[0], op[1]);
9496           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9497                                    &offset_expr, AT, ZERO);
9498         }
9499       break;
9500
9501     case M_BLTUL:
9502       likely = 1;
9503     case M_BLTU:
9504       if (op[1] == 0)
9505         goto do_false;
9506       else if (op[0] == 0)
9507         macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9508                                  &offset_expr, ZERO, op[1]);
9509       else
9510         {
9511           used_at = 1;
9512           macro_build (NULL, "sltu", "d,v,t", AT, op[0], op[1]);
9513           macro_build_branch_rsrt (likely ? M_BNEL : M_BNE,
9514                                    &offset_expr, AT, ZERO);
9515         }
9516       break;
9517
9518     case M_DEXT:
9519       {
9520         /* Use unsigned arithmetic.  */
9521         addressT pos;
9522         addressT size;
9523
9524         if (imm_expr.X_op != O_constant || imm2_expr.X_op != O_constant)
9525           {
9526             as_bad (_("Unsupported large constant"));
9527             pos = size = 1;
9528           }
9529         else
9530           {
9531             pos = imm_expr.X_add_number;
9532             size = imm2_expr.X_add_number;
9533           }
9534
9535         if (pos > 63)
9536           {
9537             report_bad_range (ip, 3, pos, 0, 63, FALSE);
9538             pos = 1;
9539           }
9540         if (size == 0 || size > 64 || (pos + size - 1) > 63)
9541           {
9542             report_bad_field (pos, size);
9543             size = 1;
9544           }
9545
9546         if (size <= 32 && pos < 32)
9547           {
9548             s = "dext";
9549             fmt = "t,r,+A,+C";
9550           }
9551         else if (size <= 32)
9552           {
9553             s = "dextu";
9554             fmt = "t,r,+E,+H";
9555           }
9556         else
9557           {
9558             s = "dextm";
9559             fmt = "t,r,+A,+G";
9560           }
9561         macro_build ((expressionS *) NULL, s, fmt, op[0], op[1], (int) pos,
9562                      (int) (size - 1));
9563       }
9564       break;
9565
9566     case M_DINS:
9567       {
9568         /* Use unsigned arithmetic.  */
9569         addressT pos;
9570         addressT size;
9571
9572         if (imm_expr.X_op != O_constant || imm2_expr.X_op != O_constant)
9573           {
9574             as_bad (_("Unsupported large constant"));
9575             pos = size = 1;
9576           }
9577         else
9578           {
9579             pos = imm_expr.X_add_number;
9580             size = imm2_expr.X_add_number;
9581           }
9582
9583         if (pos > 63)
9584           {
9585             report_bad_range (ip, 3, pos, 0, 63, FALSE);
9586             pos = 1;
9587           }
9588         if (size == 0 || size > 64 || (pos + size - 1) > 63)
9589           {
9590             report_bad_field (pos, size);
9591             size = 1;
9592           }
9593
9594         if (pos < 32 && (pos + size - 1) < 32)
9595           {
9596             s = "dins";
9597             fmt = "t,r,+A,+B";
9598           }
9599         else if (pos >= 32)
9600           {
9601             s = "dinsu";
9602             fmt = "t,r,+E,+F";
9603           }
9604         else
9605           {
9606             s = "dinsm";
9607             fmt = "t,r,+A,+F";
9608           }
9609         macro_build ((expressionS *) NULL, s, fmt, op[0], op[1], (int) pos,
9610                      (int) (pos + size - 1));
9611       }
9612       break;
9613
9614     case M_DDIV_3:
9615       dbl = 1;
9616     case M_DIV_3:
9617       s = "mflo";
9618       goto do_div3;
9619     case M_DREM_3:
9620       dbl = 1;
9621     case M_REM_3:
9622       s = "mfhi";
9623     do_div3:
9624       if (op[2] == 0)
9625         {
9626           as_warn (_("Divide by zero."));
9627           if (mips_trap)
9628             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
9629           else
9630             macro_build (NULL, "break", BRK_FMT, 7);
9631           break;
9632         }
9633
9634       start_noreorder ();
9635       if (mips_trap)
9636         {
9637           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
9638           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
9639         }
9640       else
9641         {
9642           if (mips_opts.micromips)
9643             micromips_label_expr (&label_expr);
9644           else
9645             label_expr.X_add_number = 8;
9646           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
9647           macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", op[1], op[2]);
9648           macro_build (NULL, "break", BRK_FMT, 7);
9649           if (mips_opts.micromips)
9650             micromips_add_label ();
9651         }
9652       expr1.X_add_number = -1;
9653       used_at = 1;
9654       load_register (AT, &expr1, dbl);
9655       if (mips_opts.micromips)
9656         micromips_label_expr (&label_expr);
9657       else
9658         label_expr.X_add_number = mips_trap ? (dbl ? 12 : 8) : (dbl ? 20 : 16);
9659       macro_build (&label_expr, "bne", "s,t,p", op[2], AT);
9660       if (dbl)
9661         {
9662           expr1.X_add_number = 1;
9663           load_register (AT, &expr1, dbl);
9664           macro_build (NULL, "dsll32", SHFT_FMT, AT, AT, 31);
9665         }
9666       else
9667         {
9668           expr1.X_add_number = 0x80000000;
9669           macro_build (&expr1, "lui", LUI_FMT, AT, BFD_RELOC_HI16);
9670         }
9671       if (mips_trap)
9672         {
9673           macro_build (NULL, "teq", TRAP_FMT, op[1], AT, 6);
9674           /* We want to close the noreorder block as soon as possible, so
9675              that later insns are available for delay slot filling.  */
9676           end_noreorder ();
9677         }
9678       else
9679         {
9680           if (mips_opts.micromips)
9681             micromips_label_expr (&label_expr);
9682           else
9683             label_expr.X_add_number = 8;
9684           macro_build (&label_expr, "bne", "s,t,p", op[1], AT);
9685           macro_build (NULL, "nop", "");
9686
9687           /* We want to close the noreorder block as soon as possible, so
9688              that later insns are available for delay slot filling.  */
9689           end_noreorder ();
9690
9691           macro_build (NULL, "break", BRK_FMT, 6);
9692         }
9693       if (mips_opts.micromips)
9694         micromips_add_label ();
9695       macro_build (NULL, s, MFHL_FMT, op[0]);
9696       break;
9697
9698     case M_DIV_3I:
9699       s = "div";
9700       s2 = "mflo";
9701       goto do_divi;
9702     case M_DIVU_3I:
9703       s = "divu";
9704       s2 = "mflo";
9705       goto do_divi;
9706     case M_REM_3I:
9707       s = "div";
9708       s2 = "mfhi";
9709       goto do_divi;
9710     case M_REMU_3I:
9711       s = "divu";
9712       s2 = "mfhi";
9713       goto do_divi;
9714     case M_DDIV_3I:
9715       dbl = 1;
9716       s = "ddiv";
9717       s2 = "mflo";
9718       goto do_divi;
9719     case M_DDIVU_3I:
9720       dbl = 1;
9721       s = "ddivu";
9722       s2 = "mflo";
9723       goto do_divi;
9724     case M_DREM_3I:
9725       dbl = 1;
9726       s = "ddiv";
9727       s2 = "mfhi";
9728       goto do_divi;
9729     case M_DREMU_3I:
9730       dbl = 1;
9731       s = "ddivu";
9732       s2 = "mfhi";
9733     do_divi:
9734       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
9735         {
9736           as_warn (_("Divide by zero."));
9737           if (mips_trap)
9738             macro_build (NULL, "teq", TRAP_FMT, ZERO, ZERO, 7);
9739           else
9740             macro_build (NULL, "break", BRK_FMT, 7);
9741           break;
9742         }
9743       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
9744         {
9745           if (strcmp (s2, "mflo") == 0)
9746             move_register (op[0], op[1]);
9747           else
9748             move_register (op[0], ZERO);
9749           break;
9750         }
9751       if (imm_expr.X_op == O_constant
9752           && imm_expr.X_add_number == -1
9753           && s[strlen (s) - 1] != 'u')
9754         {
9755           if (strcmp (s2, "mflo") == 0)
9756             macro_build (NULL, dbl ? "dneg" : "neg", "d,w", op[0], op[1]);
9757           else
9758             move_register (op[0], ZERO);
9759           break;
9760         }
9761
9762       used_at = 1;
9763       load_register (AT, &imm_expr, dbl);
9764       macro_build (NULL, s, "z,s,t", op[1], AT);
9765       macro_build (NULL, s2, MFHL_FMT, op[0]);
9766       break;
9767
9768     case M_DIVU_3:
9769       s = "divu";
9770       s2 = "mflo";
9771       goto do_divu3;
9772     case M_REMU_3:
9773       s = "divu";
9774       s2 = "mfhi";
9775       goto do_divu3;
9776     case M_DDIVU_3:
9777       s = "ddivu";
9778       s2 = "mflo";
9779       goto do_divu3;
9780     case M_DREMU_3:
9781       s = "ddivu";
9782       s2 = "mfhi";
9783     do_divu3:
9784       start_noreorder ();
9785       if (mips_trap)
9786         {
9787           macro_build (NULL, "teq", TRAP_FMT, op[2], ZERO, 7);
9788           macro_build (NULL, s, "z,s,t", op[1], op[2]);
9789           /* We want to close the noreorder block as soon as possible, so
9790              that later insns are available for delay slot filling.  */
9791           end_noreorder ();
9792         }
9793       else
9794         {
9795           if (mips_opts.micromips)
9796             micromips_label_expr (&label_expr);
9797           else
9798             label_expr.X_add_number = 8;
9799           macro_build (&label_expr, "bne", "s,t,p", op[2], ZERO);
9800           macro_build (NULL, s, "z,s,t", op[1], op[2]);
9801
9802           /* We want to close the noreorder block as soon as possible, so
9803              that later insns are available for delay slot filling.  */
9804           end_noreorder ();
9805           macro_build (NULL, "break", BRK_FMT, 7);
9806           if (mips_opts.micromips)
9807             micromips_add_label ();
9808         }
9809       macro_build (NULL, s2, MFHL_FMT, op[0]);
9810       break;
9811
9812     case M_DLCA_AB:
9813       dbl = 1;
9814     case M_LCA_AB:
9815       call = 1;
9816       goto do_la;
9817     case M_DLA_AB:
9818       dbl = 1;
9819     case M_LA_AB:
9820     do_la:
9821       /* Load the address of a symbol into a register.  If breg is not
9822          zero, we then add a base register to it.  */
9823
9824       breg = op[2];
9825       if (dbl && HAVE_32BIT_GPRS)
9826         as_warn (_("dla used to load 32-bit register"));
9827
9828       if (!dbl && HAVE_64BIT_OBJECTS)
9829         as_warn (_("la used to load 64-bit address"));
9830
9831       if (small_offset_p (0, align, 16))
9832         {
9833           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", op[0], breg,
9834                        -1, offset_reloc[0], offset_reloc[1], offset_reloc[2]);
9835           break;
9836         }
9837
9838       if (mips_opts.at && (op[0] == breg))
9839         {
9840           tempreg = AT;
9841           used_at = 1;
9842         }
9843       else
9844         tempreg = op[0];
9845
9846       if (offset_expr.X_op != O_symbol
9847           && offset_expr.X_op != O_constant)
9848         {
9849           as_bad (_("Expression too complex"));
9850           offset_expr.X_op = O_constant;
9851         }
9852
9853       if (offset_expr.X_op == O_constant)
9854         load_register (tempreg, &offset_expr, HAVE_64BIT_ADDRESSES);
9855       else if (mips_pic == NO_PIC)
9856         {
9857           /* If this is a reference to a GP relative symbol, we want
9858                addiu    $tempreg,$gp,<sym>      (BFD_RELOC_GPREL16)
9859              Otherwise we want
9860                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
9861                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
9862              If we have a constant, we need two instructions anyhow,
9863              so we may as well always use the latter form.
9864
9865              With 64bit address space and a usable $at we want
9866                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
9867                lui      $at,<sym>               (BFD_RELOC_HI16_S)
9868                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
9869                daddiu   $at,<sym>               (BFD_RELOC_LO16)
9870                dsll32   $tempreg,0
9871                daddu    $tempreg,$tempreg,$at
9872
9873              If $at is already in use, we use a path which is suboptimal
9874              on superscalar processors.
9875                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
9876                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
9877                dsll     $tempreg,16
9878                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
9879                dsll     $tempreg,16
9880                daddiu   $tempreg,<sym>          (BFD_RELOC_LO16)
9881
9882              For GP relative symbols in 64bit address space we can use
9883              the same sequence as in 32bit address space.  */
9884           if (HAVE_64BIT_SYMBOLS)
9885             {
9886               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
9887                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
9888                 {
9889                   relax_start (offset_expr.X_add_symbol);
9890                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
9891                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
9892                   relax_switch ();
9893                 }
9894
9895               if (used_at == 0 && mips_opts.at)
9896                 {
9897                   macro_build (&offset_expr, "lui", LUI_FMT,
9898                                tempreg, BFD_RELOC_MIPS_HIGHEST);
9899                   macro_build (&offset_expr, "lui", LUI_FMT,
9900                                AT, BFD_RELOC_HI16_S);
9901                   macro_build (&offset_expr, "daddiu", "t,r,j",
9902                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
9903                   macro_build (&offset_expr, "daddiu", "t,r,j",
9904                                AT, AT, BFD_RELOC_LO16);
9905                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
9906                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
9907                   used_at = 1;
9908                 }
9909               else
9910                 {
9911                   macro_build (&offset_expr, "lui", LUI_FMT,
9912                                tempreg, BFD_RELOC_MIPS_HIGHEST);
9913                   macro_build (&offset_expr, "daddiu", "t,r,j",
9914                                tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
9915                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
9916                   macro_build (&offset_expr, "daddiu", "t,r,j",
9917                                tempreg, tempreg, BFD_RELOC_HI16_S);
9918                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
9919                   macro_build (&offset_expr, "daddiu", "t,r,j",
9920                                tempreg, tempreg, BFD_RELOC_LO16);
9921                 }
9922
9923               if (mips_relax.sequence)
9924                 relax_end ();
9925             }
9926           else
9927             {
9928               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
9929                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
9930                 {
9931                   relax_start (offset_expr.X_add_symbol);
9932                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
9933                                tempreg, mips_gp_register, BFD_RELOC_GPREL16);
9934                   relax_switch ();
9935                 }
9936               if (!IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
9937                 as_bad (_("Offset too large"));
9938               macro_build_lui (&offset_expr, tempreg);
9939               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
9940                            tempreg, tempreg, BFD_RELOC_LO16);
9941               if (mips_relax.sequence)
9942                 relax_end ();
9943             }
9944         }
9945       else if (!mips_big_got && !HAVE_NEWABI)
9946         {
9947           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
9948
9949           /* If this is a reference to an external symbol, and there
9950              is no constant, we want
9951                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
9952              or for lca or if tempreg is PIC_CALL_REG
9953                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
9954              For a local symbol, we want
9955                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
9956                nop
9957                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
9958
9959              If we have a small constant, and this is a reference to
9960              an external symbol, we want
9961                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
9962                nop
9963                addiu    $tempreg,$tempreg,<constant>
9964              For a local symbol, we want the same instruction
9965              sequence, but we output a BFD_RELOC_LO16 reloc on the
9966              addiu instruction.
9967
9968              If we have a large constant, and this is a reference to
9969              an external symbol, we want
9970                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
9971                lui      $at,<hiconstant>
9972                addiu    $at,$at,<loconstant>
9973                addu     $tempreg,$tempreg,$at
9974              For a local symbol, we want the same instruction
9975              sequence, but we output a BFD_RELOC_LO16 reloc on the
9976              addiu instruction.
9977            */
9978
9979           if (offset_expr.X_add_number == 0)
9980             {
9981               if (mips_pic == SVR4_PIC
9982                   && breg == 0
9983                   && (call || tempreg == PIC_CALL_REG))
9984                 lw_reloc_type = (int) BFD_RELOC_MIPS_CALL16;
9985
9986               relax_start (offset_expr.X_add_symbol);
9987               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
9988                            lw_reloc_type, mips_gp_register);
9989               if (breg != 0)
9990                 {
9991                   /* We're going to put in an addu instruction using
9992                      tempreg, so we may as well insert the nop right
9993                      now.  */
9994                   load_delay_nop ();
9995                 }
9996               relax_switch ();
9997               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
9998                            tempreg, BFD_RELOC_MIPS_GOT16, mips_gp_register);
9999               load_delay_nop ();
10000               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10001                            tempreg, tempreg, BFD_RELOC_LO16);
10002               relax_end ();
10003               /* FIXME: If breg == 0, and the next instruction uses
10004                  $tempreg, then if this variant case is used an extra
10005                  nop will be generated.  */
10006             }
10007           else if (offset_expr.X_add_number >= -0x8000
10008                    && offset_expr.X_add_number < 0x8000)
10009             {
10010               load_got_offset (tempreg, &offset_expr);
10011               load_delay_nop ();
10012               add_got_offset (tempreg, &offset_expr);
10013             }
10014           else
10015             {
10016               expr1.X_add_number = offset_expr.X_add_number;
10017               offset_expr.X_add_number =
10018                 SEXT_16BIT (offset_expr.X_add_number);
10019               load_got_offset (tempreg, &offset_expr);
10020               offset_expr.X_add_number = expr1.X_add_number;
10021               /* If we are going to add in a base register, and the
10022                  target register and the base register are the same,
10023                  then we are using AT as a temporary register.  Since
10024                  we want to load the constant into AT, we add our
10025                  current AT (from the global offset table) and the
10026                  register into the register now, and pretend we were
10027                  not using a base register.  */
10028               if (breg == op[0])
10029                 {
10030                   load_delay_nop ();
10031                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10032                                op[0], AT, breg);
10033                   breg = 0;
10034                   tempreg = op[0];
10035                 }
10036               add_got_offset_hilo (tempreg, &offset_expr, AT);
10037               used_at = 1;
10038             }
10039         }
10040       else if (!mips_big_got && HAVE_NEWABI)
10041         {
10042           int add_breg_early = 0;
10043
10044           /* If this is a reference to an external, and there is no
10045              constant, or local symbol (*), with or without a
10046              constant, we want
10047                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10048              or for lca or if tempreg is PIC_CALL_REG
10049                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_CALL16)
10050
10051              If we have a small constant, and this is a reference to
10052              an external symbol, we want
10053                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10054                addiu    $tempreg,$tempreg,<constant>
10055
10056              If we have a large constant, and this is a reference to
10057              an external symbol, we want
10058                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_DISP)
10059                lui      $at,<hiconstant>
10060                addiu    $at,$at,<loconstant>
10061                addu     $tempreg,$tempreg,$at
10062
10063              (*) Other assemblers seem to prefer GOT_PAGE/GOT_OFST for
10064              local symbols, even though it introduces an additional
10065              instruction.  */
10066
10067           if (offset_expr.X_add_number)
10068             {
10069               expr1.X_add_number = offset_expr.X_add_number;
10070               offset_expr.X_add_number = 0;
10071
10072               relax_start (offset_expr.X_add_symbol);
10073               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10074                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10075
10076               if (expr1.X_add_number >= -0x8000
10077                   && expr1.X_add_number < 0x8000)
10078                 {
10079                   macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10080                                tempreg, tempreg, BFD_RELOC_LO16);
10081                 }
10082               else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
10083                 {
10084                   unsigned int dreg;
10085
10086                   /* If we are going to add in a base register, and the
10087                      target register and the base register are the same,
10088                      then we are using AT as a temporary register.  Since
10089                      we want to load the constant into AT, we add our
10090                      current AT (from the global offset table) and the
10091                      register into the register now, and pretend we were
10092                      not using a base register.  */
10093                   if (breg != op[0])
10094                     dreg = tempreg;
10095                   else
10096                     {
10097                       gas_assert (tempreg == AT);
10098                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10099                                    op[0], AT, breg);
10100                       dreg = op[0];
10101                       add_breg_early = 1;
10102                     }
10103
10104                   load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10105                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10106                                dreg, dreg, AT);
10107
10108                   used_at = 1;
10109                 }
10110               else
10111                 as_bad (_("PIC code offset overflow (max 32 signed bits)"));
10112
10113               relax_switch ();
10114               offset_expr.X_add_number = expr1.X_add_number;
10115
10116               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10117                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10118               if (add_breg_early)
10119                 {
10120                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10121                                op[0], tempreg, breg);
10122                   breg = 0;
10123                   tempreg = op[0];
10124                 }
10125               relax_end ();
10126             }
10127           else if (breg == 0 && (call || tempreg == PIC_CALL_REG))
10128             {
10129               relax_start (offset_expr.X_add_symbol);
10130               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10131                            BFD_RELOC_MIPS_CALL16, mips_gp_register);
10132               relax_switch ();
10133               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10134                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10135               relax_end ();
10136             }
10137           else
10138             {
10139               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10140                            BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
10141             }
10142         }
10143       else if (mips_big_got && !HAVE_NEWABI)
10144         {
10145           int gpdelay;
10146           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
10147           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
10148           int local_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
10149
10150           /* This is the large GOT case.  If this is a reference to an
10151              external symbol, and there is no constant, we want
10152                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10153                addu     $tempreg,$tempreg,$gp
10154                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10155              or for lca or if tempreg is PIC_CALL_REG
10156                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
10157                addu     $tempreg,$tempreg,$gp
10158                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
10159              For a local symbol, we want
10160                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10161                nop
10162                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
10163
10164              If we have a small constant, and this is a reference to
10165              an external symbol, we want
10166                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10167                addu     $tempreg,$tempreg,$gp
10168                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10169                nop
10170                addiu    $tempreg,$tempreg,<constant>
10171              For a local symbol, we want
10172                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10173                nop
10174                addiu    $tempreg,$tempreg,<constant> (BFD_RELOC_LO16)
10175
10176              If we have a large constant, and this is a reference to
10177              an external symbol, we want
10178                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10179                addu     $tempreg,$tempreg,$gp
10180                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10181                lui      $at,<hiconstant>
10182                addiu    $at,$at,<loconstant>
10183                addu     $tempreg,$tempreg,$at
10184              For a local symbol, we want
10185                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
10186                lui      $at,<hiconstant>
10187                addiu    $at,$at,<loconstant>    (BFD_RELOC_LO16)
10188                addu     $tempreg,$tempreg,$at
10189           */
10190
10191           expr1.X_add_number = offset_expr.X_add_number;
10192           offset_expr.X_add_number = 0;
10193           relax_start (offset_expr.X_add_symbol);
10194           gpdelay = reg_needs_delay (mips_gp_register);
10195           if (expr1.X_add_number == 0 && breg == 0
10196               && (call || tempreg == PIC_CALL_REG))
10197             {
10198               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
10199               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
10200             }
10201           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
10202           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10203                        tempreg, tempreg, mips_gp_register);
10204           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10205                        tempreg, lw_reloc_type, tempreg);
10206           if (expr1.X_add_number == 0)
10207             {
10208               if (breg != 0)
10209                 {
10210                   /* We're going to put in an addu instruction using
10211                      tempreg, so we may as well insert the nop right
10212                      now.  */
10213                   load_delay_nop ();
10214                 }
10215             }
10216           else if (expr1.X_add_number >= -0x8000
10217                    && expr1.X_add_number < 0x8000)
10218             {
10219               load_delay_nop ();
10220               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10221                            tempreg, tempreg, BFD_RELOC_LO16);
10222             }
10223           else
10224             {
10225               unsigned int dreg;
10226
10227               /* If we are going to add in a base register, and the
10228                  target register and the base register are the same,
10229                  then we are using AT as a temporary register.  Since
10230                  we want to load the constant into AT, we add our
10231                  current AT (from the global offset table) and the
10232                  register into the register now, and pretend we were
10233                  not using a base register.  */
10234               if (breg != op[0])
10235                 dreg = tempreg;
10236               else
10237                 {
10238                   gas_assert (tempreg == AT);
10239                   load_delay_nop ();
10240                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10241                                op[0], AT, breg);
10242                   dreg = op[0];
10243                 }
10244
10245               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10246               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
10247
10248               used_at = 1;
10249             }
10250           offset_expr.X_add_number = SEXT_16BIT (expr1.X_add_number);
10251           relax_switch ();
10252
10253           if (gpdelay)
10254             {
10255               /* This is needed because this instruction uses $gp, but
10256                  the first instruction on the main stream does not.  */
10257               macro_build (NULL, "nop", "");
10258             }
10259
10260           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10261                        local_reloc_type, mips_gp_register);
10262           if (expr1.X_add_number >= -0x8000
10263               && expr1.X_add_number < 0x8000)
10264             {
10265               load_delay_nop ();
10266               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10267                            tempreg, tempreg, BFD_RELOC_LO16);
10268               /* FIXME: If add_number is 0, and there was no base
10269                  register, the external symbol case ended with a load,
10270                  so if the symbol turns out to not be external, and
10271                  the next instruction uses tempreg, an unnecessary nop
10272                  will be inserted.  */
10273             }
10274           else
10275             {
10276               if (breg == op[0])
10277                 {
10278                   /* We must add in the base register now, as in the
10279                      external symbol case.  */
10280                   gas_assert (tempreg == AT);
10281                   load_delay_nop ();
10282                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10283                                op[0], AT, breg);
10284                   tempreg = op[0];
10285                   /* We set breg to 0 because we have arranged to add
10286                      it in in both cases.  */
10287                   breg = 0;
10288                 }
10289
10290               macro_build_lui (&expr1, AT);
10291               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10292                            AT, AT, BFD_RELOC_LO16);
10293               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10294                            tempreg, tempreg, AT);
10295               used_at = 1;
10296             }
10297           relax_end ();
10298         }
10299       else if (mips_big_got && HAVE_NEWABI)
10300         {
10301           int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
10302           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
10303           int add_breg_early = 0;
10304
10305           /* This is the large GOT case.  If this is a reference to an
10306              external symbol, and there is no constant, we want
10307                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10308                add      $tempreg,$tempreg,$gp
10309                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10310              or for lca or if tempreg is PIC_CALL_REG
10311                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_CALL_HI16)
10312                add      $tempreg,$tempreg,$gp
10313                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
10314
10315              If we have a small constant, and this is a reference to
10316              an external symbol, we want
10317                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10318                add      $tempreg,$tempreg,$gp
10319                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10320                addi     $tempreg,$tempreg,<constant>
10321
10322              If we have a large constant, and this is a reference to
10323              an external symbol, we want
10324                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
10325                addu     $tempreg,$tempreg,$gp
10326                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
10327                lui      $at,<hiconstant>
10328                addi     $at,$at,<loconstant>
10329                add      $tempreg,$tempreg,$at
10330
10331              If we have NewABI, and we know it's a local symbol, we want
10332                lw       $reg,<sym>($gp)         (BFD_RELOC_MIPS_GOT_PAGE)
10333                addiu    $reg,$reg,<sym>         (BFD_RELOC_MIPS_GOT_OFST)
10334              otherwise we have to resort to GOT_HI16/GOT_LO16.  */
10335
10336           relax_start (offset_expr.X_add_symbol);
10337
10338           expr1.X_add_number = offset_expr.X_add_number;
10339           offset_expr.X_add_number = 0;
10340
10341           if (expr1.X_add_number == 0 && breg == 0
10342               && (call || tempreg == PIC_CALL_REG))
10343             {
10344               lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
10345               lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
10346             }
10347           macro_build (&offset_expr, "lui", LUI_FMT, tempreg, lui_reloc_type);
10348           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10349                        tempreg, tempreg, mips_gp_register);
10350           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10351                        tempreg, lw_reloc_type, tempreg);
10352
10353           if (expr1.X_add_number == 0)
10354             ;
10355           else if (expr1.X_add_number >= -0x8000
10356                    && expr1.X_add_number < 0x8000)
10357             {
10358               macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
10359                            tempreg, tempreg, BFD_RELOC_LO16);
10360             }
10361           else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
10362             {
10363               unsigned int dreg;
10364
10365               /* If we are going to add in a base register, and the
10366                  target register and the base register are the same,
10367                  then we are using AT as a temporary register.  Since
10368                  we want to load the constant into AT, we add our
10369                  current AT (from the global offset table) and the
10370                  register into the register now, and pretend we were
10371                  not using a base register.  */
10372               if (breg != op[0])
10373                 dreg = tempreg;
10374               else
10375                 {
10376                   gas_assert (tempreg == AT);
10377                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10378                                op[0], AT, breg);
10379                   dreg = op[0];
10380                   add_breg_early = 1;
10381                 }
10382
10383               load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
10384               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
10385
10386               used_at = 1;
10387             }
10388           else
10389             as_bad (_("PIC code offset overflow (max 32 signed bits)"));
10390
10391           relax_switch ();
10392           offset_expr.X_add_number = expr1.X_add_number;
10393           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
10394                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
10395           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
10396                        tempreg, BFD_RELOC_MIPS_GOT_OFST);
10397           if (add_breg_early)
10398             {
10399               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
10400                            op[0], tempreg, breg);
10401               breg = 0;
10402               tempreg = op[0];
10403             }
10404           relax_end ();
10405         }
10406       else
10407         abort ();
10408
10409       if (breg != 0)
10410         macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", op[0], tempreg, breg);
10411       break;
10412
10413     case M_MSGSND:
10414       gas_assert (!mips_opts.micromips);
10415       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x01);
10416       break;
10417
10418     case M_MSGLD:
10419       gas_assert (!mips_opts.micromips);
10420       macro_build (NULL, "c2", "C", 0x02);
10421       break;
10422
10423     case M_MSGLD_T:
10424       gas_assert (!mips_opts.micromips);
10425       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x02);
10426       break;
10427
10428     case M_MSGWAIT:
10429       gas_assert (!mips_opts.micromips);
10430       macro_build (NULL, "c2", "C", 3);
10431       break;
10432
10433     case M_MSGWAIT_T:
10434       gas_assert (!mips_opts.micromips);
10435       macro_build (NULL, "c2", "C", (op[0] << 16) | 0x03);
10436       break;
10437
10438     case M_J_A:
10439       /* The j instruction may not be used in PIC code, since it
10440          requires an absolute address.  We convert it to a b
10441          instruction.  */
10442       if (mips_pic == NO_PIC)
10443         macro_build (&offset_expr, "j", "a");
10444       else
10445         macro_build (&offset_expr, "b", "p");
10446       break;
10447
10448       /* The jal instructions must be handled as macros because when
10449          generating PIC code they expand to multi-instruction
10450          sequences.  Normally they are simple instructions.  */
10451     case M_JALS_1:
10452       op[1] = op[0];
10453       op[0] = RA;
10454       /* Fall through.  */
10455     case M_JALS_2:
10456       gas_assert (mips_opts.micromips);
10457       if (mips_opts.insn32)
10458         {
10459           as_bad (_("Opcode not supported in the `insn32' mode `%s'"), str);
10460           break;
10461         }
10462       jals = 1;
10463       goto jal;
10464     case M_JAL_1:
10465       op[1] = op[0];
10466       op[0] = RA;
10467       /* Fall through.  */
10468     case M_JAL_2:
10469     jal:
10470       if (mips_pic == NO_PIC)
10471         {
10472           s = jals ? "jalrs" : "jalr";
10473           if (mips_opts.micromips
10474               && !mips_opts.insn32
10475               && op[0] == RA
10476               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
10477             macro_build (NULL, s, "mj", op[1]);
10478           else
10479             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
10480         }
10481       else
10482         {
10483           int cprestore = (mips_pic == SVR4_PIC && !HAVE_NEWABI
10484                            && mips_cprestore_offset >= 0);
10485
10486           if (op[1] != PIC_CALL_REG)
10487             as_warn (_("MIPS PIC call to register other than $25"));
10488
10489           s = ((mips_opts.micromips
10490                 && !mips_opts.insn32
10491                 && (!mips_opts.noreorder || cprestore))
10492                ? "jalrs" : "jalr");
10493           if (mips_opts.micromips
10494               && !mips_opts.insn32
10495               && op[0] == RA
10496               && !(history[0].insn_mo->pinfo2 & INSN2_BRANCH_DELAY_32BIT))
10497             macro_build (NULL, s, "mj", op[1]);
10498           else
10499             macro_build (NULL, s, JALR_FMT, op[0], op[1]);
10500           if (mips_pic == SVR4_PIC && !HAVE_NEWABI)
10501             {
10502               if (mips_cprestore_offset < 0)
10503                 as_warn (_("No .cprestore pseudo-op used in PIC code"));
10504               else
10505                 {
10506                   if (!mips_frame_reg_valid)
10507                     {
10508                       as_warn (_("No .frame pseudo-op used in PIC code"));
10509                       /* Quiet this warning.  */
10510                       mips_frame_reg_valid = 1;
10511                     }
10512                   if (!mips_cprestore_valid)
10513                     {
10514                       as_warn (_("No .cprestore pseudo-op used in PIC code"));
10515                       /* Quiet this warning.  */
10516                       mips_cprestore_valid = 1;
10517                     }
10518                   if (mips_opts.noreorder)
10519                     macro_build (NULL, "nop", "");
10520                   expr1.X_add_number = mips_cprestore_offset;
10521                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
10522                                                 mips_gp_register,
10523                                                 mips_frame_reg,
10524                                                 HAVE_64BIT_ADDRESSES);
10525                 }
10526             }
10527         }
10528
10529       break;
10530
10531     case M_JALS_A:
10532       gas_assert (mips_opts.micromips);
10533       if (mips_opts.insn32)
10534         {
10535           as_bad (_("Opcode not supported in the `insn32' mode `%s'"), str);
10536           break;
10537         }
10538       jals = 1;
10539       /* Fall through.  */
10540     case M_JAL_A:
10541       if (mips_pic == NO_PIC)
10542         macro_build (&offset_expr, jals ? "jals" : "jal", "a");
10543       else if (mips_pic == SVR4_PIC)
10544         {
10545           /* If this is a reference to an external symbol, and we are
10546              using a small GOT, we want
10547                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_CALL16)
10548                nop
10549                jalr     $ra,$25
10550                nop
10551                lw       $gp,cprestore($sp)
10552              The cprestore value is set using the .cprestore
10553              pseudo-op.  If we are using a big GOT, we want
10554                lui      $25,<sym>               (BFD_RELOC_MIPS_CALL_HI16)
10555                addu     $25,$25,$gp
10556                lw       $25,<sym>($25)          (BFD_RELOC_MIPS_CALL_LO16)
10557                nop
10558                jalr     $ra,$25
10559                nop
10560                lw       $gp,cprestore($sp)
10561              If the symbol is not external, we want
10562                lw       $25,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
10563                nop
10564                addiu    $25,$25,<sym>           (BFD_RELOC_LO16)
10565                jalr     $ra,$25
10566                nop
10567                lw $gp,cprestore($sp)
10568
10569              For NewABI, we use the same CALL16 or CALL_HI16/CALL_LO16
10570              sequences above, minus nops, unless the symbol is local,
10571              which enables us to use GOT_PAGE/GOT_OFST (big got) or
10572              GOT_DISP.  */
10573           if (HAVE_NEWABI)
10574             {
10575               if (!mips_big_got)
10576                 {
10577                   relax_start (offset_expr.X_add_symbol);
10578                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10579                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
10580                                mips_gp_register);
10581                   relax_switch ();
10582                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10583                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_DISP,
10584                                mips_gp_register);
10585                   relax_end ();
10586                 }
10587               else
10588                 {
10589                   relax_start (offset_expr.X_add_symbol);
10590                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
10591                                BFD_RELOC_MIPS_CALL_HI16);
10592                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
10593                                PIC_CALL_REG, mips_gp_register);
10594                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10595                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
10596                                PIC_CALL_REG);
10597                   relax_switch ();
10598                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10599                                PIC_CALL_REG, BFD_RELOC_MIPS_GOT_PAGE,
10600                                mips_gp_register);
10601                   macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10602                                PIC_CALL_REG, PIC_CALL_REG,
10603                                BFD_RELOC_MIPS_GOT_OFST);
10604                   relax_end ();
10605                 }
10606
10607               macro_build_jalr (&offset_expr, 0);
10608             }
10609           else
10610             {
10611               relax_start (offset_expr.X_add_symbol);
10612               if (!mips_big_got)
10613                 {
10614                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10615                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
10616                                mips_gp_register);
10617                   load_delay_nop ();
10618                   relax_switch ();
10619                 }
10620               else
10621                 {
10622                   int gpdelay;
10623
10624                   gpdelay = reg_needs_delay (mips_gp_register);
10625                   macro_build (&offset_expr, "lui", LUI_FMT, PIC_CALL_REG,
10626                                BFD_RELOC_MIPS_CALL_HI16);
10627                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
10628                                PIC_CALL_REG, mips_gp_register);
10629                   macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10630                                PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
10631                                PIC_CALL_REG);
10632                   load_delay_nop ();
10633                   relax_switch ();
10634                   if (gpdelay)
10635                     macro_build (NULL, "nop", "");
10636                 }
10637               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
10638                            PIC_CALL_REG, BFD_RELOC_MIPS_GOT16,
10639                            mips_gp_register);
10640               load_delay_nop ();
10641               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
10642                            PIC_CALL_REG, PIC_CALL_REG, BFD_RELOC_LO16);
10643               relax_end ();
10644               macro_build_jalr (&offset_expr, mips_cprestore_offset >= 0);
10645
10646               if (mips_cprestore_offset < 0)
10647                 as_warn (_("No .cprestore pseudo-op used in PIC code"));
10648               else
10649                 {
10650                   if (!mips_frame_reg_valid)
10651                     {
10652                       as_warn (_("No .frame pseudo-op used in PIC code"));
10653                       /* Quiet this warning.  */
10654                       mips_frame_reg_valid = 1;
10655                     }
10656                   if (!mips_cprestore_valid)
10657                     {
10658                       as_warn (_("No .cprestore pseudo-op used in PIC code"));
10659                       /* Quiet this warning.  */
10660                       mips_cprestore_valid = 1;
10661                     }
10662                   if (mips_opts.noreorder)
10663                     macro_build (NULL, "nop", "");
10664                   expr1.X_add_number = mips_cprestore_offset;
10665                   macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
10666                                                 mips_gp_register,
10667                                                 mips_frame_reg,
10668                                                 HAVE_64BIT_ADDRESSES);
10669                 }
10670             }
10671         }
10672       else if (mips_pic == VXWORKS_PIC)
10673         as_bad (_("Non-PIC jump used in PIC library"));
10674       else
10675         abort ();
10676
10677       break;
10678
10679     case M_LBUE_AB:
10680       s = "lbue";
10681       fmt = "t,+j(b)";
10682       offbits = 9;
10683       goto ld_st;
10684     case M_LHUE_AB:
10685       s = "lhue";
10686       fmt = "t,+j(b)";
10687       offbits = 9;
10688       goto ld_st;
10689     case M_LBE_AB:
10690       s = "lbe";
10691       fmt = "t,+j(b)";
10692       offbits = 9;
10693       goto ld_st;
10694     case M_LHE_AB:
10695       s = "lhe";
10696       fmt = "t,+j(b)";
10697       offbits = 9;
10698       goto ld_st;
10699     case M_LLE_AB:
10700       s = "lle";
10701       fmt = "t,+j(b)";
10702       offbits = 9;
10703       goto ld_st;
10704     case M_LWE_AB:
10705       s = "lwe";
10706       fmt = "t,+j(b)";
10707       offbits = 9;
10708       goto ld_st;
10709     case M_LWLE_AB:
10710       s = "lwle";
10711       fmt = "t,+j(b)";
10712       offbits = 9;
10713       goto ld_st;
10714     case M_LWRE_AB:
10715       s = "lwre";
10716       fmt = "t,+j(b)";
10717       offbits = 9;
10718       goto ld_st;
10719     case M_SBE_AB:
10720       s = "sbe";
10721       fmt = "t,+j(b)";
10722       offbits = 9;
10723       goto ld_st;
10724     case M_SCE_AB:
10725       s = "sce";
10726       fmt = "t,+j(b)";
10727       offbits = 9;
10728       goto ld_st;
10729     case M_SHE_AB:
10730       s = "she";
10731       fmt = "t,+j(b)";
10732       offbits = 9;
10733       goto ld_st;
10734     case M_SWE_AB:
10735       s = "swe";
10736       fmt = "t,+j(b)";
10737       offbits = 9;
10738       goto ld_st;
10739     case M_SWLE_AB:
10740       s = "swle";
10741       fmt = "t,+j(b)";
10742       offbits = 9;
10743       goto ld_st;
10744     case M_SWRE_AB:
10745       s = "swre";
10746       fmt = "t,+j(b)";
10747       offbits = 9;
10748       goto ld_st;
10749     case M_ACLR_AB:
10750       s = "aclr";
10751       fmt = "\\,~(b)";
10752       offbits = 12;
10753       goto ld_st;
10754     case M_ASET_AB:
10755       s = "aset";
10756       fmt = "\\,~(b)";
10757       offbits = 12;
10758       goto ld_st;
10759     case M_LB_AB:
10760       s = "lb";
10761       fmt = "t,o(b)";
10762       goto ld;
10763     case M_LBU_AB:
10764       s = "lbu";
10765       fmt = "t,o(b)";
10766       goto ld;
10767     case M_LH_AB:
10768       s = "lh";
10769       fmt = "t,o(b)";
10770       goto ld;
10771     case M_LHU_AB:
10772       s = "lhu";
10773       fmt = "t,o(b)";
10774       goto ld;
10775     case M_LW_AB:
10776       s = "lw";
10777       fmt = "t,o(b)";
10778       goto ld;
10779     case M_LWC0_AB:
10780       gas_assert (!mips_opts.micromips);
10781       s = "lwc0";
10782       fmt = "E,o(b)";
10783       /* Itbl support may require additional care here.  */
10784       coproc = 1;
10785       goto ld_st;
10786     case M_LWC1_AB:
10787       s = "lwc1";
10788       fmt = "T,o(b)";
10789       /* Itbl support may require additional care here.  */
10790       coproc = 1;
10791       goto ld_st;
10792     case M_LWC2_AB:
10793       s = "lwc2";
10794       fmt = COP12_FMT;
10795       offbits = (mips_opts.micromips ? 12 : 16);
10796       /* Itbl support may require additional care here.  */
10797       coproc = 1;
10798       goto ld_st;
10799     case M_LWC3_AB:
10800       gas_assert (!mips_opts.micromips);
10801       s = "lwc3";
10802       fmt = "E,o(b)";
10803       /* Itbl support may require additional care here.  */
10804       coproc = 1;
10805       goto ld_st;
10806     case M_LWL_AB:
10807       s = "lwl";
10808       fmt = MEM12_FMT;
10809       offbits = (mips_opts.micromips ? 12 : 16);
10810       goto ld_st;
10811     case M_LWR_AB:
10812       s = "lwr";
10813       fmt = MEM12_FMT;
10814       offbits = (mips_opts.micromips ? 12 : 16);
10815       goto ld_st;
10816     case M_LDC1_AB:
10817       s = "ldc1";
10818       fmt = "T,o(b)";
10819       /* Itbl support may require additional care here.  */
10820       coproc = 1;
10821       goto ld_st;
10822     case M_LDC2_AB:
10823       s = "ldc2";
10824       fmt = COP12_FMT;
10825       offbits = (mips_opts.micromips ? 12 : 16);
10826       /* Itbl support may require additional care here.  */
10827       coproc = 1;
10828       goto ld_st;
10829     case M_LQC2_AB:
10830       s = "lqc2";
10831       fmt = "+7,o(b)";
10832       /* Itbl support may require additional care here.  */
10833       coproc = 1;
10834       goto ld_st;
10835     case M_LDC3_AB:
10836       s = "ldc3";
10837       fmt = "E,o(b)";
10838       /* Itbl support may require additional care here.  */
10839       coproc = 1;
10840       goto ld_st;
10841     case M_LDL_AB:
10842       s = "ldl";
10843       fmt = MEM12_FMT;
10844       offbits = (mips_opts.micromips ? 12 : 16);
10845       goto ld_st;
10846     case M_LDR_AB:
10847       s = "ldr";
10848       fmt = MEM12_FMT;
10849       offbits = (mips_opts.micromips ? 12 : 16);
10850       goto ld_st;
10851     case M_LL_AB:
10852       s = "ll";
10853       fmt = MEM12_FMT;
10854       offbits = (mips_opts.micromips ? 12 : 16);
10855       goto ld;
10856     case M_LLD_AB:
10857       s = "lld";
10858       fmt = MEM12_FMT;
10859       offbits = (mips_opts.micromips ? 12 : 16);
10860       goto ld;
10861     case M_LWU_AB:
10862       s = "lwu";
10863       fmt = MEM12_FMT;
10864       offbits = (mips_opts.micromips ? 12 : 16);
10865       goto ld;
10866     case M_LWP_AB:
10867       gas_assert (mips_opts.micromips);
10868       s = "lwp";
10869       fmt = "t,~(b)";
10870       offbits = 12;
10871       lp = 1;
10872       goto ld;
10873     case M_LDP_AB:
10874       gas_assert (mips_opts.micromips);
10875       s = "ldp";
10876       fmt = "t,~(b)";
10877       offbits = 12;
10878       lp = 1;
10879       goto ld;
10880     case M_LWM_AB:
10881       gas_assert (mips_opts.micromips);
10882       s = "lwm";
10883       fmt = "n,~(b)";
10884       offbits = 12;
10885       goto ld_st;
10886     case M_LDM_AB:
10887       gas_assert (mips_opts.micromips);
10888       s = "ldm";
10889       fmt = "n,~(b)";
10890       offbits = 12;
10891       goto ld_st;
10892
10893     ld:
10894       /* We don't want to use $0 as tempreg.  */
10895       if (op[2] == op[0] + lp || op[0] + lp == ZERO)
10896         goto ld_st;
10897       else
10898         tempreg = op[0] + lp;
10899       goto ld_noat;
10900
10901     case M_SB_AB:
10902       s = "sb";
10903       fmt = "t,o(b)";
10904       goto ld_st;
10905     case M_SH_AB:
10906       s = "sh";
10907       fmt = "t,o(b)";
10908       goto ld_st;
10909     case M_SW_AB:
10910       s = "sw";
10911       fmt = "t,o(b)";
10912       goto ld_st;
10913     case M_SWC0_AB:
10914       gas_assert (!mips_opts.micromips);
10915       s = "swc0";
10916       fmt = "E,o(b)";
10917       /* Itbl support may require additional care here.  */
10918       coproc = 1;
10919       goto ld_st;
10920     case M_SWC1_AB:
10921       s = "swc1";
10922       fmt = "T,o(b)";
10923       /* Itbl support may require additional care here.  */
10924       coproc = 1;
10925       goto ld_st;
10926     case M_SWC2_AB:
10927       s = "swc2";
10928       fmt = COP12_FMT;
10929       offbits = (mips_opts.micromips ? 12 : 16);
10930       /* Itbl support may require additional care here.  */
10931       coproc = 1;
10932       goto ld_st;
10933     case M_SWC3_AB:
10934       gas_assert (!mips_opts.micromips);
10935       s = "swc3";
10936       fmt = "E,o(b)";
10937       /* Itbl support may require additional care here.  */
10938       coproc = 1;
10939       goto ld_st;
10940     case M_SWL_AB:
10941       s = "swl";
10942       fmt = MEM12_FMT;
10943       offbits = (mips_opts.micromips ? 12 : 16);
10944       goto ld_st;
10945     case M_SWR_AB:
10946       s = "swr";
10947       fmt = MEM12_FMT;
10948       offbits = (mips_opts.micromips ? 12 : 16);
10949       goto ld_st;
10950     case M_SC_AB:
10951       s = "sc";
10952       fmt = MEM12_FMT;
10953       offbits = (mips_opts.micromips ? 12 : 16);
10954       goto ld_st;
10955     case M_SCD_AB:
10956       s = "scd";
10957       fmt = MEM12_FMT;
10958       offbits = (mips_opts.micromips ? 12 : 16);
10959       goto ld_st;
10960     case M_CACHE_AB:
10961       s = "cache";
10962       fmt = mips_opts.micromips ? "k,~(b)" : "k,o(b)";
10963       offbits = (mips_opts.micromips ? 12 : 16);
10964       goto ld_st;
10965     case M_CACHEE_AB:
10966       s = "cachee";
10967       fmt = "k,+j(b)";
10968       offbits = 9;
10969       goto ld_st;
10970     case M_PREF_AB:
10971       s = "pref";
10972       fmt = !mips_opts.micromips ? "k,o(b)" : "k,~(b)";
10973       offbits = (mips_opts.micromips ? 12 : 16);
10974       goto ld_st;
10975     case M_PREFE_AB:
10976       s = "prefe";
10977       fmt = "k,+j(b)";
10978       offbits = 9;
10979       goto ld_st;
10980     case M_SDC1_AB:
10981       s = "sdc1";
10982       fmt = "T,o(b)";
10983       coproc = 1;
10984       /* Itbl support may require additional care here.  */
10985       goto ld_st;
10986     case M_SDC2_AB:
10987       s = "sdc2";
10988       fmt = COP12_FMT;
10989       offbits = (mips_opts.micromips ? 12 : 16);
10990       /* Itbl support may require additional care here.  */
10991       coproc = 1;
10992       goto ld_st;
10993     case M_SQC2_AB:
10994       s = "sqc2";
10995       fmt = "+7,o(b)";
10996       /* Itbl support may require additional care here.  */
10997       coproc = 1;
10998       goto ld_st;
10999     case M_SDC3_AB:
11000       gas_assert (!mips_opts.micromips);
11001       s = "sdc3";
11002       fmt = "E,o(b)";
11003       /* Itbl support may require additional care here.  */
11004       coproc = 1;
11005       goto ld_st;
11006     case M_SDL_AB:
11007       s = "sdl";
11008       fmt = MEM12_FMT;
11009       offbits = (mips_opts.micromips ? 12 : 16);
11010       goto ld_st;
11011     case M_SDR_AB:
11012       s = "sdr";
11013       fmt = MEM12_FMT;
11014       offbits = (mips_opts.micromips ? 12 : 16);
11015       goto ld_st;
11016     case M_SWP_AB:
11017       gas_assert (mips_opts.micromips);
11018       s = "swp";
11019       fmt = "t,~(b)";
11020       offbits = 12;
11021       goto ld_st;
11022     case M_SDP_AB:
11023       gas_assert (mips_opts.micromips);
11024       s = "sdp";
11025       fmt = "t,~(b)";
11026       offbits = 12;
11027       goto ld_st;
11028     case M_SWM_AB:
11029       gas_assert (mips_opts.micromips);
11030       s = "swm";
11031       fmt = "n,~(b)";
11032       offbits = 12;
11033       goto ld_st;
11034     case M_SDM_AB:
11035       gas_assert (mips_opts.micromips);
11036       s = "sdm";
11037       fmt = "n,~(b)";
11038       offbits = 12;
11039
11040     ld_st:
11041       tempreg = AT;
11042     ld_noat:
11043       breg = op[2];
11044       if (small_offset_p (0, align, 16))
11045         {
11046           /* The first case exists for M_LD_AB and M_SD_AB, which are
11047              macros for o32 but which should act like normal instructions
11048              otherwise.  */
11049           if (offbits == 16)
11050             macro_build (&offset_expr, s, fmt, op[0], -1, offset_reloc[0],
11051                          offset_reloc[1], offset_reloc[2], breg);
11052           else if (small_offset_p (0, align, offbits))
11053             {
11054               if (offbits == 0)
11055                 macro_build (NULL, s, fmt, op[0], breg);
11056               else
11057                 macro_build (NULL, s, fmt, op[0],
11058                              (int) offset_expr.X_add_number, breg);
11059             }
11060           else
11061             {
11062               if (tempreg == AT)
11063                 used_at = 1;
11064               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
11065                            tempreg, breg, -1, offset_reloc[0],
11066                            offset_reloc[1], offset_reloc[2]);
11067               if (offbits == 0)
11068                 macro_build (NULL, s, fmt, op[0], tempreg);
11069               else
11070                 macro_build (NULL, s, fmt, op[0], 0, tempreg);
11071             }
11072           break;
11073         }
11074
11075       if (tempreg == AT)
11076         used_at = 1;
11077
11078       if (offset_expr.X_op != O_constant
11079           && offset_expr.X_op != O_symbol)
11080         {
11081           as_bad (_("Expression too complex"));
11082           offset_expr.X_op = O_constant;
11083         }
11084
11085       if (HAVE_32BIT_ADDRESSES
11086           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
11087         {
11088           char value [32];
11089
11090           sprintf_vma (value, offset_expr.X_add_number);
11091           as_bad (_("Number (0x%s) larger than 32 bits"), value);
11092         }
11093
11094       /* A constant expression in PIC code can be handled just as it
11095          is in non PIC code.  */
11096       if (offset_expr.X_op == O_constant)
11097         {
11098           expr1.X_add_number = offset_high_part (offset_expr.X_add_number,
11099                                                  offbits == 0 ? 16 : offbits);
11100           offset_expr.X_add_number -= expr1.X_add_number;
11101
11102           load_register (tempreg, &expr1, HAVE_64BIT_ADDRESSES);
11103           if (breg != 0)
11104             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11105                          tempreg, tempreg, breg);
11106           if (offbits == 0)
11107             {
11108               if (offset_expr.X_add_number != 0)
11109                 macro_build (&offset_expr, ADDRESS_ADDI_INSN,
11110                              "t,r,j", tempreg, tempreg, BFD_RELOC_LO16);
11111               macro_build (NULL, s, fmt, op[0], tempreg);
11112             }
11113           else if (offbits == 16)
11114             macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11115           else
11116             macro_build (NULL, s, fmt, op[0],
11117                          (int) offset_expr.X_add_number, tempreg);
11118         }
11119       else if (offbits != 16)
11120         {
11121           /* The offset field is too narrow to be used for a low-part
11122              relocation, so load the whole address into the auxillary
11123              register.  */
11124           load_address (tempreg, &offset_expr, &used_at);
11125           if (breg != 0)
11126             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11127                          tempreg, tempreg, breg);
11128           if (offbits == 0)
11129             macro_build (NULL, s, fmt, op[0], tempreg);
11130           else
11131             macro_build (NULL, s, fmt, op[0], 0, tempreg);
11132         }
11133       else if (mips_pic == NO_PIC)
11134         {
11135           /* If this is a reference to a GP relative symbol, and there
11136              is no base register, we want
11137                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
11138              Otherwise, if there is no base register, we want
11139                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11140                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11141              If we have a constant, we need two instructions anyhow,
11142              so we always use the latter form.
11143
11144              If we have a base register, and this is a reference to a
11145              GP relative symbol, we want
11146                addu     $tempreg,$breg,$gp
11147                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_GPREL16)
11148              Otherwise we want
11149                lui      $tempreg,<sym>          (BFD_RELOC_HI16_S)
11150                addu     $tempreg,$tempreg,$breg
11151                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11152              With a constant we always use the latter case.
11153
11154              With 64bit address space and no base register and $at usable,
11155              we want
11156                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11157                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11158                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11159                dsll32   $tempreg,0
11160                daddu    $tempreg,$at
11161                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11162              If we have a base register, we want
11163                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11164                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11165                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11166                daddu    $at,$breg
11167                dsll32   $tempreg,0
11168                daddu    $tempreg,$at
11169                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11170
11171              Without $at we can't generate the optimal path for superscalar
11172              processors here since this would require two temporary registers.
11173                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11174                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11175                dsll     $tempreg,16
11176                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11177                dsll     $tempreg,16
11178                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11179              If we have a base register, we want
11180                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHEST)
11181                daddiu   $tempreg,<sym>          (BFD_RELOC_MIPS_HIGHER)
11182                dsll     $tempreg,16
11183                daddiu   $tempreg,<sym>          (BFD_RELOC_HI16_S)
11184                dsll     $tempreg,16
11185                daddu    $tempreg,$tempreg,$breg
11186                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_LO16)
11187
11188              For GP relative symbols in 64bit address space we can use
11189              the same sequence as in 32bit address space.  */
11190           if (HAVE_64BIT_SYMBOLS)
11191             {
11192               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11193                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11194                 {
11195                   relax_start (offset_expr.X_add_symbol);
11196                   if (breg == 0)
11197                     {
11198                       macro_build (&offset_expr, s, fmt, op[0],
11199                                    BFD_RELOC_GPREL16, mips_gp_register);
11200                     }
11201                   else
11202                     {
11203                       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11204                                    tempreg, breg, mips_gp_register);
11205                       macro_build (&offset_expr, s, fmt, op[0],
11206                                    BFD_RELOC_GPREL16, tempreg);
11207                     }
11208                   relax_switch ();
11209                 }
11210
11211               if (used_at == 0 && mips_opts.at)
11212                 {
11213                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11214                                BFD_RELOC_MIPS_HIGHEST);
11215                   macro_build (&offset_expr, "lui", LUI_FMT, AT,
11216                                BFD_RELOC_HI16_S);
11217                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11218                                tempreg, BFD_RELOC_MIPS_HIGHER);
11219                   if (breg != 0)
11220                     macro_build (NULL, "daddu", "d,v,t", AT, AT, breg);
11221                   macro_build (NULL, "dsll32", SHFT_FMT, tempreg, tempreg, 0);
11222                   macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
11223                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_LO16,
11224                                tempreg);
11225                   used_at = 1;
11226                 }
11227               else
11228                 {
11229                   macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11230                                BFD_RELOC_MIPS_HIGHEST);
11231                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11232                                tempreg, BFD_RELOC_MIPS_HIGHER);
11233                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11234                   macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
11235                                tempreg, BFD_RELOC_HI16_S);
11236                   macro_build (NULL, "dsll", SHFT_FMT, tempreg, tempreg, 16);
11237                   if (breg != 0)
11238                     macro_build (NULL, "daddu", "d,v,t",
11239                                  tempreg, tempreg, breg);
11240                   macro_build (&offset_expr, s, fmt, op[0],
11241                                BFD_RELOC_LO16, tempreg);
11242                 }
11243
11244               if (mips_relax.sequence)
11245                 relax_end ();
11246               break;
11247             }
11248
11249           if (breg == 0)
11250             {
11251               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11252                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11253                 {
11254                   relax_start (offset_expr.X_add_symbol);
11255                   macro_build (&offset_expr, s, fmt, op[0], BFD_RELOC_GPREL16,
11256                                mips_gp_register);
11257                   relax_switch ();
11258                 }
11259               macro_build_lui (&offset_expr, tempreg);
11260               macro_build (&offset_expr, s, fmt, op[0],
11261                            BFD_RELOC_LO16, tempreg);
11262               if (mips_relax.sequence)
11263                 relax_end ();
11264             }
11265           else
11266             {
11267               if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11268                   && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11269                 {
11270                   relax_start (offset_expr.X_add_symbol);
11271                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11272                                tempreg, breg, mips_gp_register);
11273                   macro_build (&offset_expr, s, fmt, op[0],
11274                                BFD_RELOC_GPREL16, tempreg);
11275                   relax_switch ();
11276                 }
11277               macro_build_lui (&offset_expr, tempreg);
11278               macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11279                            tempreg, tempreg, breg);
11280               macro_build (&offset_expr, s, fmt, op[0],
11281                            BFD_RELOC_LO16, tempreg);
11282               if (mips_relax.sequence)
11283                 relax_end ();
11284             }
11285         }
11286       else if (!mips_big_got)
11287         {
11288           int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
11289
11290           /* If this is a reference to an external symbol, we want
11291                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11292                nop
11293                <op>     op[0],0($tempreg)
11294              Otherwise we want
11295                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11296                nop
11297                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
11298                <op>     op[0],0($tempreg)
11299
11300              For NewABI, we want
11301                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
11302                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)
11303
11304              If there is a base register, we add it to $tempreg before
11305              the <op>.  If there is a constant, we stick it in the
11306              <op> instruction.  We don't handle constants larger than
11307              16 bits, because we have no way to load the upper 16 bits
11308              (actually, we could handle them for the subset of cases
11309              in which we are not using $at).  */
11310           gas_assert (offset_expr.X_op == O_symbol);
11311           if (HAVE_NEWABI)
11312             {
11313               macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11314                            BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
11315               if (breg != 0)
11316                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11317                              tempreg, tempreg, breg);
11318               macro_build (&offset_expr, s, fmt, op[0],
11319                            BFD_RELOC_MIPS_GOT_OFST, tempreg);
11320               break;
11321             }
11322           expr1.X_add_number = offset_expr.X_add_number;
11323           offset_expr.X_add_number = 0;
11324           if (expr1.X_add_number < -0x8000
11325               || expr1.X_add_number >= 0x8000)
11326             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11327           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11328                        lw_reloc_type, mips_gp_register);
11329           load_delay_nop ();
11330           relax_start (offset_expr.X_add_symbol);
11331           relax_switch ();
11332           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
11333                        tempreg, BFD_RELOC_LO16);
11334           relax_end ();
11335           if (breg != 0)
11336             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11337                          tempreg, tempreg, breg);
11338           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11339         }
11340       else if (mips_big_got && !HAVE_NEWABI)
11341         {
11342           int gpdelay;
11343
11344           /* If this is a reference to an external symbol, we want
11345                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11346                addu     $tempreg,$tempreg,$gp
11347                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11348                <op>     op[0],0($tempreg)
11349              Otherwise we want
11350                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT16)
11351                nop
11352                addiu    $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
11353                <op>     op[0],0($tempreg)
11354              If there is a base register, we add it to $tempreg before
11355              the <op>.  If there is a constant, we stick it in the
11356              <op> instruction.  We don't handle constants larger than
11357              16 bits, because we have no way to load the upper 16 bits
11358              (actually, we could handle them for the subset of cases
11359              in which we are not using $at).  */
11360           gas_assert (offset_expr.X_op == O_symbol);
11361           expr1.X_add_number = offset_expr.X_add_number;
11362           offset_expr.X_add_number = 0;
11363           if (expr1.X_add_number < -0x8000
11364               || expr1.X_add_number >= 0x8000)
11365             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11366           gpdelay = reg_needs_delay (mips_gp_register);
11367           relax_start (offset_expr.X_add_symbol);
11368           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11369                        BFD_RELOC_MIPS_GOT_HI16);
11370           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
11371                        mips_gp_register);
11372           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11373                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
11374           relax_switch ();
11375           if (gpdelay)
11376             macro_build (NULL, "nop", "");
11377           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11378                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
11379           load_delay_nop ();
11380           macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
11381                        tempreg, BFD_RELOC_LO16);
11382           relax_end ();
11383
11384           if (breg != 0)
11385             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11386                          tempreg, tempreg, breg);
11387           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11388         }
11389       else if (mips_big_got && HAVE_NEWABI)
11390         {
11391           /* If this is a reference to an external symbol, we want
11392                lui      $tempreg,<sym>          (BFD_RELOC_MIPS_GOT_HI16)
11393                add      $tempreg,$tempreg,$gp
11394                lw       $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
11395                <op>     op[0],<ofst>($tempreg)
11396              Otherwise, for local symbols, we want:
11397                lw       $tempreg,<sym>($gp)     (BFD_RELOC_MIPS_GOT_PAGE)
11398                <op>     op[0],<sym>($tempreg)   (BFD_RELOC_MIPS_GOT_OFST)  */
11399           gas_assert (offset_expr.X_op == O_symbol);
11400           expr1.X_add_number = offset_expr.X_add_number;
11401           offset_expr.X_add_number = 0;
11402           if (expr1.X_add_number < -0x8000
11403               || expr1.X_add_number >= 0x8000)
11404             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11405           relax_start (offset_expr.X_add_symbol);
11406           macro_build (&offset_expr, "lui", LUI_FMT, tempreg,
11407                        BFD_RELOC_MIPS_GOT_HI16);
11408           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
11409                        mips_gp_register);
11410           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11411                        BFD_RELOC_MIPS_GOT_LO16, tempreg);
11412           if (breg != 0)
11413             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11414                          tempreg, tempreg, breg);
11415           macro_build (&expr1, s, fmt, op[0], BFD_RELOC_LO16, tempreg);
11416
11417           relax_switch ();
11418           offset_expr.X_add_number = expr1.X_add_number;
11419           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
11420                        BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
11421           if (breg != 0)
11422             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11423                          tempreg, tempreg, breg);
11424           macro_build (&offset_expr, s, fmt, op[0],
11425                        BFD_RELOC_MIPS_GOT_OFST, tempreg);
11426           relax_end ();
11427         }
11428       else
11429         abort ();
11430
11431       break;
11432
11433     case M_JRADDIUSP:
11434       gas_assert (mips_opts.micromips);
11435       gas_assert (mips_opts.insn32);
11436       start_noreorder ();
11437       macro_build (NULL, "jr", "s", RA);
11438       expr1.X_add_number = op[0] << 2;
11439       macro_build (&expr1, "addiu", "t,r,j", SP, SP, BFD_RELOC_LO16);
11440       end_noreorder ();
11441       break;
11442
11443     case M_JRC:
11444       gas_assert (mips_opts.micromips);
11445       gas_assert (mips_opts.insn32);
11446       macro_build (NULL, "jr", "s", op[0]);
11447       if (mips_opts.noreorder)
11448         macro_build (NULL, "nop", "");
11449       break;
11450
11451     case M_LI:
11452     case M_LI_S:
11453       load_register (op[0], &imm_expr, 0);
11454       break;
11455
11456     case M_DLI:
11457       load_register (op[0], &imm_expr, 1);
11458       break;
11459
11460     case M_LI_SS:
11461       if (imm_expr.X_op == O_constant)
11462         {
11463           used_at = 1;
11464           load_register (AT, &imm_expr, 0);
11465           macro_build (NULL, "mtc1", "t,G", AT, op[0]);
11466           break;
11467         }
11468       else
11469         {
11470           gas_assert (offset_expr.X_op == O_symbol
11471                       && strcmp (segment_name (S_GET_SEGMENT
11472                                                (offset_expr.X_add_symbol)),
11473                                  ".lit4") == 0
11474                       && offset_expr.X_add_number == 0);
11475           macro_build (&offset_expr, "lwc1", "T,o(b)", op[0],
11476                        BFD_RELOC_MIPS_LITERAL, mips_gp_register);
11477           break;
11478         }
11479
11480     case M_LI_D:
11481       /* Check if we have a constant in IMM_EXPR.  If the GPRs are 64 bits
11482          wide, IMM_EXPR is the entire value.  Otherwise IMM_EXPR is the high
11483          order 32 bits of the value and the low order 32 bits are either
11484          zero or in OFFSET_EXPR.  */
11485       if (imm_expr.X_op == O_constant || imm_expr.X_op == O_big)
11486         {
11487           if (HAVE_64BIT_GPRS)
11488             load_register (op[0], &imm_expr, 1);
11489           else
11490             {
11491               int hreg, lreg;
11492
11493               if (target_big_endian)
11494                 {
11495                   hreg = op[0];
11496                   lreg = op[0] + 1;
11497                 }
11498               else
11499                 {
11500                   hreg = op[0] + 1;
11501                   lreg = op[0];
11502                 }
11503
11504               if (hreg <= 31)
11505                 load_register (hreg, &imm_expr, 0);
11506               if (lreg <= 31)
11507                 {
11508                   if (offset_expr.X_op == O_absent)
11509                     move_register (lreg, 0);
11510                   else
11511                     {
11512                       gas_assert (offset_expr.X_op == O_constant);
11513                       load_register (lreg, &offset_expr, 0);
11514                     }
11515                 }
11516             }
11517           break;
11518         }
11519
11520       /* We know that sym is in the .rdata section.  First we get the
11521          upper 16 bits of the address.  */
11522       if (mips_pic == NO_PIC)
11523         {
11524           macro_build_lui (&offset_expr, AT);
11525           used_at = 1;
11526         }
11527       else
11528         {
11529           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
11530                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
11531           used_at = 1;
11532         }
11533
11534       /* Now we load the register(s).  */
11535       if (HAVE_64BIT_GPRS)
11536         {
11537           used_at = 1;
11538           macro_build (&offset_expr, "ld", "t,o(b)", op[0],
11539                        BFD_RELOC_LO16, AT);
11540         }
11541       else
11542         {
11543           used_at = 1;
11544           macro_build (&offset_expr, "lw", "t,o(b)", op[0],
11545                        BFD_RELOC_LO16, AT);
11546           if (op[0] != RA)
11547             {
11548               /* FIXME: How in the world do we deal with the possible
11549                  overflow here?  */
11550               offset_expr.X_add_number += 4;
11551               macro_build (&offset_expr, "lw", "t,o(b)",
11552                            op[0] + 1, BFD_RELOC_LO16, AT);
11553             }
11554         }
11555       break;
11556
11557     case M_LI_DD:
11558       /* Check if we have a constant in IMM_EXPR.  If the FPRs are 64 bits
11559          wide, IMM_EXPR is the entire value and the GPRs are known to be 64
11560          bits wide as well.  Otherwise IMM_EXPR is the high order 32 bits of
11561          the value and the low order 32 bits are either zero or in
11562          OFFSET_EXPR.  */
11563       if (imm_expr.X_op == O_constant || imm_expr.X_op == O_big)
11564         {
11565           used_at = 1;
11566           load_register (AT, &imm_expr, HAVE_64BIT_FPRS);
11567           if (HAVE_64BIT_FPRS)
11568             {
11569               gas_assert (HAVE_64BIT_GPRS);
11570               macro_build (NULL, "dmtc1", "t,S", AT, op[0]);
11571             }
11572           else
11573             {
11574               macro_build (NULL, "mtc1", "t,G", AT, op[0] + 1);
11575               if (offset_expr.X_op == O_absent)
11576                 macro_build (NULL, "mtc1", "t,G", 0, op[0]);
11577               else
11578                 {
11579                   gas_assert (offset_expr.X_op == O_constant);
11580                   load_register (AT, &offset_expr, 0);
11581                   macro_build (NULL, "mtc1", "t,G", AT, op[0]);
11582                 }
11583             }
11584           break;
11585         }
11586
11587       gas_assert (offset_expr.X_op == O_symbol
11588                   && offset_expr.X_add_number == 0);
11589       s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
11590       if (strcmp (s, ".lit8") == 0)
11591         {
11592           op[2] = mips_gp_register;
11593           offset_reloc[0] = BFD_RELOC_MIPS_LITERAL;
11594           offset_reloc[1] = BFD_RELOC_UNUSED;
11595           offset_reloc[2] = BFD_RELOC_UNUSED;
11596         }
11597       else
11598         {
11599           gas_assert (strcmp (s, RDATA_SECTION_NAME) == 0);
11600           used_at = 1;
11601           if (mips_pic != NO_PIC)
11602             macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
11603                          BFD_RELOC_MIPS_GOT16, mips_gp_register);
11604           else
11605             {
11606               /* FIXME: This won't work for a 64 bit address.  */
11607               macro_build_lui (&offset_expr, AT);
11608             }
11609
11610           op[2] = AT;
11611           offset_reloc[0] = BFD_RELOC_LO16;
11612           offset_reloc[1] = BFD_RELOC_UNUSED;
11613           offset_reloc[2] = BFD_RELOC_UNUSED;
11614         }
11615       align = 8;
11616       /* Fall through */
11617
11618     case M_L_DAB:
11619       /*
11620        * The MIPS assembler seems to check for X_add_number not
11621        * being double aligned and generating:
11622        *        lui     at,%hi(foo+1)
11623        *        addu    at,at,v1
11624        *        addiu   at,at,%lo(foo+1)
11625        *        lwc1    f2,0(at)
11626        *        lwc1    f3,4(at)
11627        * But, the resulting address is the same after relocation so why
11628        * generate the extra instruction?
11629        */
11630       /* Itbl support may require additional care here.  */
11631       coproc = 1;
11632       fmt = "T,o(b)";
11633       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
11634         {
11635           s = "ldc1";
11636           goto ld_st;
11637         }
11638       s = "lwc1";
11639       goto ldd_std;
11640
11641     case M_S_DAB:
11642       gas_assert (!mips_opts.micromips);
11643       /* Itbl support may require additional care here.  */
11644       coproc = 1;
11645       fmt = "T,o(b)";
11646       if (CPU_HAS_LDC1_SDC1 (mips_opts.arch))
11647         {
11648           s = "sdc1";
11649           goto ld_st;
11650         }
11651       s = "swc1";
11652       goto ldd_std;
11653
11654     case M_LQ_AB:
11655       fmt = "t,o(b)";
11656       s = "lq";
11657       goto ld;
11658
11659     case M_SQ_AB:
11660       fmt = "t,o(b)";
11661       s = "sq";
11662       goto ld_st;
11663
11664     case M_LD_AB:
11665       fmt = "t,o(b)";
11666       if (HAVE_64BIT_GPRS)
11667         {
11668           s = "ld";
11669           goto ld;
11670         }
11671       s = "lw";
11672       goto ldd_std;
11673
11674     case M_SD_AB:
11675       fmt = "t,o(b)";
11676       if (HAVE_64BIT_GPRS)
11677         {
11678           s = "sd";
11679           goto ld_st;
11680         }
11681       s = "sw";
11682
11683     ldd_std:
11684       /* Even on a big endian machine $fn comes before $fn+1.  We have
11685          to adjust when loading from memory.  We set coproc if we must
11686          load $fn+1 first.  */
11687       /* Itbl support may require additional care here.  */
11688       if (!target_big_endian)
11689         coproc = 0;
11690
11691       breg = op[2];
11692       if (small_offset_p (0, align, 16))
11693         {
11694           ep = &offset_expr;
11695           if (!small_offset_p (4, align, 16))
11696             {
11697               macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", AT, breg,
11698                            -1, offset_reloc[0], offset_reloc[1],
11699                            offset_reloc[2]);
11700               expr1.X_add_number = 0;
11701               ep = &expr1;
11702               breg = AT;
11703               used_at = 1;
11704               offset_reloc[0] = BFD_RELOC_LO16;
11705               offset_reloc[1] = BFD_RELOC_UNUSED;
11706               offset_reloc[2] = BFD_RELOC_UNUSED;
11707             }
11708           if (strcmp (s, "lw") == 0 && op[0] == breg)
11709             {
11710               ep->X_add_number += 4;
11711               macro_build (ep, s, fmt, op[0] + 1, -1, offset_reloc[0],
11712                            offset_reloc[1], offset_reloc[2], breg);
11713               ep->X_add_number -= 4;
11714               macro_build (ep, s, fmt, op[0], -1, offset_reloc[0],
11715                            offset_reloc[1], offset_reloc[2], breg);
11716             }
11717           else
11718             {
11719               macro_build (ep, s, fmt, coproc ? op[0] + 1 : op[0], -1,
11720                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
11721                            breg);
11722               ep->X_add_number += 4;
11723               macro_build (ep, s, fmt, coproc ? op[0] : op[0] + 1, -1,
11724                            offset_reloc[0], offset_reloc[1], offset_reloc[2],
11725                            breg);
11726             }
11727           break;
11728         }
11729
11730       if (offset_expr.X_op != O_symbol
11731           && offset_expr.X_op != O_constant)
11732         {
11733           as_bad (_("Expression too complex"));
11734           offset_expr.X_op = O_constant;
11735         }
11736
11737       if (HAVE_32BIT_ADDRESSES
11738           && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
11739         {
11740           char value [32];
11741
11742           sprintf_vma (value, offset_expr.X_add_number);
11743           as_bad (_("Number (0x%s) larger than 32 bits"), value);
11744         }
11745
11746       if (mips_pic == NO_PIC || offset_expr.X_op == O_constant)
11747         {
11748           /* If this is a reference to a GP relative symbol, we want
11749                <op>     op[0],<sym>($gp)        (BFD_RELOC_GPREL16)
11750                <op>     op[0]+1,<sym>+4($gp)    (BFD_RELOC_GPREL16)
11751              If we have a base register, we use this
11752                addu     $at,$breg,$gp
11753                <op>     op[0],<sym>($at)        (BFD_RELOC_GPREL16)
11754                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_GPREL16)
11755              If this is not a GP relative symbol, we want
11756                lui      $at,<sym>               (BFD_RELOC_HI16_S)
11757                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
11758                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
11759              If there is a base register, we add it to $at after the
11760              lui instruction.  If there is a constant, we always use
11761              the last case.  */
11762           if (offset_expr.X_op == O_symbol
11763               && (valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
11764               && !nopic_need_relax (offset_expr.X_add_symbol, 1))
11765             {
11766               relax_start (offset_expr.X_add_symbol);
11767               if (breg == 0)
11768                 {
11769                   tempreg = mips_gp_register;
11770                 }
11771               else
11772                 {
11773                   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11774                                AT, breg, mips_gp_register);
11775                   tempreg = AT;
11776                   used_at = 1;
11777                 }
11778
11779               /* Itbl support may require additional care here.  */
11780               macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
11781                            BFD_RELOC_GPREL16, tempreg);
11782               offset_expr.X_add_number += 4;
11783
11784               /* Set mips_optimize to 2 to avoid inserting an
11785                  undesired nop.  */
11786               hold_mips_optimize = mips_optimize;
11787               mips_optimize = 2;
11788               /* Itbl support may require additional care here.  */
11789               macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
11790                            BFD_RELOC_GPREL16, tempreg);
11791               mips_optimize = hold_mips_optimize;
11792
11793               relax_switch ();
11794
11795               offset_expr.X_add_number -= 4;
11796             }
11797           used_at = 1;
11798           if (offset_high_part (offset_expr.X_add_number, 16)
11799               != offset_high_part (offset_expr.X_add_number + 4, 16))
11800             {
11801               load_address (AT, &offset_expr, &used_at);
11802               offset_expr.X_op = O_constant;
11803               offset_expr.X_add_number = 0;
11804             }
11805           else
11806             macro_build_lui (&offset_expr, AT);
11807           if (breg != 0)
11808             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
11809           /* Itbl support may require additional care here.  */
11810           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
11811                        BFD_RELOC_LO16, AT);
11812           /* FIXME: How do we handle overflow here?  */
11813           offset_expr.X_add_number += 4;
11814           /* Itbl support may require additional care here.  */
11815           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
11816                        BFD_RELOC_LO16, AT);
11817           if (mips_relax.sequence)
11818             relax_end ();
11819         }
11820       else if (!mips_big_got)
11821         {
11822           /* If this is a reference to an external symbol, we want
11823                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
11824                nop
11825                <op>     op[0],0($at)
11826                <op>     op[0]+1,4($at)
11827              Otherwise we want
11828                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
11829                nop
11830                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
11831                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
11832              If there is a base register we add it to $at before the
11833              lwc1 instructions.  If there is a constant we include it
11834              in the lwc1 instructions.  */
11835           used_at = 1;
11836           expr1.X_add_number = offset_expr.X_add_number;
11837           if (expr1.X_add_number < -0x8000
11838               || expr1.X_add_number >= 0x8000 - 4)
11839             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11840           load_got_offset (AT, &offset_expr);
11841           load_delay_nop ();
11842           if (breg != 0)
11843             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
11844
11845           /* Set mips_optimize to 2 to avoid inserting an undesired
11846              nop.  */
11847           hold_mips_optimize = mips_optimize;
11848           mips_optimize = 2;
11849
11850           /* Itbl support may require additional care here.  */
11851           relax_start (offset_expr.X_add_symbol);
11852           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
11853                        BFD_RELOC_LO16, AT);
11854           expr1.X_add_number += 4;
11855           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
11856                        BFD_RELOC_LO16, AT);
11857           relax_switch ();
11858           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
11859                        BFD_RELOC_LO16, AT);
11860           offset_expr.X_add_number += 4;
11861           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
11862                        BFD_RELOC_LO16, AT);
11863           relax_end ();
11864
11865           mips_optimize = hold_mips_optimize;
11866         }
11867       else if (mips_big_got)
11868         {
11869           int gpdelay;
11870
11871           /* If this is a reference to an external symbol, we want
11872                lui      $at,<sym>               (BFD_RELOC_MIPS_GOT_HI16)
11873                addu     $at,$at,$gp
11874                lw       $at,<sym>($at)          (BFD_RELOC_MIPS_GOT_LO16)
11875                nop
11876                <op>     op[0],0($at)
11877                <op>     op[0]+1,4($at)
11878              Otherwise we want
11879                lw       $at,<sym>($gp)          (BFD_RELOC_MIPS_GOT16)
11880                nop
11881                <op>     op[0],<sym>($at)        (BFD_RELOC_LO16)
11882                <op>     op[0]+1,<sym>+4($at)    (BFD_RELOC_LO16)
11883              If there is a base register we add it to $at before the
11884              lwc1 instructions.  If there is a constant we include it
11885              in the lwc1 instructions.  */
11886           used_at = 1;
11887           expr1.X_add_number = offset_expr.X_add_number;
11888           offset_expr.X_add_number = 0;
11889           if (expr1.X_add_number < -0x8000
11890               || expr1.X_add_number >= 0x8000 - 4)
11891             as_bad (_("PIC code offset overflow (max 16 signed bits)"));
11892           gpdelay = reg_needs_delay (mips_gp_register);
11893           relax_start (offset_expr.X_add_symbol);
11894           macro_build (&offset_expr, "lui", LUI_FMT,
11895                        AT, BFD_RELOC_MIPS_GOT_HI16);
11896           macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
11897                        AT, AT, mips_gp_register);
11898           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
11899                        AT, BFD_RELOC_MIPS_GOT_LO16, AT);
11900           load_delay_nop ();
11901           if (breg != 0)
11902             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
11903           /* Itbl support may require additional care here.  */
11904           macro_build (&expr1, s, fmt, coproc ? op[0] + 1 : op[0],
11905                        BFD_RELOC_LO16, AT);
11906           expr1.X_add_number += 4;
11907
11908           /* Set mips_optimize to 2 to avoid inserting an undesired
11909              nop.  */
11910           hold_mips_optimize = mips_optimize;
11911           mips_optimize = 2;
11912           /* Itbl support may require additional care here.  */
11913           macro_build (&expr1, s, fmt, coproc ? op[0] : op[0] + 1,
11914                        BFD_RELOC_LO16, AT);
11915           mips_optimize = hold_mips_optimize;
11916           expr1.X_add_number -= 4;
11917
11918           relax_switch ();
11919           offset_expr.X_add_number = expr1.X_add_number;
11920           if (gpdelay)
11921             macro_build (NULL, "nop", "");
11922           macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
11923                        BFD_RELOC_MIPS_GOT16, mips_gp_register);
11924           load_delay_nop ();
11925           if (breg != 0)
11926             macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
11927           /* Itbl support may require additional care here.  */
11928           macro_build (&offset_expr, s, fmt, coproc ? op[0] + 1 : op[0],
11929                        BFD_RELOC_LO16, AT);
11930           offset_expr.X_add_number += 4;
11931
11932           /* Set mips_optimize to 2 to avoid inserting an undesired
11933              nop.  */
11934           hold_mips_optimize = mips_optimize;
11935           mips_optimize = 2;
11936           /* Itbl support may require additional care here.  */
11937           macro_build (&offset_expr, s, fmt, coproc ? op[0] : op[0] + 1,
11938                        BFD_RELOC_LO16, AT);
11939           mips_optimize = hold_mips_optimize;
11940           relax_end ();
11941         }
11942       else
11943         abort ();
11944
11945       break;
11946         
11947     case M_SAA_AB:
11948       s = "saa";
11949       offbits = 0;
11950       fmt = "t,(b)";
11951       goto ld_st;
11952     case M_SAAD_AB:
11953       s = "saad";
11954       offbits = 0;
11955       fmt = "t,(b)";
11956       goto ld_st;
11957
11958    /* New code added to support COPZ instructions.
11959       This code builds table entries out of the macros in mip_opcodes.
11960       R4000 uses interlocks to handle coproc delays.
11961       Other chips (like the R3000) require nops to be inserted for delays.
11962
11963       FIXME: Currently, we require that the user handle delays.
11964       In order to fill delay slots for non-interlocked chips,
11965       we must have a way to specify delays based on the coprocessor.
11966       Eg. 4 cycles if load coproc reg from memory, 1 if in cache, etc.
11967       What are the side-effects of the cop instruction?
11968       What cache support might we have and what are its effects?
11969       Both coprocessor & memory require delays. how long???
11970       What registers are read/set/modified?
11971
11972       If an itbl is provided to interpret cop instructions,
11973       this knowledge can be encoded in the itbl spec.  */
11974
11975     case M_COP0:
11976       s = "c0";
11977       goto copz;
11978     case M_COP1:
11979       s = "c1";
11980       goto copz;
11981     case M_COP2:
11982       s = "c2";
11983       goto copz;
11984     case M_COP3:
11985       s = "c3";
11986     copz:
11987       gas_assert (!mips_opts.micromips);
11988       /* For now we just do C (same as Cz).  The parameter will be
11989          stored in insn_opcode by mips_ip.  */
11990       macro_build (NULL, s, "C", (int) ip->insn_opcode);
11991       break;
11992
11993     case M_MOVE:
11994       move_register (op[0], op[1]);
11995       break;
11996
11997     case M_MOVEP:
11998       gas_assert (mips_opts.micromips);
11999       gas_assert (mips_opts.insn32);
12000       move_register (micromips_to_32_reg_h_map1[op[0]],
12001                      micromips_to_32_reg_m_map[op[1]]);
12002       move_register (micromips_to_32_reg_h_map2[op[0]],
12003                      micromips_to_32_reg_n_map[op[2]]);
12004       break;
12005
12006     case M_DMUL:
12007       dbl = 1;
12008     case M_MUL:
12009       if (mips_opts.arch == CPU_R5900)
12010         macro_build (NULL, dbl ? "dmultu" : "multu", "d,s,t", op[0], op[1],
12011                      op[2]);
12012       else
12013         {
12014           macro_build (NULL, dbl ? "dmultu" : "multu", "s,t", op[1], op[2]);
12015           macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12016         }
12017       break;
12018
12019     case M_DMUL_I:
12020       dbl = 1;
12021     case M_MUL_I:
12022       /* The MIPS assembler some times generates shifts and adds.  I'm
12023          not trying to be that fancy. GCC should do this for us
12024          anyway.  */
12025       used_at = 1;
12026       load_register (AT, &imm_expr, dbl);
12027       macro_build (NULL, dbl ? "dmult" : "mult", "s,t", op[1], AT);
12028       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12029       break;
12030
12031     case M_DMULO_I:
12032       dbl = 1;
12033     case M_MULO_I:
12034       imm = 1;
12035       goto do_mulo;
12036
12037     case M_DMULO:
12038       dbl = 1;
12039     case M_MULO:
12040     do_mulo:
12041       start_noreorder ();
12042       used_at = 1;
12043       if (imm)
12044         load_register (AT, &imm_expr, dbl);
12045       macro_build (NULL, dbl ? "dmult" : "mult", "s,t",
12046                    op[1], imm ? AT : op[2]);
12047       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12048       macro_build (NULL, dbl ? "dsra32" : "sra", SHFT_FMT, op[0], op[0], 31);
12049       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12050       if (mips_trap)
12051         macro_build (NULL, "tne", TRAP_FMT, op[0], AT, 6);
12052       else
12053         {
12054           if (mips_opts.micromips)
12055             micromips_label_expr (&label_expr);
12056           else
12057             label_expr.X_add_number = 8;
12058           macro_build (&label_expr, "beq", "s,t,p", op[0], AT);
12059           macro_build (NULL, "nop", "");
12060           macro_build (NULL, "break", BRK_FMT, 6);
12061           if (mips_opts.micromips)
12062             micromips_add_label ();
12063         }
12064       end_noreorder ();
12065       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12066       break;
12067
12068     case M_DMULOU_I:
12069       dbl = 1;
12070     case M_MULOU_I:
12071       imm = 1;
12072       goto do_mulou;
12073
12074     case M_DMULOU:
12075       dbl = 1;
12076     case M_MULOU:
12077     do_mulou:
12078       start_noreorder ();
12079       used_at = 1;
12080       if (imm)
12081         load_register (AT, &imm_expr, dbl);
12082       macro_build (NULL, dbl ? "dmultu" : "multu", "s,t",
12083                    op[1], imm ? AT : op[2]);
12084       macro_build (NULL, "mfhi", MFHL_FMT, AT);
12085       macro_build (NULL, "mflo", MFHL_FMT, op[0]);
12086       if (mips_trap)
12087         macro_build (NULL, "tne", TRAP_FMT, AT, ZERO, 6);
12088       else
12089         {
12090           if (mips_opts.micromips)
12091             micromips_label_expr (&label_expr);
12092           else
12093             label_expr.X_add_number = 8;
12094           macro_build (&label_expr, "beq", "s,t,p", AT, ZERO);
12095           macro_build (NULL, "nop", "");
12096           macro_build (NULL, "break", BRK_FMT, 6);
12097           if (mips_opts.micromips)
12098             micromips_add_label ();
12099         }
12100       end_noreorder ();
12101       break;
12102
12103     case M_DROL:
12104       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12105         {
12106           if (op[0] == op[1])
12107             {
12108               tempreg = AT;
12109               used_at = 1;
12110             }
12111           else
12112             tempreg = op[0];
12113           macro_build (NULL, "dnegu", "d,w", tempreg, op[2]);
12114           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], tempreg);
12115           break;
12116         }
12117       used_at = 1;
12118       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12119       macro_build (NULL, "dsrlv", "d,t,s", AT, op[1], AT);
12120       macro_build (NULL, "dsllv", "d,t,s", op[0], op[1], op[2]);
12121       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12122       break;
12123
12124     case M_ROL:
12125       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12126         {
12127           if (op[0] == op[1])
12128             {
12129               tempreg = AT;
12130               used_at = 1;
12131             }
12132           else
12133             tempreg = op[0];
12134           macro_build (NULL, "negu", "d,w", tempreg, op[2]);
12135           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], tempreg);
12136           break;
12137         }
12138       used_at = 1;
12139       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12140       macro_build (NULL, "srlv", "d,t,s", AT, op[1], AT);
12141       macro_build (NULL, "sllv", "d,t,s", op[0], op[1], op[2]);
12142       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12143       break;
12144
12145     case M_DROL_I:
12146       {
12147         unsigned int rot;
12148         char *l;
12149         char *rr;
12150
12151         if (imm_expr.X_op != O_constant)
12152           as_bad (_("Improper rotate count"));
12153         rot = imm_expr.X_add_number & 0x3f;
12154         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12155           {
12156             rot = (64 - rot) & 0x3f;
12157             if (rot >= 32)
12158               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12159             else
12160               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12161             break;
12162           }
12163         if (rot == 0)
12164           {
12165             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12166             break;
12167           }
12168         l = (rot < 0x20) ? "dsll" : "dsll32";
12169         rr = ((0x40 - rot) < 0x20) ? "dsrl" : "dsrl32";
12170         rot &= 0x1f;
12171         used_at = 1;
12172         macro_build (NULL, l, SHFT_FMT, AT, op[1], rot);
12173         macro_build (NULL, rr, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12174         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12175       }
12176       break;
12177
12178     case M_ROL_I:
12179       {
12180         unsigned int rot;
12181
12182         if (imm_expr.X_op != O_constant)
12183           as_bad (_("Improper rotate count"));
12184         rot = imm_expr.X_add_number & 0x1f;
12185         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12186           {
12187             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1],
12188                          (32 - rot) & 0x1f);
12189             break;
12190           }
12191         if (rot == 0)
12192           {
12193             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
12194             break;
12195           }
12196         used_at = 1;
12197         macro_build (NULL, "sll", SHFT_FMT, AT, op[1], rot);
12198         macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12199         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12200       }
12201       break;
12202
12203     case M_DROR:
12204       if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12205         {
12206           macro_build (NULL, "drorv", "d,t,s", op[0], op[1], op[2]);
12207           break;
12208         }
12209       used_at = 1;
12210       macro_build (NULL, "dsubu", "d,v,t", AT, ZERO, op[2]);
12211       macro_build (NULL, "dsllv", "d,t,s", AT, op[1], AT);
12212       macro_build (NULL, "dsrlv", "d,t,s", op[0], op[1], op[2]);
12213       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12214       break;
12215
12216     case M_ROR:
12217       if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12218         {
12219           macro_build (NULL, "rorv", "d,t,s", op[0], op[1], op[2]);
12220           break;
12221         }
12222       used_at = 1;
12223       macro_build (NULL, "subu", "d,v,t", AT, ZERO, op[2]);
12224       macro_build (NULL, "sllv", "d,t,s", AT, op[1], AT);
12225       macro_build (NULL, "srlv", "d,t,s", op[0], op[1], op[2]);
12226       macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12227       break;
12228
12229     case M_DROR_I:
12230       {
12231         unsigned int rot;
12232         char *l;
12233         char *rr;
12234
12235         if (imm_expr.X_op != O_constant)
12236           as_bad (_("Improper rotate count"));
12237         rot = imm_expr.X_add_number & 0x3f;
12238         if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
12239           {
12240             if (rot >= 32)
12241               macro_build (NULL, "dror32", SHFT_FMT, op[0], op[1], rot - 32);
12242             else
12243               macro_build (NULL, "dror", SHFT_FMT, op[0], op[1], rot);
12244             break;
12245           }
12246         if (rot == 0)
12247           {
12248             macro_build (NULL, "dsrl", SHFT_FMT, op[0], op[1], 0);
12249             break;
12250           }
12251         rr = (rot < 0x20) ? "dsrl" : "dsrl32";
12252         l = ((0x40 - rot) < 0x20) ? "dsll" : "dsll32";
12253         rot &= 0x1f;
12254         used_at = 1;
12255         macro_build (NULL, rr, SHFT_FMT, AT, op[1], rot);
12256         macro_build (NULL, l, SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12257         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12258       }
12259       break;
12260
12261     case M_ROR_I:
12262       {
12263         unsigned int rot;
12264
12265         if (imm_expr.X_op != O_constant)
12266           as_bad (_("Improper rotate count"));
12267         rot = imm_expr.X_add_number & 0x1f;
12268         if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
12269           {
12270             macro_build (NULL, "ror", SHFT_FMT, op[0], op[1], rot);
12271             break;
12272           }
12273         if (rot == 0)
12274           {
12275             macro_build (NULL, "srl", SHFT_FMT, op[0], op[1], 0);
12276             break;
12277           }
12278         used_at = 1;
12279         macro_build (NULL, "srl", SHFT_FMT, AT, op[1], rot);
12280         macro_build (NULL, "sll", SHFT_FMT, op[0], op[1], (0x20 - rot) & 0x1f);
12281         macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12282       }
12283       break;
12284
12285     case M_SEQ:
12286       if (op[1] == 0)
12287         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[2], BFD_RELOC_LO16);
12288       else if (op[2] == 0)
12289         macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12290       else
12291         {
12292           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
12293           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
12294         }
12295       break;
12296
12297     case M_SEQ_I:
12298       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
12299         {
12300           macro_build (&expr1, "sltiu", "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12301           break;
12302         }
12303       if (op[1] == 0)
12304         {
12305           as_warn (_("Instruction %s: result is always false"),
12306                    ip->insn_mo->name);
12307           move_register (op[0], 0);
12308           break;
12309         }
12310       if (CPU_HAS_SEQ (mips_opts.arch)
12311           && -512 <= imm_expr.X_add_number
12312           && imm_expr.X_add_number < 512)
12313         {
12314           macro_build (NULL, "seqi", "t,r,+Q", op[0], op[1],
12315                        (int) imm_expr.X_add_number);
12316           break;
12317         }
12318       if (imm_expr.X_op == O_constant
12319           && imm_expr.X_add_number >= 0
12320           && imm_expr.X_add_number < 0x10000)
12321         macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1], BFD_RELOC_LO16);
12322       else if (imm_expr.X_op == O_constant
12323                && imm_expr.X_add_number > -0x8000
12324                && imm_expr.X_add_number < 0)
12325         {
12326           imm_expr.X_add_number = -imm_expr.X_add_number;
12327           macro_build (&imm_expr, HAVE_32BIT_GPRS ? "addiu" : "daddiu",
12328                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12329         }
12330       else if (CPU_HAS_SEQ (mips_opts.arch))
12331         {
12332           used_at = 1;
12333           load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12334           macro_build (NULL, "seq", "d,v,t", op[0], op[1], AT);
12335           break;
12336         }
12337       else
12338         {
12339           load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12340           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
12341           used_at = 1;
12342         }
12343       macro_build (&expr1, "sltiu", "t,r,j", op[0], op[0], BFD_RELOC_LO16);
12344       break;
12345
12346     case M_SGE:         /* X >= Y  <==>  not (X < Y) */
12347       s = "slt";
12348       goto sge;
12349     case M_SGEU:
12350       s = "sltu";
12351     sge:
12352       macro_build (NULL, s, "d,v,t", op[0], op[1], op[2]);
12353       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12354       break;
12355
12356     case M_SGE_I:       /* X >= I  <==>  not (X < I) */
12357     case M_SGEU_I:
12358       if (imm_expr.X_op == O_constant
12359           && imm_expr.X_add_number >= -0x8000
12360           && imm_expr.X_add_number < 0x8000)
12361         macro_build (&imm_expr, mask == M_SGE_I ? "slti" : "sltiu", "t,r,j",
12362                      op[0], op[1], BFD_RELOC_LO16);
12363       else
12364         {
12365           load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12366           macro_build (NULL, mask == M_SGE_I ? "slt" : "sltu", "d,v,t",
12367                        op[0], op[1], AT);
12368           used_at = 1;
12369         }
12370       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12371       break;
12372
12373     case M_SGT:         /* X > Y  <==>  Y < X */
12374       s = "slt";
12375       goto sgt;
12376     case M_SGTU:
12377       s = "sltu";
12378     sgt:
12379       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
12380       break;
12381
12382     case M_SGT_I:       /* X > I  <==>  I < X */
12383       s = "slt";
12384       goto sgti;
12385     case M_SGTU_I:
12386       s = "sltu";
12387     sgti:
12388       used_at = 1;
12389       load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12390       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
12391       break;
12392
12393     case M_SLE:         /* X <= Y  <==>  Y >= X  <==>  not (Y < X) */
12394       s = "slt";
12395       goto sle;
12396     case M_SLEU:
12397       s = "sltu";
12398     sle:
12399       macro_build (NULL, s, "d,v,t", op[0], op[2], op[1]);
12400       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12401       break;
12402
12403     case M_SLE_I:       /* X <= I  <==>  I >= X  <==>  not (I < X) */
12404       s = "slt";
12405       goto slei;
12406     case M_SLEU_I:
12407       s = "sltu";
12408     slei:
12409       used_at = 1;
12410       load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12411       macro_build (NULL, s, "d,v,t", op[0], AT, op[1]);
12412       macro_build (&expr1, "xori", "t,r,i", op[0], op[0], BFD_RELOC_LO16);
12413       break;
12414
12415     case M_SLT_I:
12416       if (imm_expr.X_op == O_constant
12417           && imm_expr.X_add_number >= -0x8000
12418           && imm_expr.X_add_number < 0x8000)
12419         {
12420           macro_build (&imm_expr, "slti", "t,r,j", op[0], op[1],
12421                        BFD_RELOC_LO16);
12422           break;
12423         }
12424       used_at = 1;
12425       load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12426       macro_build (NULL, "slt", "d,v,t", op[0], op[1], AT);
12427       break;
12428
12429     case M_SLTU_I:
12430       if (imm_expr.X_op == O_constant
12431           && imm_expr.X_add_number >= -0x8000
12432           && imm_expr.X_add_number < 0x8000)
12433         {
12434           macro_build (&imm_expr, "sltiu", "t,r,j", op[0], op[1],
12435                        BFD_RELOC_LO16);
12436           break;
12437         }
12438       used_at = 1;
12439       load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12440       macro_build (NULL, "sltu", "d,v,t", op[0], op[1], AT);
12441       break;
12442
12443     case M_SNE:
12444       if (op[1] == 0)
12445         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[2]);
12446       else if (op[2] == 0)
12447         macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
12448       else
12449         {
12450           macro_build (NULL, "xor", "d,v,t", op[0], op[1], op[2]);
12451           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
12452         }
12453       break;
12454
12455     case M_SNE_I:
12456       if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
12457         {
12458           macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[1]);
12459           break;
12460         }
12461       if (op[1] == 0)
12462         {
12463           as_warn (_("Instruction %s: result is always true"),
12464                    ip->insn_mo->name);
12465           macro_build (&expr1, HAVE_32BIT_GPRS ? "addiu" : "daddiu", "t,r,j",
12466                        op[0], 0, BFD_RELOC_LO16);
12467           break;
12468         }
12469       if (CPU_HAS_SEQ (mips_opts.arch)
12470           && -512 <= imm_expr.X_add_number
12471           && imm_expr.X_add_number < 512)
12472         {
12473           macro_build (NULL, "snei", "t,r,+Q", op[0], op[1],
12474                        (int) imm_expr.X_add_number);
12475           break;
12476         }
12477       if (imm_expr.X_op == O_constant
12478           && imm_expr.X_add_number >= 0
12479           && imm_expr.X_add_number < 0x10000)
12480         {
12481           macro_build (&imm_expr, "xori", "t,r,i", op[0], op[1],
12482                        BFD_RELOC_LO16);
12483         }
12484       else if (imm_expr.X_op == O_constant
12485                && imm_expr.X_add_number > -0x8000
12486                && imm_expr.X_add_number < 0)
12487         {
12488           imm_expr.X_add_number = -imm_expr.X_add_number;
12489           macro_build (&imm_expr, HAVE_32BIT_GPRS ? "addiu" : "daddiu",
12490                        "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12491         }
12492       else if (CPU_HAS_SEQ (mips_opts.arch))
12493         {
12494           used_at = 1;
12495           load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12496           macro_build (NULL, "sne", "d,v,t", op[0], op[1], AT);
12497           break;
12498         }
12499       else
12500         {
12501           load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12502           macro_build (NULL, "xor", "d,v,t", op[0], op[1], AT);
12503           used_at = 1;
12504         }
12505       macro_build (NULL, "sltu", "d,v,t", op[0], 0, op[0]);
12506       break;
12507
12508     case M_SUB_I:
12509       s = "addi";
12510       s2 = "sub";
12511       goto do_subi;
12512     case M_SUBU_I:
12513       s = "addiu";
12514       s2 = "subu";
12515       goto do_subi;
12516     case M_DSUB_I:
12517       dbl = 1;
12518       s = "daddi";
12519       s2 = "dsub";
12520       if (!mips_opts.micromips)
12521         goto do_subi;
12522       if (imm_expr.X_op == O_constant
12523           && imm_expr.X_add_number > -0x200
12524           && imm_expr.X_add_number <= 0x200)
12525         {
12526           macro_build (NULL, s, "t,r,.", op[0], op[1], -imm_expr.X_add_number);
12527           break;
12528         }
12529       goto do_subi_i;
12530     case M_DSUBU_I:
12531       dbl = 1;
12532       s = "daddiu";
12533       s2 = "dsubu";
12534     do_subi:
12535       if (imm_expr.X_op == O_constant
12536           && imm_expr.X_add_number > -0x8000
12537           && imm_expr.X_add_number <= 0x8000)
12538         {
12539           imm_expr.X_add_number = -imm_expr.X_add_number;
12540           macro_build (&imm_expr, s, "t,r,j", op[0], op[1], BFD_RELOC_LO16);
12541           break;
12542         }
12543     do_subi_i:
12544       used_at = 1;
12545       load_register (AT, &imm_expr, dbl);
12546       macro_build (NULL, s2, "d,v,t", op[0], op[1], AT);
12547       break;
12548
12549     case M_TEQ_I:
12550       s = "teq";
12551       goto trap;
12552     case M_TGE_I:
12553       s = "tge";
12554       goto trap;
12555     case M_TGEU_I:
12556       s = "tgeu";
12557       goto trap;
12558     case M_TLT_I:
12559       s = "tlt";
12560       goto trap;
12561     case M_TLTU_I:
12562       s = "tltu";
12563       goto trap;
12564     case M_TNE_I:
12565       s = "tne";
12566     trap:
12567       used_at = 1;
12568       load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
12569       macro_build (NULL, s, "s,t", op[0], AT);
12570       break;
12571
12572     case M_TRUNCWS:
12573     case M_TRUNCWD:
12574       gas_assert (!mips_opts.micromips);
12575       gas_assert (mips_opts.isa == ISA_MIPS1);
12576       used_at = 1;
12577
12578       /*
12579        * Is the double cfc1 instruction a bug in the mips assembler;
12580        * or is there a reason for it?
12581        */
12582       start_noreorder ();
12583       macro_build (NULL, "cfc1", "t,G", op[2], RA);
12584       macro_build (NULL, "cfc1", "t,G", op[2], RA);
12585       macro_build (NULL, "nop", "");
12586       expr1.X_add_number = 3;
12587       macro_build (&expr1, "ori", "t,r,i", AT, op[2], BFD_RELOC_LO16);
12588       expr1.X_add_number = 2;
12589       macro_build (&expr1, "xori", "t,r,i", AT, AT, BFD_RELOC_LO16);
12590       macro_build (NULL, "ctc1", "t,G", AT, RA);
12591       macro_build (NULL, "nop", "");
12592       macro_build (NULL, mask == M_TRUNCWD ? "cvt.w.d" : "cvt.w.s", "D,S",
12593                    op[0], op[1]);
12594       macro_build (NULL, "ctc1", "t,G", op[2], RA);
12595       macro_build (NULL, "nop", "");
12596       end_noreorder ();
12597       break;
12598
12599     case M_ULH_AB:
12600       s = "lb";
12601       s2 = "lbu";
12602       off = 1;
12603       goto uld_st;
12604     case M_ULHU_AB:
12605       s = "lbu";
12606       s2 = "lbu";
12607       off = 1;
12608       goto uld_st;
12609     case M_ULW_AB:
12610       s = "lwl";
12611       s2 = "lwr";
12612       offbits = (mips_opts.micromips ? 12 : 16);
12613       off = 3;
12614       goto uld_st;
12615     case M_ULD_AB:
12616       s = "ldl";
12617       s2 = "ldr";
12618       offbits = (mips_opts.micromips ? 12 : 16);
12619       off = 7;
12620       goto uld_st;
12621     case M_USH_AB:
12622       s = "sb";
12623       s2 = "sb";
12624       off = 1;
12625       ust = 1;
12626       goto uld_st;
12627     case M_USW_AB:
12628       s = "swl";
12629       s2 = "swr";
12630       offbits = (mips_opts.micromips ? 12 : 16);
12631       off = 3;
12632       ust = 1;
12633       goto uld_st;
12634     case M_USD_AB:
12635       s = "sdl";
12636       s2 = "sdr";
12637       offbits = (mips_opts.micromips ? 12 : 16);
12638       off = 7;
12639       ust = 1;
12640
12641     uld_st:
12642       breg = op[2];
12643       large_offset = !small_offset_p (off, align, offbits);
12644       ep = &offset_expr;
12645       expr1.X_add_number = 0;
12646       if (large_offset)
12647         {
12648           used_at = 1;
12649           tempreg = AT;
12650           if (small_offset_p (0, align, 16))
12651             macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", tempreg, breg, -1,
12652                          offset_reloc[0], offset_reloc[1], offset_reloc[2]);
12653           else
12654             {
12655               load_address (tempreg, ep, &used_at);
12656               if (breg != 0)
12657                 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
12658                              tempreg, tempreg, breg);
12659             }
12660           offset_reloc[0] = BFD_RELOC_LO16;
12661           offset_reloc[1] = BFD_RELOC_UNUSED;
12662           offset_reloc[2] = BFD_RELOC_UNUSED;
12663           breg = tempreg;
12664           tempreg = op[0];
12665           ep = &expr1;
12666         }
12667       else if (!ust && op[0] == breg)
12668         {
12669           used_at = 1;
12670           tempreg = AT;
12671         }
12672       else
12673         tempreg = op[0];
12674
12675       if (off == 1)
12676         goto ulh_sh;
12677
12678       if (!target_big_endian)
12679         ep->X_add_number += off;
12680       if (offbits == 12)
12681         macro_build (NULL, s, "t,~(b)", tempreg, (int) ep->X_add_number, breg);
12682       else
12683         macro_build (ep, s, "t,o(b)", tempreg, -1,
12684                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
12685
12686       if (!target_big_endian)
12687         ep->X_add_number -= off;
12688       else
12689         ep->X_add_number += off;
12690       if (offbits == 12)
12691         macro_build (NULL, s2, "t,~(b)",
12692                      tempreg, (int) ep->X_add_number, breg);
12693       else
12694         macro_build (ep, s2, "t,o(b)", tempreg, -1,
12695                      offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
12696
12697       /* If necessary, move the result in tempreg to the final destination.  */
12698       if (!ust && op[0] != tempreg)
12699         {
12700           /* Protect second load's delay slot.  */
12701           load_delay_nop ();
12702           move_register (op[0], tempreg);
12703         }
12704       break;
12705
12706     ulh_sh:
12707       used_at = 1;
12708       if (target_big_endian == ust)
12709         ep->X_add_number += off;
12710       tempreg = ust || large_offset ? op[0] : AT;
12711       macro_build (ep, s, "t,o(b)", tempreg, -1,
12712                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
12713
12714       /* For halfword transfers we need a temporary register to shuffle
12715          bytes.  Unfortunately for M_USH_A we have none available before
12716          the next store as AT holds the base address.  We deal with this
12717          case by clobbering TREG and then restoring it as with ULH.  */
12718       tempreg = ust == large_offset ? op[0] : AT;
12719       if (ust)
12720         macro_build (NULL, "srl", SHFT_FMT, tempreg, op[0], 8);
12721
12722       if (target_big_endian == ust)
12723         ep->X_add_number -= off;
12724       else
12725         ep->X_add_number += off;
12726       macro_build (ep, s2, "t,o(b)", tempreg, -1,
12727                    offset_reloc[0], offset_reloc[1], offset_reloc[2], breg);
12728
12729       /* For M_USH_A re-retrieve the LSB.  */
12730       if (ust && large_offset)
12731         {
12732           if (target_big_endian)
12733             ep->X_add_number += off;
12734           else
12735             ep->X_add_number -= off;
12736           macro_build (&expr1, "lbu", "t,o(b)", AT, -1,
12737                        offset_reloc[0], offset_reloc[1], offset_reloc[2], AT);
12738         }
12739       /* For ULH and M_USH_A OR the LSB in.  */
12740       if (!ust || large_offset)
12741         {
12742           tempreg = !large_offset ? AT : op[0];
12743           macro_build (NULL, "sll", SHFT_FMT, tempreg, tempreg, 8);
12744           macro_build (NULL, "or", "d,v,t", op[0], op[0], AT);
12745         }
12746       break;
12747
12748     default:
12749       /* FIXME: Check if this is one of the itbl macros, since they
12750          are added dynamically.  */
12751       as_bad (_("Macro %s not implemented yet"), ip->insn_mo->name);
12752       break;
12753     }
12754   if (!mips_opts.at && used_at)
12755     as_bad (_("Macro used $at after \".set noat\""));
12756 }
12757
12758 /* Implement macros in mips16 mode.  */
12759
12760 static void
12761 mips16_macro (struct mips_cl_insn *ip)
12762 {
12763   const struct mips_operand_array *operands;
12764   int mask;
12765   int tmp;
12766   expressionS expr1;
12767   int dbl;
12768   const char *s, *s2, *s3;
12769   unsigned int op[MAX_OPERANDS];
12770   unsigned int i;
12771
12772   mask = ip->insn_mo->mask;
12773
12774   operands = insn_operands (ip);
12775   for (i = 0; i < MAX_OPERANDS; i++)
12776     if (operands->operand[i])
12777       op[i] = insn_extract_operand (ip, operands->operand[i]);
12778     else
12779       op[i] = -1;
12780
12781   expr1.X_op = O_constant;
12782   expr1.X_op_symbol = NULL;
12783   expr1.X_add_symbol = NULL;
12784   expr1.X_add_number = 1;
12785
12786   dbl = 0;
12787
12788   switch (mask)
12789     {
12790     default:
12791       abort ();
12792
12793     case M_DDIV_3:
12794       dbl = 1;
12795     case M_DIV_3:
12796       s = "mflo";
12797       goto do_div3;
12798     case M_DREM_3:
12799       dbl = 1;
12800     case M_REM_3:
12801       s = "mfhi";
12802     do_div3:
12803       start_noreorder ();
12804       macro_build (NULL, dbl ? "ddiv" : "div", "0,x,y", op[1], op[2]);
12805       expr1.X_add_number = 2;
12806       macro_build (&expr1, "bnez", "x,p", op[2]);
12807       macro_build (NULL, "break", "6", 7);
12808
12809       /* FIXME: The normal code checks for of -1 / -0x80000000 here,
12810          since that causes an overflow.  We should do that as well,
12811          but I don't see how to do the comparisons without a temporary
12812          register.  */
12813       end_noreorder ();
12814       macro_build (NULL, s, "x", op[0]);
12815       break;
12816
12817     case M_DIVU_3:
12818       s = "divu";
12819       s2 = "mflo";
12820       goto do_divu3;
12821     case M_REMU_3:
12822       s = "divu";
12823       s2 = "mfhi";
12824       goto do_divu3;
12825     case M_DDIVU_3:
12826       s = "ddivu";
12827       s2 = "mflo";
12828       goto do_divu3;
12829     case M_DREMU_3:
12830       s = "ddivu";
12831       s2 = "mfhi";
12832     do_divu3:
12833       start_noreorder ();
12834       macro_build (NULL, s, "0,x,y", op[1], op[2]);
12835       expr1.X_add_number = 2;
12836       macro_build (&expr1, "bnez", "x,p", op[2]);
12837       macro_build (NULL, "break", "6", 7);
12838       end_noreorder ();
12839       macro_build (NULL, s2, "x", op[0]);
12840       break;
12841
12842     case M_DMUL:
12843       dbl = 1;
12844     case M_MUL:
12845       macro_build (NULL, dbl ? "dmultu" : "multu", "x,y", op[1], op[2]);
12846       macro_build (NULL, "mflo", "x", op[0]);
12847       break;
12848
12849     case M_DSUBU_I:
12850       dbl = 1;
12851       goto do_subu;
12852     case M_SUBU_I:
12853     do_subu:
12854       if (imm_expr.X_op != O_constant)
12855         as_bad (_("Unsupported large constant"));
12856       imm_expr.X_add_number = -imm_expr.X_add_number;
12857       macro_build (&imm_expr, dbl ? "daddiu" : "addiu", "y,x,4", op[0], op[1]);
12858       break;
12859
12860     case M_SUBU_I_2:
12861       if (imm_expr.X_op != O_constant)
12862         as_bad (_("Unsupported large constant"));
12863       imm_expr.X_add_number = -imm_expr.X_add_number;
12864       macro_build (&imm_expr, "addiu", "x,k", op[0]);
12865       break;
12866
12867     case M_DSUBU_I_2:
12868       if (imm_expr.X_op != O_constant)
12869         as_bad (_("Unsupported large constant"));
12870       imm_expr.X_add_number = -imm_expr.X_add_number;
12871       macro_build (&imm_expr, "daddiu", "y,j", op[0]);
12872       break;
12873
12874     case M_BEQ:
12875       s = "cmp";
12876       s2 = "bteqz";
12877       goto do_branch;
12878     case M_BNE:
12879       s = "cmp";
12880       s2 = "btnez";
12881       goto do_branch;
12882     case M_BLT:
12883       s = "slt";
12884       s2 = "btnez";
12885       goto do_branch;
12886     case M_BLTU:
12887       s = "sltu";
12888       s2 = "btnez";
12889       goto do_branch;
12890     case M_BLE:
12891       s = "slt";
12892       s2 = "bteqz";
12893       goto do_reverse_branch;
12894     case M_BLEU:
12895       s = "sltu";
12896       s2 = "bteqz";
12897       goto do_reverse_branch;
12898     case M_BGE:
12899       s = "slt";
12900       s2 = "bteqz";
12901       goto do_branch;
12902     case M_BGEU:
12903       s = "sltu";
12904       s2 = "bteqz";
12905       goto do_branch;
12906     case M_BGT:
12907       s = "slt";
12908       s2 = "btnez";
12909       goto do_reverse_branch;
12910     case M_BGTU:
12911       s = "sltu";
12912       s2 = "btnez";
12913
12914     do_reverse_branch:
12915       tmp = op[1];
12916       op[1] = op[0];
12917       op[0] = tmp;
12918
12919     do_branch:
12920       macro_build (NULL, s, "x,y", op[0], op[1]);
12921       macro_build (&offset_expr, s2, "p");
12922       break;
12923
12924     case M_BEQ_I:
12925       s = "cmpi";
12926       s2 = "bteqz";
12927       s3 = "x,U";
12928       goto do_branch_i;
12929     case M_BNE_I:
12930       s = "cmpi";
12931       s2 = "btnez";
12932       s3 = "x,U";
12933       goto do_branch_i;
12934     case M_BLT_I:
12935       s = "slti";
12936       s2 = "btnez";
12937       s3 = "x,8";
12938       goto do_branch_i;
12939     case M_BLTU_I:
12940       s = "sltiu";
12941       s2 = "btnez";
12942       s3 = "x,8";
12943       goto do_branch_i;
12944     case M_BLE_I:
12945       s = "slti";
12946       s2 = "btnez";
12947       s3 = "x,8";
12948       goto do_addone_branch_i;
12949     case M_BLEU_I:
12950       s = "sltiu";
12951       s2 = "btnez";
12952       s3 = "x,8";
12953       goto do_addone_branch_i;
12954     case M_BGE_I:
12955       s = "slti";
12956       s2 = "bteqz";
12957       s3 = "x,8";
12958       goto do_branch_i;
12959     case M_BGEU_I:
12960       s = "sltiu";
12961       s2 = "bteqz";
12962       s3 = "x,8";
12963       goto do_branch_i;
12964     case M_BGT_I:
12965       s = "slti";
12966       s2 = "bteqz";
12967       s3 = "x,8";
12968       goto do_addone_branch_i;
12969     case M_BGTU_I:
12970       s = "sltiu";
12971       s2 = "bteqz";
12972       s3 = "x,8";
12973
12974     do_addone_branch_i:
12975       if (imm_expr.X_op != O_constant)
12976         as_bad (_("Unsupported large constant"));
12977       ++imm_expr.X_add_number;
12978
12979     do_branch_i:
12980       macro_build (&imm_expr, s, s3, op[0]);
12981       macro_build (&offset_expr, s2, "p");
12982       break;
12983
12984     case M_ABS:
12985       expr1.X_add_number = 0;
12986       macro_build (&expr1, "slti", "x,8", op[1]);
12987       if (op[0] != op[1])
12988         macro_build (NULL, "move", "y,X", op[0], mips16_to_32_reg_map[op[1]]);
12989       expr1.X_add_number = 2;
12990       macro_build (&expr1, "bteqz", "p");
12991       macro_build (NULL, "neg", "x,w", op[0], op[0]);
12992       break;
12993     }
12994 }
12995
12996 /* Look up instruction [START, START + LENGTH) in HASH.  Record any extra
12997    opcode bits in *OPCODE_EXTRA.  */
12998
12999 static struct mips_opcode *
13000 mips_lookup_insn (struct hash_control *hash, const char *start,
13001                   ssize_t length, unsigned int *opcode_extra)
13002 {
13003   char *name, *dot, *p;
13004   unsigned int mask, suffix;
13005   ssize_t opend;
13006   struct mips_opcode *insn;
13007
13008   /* Make a copy of the instruction so that we can fiddle with it.  */
13009   name = alloca (length + 1);
13010   memcpy (name, start, length);
13011   name[length] = '\0';
13012
13013   /* Look up the instruction as-is.  */
13014   insn = (struct mips_opcode *) hash_find (hash, name);
13015   if (insn)
13016     return insn;
13017
13018   dot = strchr (name, '.');
13019   if (dot && dot[1])
13020     {
13021       /* Try to interpret the text after the dot as a VU0 channel suffix.  */
13022       p = mips_parse_vu0_channels (dot + 1, &mask);
13023       if (*p == 0 && mask != 0)
13024         {
13025           *dot = 0;
13026           insn = (struct mips_opcode *) hash_find (hash, name);
13027           *dot = '.';
13028           if (insn && (insn->pinfo2 & INSN2_VU0_CHANNEL_SUFFIX) != 0)
13029             {
13030               *opcode_extra |= mask << mips_vu0_channel_mask.lsb;
13031               return insn;
13032             }
13033         }
13034     }
13035
13036   if (mips_opts.micromips)
13037     {
13038       /* See if there's an instruction size override suffix,
13039          either `16' or `32', at the end of the mnemonic proper,
13040          that defines the operation, i.e. before the first `.'
13041          character if any.  Strip it and retry.  */
13042       opend = dot != NULL ? dot - name : length;
13043       if (opend >= 3 && name[opend - 2] == '1' && name[opend - 1] == '6')
13044         suffix = 2;
13045       else if (name[opend - 2] == '3' && name[opend - 1] == '2')
13046         suffix = 4;
13047       else
13048         suffix = 0;
13049       if (suffix)
13050         {
13051           memcpy (name + opend - 2, name + opend, length - opend + 1);
13052           insn = (struct mips_opcode *) hash_find (hash, name);
13053           if (insn)
13054             {
13055               forced_insn_length = suffix;
13056               return insn;
13057             }
13058         }
13059     }
13060
13061   return NULL;
13062 }
13063
13064 /* Assemble an instruction into its binary format.  If the instruction
13065    is a macro, set imm_expr, imm2_expr and offset_expr to the values
13066    associated with "I", "+I" and "A" operands respectively.  Otherwise
13067    store the value of the relocatable field (if any) in offset_expr.
13068    In both cases set offset_reloc to the relocation operators applied
13069    to offset_expr.  */
13070
13071 static void
13072 mips_ip (char *str, struct mips_cl_insn *insn)
13073 {
13074   const struct mips_opcode *first, *past;
13075   struct hash_control *hash;
13076   char format;
13077   size_t end;
13078   struct mips_operand_token *tokens;
13079   unsigned int opcode_extra;
13080
13081   if (mips_opts.micromips)
13082     {
13083       hash = micromips_op_hash;
13084       past = &micromips_opcodes[bfd_micromips_num_opcodes];
13085     }
13086   else
13087     {
13088       hash = op_hash;
13089       past = &mips_opcodes[NUMOPCODES];
13090     }
13091   forced_insn_length = 0;
13092   opcode_extra = 0;
13093
13094   /* We first try to match an instruction up to a space or to the end.  */
13095   for (end = 0; str[end] != '\0' && !ISSPACE (str[end]); end++)
13096     continue;
13097
13098   first = mips_lookup_insn (hash, str, end, &opcode_extra);
13099   if (first == NULL)
13100     {
13101       set_insn_error (0, _("Unrecognized opcode"));
13102       return;
13103     }
13104
13105   if (strcmp (first->name, "li.s") == 0)
13106     format = 'f';
13107   else if (strcmp (first->name, "li.d") == 0)
13108     format = 'd';
13109   else
13110     format = 0;
13111   tokens = mips_parse_arguments (str + end, format);
13112   if (!tokens)
13113     return;
13114
13115   if (!match_insns (insn, first, past, tokens, opcode_extra, FALSE)
13116       && !match_insns (insn, first, past, tokens, opcode_extra, TRUE))
13117     set_insn_error (0, _("Illegal operands"));
13118
13119   obstack_free (&mips_operand_tokens, tokens);
13120 }
13121
13122 /* As for mips_ip, but used when assembling MIPS16 code.
13123    Also set forced_insn_length to the resulting instruction size in
13124    bytes if the user explicitly requested a small or extended instruction.  */
13125
13126 static void
13127 mips16_ip (char *str, struct mips_cl_insn *insn)
13128 {
13129   char *end, *s, c;
13130   struct mips_opcode *first;
13131   struct mips_operand_token *tokens;
13132
13133   forced_insn_length = 0;
13134
13135   for (s = str; ISLOWER (*s); ++s)
13136     ;
13137   end = s;
13138   c = *end;
13139   switch (c)
13140     {
13141     case '\0':
13142       break;
13143
13144     case ' ':
13145       s++;
13146       break;
13147
13148     case '.':
13149       if (s[1] == 't' && s[2] == ' ')
13150         {
13151           forced_insn_length = 2;
13152           s += 3;
13153           break;
13154         }
13155       else if (s[1] == 'e' && s[2] == ' ')
13156         {
13157           forced_insn_length = 4;
13158           s += 3;
13159           break;
13160         }
13161       /* Fall through.  */
13162     default:
13163       set_insn_error (0, _("Unrecognized opcode"));
13164       return;
13165     }
13166
13167   if (mips_opts.noautoextend && !forced_insn_length)
13168     forced_insn_length = 2;
13169
13170   *end = 0;
13171   first = (struct mips_opcode *) hash_find (mips16_op_hash, str);
13172   *end = c;
13173
13174   if (!first)
13175     {
13176       set_insn_error (0, _("Unrecognized opcode"));
13177       return;
13178     }
13179
13180   tokens = mips_parse_arguments (s, 0);
13181   if (!tokens)
13182     return;
13183
13184   if (!match_mips16_insns (insn, first, tokens))
13185     set_insn_error (0, _("Illegal operands"));
13186
13187   obstack_free (&mips_operand_tokens, tokens);
13188 }
13189
13190 /* Marshal immediate value VAL for an extended MIPS16 instruction.
13191    NBITS is the number of significant bits in VAL.  */
13192
13193 static unsigned long
13194 mips16_immed_extend (offsetT val, unsigned int nbits)
13195 {
13196   int extval;
13197   if (nbits == 16)
13198     {
13199       extval = ((val >> 11) & 0x1f) | (val & 0x7e0);
13200       val &= 0x1f;
13201     }
13202   else if (nbits == 15)
13203     {
13204       extval = ((val >> 11) & 0xf) | (val & 0x7f0);
13205       val &= 0xf;
13206     }
13207   else
13208     {
13209       extval = ((val & 0x1f) << 6) | (val & 0x20);
13210       val = 0;
13211     }
13212   return (extval << 16) | val;
13213 }
13214
13215 /* Like decode_mips16_operand, but require the operand to be defined and
13216    require it to be an integer.  */
13217
13218 static const struct mips_int_operand *
13219 mips16_immed_operand (int type, bfd_boolean extended_p)
13220 {
13221   const struct mips_operand *operand;
13222
13223   operand = decode_mips16_operand (type, extended_p);
13224   if (!operand || (operand->type != OP_INT && operand->type != OP_PCREL))
13225     abort ();
13226   return (const struct mips_int_operand *) operand;
13227 }
13228
13229 /* Return true if SVAL fits OPERAND.  RELOC is as for mips16_immed.  */
13230
13231 static bfd_boolean
13232 mips16_immed_in_range_p (const struct mips_int_operand *operand,
13233                          bfd_reloc_code_real_type reloc, offsetT sval)
13234 {
13235   int min_val, max_val;
13236
13237   min_val = mips_int_operand_min (operand);
13238   max_val = mips_int_operand_max (operand);
13239   if (reloc != BFD_RELOC_UNUSED)
13240     {
13241       if (min_val < 0)
13242         sval = SEXT_16BIT (sval);
13243       else
13244         sval &= 0xffff;
13245     }
13246
13247   return (sval >= min_val
13248           && sval <= max_val
13249           && (sval & ((1 << operand->shift) - 1)) == 0);
13250 }
13251
13252 /* Install immediate value VAL into MIPS16 instruction *INSN,
13253    extending it if necessary.  The instruction in *INSN may
13254    already be extended.
13255
13256    RELOC is the relocation that produced VAL, or BFD_RELOC_UNUSED
13257    if none.  In the former case, VAL is a 16-bit number with no
13258    defined signedness.
13259
13260    TYPE is the type of the immediate field.  USER_INSN_LENGTH
13261    is the length that the user requested, or 0 if none.  */
13262
13263 static void
13264 mips16_immed (char *file, unsigned int line, int type,
13265               bfd_reloc_code_real_type reloc, offsetT val,
13266               unsigned int user_insn_length, unsigned long *insn)
13267 {
13268   const struct mips_int_operand *operand;
13269   unsigned int uval, length;
13270
13271   operand = mips16_immed_operand (type, FALSE);
13272   if (!mips16_immed_in_range_p (operand, reloc, val))
13273     {
13274       /* We need an extended instruction.  */
13275       if (user_insn_length == 2)
13276         as_bad_where (file, line, _("invalid unextended operand value"));
13277       else
13278         *insn |= MIPS16_EXTEND;
13279     }
13280   else if (user_insn_length == 4)
13281     {
13282       /* The operand doesn't force an unextended instruction to be extended.
13283          Warn if the user wanted an extended instruction anyway.  */
13284       *insn |= MIPS16_EXTEND;
13285       as_warn_where (file, line,
13286                      _("extended operand requested but not required"));
13287     }
13288
13289   length = mips16_opcode_length (*insn);
13290   if (length == 4)
13291     {
13292       operand = mips16_immed_operand (type, TRUE);
13293       if (!mips16_immed_in_range_p (operand, reloc, val))
13294         as_bad_where (file, line,
13295                       _("operand value out of range for instruction"));
13296     }
13297   uval = ((unsigned int) val >> operand->shift) - operand->bias;
13298   if (length == 2)
13299     *insn = mips_insert_operand (&operand->root, *insn, uval);
13300   else
13301     *insn |= mips16_immed_extend (uval, operand->root.size);
13302 }
13303 \f
13304 struct percent_op_match
13305 {
13306   const char *str;
13307   bfd_reloc_code_real_type reloc;
13308 };
13309
13310 static const struct percent_op_match mips_percent_op[] =
13311 {
13312   {"%lo", BFD_RELOC_LO16},
13313   {"%call_hi", BFD_RELOC_MIPS_CALL_HI16},
13314   {"%call_lo", BFD_RELOC_MIPS_CALL_LO16},
13315   {"%call16", BFD_RELOC_MIPS_CALL16},
13316   {"%got_disp", BFD_RELOC_MIPS_GOT_DISP},
13317   {"%got_page", BFD_RELOC_MIPS_GOT_PAGE},
13318   {"%got_ofst", BFD_RELOC_MIPS_GOT_OFST},
13319   {"%got_hi", BFD_RELOC_MIPS_GOT_HI16},
13320   {"%got_lo", BFD_RELOC_MIPS_GOT_LO16},
13321   {"%got", BFD_RELOC_MIPS_GOT16},
13322   {"%gp_rel", BFD_RELOC_GPREL16},
13323   {"%half", BFD_RELOC_16},
13324   {"%highest", BFD_RELOC_MIPS_HIGHEST},
13325   {"%higher", BFD_RELOC_MIPS_HIGHER},
13326   {"%neg", BFD_RELOC_MIPS_SUB},
13327   {"%tlsgd", BFD_RELOC_MIPS_TLS_GD},
13328   {"%tlsldm", BFD_RELOC_MIPS_TLS_LDM},
13329   {"%dtprel_hi", BFD_RELOC_MIPS_TLS_DTPREL_HI16},
13330   {"%dtprel_lo", BFD_RELOC_MIPS_TLS_DTPREL_LO16},
13331   {"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16},
13332   {"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16},
13333   {"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL},
13334   {"%hi", BFD_RELOC_HI16_S}
13335 };
13336
13337 static const struct percent_op_match mips16_percent_op[] =
13338 {
13339   {"%lo", BFD_RELOC_MIPS16_LO16},
13340   {"%gprel", BFD_RELOC_MIPS16_GPREL},
13341   {"%got", BFD_RELOC_MIPS16_GOT16},
13342   {"%call16", BFD_RELOC_MIPS16_CALL16},
13343   {"%hi", BFD_RELOC_MIPS16_HI16_S},
13344   {"%tlsgd", BFD_RELOC_MIPS16_TLS_GD},
13345   {"%tlsldm", BFD_RELOC_MIPS16_TLS_LDM},
13346   {"%dtprel_hi", BFD_RELOC_MIPS16_TLS_DTPREL_HI16},
13347   {"%dtprel_lo", BFD_RELOC_MIPS16_TLS_DTPREL_LO16},
13348   {"%tprel_hi", BFD_RELOC_MIPS16_TLS_TPREL_HI16},
13349   {"%tprel_lo", BFD_RELOC_MIPS16_TLS_TPREL_LO16},
13350   {"%gottprel", BFD_RELOC_MIPS16_TLS_GOTTPREL}
13351 };
13352
13353
13354 /* Return true if *STR points to a relocation operator.  When returning true,
13355    move *STR over the operator and store its relocation code in *RELOC.
13356    Leave both *STR and *RELOC alone when returning false.  */
13357
13358 static bfd_boolean
13359 parse_relocation (char **str, bfd_reloc_code_real_type *reloc)
13360 {
13361   const struct percent_op_match *percent_op;
13362   size_t limit, i;
13363
13364   if (mips_opts.mips16)
13365     {
13366       percent_op = mips16_percent_op;
13367       limit = ARRAY_SIZE (mips16_percent_op);
13368     }
13369   else
13370     {
13371       percent_op = mips_percent_op;
13372       limit = ARRAY_SIZE (mips_percent_op);
13373     }
13374
13375   for (i = 0; i < limit; i++)
13376     if (strncasecmp (*str, percent_op[i].str, strlen (percent_op[i].str)) == 0)
13377       {
13378         int len = strlen (percent_op[i].str);
13379
13380         if (!ISSPACE ((*str)[len]) && (*str)[len] != '(')
13381           continue;
13382
13383         *str += strlen (percent_op[i].str);
13384         *reloc = percent_op[i].reloc;
13385
13386         /* Check whether the output BFD supports this relocation.
13387            If not, issue an error and fall back on something safe.  */
13388         if (!bfd_reloc_type_lookup (stdoutput, percent_op[i].reloc))
13389           {
13390             as_bad (_("relocation %s isn't supported by the current ABI"),
13391                     percent_op[i].str);
13392             *reloc = BFD_RELOC_UNUSED;
13393           }
13394         return TRUE;
13395       }
13396   return FALSE;
13397 }
13398
13399
13400 /* Parse string STR as a 16-bit relocatable operand.  Store the
13401    expression in *EP and the relocations in the array starting
13402    at RELOC.  Return the number of relocation operators used.
13403
13404    On exit, EXPR_END points to the first character after the expression.  */
13405
13406 static size_t
13407 my_getSmallExpression (expressionS *ep, bfd_reloc_code_real_type *reloc,
13408                        char *str)
13409 {
13410   bfd_reloc_code_real_type reversed_reloc[3];
13411   size_t reloc_index, i;
13412   int crux_depth, str_depth;
13413   char *crux;
13414
13415   /* Search for the start of the main expression, recoding relocations
13416      in REVERSED_RELOC.  End the loop with CRUX pointing to the start
13417      of the main expression and with CRUX_DEPTH containing the number
13418      of open brackets at that point.  */
13419   reloc_index = -1;
13420   str_depth = 0;
13421   do
13422     {
13423       reloc_index++;
13424       crux = str;
13425       crux_depth = str_depth;
13426
13427       /* Skip over whitespace and brackets, keeping count of the number
13428          of brackets.  */
13429       while (*str == ' ' || *str == '\t' || *str == '(')
13430         if (*str++ == '(')
13431           str_depth++;
13432     }
13433   while (*str == '%'
13434          && reloc_index < (HAVE_NEWABI ? 3 : 1)
13435          && parse_relocation (&str, &reversed_reloc[reloc_index]));
13436
13437   my_getExpression (ep, crux);
13438   str = expr_end;
13439
13440   /* Match every open bracket.  */
13441   while (crux_depth > 0 && (*str == ')' || *str == ' ' || *str == '\t'))
13442     if (*str++ == ')')
13443       crux_depth--;
13444
13445   if (crux_depth > 0)
13446     as_bad (_("unclosed '('"));
13447
13448   expr_end = str;
13449
13450   if (reloc_index != 0)
13451     {
13452       prev_reloc_op_frag = frag_now;
13453       for (i = 0; i < reloc_index; i++)
13454         reloc[i] = reversed_reloc[reloc_index - 1 - i];
13455     }
13456
13457   return reloc_index;
13458 }
13459
13460 static void
13461 my_getExpression (expressionS *ep, char *str)
13462 {
13463   char *save_in;
13464
13465   save_in = input_line_pointer;
13466   input_line_pointer = str;
13467   expression (ep);
13468   expr_end = input_line_pointer;
13469   input_line_pointer = save_in;
13470 }
13471
13472 char *
13473 md_atof (int type, char *litP, int *sizeP)
13474 {
13475   return ieee_md_atof (type, litP, sizeP, target_big_endian);
13476 }
13477
13478 void
13479 md_number_to_chars (char *buf, valueT val, int n)
13480 {
13481   if (target_big_endian)
13482     number_to_chars_bigendian (buf, val, n);
13483   else
13484     number_to_chars_littleendian (buf, val, n);
13485 }
13486 \f
13487 static int support_64bit_objects(void)
13488 {
13489   const char **list, **l;
13490   int yes;
13491
13492   list = bfd_target_list ();
13493   for (l = list; *l != NULL; l++)
13494     if (strcmp (*l, ELF_TARGET ("elf64-", "big")) == 0
13495         || strcmp (*l, ELF_TARGET ("elf64-", "little")) == 0)
13496       break;
13497   yes = (*l != NULL);
13498   free (list);
13499   return yes;
13500 }
13501
13502 /* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to
13503    NEW_VALUE.  Warn if another value was already specified.  Note:
13504    we have to defer parsing the -march and -mtune arguments in order
13505    to handle 'from-abi' correctly, since the ABI might be specified
13506    in a later argument.  */
13507
13508 static void
13509 mips_set_option_string (const char **string_ptr, const char *new_value)
13510 {
13511   if (*string_ptr != 0 && strcasecmp (*string_ptr, new_value) != 0)
13512     as_warn (_("A different %s was already specified, is now %s"),
13513              string_ptr == &mips_arch_string ? "-march" : "-mtune",
13514              new_value);
13515
13516   *string_ptr = new_value;
13517 }
13518
13519 int
13520 md_parse_option (int c, char *arg)
13521 {
13522   unsigned int i;
13523
13524   for (i = 0; i < ARRAY_SIZE (mips_ases); i++)
13525     if (c == mips_ases[i].option_on || c == mips_ases[i].option_off)
13526       {
13527         file_ase_explicit |= mips_set_ase (&mips_ases[i],
13528                                            c == mips_ases[i].option_on);
13529         return 1;
13530       }
13531
13532   switch (c)
13533     {
13534     case OPTION_CONSTRUCT_FLOATS:
13535       mips_disable_float_construction = 0;
13536       break;
13537
13538     case OPTION_NO_CONSTRUCT_FLOATS:
13539       mips_disable_float_construction = 1;
13540       break;
13541
13542     case OPTION_TRAP:
13543       mips_trap = 1;
13544       break;
13545
13546     case OPTION_BREAK:
13547       mips_trap = 0;
13548       break;
13549
13550     case OPTION_EB:
13551       target_big_endian = 1;
13552       break;
13553
13554     case OPTION_EL:
13555       target_big_endian = 0;
13556       break;
13557
13558     case 'O':
13559       if (arg == NULL)
13560         mips_optimize = 1;
13561       else if (arg[0] == '0')
13562         mips_optimize = 0;
13563       else if (arg[0] == '1')
13564         mips_optimize = 1;
13565       else
13566         mips_optimize = 2;
13567       break;
13568
13569     case 'g':
13570       if (arg == NULL)
13571         mips_debug = 2;
13572       else
13573         mips_debug = atoi (arg);
13574       break;
13575
13576     case OPTION_MIPS1:
13577       file_mips_isa = ISA_MIPS1;
13578       break;
13579
13580     case OPTION_MIPS2:
13581       file_mips_isa = ISA_MIPS2;
13582       break;
13583
13584     case OPTION_MIPS3:
13585       file_mips_isa = ISA_MIPS3;
13586       break;
13587
13588     case OPTION_MIPS4:
13589       file_mips_isa = ISA_MIPS4;
13590       break;
13591
13592     case OPTION_MIPS5:
13593       file_mips_isa = ISA_MIPS5;
13594       break;
13595
13596     case OPTION_MIPS32:
13597       file_mips_isa = ISA_MIPS32;
13598       break;
13599
13600     case OPTION_MIPS32R2:
13601       file_mips_isa = ISA_MIPS32R2;
13602       break;
13603
13604     case OPTION_MIPS64R2:
13605       file_mips_isa = ISA_MIPS64R2;
13606       break;
13607
13608     case OPTION_MIPS64:
13609       file_mips_isa = ISA_MIPS64;
13610       break;
13611
13612     case OPTION_MTUNE:
13613       mips_set_option_string (&mips_tune_string, arg);
13614       break;
13615
13616     case OPTION_MARCH:
13617       mips_set_option_string (&mips_arch_string, arg);
13618       break;
13619
13620     case OPTION_M4650:
13621       mips_set_option_string (&mips_arch_string, "4650");
13622       mips_set_option_string (&mips_tune_string, "4650");
13623       break;
13624
13625     case OPTION_NO_M4650:
13626       break;
13627
13628     case OPTION_M4010:
13629       mips_set_option_string (&mips_arch_string, "4010");
13630       mips_set_option_string (&mips_tune_string, "4010");
13631       break;
13632
13633     case OPTION_NO_M4010:
13634       break;
13635
13636     case OPTION_M4100:
13637       mips_set_option_string (&mips_arch_string, "4100");
13638       mips_set_option_string (&mips_tune_string, "4100");
13639       break;
13640
13641     case OPTION_NO_M4100:
13642       break;
13643
13644     case OPTION_M3900:
13645       mips_set_option_string (&mips_arch_string, "3900");
13646       mips_set_option_string (&mips_tune_string, "3900");
13647       break;
13648
13649     case OPTION_NO_M3900:
13650       break;
13651
13652     case OPTION_MICROMIPS:
13653       if (mips_opts.mips16 == 1)
13654         {
13655           as_bad (_("-mmicromips cannot be used with -mips16"));
13656           return 0;
13657         }
13658       mips_opts.micromips = 1;
13659       mips_no_prev_insn ();
13660       break;
13661
13662     case OPTION_NO_MICROMIPS:
13663       mips_opts.micromips = 0;
13664       mips_no_prev_insn ();
13665       break;
13666
13667     case OPTION_MIPS16:
13668       if (mips_opts.micromips == 1)
13669         {
13670           as_bad (_("-mips16 cannot be used with -micromips"));
13671           return 0;
13672         }
13673       mips_opts.mips16 = 1;
13674       mips_no_prev_insn ();
13675       break;
13676
13677     case OPTION_NO_MIPS16:
13678       mips_opts.mips16 = 0;
13679       mips_no_prev_insn ();
13680       break;
13681
13682     case OPTION_FIX_24K:
13683       mips_fix_24k = 1;
13684       break;
13685
13686     case OPTION_NO_FIX_24K:
13687       mips_fix_24k = 0;
13688       break;
13689
13690     case OPTION_FIX_LOONGSON2F_JUMP:
13691       mips_fix_loongson2f_jump = TRUE;
13692       break;
13693
13694     case OPTION_NO_FIX_LOONGSON2F_JUMP:
13695       mips_fix_loongson2f_jump = FALSE;
13696       break;
13697
13698     case OPTION_FIX_LOONGSON2F_NOP:
13699       mips_fix_loongson2f_nop = TRUE;
13700       break;
13701
13702     case OPTION_NO_FIX_LOONGSON2F_NOP:
13703       mips_fix_loongson2f_nop = FALSE;
13704       break;
13705
13706     case OPTION_FIX_VR4120:
13707       mips_fix_vr4120 = 1;
13708       break;
13709
13710     case OPTION_NO_FIX_VR4120:
13711       mips_fix_vr4120 = 0;
13712       break;
13713
13714     case OPTION_FIX_VR4130:
13715       mips_fix_vr4130 = 1;
13716       break;
13717
13718     case OPTION_NO_FIX_VR4130:
13719       mips_fix_vr4130 = 0;
13720       break;
13721
13722     case OPTION_FIX_CN63XXP1:
13723       mips_fix_cn63xxp1 = TRUE;
13724       break;
13725
13726     case OPTION_NO_FIX_CN63XXP1:
13727       mips_fix_cn63xxp1 = FALSE;
13728       break;
13729
13730     case OPTION_RELAX_BRANCH:
13731       mips_relax_branch = 1;
13732       break;
13733
13734     case OPTION_NO_RELAX_BRANCH:
13735       mips_relax_branch = 0;
13736       break;
13737
13738     case OPTION_INSN32:
13739       mips_opts.insn32 = TRUE;
13740       break;
13741
13742     case OPTION_NO_INSN32:
13743       mips_opts.insn32 = FALSE;
13744       break;
13745
13746     case OPTION_MSHARED:
13747       mips_in_shared = TRUE;
13748       break;
13749
13750     case OPTION_MNO_SHARED:
13751       mips_in_shared = FALSE;
13752       break;
13753
13754     case OPTION_MSYM32:
13755       mips_opts.sym32 = TRUE;
13756       break;
13757
13758     case OPTION_MNO_SYM32:
13759       mips_opts.sym32 = FALSE;
13760       break;
13761
13762       /* When generating ELF code, we permit -KPIC and -call_shared to
13763          select SVR4_PIC, and -non_shared to select no PIC.  This is
13764          intended to be compatible with Irix 5.  */
13765     case OPTION_CALL_SHARED:
13766       mips_pic = SVR4_PIC;
13767       mips_abicalls = TRUE;
13768       break;
13769
13770     case OPTION_CALL_NONPIC:
13771       mips_pic = NO_PIC;
13772       mips_abicalls = TRUE;
13773       break;
13774
13775     case OPTION_NON_SHARED:
13776       mips_pic = NO_PIC;
13777       mips_abicalls = FALSE;
13778       break;
13779
13780       /* The -xgot option tells the assembler to use 32 bit offsets
13781          when accessing the got in SVR4_PIC mode.  It is for Irix
13782          compatibility.  */
13783     case OPTION_XGOT:
13784       mips_big_got = 1;
13785       break;
13786
13787     case 'G':
13788       g_switch_value = atoi (arg);
13789       g_switch_seen = 1;
13790       break;
13791
13792       /* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
13793          and -mabi=64.  */
13794     case OPTION_32:
13795       mips_abi = O32_ABI;
13796       break;
13797
13798     case OPTION_N32:
13799       mips_abi = N32_ABI;
13800       break;
13801
13802     case OPTION_64:
13803       mips_abi = N64_ABI;
13804       if (!support_64bit_objects())
13805         as_fatal (_("No compiled in support for 64 bit object file format"));
13806       break;
13807
13808     case OPTION_GP32:
13809       file_mips_gp32 = 1;
13810       break;
13811
13812     case OPTION_GP64:
13813       file_mips_gp32 = 0;
13814       break;
13815
13816     case OPTION_FP32:
13817       file_mips_fp32 = 1;
13818       break;
13819
13820     case OPTION_FP64:
13821       file_mips_fp32 = 0;
13822       break;
13823
13824     case OPTION_SINGLE_FLOAT:
13825       file_mips_single_float = 1;
13826       break;
13827
13828     case OPTION_DOUBLE_FLOAT:
13829       file_mips_single_float = 0;
13830       break;
13831
13832     case OPTION_SOFT_FLOAT:
13833       file_mips_soft_float = 1;
13834       break;
13835
13836     case OPTION_HARD_FLOAT:
13837       file_mips_soft_float = 0;
13838       break;
13839
13840     case OPTION_MABI:
13841       if (strcmp (arg, "32") == 0)
13842         mips_abi = O32_ABI;
13843       else if (strcmp (arg, "o64") == 0)
13844         mips_abi = O64_ABI;
13845       else if (strcmp (arg, "n32") == 0)
13846         mips_abi = N32_ABI;
13847       else if (strcmp (arg, "64") == 0)
13848         {
13849           mips_abi = N64_ABI;
13850           if (! support_64bit_objects())
13851             as_fatal (_("No compiled in support for 64 bit object file "
13852                         "format"));
13853         }
13854       else if (strcmp (arg, "eabi") == 0)
13855         mips_abi = EABI_ABI;
13856       else
13857         {
13858           as_fatal (_("invalid abi -mabi=%s"), arg);
13859           return 0;
13860         }
13861       break;
13862
13863     case OPTION_M7000_HILO_FIX:
13864       mips_7000_hilo_fix = TRUE;
13865       break;
13866
13867     case OPTION_MNO_7000_HILO_FIX:
13868       mips_7000_hilo_fix = FALSE;
13869       break;
13870
13871     case OPTION_MDEBUG:
13872       mips_flag_mdebug = TRUE;
13873       break;
13874
13875     case OPTION_NO_MDEBUG:
13876       mips_flag_mdebug = FALSE;
13877       break;
13878
13879     case OPTION_PDR:
13880       mips_flag_pdr = TRUE;
13881       break;
13882
13883     case OPTION_NO_PDR:
13884       mips_flag_pdr = FALSE;
13885       break;
13886
13887     case OPTION_MVXWORKS_PIC:
13888       mips_pic = VXWORKS_PIC;
13889       break;
13890
13891     case OPTION_NAN:
13892       if (strcmp (arg, "2008") == 0)
13893         mips_flag_nan2008 = TRUE;
13894       else if (strcmp (arg, "legacy") == 0)
13895         mips_flag_nan2008 = FALSE;
13896       else
13897         {
13898           as_fatal (_("Invalid NaN setting -mnan=%s"), arg);
13899           return 0;
13900         }
13901       break;
13902
13903     default:
13904       return 0;
13905     }
13906
13907     mips_fix_loongson2f = mips_fix_loongson2f_nop || mips_fix_loongson2f_jump;
13908
13909   return 1;
13910 }
13911 \f
13912 /* Set up globals to generate code for the ISA or processor
13913    described by INFO.  */
13914
13915 static void
13916 mips_set_architecture (const struct mips_cpu_info *info)
13917 {
13918   if (info != 0)
13919     {
13920       file_mips_arch = info->cpu;
13921       mips_opts.arch = info->cpu;
13922       mips_opts.isa = info->isa;
13923     }
13924 }
13925
13926
13927 /* Likewise for tuning.  */
13928
13929 static void
13930 mips_set_tune (const struct mips_cpu_info *info)
13931 {
13932   if (info != 0)
13933     mips_tune = info->cpu;
13934 }
13935
13936
13937 void
13938 mips_after_parse_args (void)
13939 {
13940   const struct mips_cpu_info *arch_info = 0;
13941   const struct mips_cpu_info *tune_info = 0;
13942
13943   /* GP relative stuff not working for PE */
13944   if (strncmp (TARGET_OS, "pe", 2) == 0)
13945     {
13946       if (g_switch_seen && g_switch_value != 0)
13947         as_bad (_("-G not supported in this configuration."));
13948       g_switch_value = 0;
13949     }
13950
13951   if (mips_abi == NO_ABI)
13952     mips_abi = MIPS_DEFAULT_ABI;
13953
13954   /* The following code determines the architecture and register size.
13955      Similar code was added to GCC 3.3 (see override_options() in
13956      config/mips/mips.c).  The GAS and GCC code should be kept in sync
13957      as much as possible.  */
13958
13959   if (mips_arch_string != 0)
13960     arch_info = mips_parse_cpu ("-march", mips_arch_string);
13961
13962   if (file_mips_isa != ISA_UNKNOWN)
13963     {
13964       /* Handle -mipsN.  At this point, file_mips_isa contains the
13965          ISA level specified by -mipsN, while arch_info->isa contains
13966          the -march selection (if any).  */
13967       if (arch_info != 0)
13968         {
13969           /* -march takes precedence over -mipsN, since it is more descriptive.
13970              There's no harm in specifying both as long as the ISA levels
13971              are the same.  */
13972           if (file_mips_isa != arch_info->isa)
13973             as_bad (_("-%s conflicts with the other architecture options, which imply -%s"),
13974                     mips_cpu_info_from_isa (file_mips_isa)->name,
13975                     mips_cpu_info_from_isa (arch_info->isa)->name);
13976         }
13977       else
13978         arch_info = mips_cpu_info_from_isa (file_mips_isa);
13979     }
13980
13981   if (arch_info == 0)
13982     {
13983       arch_info = mips_parse_cpu ("default CPU", MIPS_CPU_STRING_DEFAULT);
13984       gas_assert (arch_info);
13985     }
13986
13987   if (ABI_NEEDS_64BIT_REGS (mips_abi) && !ISA_HAS_64BIT_REGS (arch_info->isa))
13988     as_bad (_("-march=%s is not compatible with the selected ABI"),
13989             arch_info->name);
13990
13991   mips_set_architecture (arch_info);
13992
13993   /* Optimize for file_mips_arch, unless -mtune selects a different processor.  */
13994   if (mips_tune_string != 0)
13995     tune_info = mips_parse_cpu ("-mtune", mips_tune_string);
13996
13997   if (tune_info == 0)
13998     mips_set_tune (arch_info);
13999   else
14000     mips_set_tune (tune_info);
14001
14002   if (file_mips_gp32 >= 0)
14003     {
14004       /* The user specified the size of the integer registers.  Make sure
14005          it agrees with the ABI and ISA.  */
14006       if (file_mips_gp32 == 0 && !ISA_HAS_64BIT_REGS (mips_opts.isa))
14007         as_bad (_("-mgp64 used with a 32-bit processor"));
14008       else if (file_mips_gp32 == 1 && ABI_NEEDS_64BIT_REGS (mips_abi))
14009         as_bad (_("-mgp32 used with a 64-bit ABI"));
14010       else if (file_mips_gp32 == 0 && ABI_NEEDS_32BIT_REGS (mips_abi))
14011         as_bad (_("-mgp64 used with a 32-bit ABI"));
14012     }
14013   else
14014     {
14015       /* Infer the integer register size from the ABI and processor.
14016          Restrict ourselves to 32-bit registers if that's all the
14017          processor has, or if the ABI cannot handle 64-bit registers.  */
14018       file_mips_gp32 = (ABI_NEEDS_32BIT_REGS (mips_abi)
14019                         || !ISA_HAS_64BIT_REGS (mips_opts.isa));
14020     }
14021
14022   switch (file_mips_fp32)
14023     {
14024     default:
14025     case -1:
14026       /* No user specified float register size.
14027          ??? GAS treats single-float processors as though they had 64-bit
14028          float registers (although it complains when double-precision
14029          instructions are used).  As things stand, saying they have 32-bit
14030          registers would lead to spurious "register must be even" messages.
14031          So here we assume float registers are never smaller than the
14032          integer ones.  */
14033       if (file_mips_gp32 == 0)
14034         /* 64-bit integer registers implies 64-bit float registers.  */
14035         file_mips_fp32 = 0;
14036       else if ((mips_opts.ase & FP64_ASES)
14037                && ISA_HAS_64BIT_FPRS (mips_opts.isa))
14038         /* -mips3d and -mdmx imply 64-bit float registers, if possible.  */
14039         file_mips_fp32 = 0;
14040       else
14041         /* 32-bit float registers.  */
14042         file_mips_fp32 = 1;
14043       break;
14044
14045     /* The user specified the size of the float registers.  Check if it
14046        agrees with the ABI and ISA.  */
14047     case 0:
14048       if (!ISA_HAS_64BIT_FPRS (mips_opts.isa))
14049         as_bad (_("-mfp64 used with a 32-bit fpu"));
14050       else if (ABI_NEEDS_32BIT_REGS (mips_abi)
14051                && !ISA_HAS_MXHC1 (mips_opts.isa))
14052         as_warn (_("-mfp64 used with a 32-bit ABI"));
14053       break;
14054     case 1:
14055       if (ABI_NEEDS_64BIT_REGS (mips_abi))
14056         as_warn (_("-mfp32 used with a 64-bit ABI"));
14057       break;
14058     }
14059
14060   /* End of GCC-shared inference code.  */
14061
14062   /* This flag is set when we have a 64-bit capable CPU but use only
14063      32-bit wide registers.  Note that EABI does not use it.  */
14064   if (ISA_HAS_64BIT_REGS (mips_opts.isa)
14065       && ((mips_abi == NO_ABI && file_mips_gp32 == 1)
14066           || mips_abi == O32_ABI))
14067     mips_32bitmode = 1;
14068
14069   if (mips_opts.isa == ISA_MIPS1 && mips_trap)
14070     as_bad (_("trap exception not supported at ISA 1"));
14071
14072   /* If the selected architecture includes support for ASEs, enable
14073      generation of code for them.  */
14074   if (mips_opts.mips16 == -1)
14075     mips_opts.mips16 = (CPU_HAS_MIPS16 (file_mips_arch)) ? 1 : 0;
14076   if (mips_opts.micromips == -1)
14077     mips_opts.micromips = (CPU_HAS_MICROMIPS (file_mips_arch)) ? 1 : 0;
14078
14079   /* MIPS3D and MDMX require 64-bit FPRs, so -mfp32 should stop those
14080      ASEs from being selected implicitly.  */
14081   if (file_mips_fp32 == 1)
14082     file_ase_explicit |= ASE_MIPS3D | ASE_MDMX;
14083
14084   /* If the user didn't explicitly select or deselect a particular ASE,
14085      use the default setting for the CPU.  */
14086   mips_opts.ase |= (arch_info->ase & ~file_ase_explicit);
14087
14088   file_mips_isa = mips_opts.isa;
14089   file_ase = mips_opts.ase;
14090   mips_opts.gp32 = file_mips_gp32;
14091   mips_opts.fp32 = file_mips_fp32;
14092   mips_opts.soft_float = file_mips_soft_float;
14093   mips_opts.single_float = file_mips_single_float;
14094
14095   mips_check_isa_supports_ases ();
14096
14097   if (mips_flag_mdebug < 0)
14098     mips_flag_mdebug = 0;
14099 }
14100 \f
14101 void
14102 mips_init_after_args (void)
14103 {
14104   /* initialize opcodes */
14105   bfd_mips_num_opcodes = bfd_mips_num_builtin_opcodes;
14106   mips_opcodes = (struct mips_opcode *) mips_builtin_opcodes;
14107 }
14108
14109 long
14110 md_pcrel_from (fixS *fixP)
14111 {
14112   valueT addr = fixP->fx_where + fixP->fx_frag->fr_address;
14113   switch (fixP->fx_r_type)
14114     {
14115     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
14116     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
14117       /* Return the address of the delay slot.  */
14118       return addr + 2;
14119
14120     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
14121     case BFD_RELOC_MICROMIPS_JMP:
14122     case BFD_RELOC_16_PCREL_S2:
14123     case BFD_RELOC_MIPS_JMP:
14124       /* Return the address of the delay slot.  */
14125       return addr + 4;
14126
14127     case BFD_RELOC_32_PCREL:
14128       return addr;
14129
14130     default:
14131       /* We have no relocation type for PC relative MIPS16 instructions.  */
14132       if (fixP->fx_addsy && S_GET_SEGMENT (fixP->fx_addsy) != now_seg)
14133         as_bad_where (fixP->fx_file, fixP->fx_line,
14134                       _("PC relative MIPS16 instruction references a different section"));
14135       return addr;
14136     }
14137 }
14138
14139 /* This is called before the symbol table is processed.  In order to
14140    work with gcc when using mips-tfile, we must keep all local labels.
14141    However, in other cases, we want to discard them.  If we were
14142    called with -g, but we didn't see any debugging information, it may
14143    mean that gcc is smuggling debugging information through to
14144    mips-tfile, in which case we must generate all local labels.  */
14145
14146 void
14147 mips_frob_file_before_adjust (void)
14148 {
14149 #ifndef NO_ECOFF_DEBUGGING
14150   if (ECOFF_DEBUGGING
14151       && mips_debug != 0
14152       && ! ecoff_debugging_seen)
14153     flag_keep_locals = 1;
14154 #endif
14155 }
14156
14157 /* Sort any unmatched HI16 and GOT16 relocs so that they immediately precede
14158    the corresponding LO16 reloc.  This is called before md_apply_fix and
14159    tc_gen_reloc.  Unmatched relocs can only be generated by use of explicit
14160    relocation operators.
14161
14162    For our purposes, a %lo() expression matches a %got() or %hi()
14163    expression if:
14164
14165       (a) it refers to the same symbol; and
14166       (b) the offset applied in the %lo() expression is no lower than
14167           the offset applied in the %got() or %hi().
14168
14169    (b) allows us to cope with code like:
14170
14171         lui     $4,%hi(foo)
14172         lh      $4,%lo(foo+2)($4)
14173
14174    ...which is legal on RELA targets, and has a well-defined behaviour
14175    if the user knows that adding 2 to "foo" will not induce a carry to
14176    the high 16 bits.
14177
14178    When several %lo()s match a particular %got() or %hi(), we use the
14179    following rules to distinguish them:
14180
14181      (1) %lo()s with smaller offsets are a better match than %lo()s with
14182          higher offsets.
14183
14184      (2) %lo()s with no matching %got() or %hi() are better than those
14185          that already have a matching %got() or %hi().
14186
14187      (3) later %lo()s are better than earlier %lo()s.
14188
14189    These rules are applied in order.
14190
14191    (1) means, among other things, that %lo()s with identical offsets are
14192    chosen if they exist.
14193
14194    (2) means that we won't associate several high-part relocations with
14195    the same low-part relocation unless there's no alternative.  Having
14196    several high parts for the same low part is a GNU extension; this rule
14197    allows careful users to avoid it.
14198
14199    (3) is purely cosmetic.  mips_hi_fixup_list is is in reverse order,
14200    with the last high-part relocation being at the front of the list.
14201    It therefore makes sense to choose the last matching low-part
14202    relocation, all other things being equal.  It's also easier
14203    to code that way.  */
14204
14205 void
14206 mips_frob_file (void)
14207 {
14208   struct mips_hi_fixup *l;
14209   bfd_reloc_code_real_type looking_for_rtype = BFD_RELOC_UNUSED;
14210
14211   for (l = mips_hi_fixup_list; l != NULL; l = l->next)
14212     {
14213       segment_info_type *seginfo;
14214       bfd_boolean matched_lo_p;
14215       fixS **hi_pos, **lo_pos, **pos;
14216
14217       gas_assert (reloc_needs_lo_p (l->fixp->fx_r_type));
14218
14219       /* If a GOT16 relocation turns out to be against a global symbol,
14220          there isn't supposed to be a matching LO.  Ignore %gots against
14221          constants; we'll report an error for those later.  */
14222       if (got16_reloc_p (l->fixp->fx_r_type)
14223           && !(l->fixp->fx_addsy
14224                && pic_need_relax (l->fixp->fx_addsy, l->seg)))
14225         continue;
14226
14227       /* Check quickly whether the next fixup happens to be a matching %lo.  */
14228       if (fixup_has_matching_lo_p (l->fixp))
14229         continue;
14230
14231       seginfo = seg_info (l->seg);
14232
14233       /* Set HI_POS to the position of this relocation in the chain.
14234          Set LO_POS to the position of the chosen low-part relocation.
14235          MATCHED_LO_P is true on entry to the loop if *POS is a low-part
14236          relocation that matches an immediately-preceding high-part
14237          relocation.  */
14238       hi_pos = NULL;
14239       lo_pos = NULL;
14240       matched_lo_p = FALSE;
14241       looking_for_rtype = matching_lo_reloc (l->fixp->fx_r_type);
14242
14243       for (pos = &seginfo->fix_root; *pos != NULL; pos = &(*pos)->fx_next)
14244         {
14245           if (*pos == l->fixp)
14246             hi_pos = pos;
14247
14248           if ((*pos)->fx_r_type == looking_for_rtype
14249               && symbol_same_p ((*pos)->fx_addsy, l->fixp->fx_addsy)
14250               && (*pos)->fx_offset >= l->fixp->fx_offset
14251               && (lo_pos == NULL
14252                   || (*pos)->fx_offset < (*lo_pos)->fx_offset
14253                   || (!matched_lo_p
14254                       && (*pos)->fx_offset == (*lo_pos)->fx_offset)))
14255             lo_pos = pos;
14256
14257           matched_lo_p = (reloc_needs_lo_p ((*pos)->fx_r_type)
14258                           && fixup_has_matching_lo_p (*pos));
14259         }
14260
14261       /* If we found a match, remove the high-part relocation from its
14262          current position and insert it before the low-part relocation.
14263          Make the offsets match so that fixup_has_matching_lo_p()
14264          will return true.
14265
14266          We don't warn about unmatched high-part relocations since some
14267          versions of gcc have been known to emit dead "lui ...%hi(...)"
14268          instructions.  */
14269       if (lo_pos != NULL)
14270         {
14271           l->fixp->fx_offset = (*lo_pos)->fx_offset;
14272           if (l->fixp->fx_next != *lo_pos)
14273             {
14274               *hi_pos = l->fixp->fx_next;
14275               l->fixp->fx_next = *lo_pos;
14276               *lo_pos = l->fixp;
14277             }
14278         }
14279     }
14280 }
14281
14282 int
14283 mips_force_relocation (fixS *fixp)
14284 {
14285   if (generic_force_reloc (fixp))
14286     return 1;
14287
14288   /* We want to keep BFD_RELOC_MICROMIPS_*_PCREL_S1 relocation,
14289      so that the linker relaxation can update targets.  */
14290   if (fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
14291       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
14292       || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1)
14293     return 1;
14294
14295   return 0;
14296 }
14297
14298 /* Read the instruction associated with RELOC from BUF.  */
14299
14300 static unsigned int
14301 read_reloc_insn (char *buf, bfd_reloc_code_real_type reloc)
14302 {
14303   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
14304     return read_compressed_insn (buf, 4);
14305   else
14306     return read_insn (buf);
14307 }
14308
14309 /* Write instruction INSN to BUF, given that it has been relocated
14310    by RELOC.  */
14311
14312 static void
14313 write_reloc_insn (char *buf, bfd_reloc_code_real_type reloc,
14314                   unsigned long insn)
14315 {
14316   if (mips16_reloc_p (reloc) || micromips_reloc_p (reloc))
14317     write_compressed_insn (buf, insn, 4);
14318   else
14319     write_insn (buf, insn);
14320 }
14321
14322 /* Apply a fixup to the object file.  */
14323
14324 void
14325 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
14326 {
14327   char *buf;
14328   unsigned long insn;
14329   reloc_howto_type *howto;
14330
14331   /* We ignore generic BFD relocations we don't know about.  */
14332   howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
14333   if (! howto)
14334     return;
14335
14336   gas_assert (fixP->fx_size == 2
14337               || fixP->fx_size == 4
14338               || fixP->fx_r_type == BFD_RELOC_16
14339               || fixP->fx_r_type == BFD_RELOC_64
14340               || fixP->fx_r_type == BFD_RELOC_CTOR
14341               || fixP->fx_r_type == BFD_RELOC_MIPS_SUB
14342               || fixP->fx_r_type == BFD_RELOC_MICROMIPS_SUB
14343               || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
14344               || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY
14345               || fixP->fx_r_type == BFD_RELOC_MIPS_TLS_DTPREL64);
14346
14347   buf = fixP->fx_frag->fr_literal + fixP->fx_where;
14348
14349   gas_assert (!fixP->fx_pcrel || fixP->fx_r_type == BFD_RELOC_16_PCREL_S2
14350               || fixP->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
14351               || fixP->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
14352               || fixP->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1
14353               || fixP->fx_r_type == BFD_RELOC_32_PCREL);
14354
14355   /* Don't treat parts of a composite relocation as done.  There are two
14356      reasons for this:
14357
14358      (1) The second and third parts will be against 0 (RSS_UNDEF) but
14359          should nevertheless be emitted if the first part is.
14360
14361      (2) In normal usage, composite relocations are never assembly-time
14362          constants.  The easiest way of dealing with the pathological
14363          exceptions is to generate a relocation against STN_UNDEF and
14364          leave everything up to the linker.  */
14365   if (fixP->fx_addsy == NULL && !fixP->fx_pcrel && fixP->fx_tcbit == 0)
14366     fixP->fx_done = 1;
14367
14368   switch (fixP->fx_r_type)
14369     {
14370     case BFD_RELOC_MIPS_TLS_GD:
14371     case BFD_RELOC_MIPS_TLS_LDM:
14372     case BFD_RELOC_MIPS_TLS_DTPREL32:
14373     case BFD_RELOC_MIPS_TLS_DTPREL64:
14374     case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
14375     case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
14376     case BFD_RELOC_MIPS_TLS_GOTTPREL:
14377     case BFD_RELOC_MIPS_TLS_TPREL32:
14378     case BFD_RELOC_MIPS_TLS_TPREL64:
14379     case BFD_RELOC_MIPS_TLS_TPREL_HI16:
14380     case BFD_RELOC_MIPS_TLS_TPREL_LO16:
14381     case BFD_RELOC_MICROMIPS_TLS_GD:
14382     case BFD_RELOC_MICROMIPS_TLS_LDM:
14383     case BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16:
14384     case BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16:
14385     case BFD_RELOC_MICROMIPS_TLS_GOTTPREL:
14386     case BFD_RELOC_MICROMIPS_TLS_TPREL_HI16:
14387     case BFD_RELOC_MICROMIPS_TLS_TPREL_LO16:
14388     case BFD_RELOC_MIPS16_TLS_GD:
14389     case BFD_RELOC_MIPS16_TLS_LDM:
14390     case BFD_RELOC_MIPS16_TLS_DTPREL_HI16:
14391     case BFD_RELOC_MIPS16_TLS_DTPREL_LO16:
14392     case BFD_RELOC_MIPS16_TLS_GOTTPREL:
14393     case BFD_RELOC_MIPS16_TLS_TPREL_HI16:
14394     case BFD_RELOC_MIPS16_TLS_TPREL_LO16:
14395       if (!fixP->fx_addsy)
14396         {
14397           as_bad_where (fixP->fx_file, fixP->fx_line,
14398                         _("TLS relocation against a constant"));
14399           break;
14400         }
14401       S_SET_THREAD_LOCAL (fixP->fx_addsy);
14402       /* fall through */
14403
14404     case BFD_RELOC_MIPS_JMP:
14405     case BFD_RELOC_MIPS_SHIFT5:
14406     case BFD_RELOC_MIPS_SHIFT6:
14407     case BFD_RELOC_MIPS_GOT_DISP:
14408     case BFD_RELOC_MIPS_GOT_PAGE:
14409     case BFD_RELOC_MIPS_GOT_OFST:
14410     case BFD_RELOC_MIPS_SUB:
14411     case BFD_RELOC_MIPS_INSERT_A:
14412     case BFD_RELOC_MIPS_INSERT_B:
14413     case BFD_RELOC_MIPS_DELETE:
14414     case BFD_RELOC_MIPS_HIGHEST:
14415     case BFD_RELOC_MIPS_HIGHER:
14416     case BFD_RELOC_MIPS_SCN_DISP:
14417     case BFD_RELOC_MIPS_REL16:
14418     case BFD_RELOC_MIPS_RELGOT:
14419     case BFD_RELOC_MIPS_JALR:
14420     case BFD_RELOC_HI16:
14421     case BFD_RELOC_HI16_S:
14422     case BFD_RELOC_LO16:
14423     case BFD_RELOC_GPREL16:
14424     case BFD_RELOC_MIPS_LITERAL:
14425     case BFD_RELOC_MIPS_CALL16:
14426     case BFD_RELOC_MIPS_GOT16:
14427     case BFD_RELOC_GPREL32:
14428     case BFD_RELOC_MIPS_GOT_HI16:
14429     case BFD_RELOC_MIPS_GOT_LO16:
14430     case BFD_RELOC_MIPS_CALL_HI16:
14431     case BFD_RELOC_MIPS_CALL_LO16:
14432     case BFD_RELOC_MIPS16_GPREL:
14433     case BFD_RELOC_MIPS16_GOT16:
14434     case BFD_RELOC_MIPS16_CALL16:
14435     case BFD_RELOC_MIPS16_HI16:
14436     case BFD_RELOC_MIPS16_HI16_S:
14437     case BFD_RELOC_MIPS16_LO16:
14438     case BFD_RELOC_MIPS16_JMP:
14439     case BFD_RELOC_MICROMIPS_JMP:
14440     case BFD_RELOC_MICROMIPS_GOT_DISP:
14441     case BFD_RELOC_MICROMIPS_GOT_PAGE:
14442     case BFD_RELOC_MICROMIPS_GOT_OFST:
14443     case BFD_RELOC_MICROMIPS_SUB:
14444     case BFD_RELOC_MICROMIPS_HIGHEST:
14445     case BFD_RELOC_MICROMIPS_HIGHER:
14446     case BFD_RELOC_MICROMIPS_SCN_DISP:
14447     case BFD_RELOC_MICROMIPS_JALR:
14448     case BFD_RELOC_MICROMIPS_HI16:
14449     case BFD_RELOC_MICROMIPS_HI16_S:
14450     case BFD_RELOC_MICROMIPS_LO16:
14451     case BFD_RELOC_MICROMIPS_GPREL16:
14452     case BFD_RELOC_MICROMIPS_LITERAL:
14453     case BFD_RELOC_MICROMIPS_CALL16:
14454     case BFD_RELOC_MICROMIPS_GOT16:
14455     case BFD_RELOC_MICROMIPS_GOT_HI16:
14456     case BFD_RELOC_MICROMIPS_GOT_LO16:
14457     case BFD_RELOC_MICROMIPS_CALL_HI16:
14458     case BFD_RELOC_MICROMIPS_CALL_LO16:
14459     case BFD_RELOC_MIPS_EH:
14460       if (fixP->fx_done)
14461         {
14462           offsetT value;
14463
14464           if (calculate_reloc (fixP->fx_r_type, *valP, &value))
14465             {
14466               insn = read_reloc_insn (buf, fixP->fx_r_type);
14467               if (mips16_reloc_p (fixP->fx_r_type))
14468                 insn |= mips16_immed_extend (value, 16);
14469               else
14470                 insn |= (value & 0xffff);
14471               write_reloc_insn (buf, fixP->fx_r_type, insn);
14472             }
14473           else
14474             as_bad_where (fixP->fx_file, fixP->fx_line,
14475                           _("Unsupported constant in relocation"));
14476         }
14477       break;
14478
14479     case BFD_RELOC_64:
14480       /* This is handled like BFD_RELOC_32, but we output a sign
14481          extended value if we are only 32 bits.  */
14482       if (fixP->fx_done)
14483         {
14484           if (8 <= sizeof (valueT))
14485             md_number_to_chars (buf, *valP, 8);
14486           else
14487             {
14488               valueT hiv;
14489
14490               if ((*valP & 0x80000000) != 0)
14491                 hiv = 0xffffffff;
14492               else
14493                 hiv = 0;
14494               md_number_to_chars (buf + (target_big_endian ? 4 : 0), *valP, 4);
14495               md_number_to_chars (buf + (target_big_endian ? 0 : 4), hiv, 4);
14496             }
14497         }
14498       break;
14499
14500     case BFD_RELOC_RVA:
14501     case BFD_RELOC_32:
14502     case BFD_RELOC_32_PCREL:
14503     case BFD_RELOC_16:
14504       /* If we are deleting this reloc entry, we must fill in the
14505          value now.  This can happen if we have a .word which is not
14506          resolved when it appears but is later defined.  */
14507       if (fixP->fx_done)
14508         md_number_to_chars (buf, *valP, fixP->fx_size);
14509       break;
14510
14511     case BFD_RELOC_16_PCREL_S2:
14512       if ((*valP & 0x3) != 0)
14513         as_bad_where (fixP->fx_file, fixP->fx_line,
14514                       _("Branch to misaligned address (%lx)"), (long) *valP);
14515
14516       /* We need to save the bits in the instruction since fixup_segment()
14517          might be deleting the relocation entry (i.e., a branch within
14518          the current segment).  */
14519       if (! fixP->fx_done)
14520         break;
14521
14522       /* Update old instruction data.  */
14523       insn = read_insn (buf);
14524
14525       if (*valP + 0x20000 <= 0x3ffff)
14526         {
14527           insn |= (*valP >> 2) & 0xffff;
14528           write_insn (buf, insn);
14529         }
14530       else if (mips_pic == NO_PIC
14531                && fixP->fx_done
14532                && fixP->fx_frag->fr_address >= text_section->vma
14533                && (fixP->fx_frag->fr_address
14534                    < text_section->vma + bfd_get_section_size (text_section))
14535                && ((insn & 0xffff0000) == 0x10000000     /* beq $0,$0 */
14536                    || (insn & 0xffff0000) == 0x04010000  /* bgez $0 */
14537                    || (insn & 0xffff0000) == 0x04110000)) /* bgezal $0 */
14538         {
14539           /* The branch offset is too large.  If this is an
14540              unconditional branch, and we are not generating PIC code,
14541              we can convert it to an absolute jump instruction.  */
14542           if ((insn & 0xffff0000) == 0x04110000)         /* bgezal $0 */
14543             insn = 0x0c000000;  /* jal */
14544           else
14545             insn = 0x08000000;  /* j */
14546           fixP->fx_r_type = BFD_RELOC_MIPS_JMP;
14547           fixP->fx_done = 0;
14548           fixP->fx_addsy = section_symbol (text_section);
14549           *valP += md_pcrel_from (fixP);
14550           write_insn (buf, insn);
14551         }
14552       else
14553         {
14554           /* If we got here, we have branch-relaxation disabled,
14555              and there's nothing we can do to fix this instruction
14556              without turning it into a longer sequence.  */
14557           as_bad_where (fixP->fx_file, fixP->fx_line,
14558                         _("Branch out of range"));
14559         }
14560       break;
14561
14562     case BFD_RELOC_MICROMIPS_7_PCREL_S1:
14563     case BFD_RELOC_MICROMIPS_10_PCREL_S1:
14564     case BFD_RELOC_MICROMIPS_16_PCREL_S1:
14565       /* We adjust the offset back to even.  */
14566       if ((*valP & 0x1) != 0)
14567         --(*valP);
14568
14569       if (! fixP->fx_done)
14570         break;
14571
14572       /* Should never visit here, because we keep the relocation.  */
14573       abort ();
14574       break;
14575
14576     case BFD_RELOC_VTABLE_INHERIT:
14577       fixP->fx_done = 0;
14578       if (fixP->fx_addsy
14579           && !S_IS_DEFINED (fixP->fx_addsy)
14580           && !S_IS_WEAK (fixP->fx_addsy))
14581         S_SET_WEAK (fixP->fx_addsy);
14582       break;
14583
14584     case BFD_RELOC_VTABLE_ENTRY:
14585       fixP->fx_done = 0;
14586       break;
14587
14588     default:
14589       abort ();
14590     }
14591
14592   /* Remember value for tc_gen_reloc.  */
14593   fixP->fx_addnumber = *valP;
14594 }
14595
14596 static symbolS *
14597 get_symbol (void)
14598 {
14599   int c;
14600   char *name;
14601   symbolS *p;
14602
14603   name = input_line_pointer;
14604   c = get_symbol_end ();
14605   p = (symbolS *) symbol_find_or_make (name);
14606   *input_line_pointer = c;
14607   return p;
14608 }
14609
14610 /* Align the current frag to a given power of two.  If a particular
14611    fill byte should be used, FILL points to an integer that contains
14612    that byte, otherwise FILL is null.
14613
14614    This function used to have the comment:
14615
14616       The MIPS assembler also automatically adjusts any preceding label.
14617
14618    The implementation therefore applied the adjustment to a maximum of
14619    one label.  However, other label adjustments are applied to batches
14620    of labels, and adjusting just one caused problems when new labels
14621    were added for the sake of debugging or unwind information.
14622    We therefore adjust all preceding labels (given as LABELS) instead.  */
14623
14624 static void
14625 mips_align (int to, int *fill, struct insn_label_list *labels)
14626 {
14627   mips_emit_delays ();
14628   mips_record_compressed_mode ();
14629   if (fill == NULL && subseg_text_p (now_seg))
14630     frag_align_code (to, 0);
14631   else
14632     frag_align (to, fill ? *fill : 0, 0);
14633   record_alignment (now_seg, to);
14634   mips_move_labels (labels, FALSE);
14635 }
14636
14637 /* Align to a given power of two.  .align 0 turns off the automatic
14638    alignment used by the data creating pseudo-ops.  */
14639
14640 static void
14641 s_align (int x ATTRIBUTE_UNUSED)
14642 {
14643   int temp, fill_value, *fill_ptr;
14644   long max_alignment = 28;
14645
14646   /* o Note that the assembler pulls down any immediately preceding label
14647        to the aligned address.
14648      o It's not documented but auto alignment is reinstated by
14649        a .align pseudo instruction.
14650      o Note also that after auto alignment is turned off the mips assembler
14651        issues an error on attempt to assemble an improperly aligned data item.
14652        We don't.  */
14653
14654   temp = get_absolute_expression ();
14655   if (temp > max_alignment)
14656     as_bad (_("Alignment too large: %d. assumed."), temp = max_alignment);
14657   else if (temp < 0)
14658     {
14659       as_warn (_("Alignment negative: 0 assumed."));
14660       temp = 0;
14661     }
14662   if (*input_line_pointer == ',')
14663     {
14664       ++input_line_pointer;
14665       fill_value = get_absolute_expression ();
14666       fill_ptr = &fill_value;
14667     }
14668   else
14669     fill_ptr = 0;
14670   if (temp)
14671     {
14672       segment_info_type *si = seg_info (now_seg);
14673       struct insn_label_list *l = si->label_list;
14674       /* Auto alignment should be switched on by next section change.  */
14675       auto_align = 1;
14676       mips_align (temp, fill_ptr, l);
14677     }
14678   else
14679     {
14680       auto_align = 0;
14681     }
14682
14683   demand_empty_rest_of_line ();
14684 }
14685
14686 static void
14687 s_change_sec (int sec)
14688 {
14689   segT seg;
14690
14691   /* The ELF backend needs to know that we are changing sections, so
14692      that .previous works correctly.  We could do something like check
14693      for an obj_section_change_hook macro, but that might be confusing
14694      as it would not be appropriate to use it in the section changing
14695      functions in read.c, since obj-elf.c intercepts those.  FIXME:
14696      This should be cleaner, somehow.  */
14697   obj_elf_section_change_hook ();
14698
14699   mips_emit_delays ();
14700
14701   switch (sec)
14702     {
14703     case 't':
14704       s_text (0);
14705       break;
14706     case 'd':
14707       s_data (0);
14708       break;
14709     case 'b':
14710       subseg_set (bss_section, (subsegT) get_absolute_expression ());
14711       demand_empty_rest_of_line ();
14712       break;
14713
14714     case 'r':
14715       seg = subseg_new (RDATA_SECTION_NAME,
14716                         (subsegT) get_absolute_expression ());
14717       bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
14718                                               | SEC_READONLY | SEC_RELOC
14719                                               | SEC_DATA));
14720       if (strncmp (TARGET_OS, "elf", 3) != 0)
14721         record_alignment (seg, 4);
14722       demand_empty_rest_of_line ();
14723       break;
14724
14725     case 's':
14726       seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
14727       bfd_set_section_flags (stdoutput, seg,
14728                              SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
14729       if (strncmp (TARGET_OS, "elf", 3) != 0)
14730         record_alignment (seg, 4);
14731       demand_empty_rest_of_line ();
14732       break;
14733
14734     case 'B':
14735       seg = subseg_new (".sbss", (subsegT) get_absolute_expression ());
14736       bfd_set_section_flags (stdoutput, seg, SEC_ALLOC);
14737       if (strncmp (TARGET_OS, "elf", 3) != 0)
14738         record_alignment (seg, 4);
14739       demand_empty_rest_of_line ();
14740       break;
14741     }
14742
14743   auto_align = 1;
14744 }
14745
14746 void
14747 s_change_section (int ignore ATTRIBUTE_UNUSED)
14748 {
14749   char *section_name;
14750   char c;
14751   char next_c = 0;
14752   int section_type;
14753   int section_flag;
14754   int section_entry_size;
14755   int section_alignment;
14756
14757   section_name = input_line_pointer;
14758   c = get_symbol_end ();
14759   if (c)
14760     next_c = *(input_line_pointer + 1);
14761
14762   /* Do we have .section Name<,"flags">?  */
14763   if (c != ',' || (c == ',' && next_c == '"'))
14764     {
14765       /* just after name is now '\0'.  */
14766       *input_line_pointer = c;
14767       input_line_pointer = section_name;
14768       obj_elf_section (ignore);
14769       return;
14770     }
14771   input_line_pointer++;
14772
14773   /* Do we have .section Name<,type><,flag><,entry_size><,alignment>  */
14774   if (c == ',')
14775     section_type = get_absolute_expression ();
14776   else
14777     section_type = 0;
14778   if (*input_line_pointer++ == ',')
14779     section_flag = get_absolute_expression ();
14780   else
14781     section_flag = 0;
14782   if (*input_line_pointer++ == ',')
14783     section_entry_size = get_absolute_expression ();
14784   else
14785     section_entry_size = 0;
14786   if (*input_line_pointer++ == ',')
14787     section_alignment = get_absolute_expression ();
14788   else
14789     section_alignment = 0;
14790   /* FIXME: really ignore?  */
14791   (void) section_alignment;
14792
14793   section_name = xstrdup (section_name);
14794
14795   /* When using the generic form of .section (as implemented by obj-elf.c),
14796      there's no way to set the section type to SHT_MIPS_DWARF.  Users have
14797      traditionally had to fall back on the more common @progbits instead.
14798
14799      There's nothing really harmful in this, since bfd will correct
14800      SHT_PROGBITS to SHT_MIPS_DWARF before writing out the file.  But it
14801      means that, for backwards compatibility, the special_section entries
14802      for dwarf sections must use SHT_PROGBITS rather than SHT_MIPS_DWARF.
14803
14804      Even so, we shouldn't force users of the MIPS .section syntax to
14805      incorrectly label the sections as SHT_PROGBITS.  The best compromise
14806      seems to be to map SHT_MIPS_DWARF to SHT_PROGBITS before calling the
14807      generic type-checking code.  */
14808   if (section_type == SHT_MIPS_DWARF)
14809     section_type = SHT_PROGBITS;
14810
14811   obj_elf_change_section (section_name, section_type, section_flag,
14812                           section_entry_size, 0, 0, 0);
14813
14814   if (now_seg->name != section_name)
14815     free (section_name);
14816 }
14817
14818 void
14819 mips_enable_auto_align (void)
14820 {
14821   auto_align = 1;
14822 }
14823
14824 static void
14825 s_cons (int log_size)
14826 {
14827   segment_info_type *si = seg_info (now_seg);
14828   struct insn_label_list *l = si->label_list;
14829
14830   mips_emit_delays ();
14831   if (log_size > 0 && auto_align)
14832     mips_align (log_size, 0, l);
14833   cons (1 << log_size);
14834   mips_clear_insn_labels ();
14835 }
14836
14837 static void
14838 s_float_cons (int type)
14839 {
14840   segment_info_type *si = seg_info (now_seg);
14841   struct insn_label_list *l = si->label_list;
14842
14843   mips_emit_delays ();
14844
14845   if (auto_align)
14846     {
14847       if (type == 'd')
14848         mips_align (3, 0, l);
14849       else
14850         mips_align (2, 0, l);
14851     }
14852
14853   float_cons (type);
14854   mips_clear_insn_labels ();
14855 }
14856
14857 /* Handle .globl.  We need to override it because on Irix 5 you are
14858    permitted to say
14859        .globl foo .text
14860    where foo is an undefined symbol, to mean that foo should be
14861    considered to be the address of a function.  */
14862
14863 static void
14864 s_mips_globl (int x ATTRIBUTE_UNUSED)
14865 {
14866   char *name;
14867   int c;
14868   symbolS *symbolP;
14869   flagword flag;
14870
14871   do
14872     {
14873       name = input_line_pointer;
14874       c = get_symbol_end ();
14875       symbolP = symbol_find_or_make (name);
14876       S_SET_EXTERNAL (symbolP);
14877
14878       *input_line_pointer = c;
14879       SKIP_WHITESPACE ();
14880
14881       /* On Irix 5, every global symbol that is not explicitly labelled as
14882          being a function is apparently labelled as being an object.  */
14883       flag = BSF_OBJECT;
14884
14885       if (!is_end_of_line[(unsigned char) *input_line_pointer]
14886           && (*input_line_pointer != ','))
14887         {
14888           char *secname;
14889           asection *sec;
14890
14891           secname = input_line_pointer;
14892           c = get_symbol_end ();
14893           sec = bfd_get_section_by_name (stdoutput, secname);
14894           if (sec == NULL)
14895             as_bad (_("%s: no such section"), secname);
14896           *input_line_pointer = c;
14897
14898           if (sec != NULL && (sec->flags & SEC_CODE) != 0)
14899             flag = BSF_FUNCTION;
14900         }
14901
14902       symbol_get_bfdsym (symbolP)->flags |= flag;
14903
14904       c = *input_line_pointer;
14905       if (c == ',')
14906         {
14907           input_line_pointer++;
14908           SKIP_WHITESPACE ();
14909           if (is_end_of_line[(unsigned char) *input_line_pointer])
14910             c = '\n';
14911         }
14912     }
14913   while (c == ',');
14914
14915   demand_empty_rest_of_line ();
14916 }
14917
14918 static void
14919 s_option (int x ATTRIBUTE_UNUSED)
14920 {
14921   char *opt;
14922   char c;
14923
14924   opt = input_line_pointer;
14925   c = get_symbol_end ();
14926
14927   if (*opt == 'O')
14928     {
14929       /* FIXME: What does this mean?  */
14930     }
14931   else if (strncmp (opt, "pic", 3) == 0)
14932     {
14933       int i;
14934
14935       i = atoi (opt + 3);
14936       if (i == 0)
14937         mips_pic = NO_PIC;
14938       else if (i == 2)
14939         {
14940           mips_pic = SVR4_PIC;
14941           mips_abicalls = TRUE;
14942         }
14943       else
14944         as_bad (_(".option pic%d not supported"), i);
14945
14946       if (mips_pic == SVR4_PIC)
14947         {
14948           if (g_switch_seen && g_switch_value != 0)
14949             as_warn (_("-G may not be used with SVR4 PIC code"));
14950           g_switch_value = 0;
14951           bfd_set_gp_size (stdoutput, 0);
14952         }
14953     }
14954   else
14955     as_warn (_("Unrecognized option \"%s\""), opt);
14956
14957   *input_line_pointer = c;
14958   demand_empty_rest_of_line ();
14959 }
14960
14961 /* This structure is used to hold a stack of .set values.  */
14962
14963 struct mips_option_stack
14964 {
14965   struct mips_option_stack *next;
14966   struct mips_set_options options;
14967 };
14968
14969 static struct mips_option_stack *mips_opts_stack;
14970
14971 /* Handle the .set pseudo-op.  */
14972
14973 static void
14974 s_mipsset (int x ATTRIBUTE_UNUSED)
14975 {
14976   char *name = input_line_pointer, ch;
14977   const struct mips_ase *ase;
14978
14979   while (!is_end_of_line[(unsigned char) *input_line_pointer])
14980     ++input_line_pointer;
14981   ch = *input_line_pointer;
14982   *input_line_pointer = '\0';
14983
14984   if (strcmp (name, "reorder") == 0)
14985     {
14986       if (mips_opts.noreorder)
14987         end_noreorder ();
14988     }
14989   else if (strcmp (name, "noreorder") == 0)
14990     {
14991       if (!mips_opts.noreorder)
14992         start_noreorder ();
14993     }
14994   else if (strncmp (name, "at=", 3) == 0)
14995     {
14996       char *s = name + 3;
14997
14998       if (!reg_lookup (&s, RTYPE_NUM | RTYPE_GP, &mips_opts.at))
14999         as_bad (_("Unrecognized register name `%s'"), s);
15000     }
15001   else if (strcmp (name, "at") == 0)
15002     {
15003       mips_opts.at = ATREG;
15004     }
15005   else if (strcmp (name, "noat") == 0)
15006     {
15007       mips_opts.at = ZERO;
15008     }
15009   else if (strcmp (name, "macro") == 0)
15010     {
15011       mips_opts.warn_about_macros = 0;
15012     }
15013   else if (strcmp (name, "nomacro") == 0)
15014     {
15015       if (mips_opts.noreorder == 0)
15016         as_bad (_("`noreorder' must be set before `nomacro'"));
15017       mips_opts.warn_about_macros = 1;
15018     }
15019   else if (strcmp (name, "move") == 0 || strcmp (name, "novolatile") == 0)
15020     {
15021       mips_opts.nomove = 0;
15022     }
15023   else if (strcmp (name, "nomove") == 0 || strcmp (name, "volatile") == 0)
15024     {
15025       mips_opts.nomove = 1;
15026     }
15027   else if (strcmp (name, "bopt") == 0)
15028     {
15029       mips_opts.nobopt = 0;
15030     }
15031   else if (strcmp (name, "nobopt") == 0)
15032     {
15033       mips_opts.nobopt = 1;
15034     }
15035   else if (strcmp (name, "gp=default") == 0)
15036     mips_opts.gp32 = file_mips_gp32;
15037   else if (strcmp (name, "gp=32") == 0)
15038     mips_opts.gp32 = 1;
15039   else if (strcmp (name, "gp=64") == 0)
15040     {
15041       if (!ISA_HAS_64BIT_REGS (mips_opts.isa))
15042         as_warn (_("%s isa does not support 64-bit registers"),
15043                  mips_cpu_info_from_isa (mips_opts.isa)->name);
15044       mips_opts.gp32 = 0;
15045     }
15046   else if (strcmp (name, "fp=default") == 0)
15047     mips_opts.fp32 = file_mips_fp32;
15048   else if (strcmp (name, "fp=32") == 0)
15049     mips_opts.fp32 = 1;
15050   else if (strcmp (name, "fp=64") == 0)
15051     {
15052       if (!ISA_HAS_64BIT_FPRS (mips_opts.isa))
15053         as_warn (_("%s isa does not support 64-bit floating point registers"),
15054                  mips_cpu_info_from_isa (mips_opts.isa)->name);
15055       mips_opts.fp32 = 0;
15056     }
15057   else if (strcmp (name, "softfloat") == 0)
15058     mips_opts.soft_float = 1;
15059   else if (strcmp (name, "hardfloat") == 0)
15060     mips_opts.soft_float = 0;
15061   else if (strcmp (name, "singlefloat") == 0)
15062     mips_opts.single_float = 1;
15063   else if (strcmp (name, "doublefloat") == 0)
15064     mips_opts.single_float = 0;
15065   else if (strcmp (name, "mips16") == 0
15066            || strcmp (name, "MIPS-16") == 0)
15067     {
15068       if (mips_opts.micromips == 1)
15069         as_fatal (_("`mips16' cannot be used with `micromips'"));
15070       mips_opts.mips16 = 1;
15071     }
15072   else if (strcmp (name, "nomips16") == 0
15073            || strcmp (name, "noMIPS-16") == 0)
15074     mips_opts.mips16 = 0;
15075   else if (strcmp (name, "micromips") == 0)
15076     {
15077       if (mips_opts.mips16 == 1)
15078         as_fatal (_("`micromips' cannot be used with `mips16'"));
15079       mips_opts.micromips = 1;
15080     }
15081   else if (strcmp (name, "nomicromips") == 0)
15082     mips_opts.micromips = 0;
15083   else if (name[0] == 'n'
15084            && name[1] == 'o'
15085            && (ase = mips_lookup_ase (name + 2)))
15086     mips_set_ase (ase, FALSE);
15087   else if ((ase = mips_lookup_ase (name)))
15088     mips_set_ase (ase, TRUE);
15089   else if (strncmp (name, "mips", 4) == 0 || strncmp (name, "arch=", 5) == 0)
15090     {
15091       int reset = 0;
15092
15093       /* Permit the user to change the ISA and architecture on the fly.
15094          Needless to say, misuse can cause serious problems.  */
15095       if (strcmp (name, "mips0") == 0 || strcmp (name, "arch=default") == 0)
15096         {
15097           reset = 1;
15098           mips_opts.isa = file_mips_isa;
15099           mips_opts.arch = file_mips_arch;
15100         }
15101       else if (strncmp (name, "arch=", 5) == 0)
15102         {
15103           const struct mips_cpu_info *p;
15104
15105           p = mips_parse_cpu("internal use", name + 5);
15106           if (!p)
15107             as_bad (_("unknown architecture %s"), name + 5);
15108           else
15109             {
15110               mips_opts.arch = p->cpu;
15111               mips_opts.isa = p->isa;
15112             }
15113         }
15114       else if (strncmp (name, "mips", 4) == 0)
15115         {
15116           const struct mips_cpu_info *p;
15117
15118           p = mips_parse_cpu("internal use", name);
15119           if (!p)
15120             as_bad (_("unknown ISA level %s"), name + 4);
15121           else
15122             {
15123               mips_opts.arch = p->cpu;
15124               mips_opts.isa = p->isa;
15125             }
15126         }
15127       else
15128         as_bad (_("unknown ISA or architecture %s"), name);
15129
15130       switch (mips_opts.isa)
15131         {
15132         case  0:
15133           break;
15134         case ISA_MIPS1:
15135         case ISA_MIPS2:
15136         case ISA_MIPS32:
15137         case ISA_MIPS32R2:
15138           mips_opts.gp32 = 1;
15139           mips_opts.fp32 = 1;
15140           break;
15141         case ISA_MIPS3:
15142         case ISA_MIPS4:
15143         case ISA_MIPS5:
15144         case ISA_MIPS64:
15145         case ISA_MIPS64R2:
15146           mips_opts.gp32 = 0;
15147           if (mips_opts.arch == CPU_R5900)
15148             {
15149                 mips_opts.fp32 = 1;
15150             }
15151           else
15152             {
15153           mips_opts.fp32 = 0;
15154             }
15155           break;
15156         default:
15157           as_bad (_("unknown ISA level %s"), name + 4);
15158           break;
15159         }
15160       if (reset)
15161         {
15162           mips_opts.gp32 = file_mips_gp32;
15163           mips_opts.fp32 = file_mips_fp32;
15164         }
15165     }
15166   else if (strcmp (name, "autoextend") == 0)
15167     mips_opts.noautoextend = 0;
15168   else if (strcmp (name, "noautoextend") == 0)
15169     mips_opts.noautoextend = 1;
15170   else if (strcmp (name, "insn32") == 0)
15171     mips_opts.insn32 = TRUE;
15172   else if (strcmp (name, "noinsn32") == 0)
15173     mips_opts.insn32 = FALSE;
15174   else if (strcmp (name, "push") == 0)
15175     {
15176       struct mips_option_stack *s;
15177
15178       s = (struct mips_option_stack *) xmalloc (sizeof *s);
15179       s->next = mips_opts_stack;
15180       s->options = mips_opts;
15181       mips_opts_stack = s;
15182     }
15183   else if (strcmp (name, "pop") == 0)
15184     {
15185       struct mips_option_stack *s;
15186
15187       s = mips_opts_stack;
15188       if (s == NULL)
15189         as_bad (_(".set pop with no .set push"));
15190       else
15191         {
15192           /* If we're changing the reorder mode we need to handle
15193              delay slots correctly.  */
15194           if (s->options.noreorder && ! mips_opts.noreorder)
15195             start_noreorder ();
15196           else if (! s->options.noreorder && mips_opts.noreorder)
15197             end_noreorder ();
15198
15199           mips_opts = s->options;
15200           mips_opts_stack = s->next;
15201           free (s);
15202         }
15203     }
15204   else if (strcmp (name, "sym32") == 0)
15205     mips_opts.sym32 = TRUE;
15206   else if (strcmp (name, "nosym32") == 0)
15207     mips_opts.sym32 = FALSE;
15208   else if (strchr (name, ','))
15209     {
15210       /* Generic ".set" directive; use the generic handler.  */
15211       *input_line_pointer = ch;
15212       input_line_pointer = name;
15213       s_set (0);
15214       return;
15215     }
15216   else
15217     {
15218       as_warn (_("Tried to set unrecognized symbol: %s\n"), name);
15219     }
15220   mips_check_isa_supports_ases ();
15221   *input_line_pointer = ch;
15222   demand_empty_rest_of_line ();
15223 }
15224
15225 /* Handle the .abicalls pseudo-op.  I believe this is equivalent to
15226    .option pic2.  It means to generate SVR4 PIC calls.  */
15227
15228 static void
15229 s_abicalls (int ignore ATTRIBUTE_UNUSED)
15230 {
15231   mips_pic = SVR4_PIC;
15232   mips_abicalls = TRUE;
15233
15234   if (g_switch_seen && g_switch_value != 0)
15235     as_warn (_("-G may not be used with SVR4 PIC code"));
15236   g_switch_value = 0;
15237
15238   bfd_set_gp_size (stdoutput, 0);
15239   demand_empty_rest_of_line ();
15240 }
15241
15242 /* Handle the .cpload pseudo-op.  This is used when generating SVR4
15243    PIC code.  It sets the $gp register for the function based on the
15244    function address, which is in the register named in the argument.
15245    This uses a relocation against _gp_disp, which is handled specially
15246    by the linker.  The result is:
15247         lui     $gp,%hi(_gp_disp)
15248         addiu   $gp,$gp,%lo(_gp_disp)
15249         addu    $gp,$gp,.cpload argument
15250    The .cpload argument is normally $25 == $t9.
15251
15252    The -mno-shared option changes this to:
15253         lui     $gp,%hi(__gnu_local_gp)
15254         addiu   $gp,$gp,%lo(__gnu_local_gp)
15255    and the argument is ignored.  This saves an instruction, but the
15256    resulting code is not position independent; it uses an absolute
15257    address for __gnu_local_gp.  Thus code assembled with -mno-shared
15258    can go into an ordinary executable, but not into a shared library.  */
15259
15260 static void
15261 s_cpload (int ignore ATTRIBUTE_UNUSED)
15262 {
15263   expressionS ex;
15264   int reg;
15265   int in_shared;
15266
15267   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
15268      .cpload is ignored.  */
15269   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
15270     {
15271       s_ignore (0);
15272       return;
15273     }
15274
15275   if (mips_opts.mips16)
15276     {
15277       as_bad (_("%s not supported in MIPS16 mode"), ".cpload");
15278       ignore_rest_of_line ();
15279       return;
15280     }
15281
15282   /* .cpload should be in a .set noreorder section.  */
15283   if (mips_opts.noreorder == 0)
15284     as_warn (_(".cpload not in noreorder section"));
15285
15286   reg = tc_get_register (0);
15287
15288   /* If we need to produce a 64-bit address, we are better off using
15289      the default instruction sequence.  */
15290   in_shared = mips_in_shared || HAVE_64BIT_SYMBOLS;
15291
15292   ex.X_op = O_symbol;
15293   ex.X_add_symbol = symbol_find_or_make (in_shared ? "_gp_disp" :
15294                                          "__gnu_local_gp");
15295   ex.X_op_symbol = NULL;
15296   ex.X_add_number = 0;
15297
15298   /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
15299   symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
15300
15301   mips_mark_labels ();
15302   mips_assembling_insn = TRUE;
15303
15304   macro_start ();
15305   macro_build_lui (&ex, mips_gp_register);
15306   macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
15307                mips_gp_register, BFD_RELOC_LO16);
15308   if (in_shared)
15309     macro_build (NULL, "addu", "d,v,t", mips_gp_register,
15310                  mips_gp_register, reg);
15311   macro_end ();
15312
15313   mips_assembling_insn = FALSE;
15314   demand_empty_rest_of_line ();
15315 }
15316
15317 /* Handle the .cpsetup pseudo-op defined for NewABI PIC code.  The syntax is:
15318      .cpsetup $reg1, offset|$reg2, label
15319
15320    If offset is given, this results in:
15321      sd         $gp, offset($sp)
15322      lui        $gp, %hi(%neg(%gp_rel(label)))
15323      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
15324      daddu      $gp, $gp, $reg1
15325
15326    If $reg2 is given, this results in:
15327      daddu      $reg2, $gp, $0
15328      lui        $gp, %hi(%neg(%gp_rel(label)))
15329      addiu      $gp, $gp, %lo(%neg(%gp_rel(label)))
15330      daddu      $gp, $gp, $reg1
15331    $reg1 is normally $25 == $t9.
15332
15333    The -mno-shared option replaces the last three instructions with
15334         lui     $gp,%hi(_gp)
15335         addiu   $gp,$gp,%lo(_gp)  */
15336
15337 static void
15338 s_cpsetup (int ignore ATTRIBUTE_UNUSED)
15339 {
15340   expressionS ex_off;
15341   expressionS ex_sym;
15342   int reg1;
15343
15344   /* If we are not generating SVR4 PIC code, .cpsetup is ignored.
15345      We also need NewABI support.  */
15346   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
15347     {
15348       s_ignore (0);
15349       return;
15350     }
15351
15352   if (mips_opts.mips16)
15353     {
15354       as_bad (_("%s not supported in MIPS16 mode"), ".cpsetup");
15355       ignore_rest_of_line ();
15356       return;
15357     }
15358
15359   reg1 = tc_get_register (0);
15360   SKIP_WHITESPACE ();
15361   if (*input_line_pointer != ',')
15362     {
15363       as_bad (_("missing argument separator ',' for .cpsetup"));
15364       return;
15365     }
15366   else
15367     ++input_line_pointer;
15368   SKIP_WHITESPACE ();
15369   if (*input_line_pointer == '$')
15370     {
15371       mips_cpreturn_register = tc_get_register (0);
15372       mips_cpreturn_offset = -1;
15373     }
15374   else
15375     {
15376       mips_cpreturn_offset = get_absolute_expression ();
15377       mips_cpreturn_register = -1;
15378     }
15379   SKIP_WHITESPACE ();
15380   if (*input_line_pointer != ',')
15381     {
15382       as_bad (_("missing argument separator ',' for .cpsetup"));
15383       return;
15384     }
15385   else
15386     ++input_line_pointer;
15387   SKIP_WHITESPACE ();
15388   expression (&ex_sym);
15389
15390   mips_mark_labels ();
15391   mips_assembling_insn = TRUE;
15392
15393   macro_start ();
15394   if (mips_cpreturn_register == -1)
15395     {
15396       ex_off.X_op = O_constant;
15397       ex_off.X_add_symbol = NULL;
15398       ex_off.X_op_symbol = NULL;
15399       ex_off.X_add_number = mips_cpreturn_offset;
15400
15401       macro_build (&ex_off, "sd", "t,o(b)", mips_gp_register,
15402                    BFD_RELOC_LO16, SP);
15403     }
15404   else
15405     macro_build (NULL, "daddu", "d,v,t", mips_cpreturn_register,
15406                  mips_gp_register, 0);
15407
15408   if (mips_in_shared || HAVE_64BIT_SYMBOLS)
15409     {
15410       macro_build (&ex_sym, "lui", LUI_FMT, mips_gp_register,
15411                    -1, BFD_RELOC_GPREL16, BFD_RELOC_MIPS_SUB,
15412                    BFD_RELOC_HI16_S);
15413
15414       macro_build (&ex_sym, "addiu", "t,r,j", mips_gp_register,
15415                    mips_gp_register, -1, BFD_RELOC_GPREL16,
15416                    BFD_RELOC_MIPS_SUB, BFD_RELOC_LO16);
15417
15418       macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", mips_gp_register,
15419                    mips_gp_register, reg1);
15420     }
15421   else
15422     {
15423       expressionS ex;
15424
15425       ex.X_op = O_symbol;
15426       ex.X_add_symbol = symbol_find_or_make ("__gnu_local_gp");
15427       ex.X_op_symbol = NULL;
15428       ex.X_add_number = 0;
15429
15430       /* In ELF, this symbol is implicitly an STT_OBJECT symbol.  */
15431       symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
15432
15433       macro_build_lui (&ex, mips_gp_register);
15434       macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
15435                    mips_gp_register, BFD_RELOC_LO16);
15436     }
15437
15438   macro_end ();
15439
15440   mips_assembling_insn = FALSE;
15441   demand_empty_rest_of_line ();
15442 }
15443
15444 static void
15445 s_cplocal (int ignore ATTRIBUTE_UNUSED)
15446 {
15447   /* If we are not generating SVR4 PIC code, or if this is not NewABI code,
15448      .cplocal is ignored.  */
15449   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
15450     {
15451       s_ignore (0);
15452       return;
15453     }
15454
15455   if (mips_opts.mips16)
15456     {
15457       as_bad (_("%s not supported in MIPS16 mode"), ".cplocal");
15458       ignore_rest_of_line ();
15459       return;
15460     }
15461
15462   mips_gp_register = tc_get_register (0);
15463   demand_empty_rest_of_line ();
15464 }
15465
15466 /* Handle the .cprestore pseudo-op.  This stores $gp into a given
15467    offset from $sp.  The offset is remembered, and after making a PIC
15468    call $gp is restored from that location.  */
15469
15470 static void
15471 s_cprestore (int ignore ATTRIBUTE_UNUSED)
15472 {
15473   expressionS ex;
15474
15475   /* If we are not generating SVR4 PIC code, or if this is NewABI code,
15476      .cprestore is ignored.  */
15477   if (mips_pic != SVR4_PIC || HAVE_NEWABI)
15478     {
15479       s_ignore (0);
15480       return;
15481     }
15482
15483   if (mips_opts.mips16)
15484     {
15485       as_bad (_("%s not supported in MIPS16 mode"), ".cprestore");
15486       ignore_rest_of_line ();
15487       return;
15488     }
15489
15490   mips_cprestore_offset = get_absolute_expression ();
15491   mips_cprestore_valid = 1;
15492
15493   ex.X_op = O_constant;
15494   ex.X_add_symbol = NULL;
15495   ex.X_op_symbol = NULL;
15496   ex.X_add_number = mips_cprestore_offset;
15497
15498   mips_mark_labels ();
15499   mips_assembling_insn = TRUE;
15500
15501   macro_start ();
15502   macro_build_ldst_constoffset (&ex, ADDRESS_STORE_INSN, mips_gp_register,
15503                                 SP, HAVE_64BIT_ADDRESSES);
15504   macro_end ();
15505
15506   mips_assembling_insn = FALSE;
15507   demand_empty_rest_of_line ();
15508 }
15509
15510 /* Handle the .cpreturn pseudo-op defined for NewABI PIC code. If an offset
15511    was given in the preceding .cpsetup, it results in:
15512      ld         $gp, offset($sp)
15513
15514    If a register $reg2 was given there, it results in:
15515      daddu      $gp, $reg2, $0  */
15516
15517 static void
15518 s_cpreturn (int ignore ATTRIBUTE_UNUSED)
15519 {
15520   expressionS ex;
15521
15522   /* If we are not generating SVR4 PIC code, .cpreturn is ignored.
15523      We also need NewABI support.  */
15524   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
15525     {
15526       s_ignore (0);
15527       return;
15528     }
15529
15530   if (mips_opts.mips16)
15531     {
15532       as_bad (_("%s not supported in MIPS16 mode"), ".cpreturn");
15533       ignore_rest_of_line ();
15534       return;
15535     }
15536
15537   mips_mark_labels ();
15538   mips_assembling_insn = TRUE;
15539
15540   macro_start ();
15541   if (mips_cpreturn_register == -1)
15542     {
15543       ex.X_op = O_constant;
15544       ex.X_add_symbol = NULL;
15545       ex.X_op_symbol = NULL;
15546       ex.X_add_number = mips_cpreturn_offset;
15547
15548       macro_build (&ex, "ld", "t,o(b)", mips_gp_register, BFD_RELOC_LO16, SP);
15549     }
15550   else
15551     macro_build (NULL, "daddu", "d,v,t", mips_gp_register,
15552                  mips_cpreturn_register, 0);
15553   macro_end ();
15554
15555   mips_assembling_insn = FALSE;
15556   demand_empty_rest_of_line ();
15557 }
15558
15559 /* Handle a .dtprelword, .dtpreldword, .tprelword, or .tpreldword
15560    pseudo-op; DIRSTR says which. The pseudo-op generates a BYTES-size
15561    DTP- or TP-relative relocation of type RTYPE, for use in either DWARF
15562    debug information or MIPS16 TLS.  */
15563
15564 static void
15565 s_tls_rel_directive (const size_t bytes, const char *dirstr,
15566                      bfd_reloc_code_real_type rtype)
15567 {
15568   expressionS ex;
15569   char *p;
15570
15571   expression (&ex);
15572
15573   if (ex.X_op != O_symbol)
15574     {
15575       as_bad (_("Unsupported use of %s"), dirstr);
15576       ignore_rest_of_line ();
15577     }
15578
15579   p = frag_more (bytes);
15580   md_number_to_chars (p, 0, bytes);
15581   fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE, rtype);
15582   demand_empty_rest_of_line ();
15583   mips_clear_insn_labels ();
15584 }
15585
15586 /* Handle .dtprelword.  */
15587
15588 static void
15589 s_dtprelword (int ignore ATTRIBUTE_UNUSED)
15590 {
15591   s_tls_rel_directive (4, ".dtprelword", BFD_RELOC_MIPS_TLS_DTPREL32);
15592 }
15593
15594 /* Handle .dtpreldword.  */
15595
15596 static void
15597 s_dtpreldword (int ignore ATTRIBUTE_UNUSED)
15598 {
15599   s_tls_rel_directive (8, ".dtpreldword", BFD_RELOC_MIPS_TLS_DTPREL64);
15600 }
15601
15602 /* Handle .tprelword.  */
15603
15604 static void
15605 s_tprelword (int ignore ATTRIBUTE_UNUSED)
15606 {
15607   s_tls_rel_directive (4, ".tprelword", BFD_RELOC_MIPS_TLS_TPREL32);
15608 }
15609
15610 /* Handle .tpreldword.  */
15611
15612 static void
15613 s_tpreldword (int ignore ATTRIBUTE_UNUSED)
15614 {
15615   s_tls_rel_directive (8, ".tpreldword", BFD_RELOC_MIPS_TLS_TPREL64);
15616 }
15617
15618 /* Handle the .gpvalue pseudo-op.  This is used when generating NewABI PIC
15619    code.  It sets the offset to use in gp_rel relocations.  */
15620
15621 static void
15622 s_gpvalue (int ignore ATTRIBUTE_UNUSED)
15623 {
15624   /* If we are not generating SVR4 PIC code, .gpvalue is ignored.
15625      We also need NewABI support.  */
15626   if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
15627     {
15628       s_ignore (0);
15629       return;
15630     }
15631
15632   mips_gprel_offset = get_absolute_expression ();
15633
15634   demand_empty_rest_of_line ();
15635 }
15636
15637 /* Handle the .gpword pseudo-op.  This is used when generating PIC
15638    code.  It generates a 32 bit GP relative reloc.  */
15639
15640 static void
15641 s_gpword (int ignore ATTRIBUTE_UNUSED)
15642 {
15643   segment_info_type *si;
15644   struct insn_label_list *l;
15645   expressionS ex;
15646   char *p;
15647
15648   /* When not generating PIC code, this is treated as .word.  */
15649   if (mips_pic != SVR4_PIC)
15650     {
15651       s_cons (2);
15652       return;
15653     }
15654
15655   si = seg_info (now_seg);
15656   l = si->label_list;
15657   mips_emit_delays ();
15658   if (auto_align)
15659     mips_align (2, 0, l);
15660
15661   expression (&ex);
15662   mips_clear_insn_labels ();
15663
15664   if (ex.X_op != O_symbol || ex.X_add_number != 0)
15665     {
15666       as_bad (_("Unsupported use of .gpword"));
15667       ignore_rest_of_line ();
15668     }
15669
15670   p = frag_more (4);
15671   md_number_to_chars (p, 0, 4);
15672   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
15673                BFD_RELOC_GPREL32);
15674
15675   demand_empty_rest_of_line ();
15676 }
15677
15678 static void
15679 s_gpdword (int ignore ATTRIBUTE_UNUSED)
15680 {
15681   segment_info_type *si;
15682   struct insn_label_list *l;
15683   expressionS ex;
15684   char *p;
15685
15686   /* When not generating PIC code, this is treated as .dword.  */
15687   if (mips_pic != SVR4_PIC)
15688     {
15689       s_cons (3);
15690       return;
15691     }
15692
15693   si = seg_info (now_seg);
15694   l = si->label_list;
15695   mips_emit_delays ();
15696   if (auto_align)
15697     mips_align (3, 0, l);
15698
15699   expression (&ex);
15700   mips_clear_insn_labels ();
15701
15702   if (ex.X_op != O_symbol || ex.X_add_number != 0)
15703     {
15704       as_bad (_("Unsupported use of .gpdword"));
15705       ignore_rest_of_line ();
15706     }
15707
15708   p = frag_more (8);
15709   md_number_to_chars (p, 0, 8);
15710   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
15711                BFD_RELOC_GPREL32)->fx_tcbit = 1;
15712
15713   /* GPREL32 composed with 64 gives a 64-bit GP offset.  */
15714   fix_new (frag_now, p - frag_now->fr_literal, 8, NULL, 0,
15715            FALSE, BFD_RELOC_64)->fx_tcbit = 1;
15716
15717   demand_empty_rest_of_line ();
15718 }
15719
15720 /* Handle the .ehword pseudo-op.  This is used when generating unwinding
15721    tables.  It generates a R_MIPS_EH reloc.  */
15722
15723 static void
15724 s_ehword (int ignore ATTRIBUTE_UNUSED)
15725 {
15726   expressionS ex;
15727   char *p;
15728
15729   mips_emit_delays ();
15730
15731   expression (&ex);
15732   mips_clear_insn_labels ();
15733
15734   if (ex.X_op != O_symbol || ex.X_add_number != 0)
15735     {
15736       as_bad (_("Unsupported use of .ehword"));
15737       ignore_rest_of_line ();
15738     }
15739
15740   p = frag_more (4);
15741   md_number_to_chars (p, 0, 4);
15742   fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
15743                BFD_RELOC_MIPS_EH);
15744
15745   demand_empty_rest_of_line ();
15746 }
15747
15748 /* Handle the .cpadd pseudo-op.  This is used when dealing with switch
15749    tables in SVR4 PIC code.  */
15750
15751 static void
15752 s_cpadd (int ignore ATTRIBUTE_UNUSED)
15753 {
15754   int reg;
15755
15756   /* This is ignored when not generating SVR4 PIC code.  */
15757   if (mips_pic != SVR4_PIC)
15758     {
15759       s_ignore (0);
15760       return;
15761     }
15762
15763   mips_mark_labels ();
15764   mips_assembling_insn = TRUE;
15765
15766   /* Add $gp to the register named as an argument.  */
15767   macro_start ();
15768   reg = tc_get_register (0);
15769   macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", reg, reg, mips_gp_register);
15770   macro_end ();
15771
15772   mips_assembling_insn = FALSE;
15773   demand_empty_rest_of_line ();
15774 }
15775
15776 /* Handle the .insn pseudo-op.  This marks instruction labels in
15777    mips16/micromips mode.  This permits the linker to handle them specially,
15778    such as generating jalx instructions when needed.  We also make
15779    them odd for the duration of the assembly, in order to generate the
15780    right sort of code.  We will make them even in the adjust_symtab
15781    routine, while leaving them marked.  This is convenient for the
15782    debugger and the disassembler.  The linker knows to make them odd
15783    again.  */
15784
15785 static void
15786 s_insn (int ignore ATTRIBUTE_UNUSED)
15787 {
15788   mips_mark_labels ();
15789
15790   demand_empty_rest_of_line ();
15791 }
15792
15793 /* Handle the .nan pseudo-op.  */
15794
15795 static void
15796 s_nan (int ignore ATTRIBUTE_UNUSED)
15797 {
15798   static const char str_legacy[] = "legacy";
15799   static const char str_2008[] = "2008";
15800   size_t i;
15801
15802   for (i = 0; !is_end_of_line[(unsigned char) input_line_pointer[i]]; i++);
15803
15804   if (i == sizeof (str_2008) - 1
15805       && memcmp (input_line_pointer, str_2008, i) == 0)
15806     mips_flag_nan2008 = TRUE;
15807   else if (i == sizeof (str_legacy) - 1
15808            && memcmp (input_line_pointer, str_legacy, i) == 0)
15809     mips_flag_nan2008 = FALSE;
15810   else
15811     as_bad (_("Bad .nan directive"));
15812
15813   input_line_pointer += i;
15814   demand_empty_rest_of_line ();
15815 }
15816
15817 /* Handle a .stab[snd] directive.  Ideally these directives would be
15818    implemented in a transparent way, so that removing them would not
15819    have any effect on the generated instructions.  However, s_stab
15820    internally changes the section, so in practice we need to decide
15821    now whether the preceding label marks compressed code.  We do not
15822    support changing the compression mode of a label after a .stab*
15823    directive, such as in:
15824
15825    foo:
15826         .stabs ...
15827         .set mips16
15828
15829    so the current mode wins.  */
15830
15831 static void
15832 s_mips_stab (int type)
15833 {
15834   mips_mark_labels ();
15835   s_stab (type);
15836 }
15837
15838 /* Handle the .weakext pseudo-op as defined in Kane and Heinrich.  */
15839
15840 static void
15841 s_mips_weakext (int ignore ATTRIBUTE_UNUSED)
15842 {
15843   char *name;
15844   int c;
15845   symbolS *symbolP;
15846   expressionS exp;
15847
15848   name = input_line_pointer;
15849   c = get_symbol_end ();
15850   symbolP = symbol_find_or_make (name);
15851   S_SET_WEAK (symbolP);
15852   *input_line_pointer = c;
15853
15854   SKIP_WHITESPACE ();
15855
15856   if (! is_end_of_line[(unsigned char) *input_line_pointer])
15857     {
15858       if (S_IS_DEFINED (symbolP))
15859         {
15860           as_bad (_("ignoring attempt to redefine symbol %s"),
15861                   S_GET_NAME (symbolP));
15862           ignore_rest_of_line ();
15863           return;
15864         }
15865
15866       if (*input_line_pointer == ',')
15867         {
15868           ++input_line_pointer;
15869           SKIP_WHITESPACE ();
15870         }
15871
15872       expression (&exp);
15873       if (exp.X_op != O_symbol)
15874         {
15875           as_bad (_("bad .weakext directive"));
15876           ignore_rest_of_line ();
15877           return;
15878         }
15879       symbol_set_value_expression (symbolP, &exp);
15880     }
15881
15882   demand_empty_rest_of_line ();
15883 }
15884
15885 /* Parse a register string into a number.  Called from the ECOFF code
15886    to parse .frame.  The argument is non-zero if this is the frame
15887    register, so that we can record it in mips_frame_reg.  */
15888
15889 int
15890 tc_get_register (int frame)
15891 {
15892   unsigned int reg;
15893
15894   SKIP_WHITESPACE ();
15895   if (! reg_lookup (&input_line_pointer, RWARN | RTYPE_NUM | RTYPE_GP, &reg))
15896     reg = 0;
15897   if (frame)
15898     {
15899       mips_frame_reg = reg != 0 ? reg : SP;
15900       mips_frame_reg_valid = 1;
15901       mips_cprestore_valid = 0;
15902     }
15903   return reg;
15904 }
15905
15906 valueT
15907 md_section_align (asection *seg, valueT addr)
15908 {
15909   int align = bfd_get_section_alignment (stdoutput, seg);
15910
15911   /* We don't need to align ELF sections to the full alignment.
15912      However, Irix 5 may prefer that we align them at least to a 16
15913      byte boundary.  We don't bother to align the sections if we
15914      are targeted for an embedded system.  */
15915   if (strncmp (TARGET_OS, "elf", 3) == 0)
15916     return addr;
15917   if (align > 4)
15918     align = 4;
15919
15920   return ((addr + (1 << align) - 1) & (-1 << align));
15921 }
15922
15923 /* Utility routine, called from above as well.  If called while the
15924    input file is still being read, it's only an approximation.  (For
15925    example, a symbol may later become defined which appeared to be
15926    undefined earlier.)  */
15927
15928 static int
15929 nopic_need_relax (symbolS *sym, int before_relaxing)
15930 {
15931   if (sym == 0)
15932     return 0;
15933
15934   if (g_switch_value > 0)
15935     {
15936       const char *symname;
15937       int change;
15938
15939       /* Find out whether this symbol can be referenced off the $gp
15940          register.  It can be if it is smaller than the -G size or if
15941          it is in the .sdata or .sbss section.  Certain symbols can
15942          not be referenced off the $gp, although it appears as though
15943          they can.  */
15944       symname = S_GET_NAME (sym);
15945       if (symname != (const char *) NULL
15946           && (strcmp (symname, "eprol") == 0
15947               || strcmp (symname, "etext") == 0
15948               || strcmp (symname, "_gp") == 0
15949               || strcmp (symname, "edata") == 0
15950               || strcmp (symname, "_fbss") == 0
15951               || strcmp (symname, "_fdata") == 0
15952               || strcmp (symname, "_ftext") == 0
15953               || strcmp (symname, "end") == 0
15954               || strcmp (symname, "_gp_disp") == 0))
15955         change = 1;
15956       else if ((! S_IS_DEFINED (sym) || S_IS_COMMON (sym))
15957                && (0
15958 #ifndef NO_ECOFF_DEBUGGING
15959                    || (symbol_get_obj (sym)->ecoff_extern_size != 0
15960                        && (symbol_get_obj (sym)->ecoff_extern_size
15961                            <= g_switch_value))
15962 #endif
15963                    /* We must defer this decision until after the whole
15964                       file has been read, since there might be a .extern
15965                       after the first use of this symbol.  */
15966                    || (before_relaxing
15967 #ifndef NO_ECOFF_DEBUGGING
15968                        && symbol_get_obj (sym)->ecoff_extern_size == 0
15969 #endif
15970                        && S_GET_VALUE (sym) == 0)
15971                    || (S_GET_VALUE (sym) != 0
15972                        && S_GET_VALUE (sym) <= g_switch_value)))
15973         change = 0;
15974       else
15975         {
15976           const char *segname;
15977
15978           segname = segment_name (S_GET_SEGMENT (sym));
15979           gas_assert (strcmp (segname, ".lit8") != 0
15980                   && strcmp (segname, ".lit4") != 0);
15981           change = (strcmp (segname, ".sdata") != 0
15982                     && strcmp (segname, ".sbss") != 0
15983                     && strncmp (segname, ".sdata.", 7) != 0
15984                     && strncmp (segname, ".sbss.", 6) != 0
15985                     && strncmp (segname, ".gnu.linkonce.sb.", 17) != 0
15986                     && strncmp (segname, ".gnu.linkonce.s.", 16) != 0);
15987         }
15988       return change;
15989     }
15990   else
15991     /* We are not optimizing for the $gp register.  */
15992     return 1;
15993 }
15994
15995
15996 /* Return true if the given symbol should be considered local for SVR4 PIC.  */
15997
15998 static bfd_boolean
15999 pic_need_relax (symbolS *sym, asection *segtype)
16000 {
16001   asection *symsec;
16002
16003   /* Handle the case of a symbol equated to another symbol.  */
16004   while (symbol_equated_reloc_p (sym))
16005     {
16006       symbolS *n;
16007
16008       /* It's possible to get a loop here in a badly written program.  */
16009       n = symbol_get_value_expression (sym)->X_add_symbol;
16010       if (n == sym)
16011         break;
16012       sym = n;
16013     }
16014
16015   if (symbol_section_p (sym))
16016     return TRUE;
16017
16018   symsec = S_GET_SEGMENT (sym);
16019
16020   /* This must duplicate the test in adjust_reloc_syms.  */
16021   return (!bfd_is_und_section (symsec)
16022           && !bfd_is_abs_section (symsec)
16023           && !bfd_is_com_section (symsec)
16024           && !s_is_linkonce (sym, segtype)
16025           /* A global or weak symbol is treated as external.  */
16026           && (!S_IS_WEAK (sym) && !S_IS_EXTERNAL (sym)));
16027 }
16028
16029
16030 /* Given a mips16 variant frag FRAGP, return non-zero if it needs an
16031    extended opcode.  SEC is the section the frag is in.  */
16032
16033 static int
16034 mips16_extended_frag (fragS *fragp, asection *sec, long stretch)
16035 {
16036   int type;
16037   const struct mips_int_operand *operand;
16038   offsetT val;
16039   segT symsec;
16040   fragS *sym_frag;
16041
16042   if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
16043     return 0;
16044   if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
16045     return 1;
16046
16047   type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
16048   operand = mips16_immed_operand (type, FALSE);
16049
16050   sym_frag = symbol_get_frag (fragp->fr_symbol);
16051   val = S_GET_VALUE (fragp->fr_symbol);
16052   symsec = S_GET_SEGMENT (fragp->fr_symbol);
16053
16054   if (operand->root.type == OP_PCREL)
16055     {
16056       const struct mips_pcrel_operand *pcrel_op;
16057       addressT addr;
16058       offsetT maxtiny;
16059
16060       /* We won't have the section when we are called from
16061          mips_relax_frag.  However, we will always have been called
16062          from md_estimate_size_before_relax first.  If this is a
16063          branch to a different section, we mark it as such.  If SEC is
16064          NULL, and the frag is not marked, then it must be a branch to
16065          the same section.  */
16066       pcrel_op = (const struct mips_pcrel_operand *) operand;
16067       if (sec == NULL)
16068         {
16069           if (RELAX_MIPS16_LONG_BRANCH (fragp->fr_subtype))
16070             return 1;
16071         }
16072       else
16073         {
16074           /* Must have been called from md_estimate_size_before_relax.  */
16075           if (symsec != sec)
16076             {
16077               fragp->fr_subtype =
16078                 RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16079
16080               /* FIXME: We should support this, and let the linker
16081                  catch branches and loads that are out of range.  */
16082               as_bad_where (fragp->fr_file, fragp->fr_line,
16083                             _("unsupported PC relative reference to different section"));
16084
16085               return 1;
16086             }
16087           if (fragp != sym_frag && sym_frag->fr_address == 0)
16088             /* Assume non-extended on the first relaxation pass.
16089                The address we have calculated will be bogus if this is
16090                a forward branch to another frag, as the forward frag
16091                will have fr_address == 0.  */
16092             return 0;
16093         }
16094
16095       /* In this case, we know for sure that the symbol fragment is in
16096          the same section.  If the relax_marker of the symbol fragment
16097          differs from the relax_marker of this fragment, we have not
16098          yet adjusted the symbol fragment fr_address.  We want to add
16099          in STRETCH in order to get a better estimate of the address.
16100          This particularly matters because of the shift bits.  */
16101       if (stretch != 0
16102           && sym_frag->relax_marker != fragp->relax_marker)
16103         {
16104           fragS *f;
16105
16106           /* Adjust stretch for any alignment frag.  Note that if have
16107              been expanding the earlier code, the symbol may be
16108              defined in what appears to be an earlier frag.  FIXME:
16109              This doesn't handle the fr_subtype field, which specifies
16110              a maximum number of bytes to skip when doing an
16111              alignment.  */
16112           for (f = fragp; f != NULL && f != sym_frag; f = f->fr_next)
16113             {
16114               if (f->fr_type == rs_align || f->fr_type == rs_align_code)
16115                 {
16116                   if (stretch < 0)
16117                     stretch = - ((- stretch)
16118                                  & ~ ((1 << (int) f->fr_offset) - 1));
16119                   else
16120                     stretch &= ~ ((1 << (int) f->fr_offset) - 1);
16121                   if (stretch == 0)
16122                     break;
16123                 }
16124             }
16125           if (f != NULL)
16126             val += stretch;
16127         }
16128
16129       addr = fragp->fr_address + fragp->fr_fix;
16130
16131       /* The base address rules are complicated.  The base address of
16132          a branch is the following instruction.  The base address of a
16133          PC relative load or add is the instruction itself, but if it
16134          is in a delay slot (in which case it can not be extended) use
16135          the address of the instruction whose delay slot it is in.  */
16136       if (pcrel_op->include_isa_bit)
16137         {
16138           addr += 2;
16139
16140           /* If we are currently assuming that this frag should be
16141              extended, then, the current address is two bytes
16142              higher.  */
16143           if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16144             addr += 2;
16145
16146           /* Ignore the low bit in the target, since it will be set
16147              for a text label.  */
16148           val &= -2;
16149         }
16150       else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
16151         addr -= 4;
16152       else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
16153         addr -= 2;
16154
16155       val -= addr & -(1 << pcrel_op->align_log2);
16156
16157       /* If any of the shifted bits are set, we must use an extended
16158          opcode.  If the address depends on the size of this
16159          instruction, this can lead to a loop, so we arrange to always
16160          use an extended opcode.  We only check this when we are in
16161          the main relaxation loop, when SEC is NULL.  */
16162       if ((val & ((1 << operand->shift) - 1)) != 0 && sec == NULL)
16163         {
16164           fragp->fr_subtype =
16165             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16166           return 1;
16167         }
16168
16169       /* If we are about to mark a frag as extended because the value
16170          is precisely the next value above maxtiny, then there is a
16171          chance of an infinite loop as in the following code:
16172              la $4,foo
16173              .skip      1020
16174              .align     2
16175            foo:
16176          In this case when the la is extended, foo is 0x3fc bytes
16177          away, so the la can be shrunk, but then foo is 0x400 away, so
16178          the la must be extended.  To avoid this loop, we mark the
16179          frag as extended if it was small, and is about to become
16180          extended with the next value above maxtiny.  */
16181       maxtiny = mips_int_operand_max (operand);
16182       if (val == maxtiny + (1 << operand->shift)
16183           && ! RELAX_MIPS16_EXTENDED (fragp->fr_subtype)
16184           && sec == NULL)
16185         {
16186           fragp->fr_subtype =
16187             RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
16188           return 1;
16189         }
16190     }
16191   else if (symsec != absolute_section && sec != NULL)
16192     as_bad_where (fragp->fr_file, fragp->fr_line, _("unsupported relocation"));
16193
16194   return !mips16_immed_in_range_p (operand, BFD_RELOC_UNUSED, val);
16195 }
16196
16197 /* Compute the length of a branch sequence, and adjust the
16198    RELAX_BRANCH_TOOFAR bit accordingly.  If FRAGP is NULL, the
16199    worst-case length is computed, with UPDATE being used to indicate
16200    whether an unconditional (-1), branch-likely (+1) or regular (0)
16201    branch is to be computed.  */
16202 static int
16203 relaxed_branch_length (fragS *fragp, asection *sec, int update)
16204 {
16205   bfd_boolean toofar;
16206   int length;
16207
16208   if (fragp
16209       && S_IS_DEFINED (fragp->fr_symbol)
16210       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16211     {
16212       addressT addr;
16213       offsetT val;
16214
16215       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16216
16217       addr = fragp->fr_address + fragp->fr_fix + 4;
16218
16219       val -= addr;
16220
16221       toofar = val < - (0x8000 << 2) || val >= (0x8000 << 2);
16222     }
16223   else if (fragp)
16224     /* If the symbol is not defined or it's in a different segment,
16225        assume the user knows what's going on and emit a short
16226        branch.  */
16227     toofar = FALSE;
16228   else
16229     toofar = TRUE;
16230
16231   if (fragp && update && toofar != RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
16232     fragp->fr_subtype
16233       = RELAX_BRANCH_ENCODE (RELAX_BRANCH_AT (fragp->fr_subtype),
16234                              RELAX_BRANCH_UNCOND (fragp->fr_subtype),
16235                              RELAX_BRANCH_LIKELY (fragp->fr_subtype),
16236                              RELAX_BRANCH_LINK (fragp->fr_subtype),
16237                              toofar);
16238
16239   length = 4;
16240   if (toofar)
16241     {
16242       if (fragp ? RELAX_BRANCH_LIKELY (fragp->fr_subtype) : (update > 0))
16243         length += 8;
16244
16245       if (mips_pic != NO_PIC)
16246         {
16247           /* Additional space for PIC loading of target address.  */
16248           length += 8;
16249           if (mips_opts.isa == ISA_MIPS1)
16250             /* Additional space for $at-stabilizing nop.  */
16251             length += 4;
16252         }
16253
16254       /* If branch is conditional.  */
16255       if (fragp ? !RELAX_BRANCH_UNCOND (fragp->fr_subtype) : (update >= 0))
16256         length += 8;
16257     }
16258
16259   return length;
16260 }
16261
16262 /* Compute the length of a branch sequence, and adjust the
16263    RELAX_MICROMIPS_TOOFAR32 bit accordingly.  If FRAGP is NULL, the
16264    worst-case length is computed, with UPDATE being used to indicate
16265    whether an unconditional (-1), or regular (0) branch is to be
16266    computed.  */
16267
16268 static int
16269 relaxed_micromips_32bit_branch_length (fragS *fragp, asection *sec, int update)
16270 {
16271   bfd_boolean toofar;
16272   int length;
16273
16274   if (fragp
16275       && S_IS_DEFINED (fragp->fr_symbol)
16276       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16277     {
16278       addressT addr;
16279       offsetT val;
16280
16281       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16282       /* Ignore the low bit in the target, since it will be set
16283          for a text label.  */
16284       if ((val & 1) != 0)
16285         --val;
16286
16287       addr = fragp->fr_address + fragp->fr_fix + 4;
16288
16289       val -= addr;
16290
16291       toofar = val < - (0x8000 << 1) || val >= (0x8000 << 1);
16292     }
16293   else if (fragp)
16294     /* If the symbol is not defined or it's in a different segment,
16295        assume the user knows what's going on and emit a short
16296        branch.  */
16297     toofar = FALSE;
16298   else
16299     toofar = TRUE;
16300
16301   if (fragp && update
16302       && toofar != RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
16303     fragp->fr_subtype = (toofar
16304                          ? RELAX_MICROMIPS_MARK_TOOFAR32 (fragp->fr_subtype)
16305                          : RELAX_MICROMIPS_CLEAR_TOOFAR32 (fragp->fr_subtype));
16306
16307   length = 4;
16308   if (toofar)
16309     {
16310       bfd_boolean compact_known = fragp != NULL;
16311       bfd_boolean compact = FALSE;
16312       bfd_boolean uncond;
16313
16314       if (compact_known)
16315         compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
16316       if (fragp)
16317         uncond = RELAX_MICROMIPS_UNCOND (fragp->fr_subtype);
16318       else
16319         uncond = update < 0;
16320
16321       /* If label is out of range, we turn branch <br>:
16322
16323                 <br>    label                   # 4 bytes
16324             0:
16325
16326          into:
16327
16328                 j       label                   # 4 bytes
16329                 nop                             # 2 bytes if compact && !PIC
16330             0:
16331        */
16332       if (mips_pic == NO_PIC && (!compact_known || compact))
16333         length += 2;
16334
16335       /* If assembling PIC code, we further turn:
16336
16337                         j       label                   # 4 bytes
16338
16339          into:
16340
16341                         lw/ld   at, %got(label)(gp)     # 4 bytes
16342                         d/addiu at, %lo(label)          # 4 bytes
16343                         jr/c    at                      # 2 bytes
16344        */
16345       if (mips_pic != NO_PIC)
16346         length += 6;
16347
16348       /* If branch <br> is conditional, we prepend negated branch <brneg>:
16349
16350                         <brneg> 0f                      # 4 bytes
16351                         nop                             # 2 bytes if !compact
16352        */
16353       if (!uncond)
16354         length += (compact_known && compact) ? 4 : 6;
16355     }
16356
16357   return length;
16358 }
16359
16360 /* Compute the length of a branch, and adjust the RELAX_MICROMIPS_TOOFAR16
16361    bit accordingly.  */
16362
16363 static int
16364 relaxed_micromips_16bit_branch_length (fragS *fragp, asection *sec, int update)
16365 {
16366   bfd_boolean toofar;
16367
16368   if (fragp
16369       && S_IS_DEFINED (fragp->fr_symbol)
16370       && sec == S_GET_SEGMENT (fragp->fr_symbol))
16371     {
16372       addressT addr;
16373       offsetT val;
16374       int type;
16375
16376       val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
16377       /* Ignore the low bit in the target, since it will be set
16378          for a text label.  */
16379       if ((val & 1) != 0)
16380         --val;
16381
16382       /* Assume this is a 2-byte branch.  */
16383       addr = fragp->fr_address + fragp->fr_fix + 2;
16384
16385       /* We try to avoid the infinite loop by not adding 2 more bytes for
16386          long branches.  */
16387
16388       val -= addr;
16389
16390       type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
16391       if (type == 'D')
16392         toofar = val < - (0x200 << 1) || val >= (0x200 << 1);
16393       else if (type == 'E')
16394         toofar = val < - (0x40 << 1) || val >= (0x40 << 1);
16395       else
16396         abort ();
16397     }
16398   else
16399     /* If the symbol is not defined or it's in a different segment,
16400        we emit a normal 32-bit branch.  */
16401     toofar = TRUE;
16402
16403   if (fragp && update
16404       && toofar != RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
16405     fragp->fr_subtype
16406       = toofar ? RELAX_MICROMIPS_MARK_TOOFAR16 (fragp->fr_subtype)
16407                : RELAX_MICROMIPS_CLEAR_TOOFAR16 (fragp->fr_subtype);
16408
16409   if (toofar)
16410     return 4;
16411
16412   return 2;
16413 }
16414
16415 /* Estimate the size of a frag before relaxing.  Unless this is the
16416    mips16, we are not really relaxing here, and the final size is
16417    encoded in the subtype information.  For the mips16, we have to
16418    decide whether we are using an extended opcode or not.  */
16419
16420 int
16421 md_estimate_size_before_relax (fragS *fragp, asection *segtype)
16422 {
16423   int change;
16424
16425   if (RELAX_BRANCH_P (fragp->fr_subtype))
16426     {
16427
16428       fragp->fr_var = relaxed_branch_length (fragp, segtype, FALSE);
16429
16430       return fragp->fr_var;
16431     }
16432
16433   if (RELAX_MIPS16_P (fragp->fr_subtype))
16434     /* We don't want to modify the EXTENDED bit here; it might get us
16435        into infinite loops.  We change it only in mips_relax_frag().  */
16436     return (RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2);
16437
16438   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
16439     {
16440       int length = 4;
16441
16442       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
16443         length = relaxed_micromips_16bit_branch_length (fragp, segtype, FALSE);
16444       if (length == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
16445         length = relaxed_micromips_32bit_branch_length (fragp, segtype, FALSE);
16446       fragp->fr_var = length;
16447
16448       return length;
16449     }
16450
16451   if (mips_pic == NO_PIC)
16452     change = nopic_need_relax (fragp->fr_symbol, 0);
16453   else if (mips_pic == SVR4_PIC)
16454     change = pic_need_relax (fragp->fr_symbol, segtype);
16455   else if (mips_pic == VXWORKS_PIC)
16456     /* For vxworks, GOT16 relocations never have a corresponding LO16.  */
16457     change = 0;
16458   else
16459     abort ();
16460
16461   if (change)
16462     {
16463       fragp->fr_subtype |= RELAX_USE_SECOND;
16464       return -RELAX_FIRST (fragp->fr_subtype);
16465     }
16466   else
16467     return -RELAX_SECOND (fragp->fr_subtype);
16468 }
16469
16470 /* This is called to see whether a reloc against a defined symbol
16471    should be converted into a reloc against a section.  */
16472
16473 int
16474 mips_fix_adjustable (fixS *fixp)
16475 {
16476   if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
16477       || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
16478     return 0;
16479
16480   if (fixp->fx_addsy == NULL)
16481     return 1;
16482
16483   /* If symbol SYM is in a mergeable section, relocations of the form
16484      SYM + 0 can usually be made section-relative.  The mergeable data
16485      is then identified by the section offset rather than by the symbol.
16486
16487      However, if we're generating REL LO16 relocations, the offset is split
16488      between the LO16 and parterning high part relocation.  The linker will
16489      need to recalculate the complete offset in order to correctly identify
16490      the merge data.
16491
16492      The linker has traditionally not looked for the parterning high part
16493      relocation, and has thus allowed orphaned R_MIPS_LO16 relocations to be
16494      placed anywhere.  Rather than break backwards compatibility by changing
16495      this, it seems better not to force the issue, and instead keep the
16496      original symbol.  This will work with either linker behavior.  */
16497   if ((lo16_reloc_p (fixp->fx_r_type)
16498        || reloc_needs_lo_p (fixp->fx_r_type))
16499       && HAVE_IN_PLACE_ADDENDS
16500       && (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
16501     return 0;
16502
16503   /* There is no place to store an in-place offset for JALR relocations.
16504      Likewise an in-range offset of limited PC-relative relocations may
16505      overflow the in-place relocatable field if recalculated against the
16506      start address of the symbol's containing section.  */
16507   if (HAVE_IN_PLACE_ADDENDS
16508       && (limited_pcrel_reloc_p (fixp->fx_r_type)
16509           || jalr_reloc_p (fixp->fx_r_type)))
16510     return 0;
16511
16512   /* R_MIPS16_26 relocations against non-MIPS16 functions might resolve
16513      to a floating-point stub.  The same is true for non-R_MIPS16_26
16514      relocations against MIPS16 functions; in this case, the stub becomes
16515      the function's canonical address.
16516
16517      Floating-point stubs are stored in unique .mips16.call.* or
16518      .mips16.fn.* sections.  If a stub T for function F is in section S,
16519      the first relocation in section S must be against F; this is how the
16520      linker determines the target function.  All relocations that might
16521      resolve to T must also be against F.  We therefore have the following
16522      restrictions, which are given in an intentionally-redundant way:
16523
16524        1. We cannot reduce R_MIPS16_26 relocations against non-MIPS16
16525           symbols.
16526
16527        2. We cannot reduce a stub's relocations against non-MIPS16 symbols
16528           if that stub might be used.
16529
16530        3. We cannot reduce non-R_MIPS16_26 relocations against MIPS16
16531           symbols.
16532
16533        4. We cannot reduce a stub's relocations against MIPS16 symbols if
16534           that stub might be used.
16535
16536      There is a further restriction:
16537
16538        5. We cannot reduce jump relocations (R_MIPS_26, R_MIPS16_26 or
16539           R_MICROMIPS_26_S1) against MIPS16 or microMIPS symbols on
16540           targets with in-place addends; the relocation field cannot
16541           encode the low bit.
16542
16543      For simplicity, we deal with (3)-(4) by not reducing _any_ relocation
16544      against a MIPS16 symbol.  We deal with (5) by by not reducing any
16545      such relocations on REL targets.
16546
16547      We deal with (1)-(2) by saying that, if there's a R_MIPS16_26
16548      relocation against some symbol R, no relocation against R may be
16549      reduced.  (Note that this deals with (2) as well as (1) because
16550      relocations against global symbols will never be reduced on ELF
16551      targets.)  This approach is a little simpler than trying to detect
16552      stub sections, and gives the "all or nothing" per-symbol consistency
16553      that we have for MIPS16 symbols.  */
16554   if (fixp->fx_subsy == NULL
16555       && (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy))
16556           || *symbol_get_tc (fixp->fx_addsy)
16557           || (HAVE_IN_PLACE_ADDENDS
16558               && ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy))
16559               && jmp_reloc_p (fixp->fx_r_type))))
16560     return 0;
16561
16562   return 1;
16563 }
16564
16565 /* Translate internal representation of relocation info to BFD target
16566    format.  */
16567
16568 arelent **
16569 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
16570 {
16571   static arelent *retval[4];
16572   arelent *reloc;
16573   bfd_reloc_code_real_type code;
16574
16575   memset (retval, 0, sizeof(retval));
16576   reloc = retval[0] = (arelent *) xcalloc (1, sizeof (arelent));
16577   reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
16578   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
16579   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
16580
16581   if (fixp->fx_pcrel)
16582     {
16583       gas_assert (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2
16584                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_7_PCREL_S1
16585                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_10_PCREL_S1
16586                   || fixp->fx_r_type == BFD_RELOC_MICROMIPS_16_PCREL_S1
16587                   || fixp->fx_r_type == BFD_RELOC_32_PCREL);
16588
16589       /* At this point, fx_addnumber is "symbol offset - pcrel address".
16590          Relocations want only the symbol offset.  */
16591       reloc->addend = fixp->fx_addnumber + reloc->address;
16592     }
16593   else
16594     reloc->addend = fixp->fx_addnumber;
16595
16596   /* Since the old MIPS ELF ABI uses Rel instead of Rela, encode the vtable
16597      entry to be used in the relocation's section offset.  */
16598   if (! HAVE_NEWABI && fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
16599     {
16600       reloc->address = reloc->addend;
16601       reloc->addend = 0;
16602     }
16603
16604   code = fixp->fx_r_type;
16605
16606   reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
16607   if (reloc->howto == NULL)
16608     {
16609       as_bad_where (fixp->fx_file, fixp->fx_line,
16610                     _("Can not represent %s relocation in this object file format"),
16611                     bfd_get_reloc_code_name (code));
16612       retval[0] = NULL;
16613     }
16614
16615   return retval;
16616 }
16617
16618 /* Relax a machine dependent frag.  This returns the amount by which
16619    the current size of the frag should change.  */
16620
16621 int
16622 mips_relax_frag (asection *sec, fragS *fragp, long stretch)
16623 {
16624   if (RELAX_BRANCH_P (fragp->fr_subtype))
16625     {
16626       offsetT old_var = fragp->fr_var;
16627
16628       fragp->fr_var = relaxed_branch_length (fragp, sec, TRUE);
16629
16630       return fragp->fr_var - old_var;
16631     }
16632
16633   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
16634     {
16635       offsetT old_var = fragp->fr_var;
16636       offsetT new_var = 4;
16637
16638       if (RELAX_MICROMIPS_TYPE (fragp->fr_subtype) != 0)
16639         new_var = relaxed_micromips_16bit_branch_length (fragp, sec, TRUE);
16640       if (new_var == 4 && RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype))
16641         new_var = relaxed_micromips_32bit_branch_length (fragp, sec, TRUE);
16642       fragp->fr_var = new_var;
16643
16644       return new_var - old_var;
16645     }
16646
16647   if (! RELAX_MIPS16_P (fragp->fr_subtype))
16648     return 0;
16649
16650   if (mips16_extended_frag (fragp, NULL, stretch))
16651     {
16652       if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16653         return 0;
16654       fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
16655       return 2;
16656     }
16657   else
16658     {
16659       if (! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
16660         return 0;
16661       fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
16662       return -2;
16663     }
16664
16665   return 0;
16666 }
16667
16668 /* Convert a machine dependent frag.  */
16669
16670 void
16671 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
16672 {
16673   if (RELAX_BRANCH_P (fragp->fr_subtype))
16674     {
16675       char *buf;
16676       unsigned long insn;
16677       expressionS exp;
16678       fixS *fixp;
16679
16680       buf = fragp->fr_literal + fragp->fr_fix;
16681       insn = read_insn (buf);
16682
16683       if (!RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
16684         {
16685           /* We generate a fixup instead of applying it right now
16686              because, if there are linker relaxations, we're going to
16687              need the relocations.  */
16688           exp.X_op = O_symbol;
16689           exp.X_add_symbol = fragp->fr_symbol;
16690           exp.X_add_number = fragp->fr_offset;
16691
16692           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
16693                               BFD_RELOC_16_PCREL_S2);
16694           fixp->fx_file = fragp->fr_file;
16695           fixp->fx_line = fragp->fr_line;
16696
16697           buf = write_insn (buf, insn);
16698         }
16699       else
16700         {
16701           int i;
16702
16703           as_warn_where (fragp->fr_file, fragp->fr_line,
16704                          _("Relaxed out-of-range branch into a jump"));
16705
16706           if (RELAX_BRANCH_UNCOND (fragp->fr_subtype))
16707             goto uncond;
16708
16709           if (!RELAX_BRANCH_LIKELY (fragp->fr_subtype))
16710             {
16711               /* Reverse the branch.  */
16712               switch ((insn >> 28) & 0xf)
16713                 {
16714                 case 4:
16715                   /* bc[0-3][tf]l? instructions can have the condition
16716                      reversed by tweaking a single TF bit, and their
16717                      opcodes all have 0x4???????.  */
16718                   gas_assert ((insn & 0xf3e00000) == 0x41000000);
16719                   insn ^= 0x00010000;
16720                   break;
16721
16722                 case 0:
16723                   /* bltz       0x04000000      bgez    0x04010000
16724                      bltzal     0x04100000      bgezal  0x04110000  */
16725                   gas_assert ((insn & 0xfc0e0000) == 0x04000000);
16726                   insn ^= 0x00010000;
16727                   break;
16728
16729                 case 1:
16730                   /* beq        0x10000000      bne     0x14000000
16731                      blez       0x18000000      bgtz    0x1c000000  */
16732                   insn ^= 0x04000000;
16733                   break;
16734
16735                 default:
16736                   abort ();
16737                 }
16738             }
16739
16740           if (RELAX_BRANCH_LINK (fragp->fr_subtype))
16741             {
16742               /* Clear the and-link bit.  */
16743               gas_assert ((insn & 0xfc1c0000) == 0x04100000);
16744
16745               /* bltzal         0x04100000      bgezal  0x04110000
16746                  bltzall        0x04120000      bgezall 0x04130000  */
16747               insn &= ~0x00100000;
16748             }
16749
16750           /* Branch over the branch (if the branch was likely) or the
16751              full jump (not likely case).  Compute the offset from the
16752              current instruction to branch to.  */
16753           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
16754             i = 16;
16755           else
16756             {
16757               /* How many bytes in instructions we've already emitted?  */
16758               i = buf - fragp->fr_literal - fragp->fr_fix;
16759               /* How many bytes in instructions from here to the end?  */
16760               i = fragp->fr_var - i;
16761             }
16762           /* Convert to instruction count.  */
16763           i >>= 2;
16764           /* Branch counts from the next instruction.  */
16765           i--;
16766           insn |= i;
16767           /* Branch over the jump.  */
16768           buf = write_insn (buf, insn);
16769
16770           /* nop */
16771           buf = write_insn (buf, 0);
16772
16773           if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
16774             {
16775               /* beql $0, $0, 2f */
16776               insn = 0x50000000;
16777               /* Compute the PC offset from the current instruction to
16778                  the end of the variable frag.  */
16779               /* How many bytes in instructions we've already emitted?  */
16780               i = buf - fragp->fr_literal - fragp->fr_fix;
16781               /* How many bytes in instructions from here to the end?  */
16782               i = fragp->fr_var - i;
16783               /* Convert to instruction count.  */
16784               i >>= 2;
16785               /* Don't decrement i, because we want to branch over the
16786                  delay slot.  */
16787               insn |= i;
16788
16789               buf = write_insn (buf, insn);
16790               buf = write_insn (buf, 0);
16791             }
16792
16793         uncond:
16794           if (mips_pic == NO_PIC)
16795             {
16796               /* j or jal.  */
16797               insn = (RELAX_BRANCH_LINK (fragp->fr_subtype)
16798                       ? 0x0c000000 : 0x08000000);
16799               exp.X_op = O_symbol;
16800               exp.X_add_symbol = fragp->fr_symbol;
16801               exp.X_add_number = fragp->fr_offset;
16802
16803               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
16804                                   FALSE, BFD_RELOC_MIPS_JMP);
16805               fixp->fx_file = fragp->fr_file;
16806               fixp->fx_line = fragp->fr_line;
16807
16808               buf = write_insn (buf, insn);
16809             }
16810           else
16811             {
16812               unsigned long at = RELAX_BRANCH_AT (fragp->fr_subtype);
16813
16814               /* lw/ld $at, <sym>($gp)  R_MIPS_GOT16 */
16815               insn = HAVE_64BIT_ADDRESSES ? 0xdf800000 : 0x8f800000;
16816               insn |= at << OP_SH_RT;
16817               exp.X_op = O_symbol;
16818               exp.X_add_symbol = fragp->fr_symbol;
16819               exp.X_add_number = fragp->fr_offset;
16820
16821               if (fragp->fr_offset)
16822                 {
16823                   exp.X_add_symbol = make_expr_symbol (&exp);
16824                   exp.X_add_number = 0;
16825                 }
16826
16827               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
16828                                   FALSE, BFD_RELOC_MIPS_GOT16);
16829               fixp->fx_file = fragp->fr_file;
16830               fixp->fx_line = fragp->fr_line;
16831
16832               buf = write_insn (buf, insn);
16833
16834               if (mips_opts.isa == ISA_MIPS1)
16835                 /* nop */
16836                 buf = write_insn (buf, 0);
16837
16838               /* d/addiu $at, $at, <sym>  R_MIPS_LO16 */
16839               insn = HAVE_64BIT_ADDRESSES ? 0x64000000 : 0x24000000;
16840               insn |= at << OP_SH_RS | at << OP_SH_RT;
16841
16842               fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp,
16843                                   FALSE, BFD_RELOC_LO16);
16844               fixp->fx_file = fragp->fr_file;
16845               fixp->fx_line = fragp->fr_line;
16846
16847               buf = write_insn (buf, insn);
16848
16849               /* j(al)r $at.  */
16850               if (RELAX_BRANCH_LINK (fragp->fr_subtype))
16851                 insn = 0x0000f809;
16852               else
16853                 insn = 0x00000008;
16854               insn |= at << OP_SH_RS;
16855
16856               buf = write_insn (buf, insn);
16857             }
16858         }
16859
16860       fragp->fr_fix += fragp->fr_var;
16861       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
16862       return;
16863     }
16864
16865   /* Relax microMIPS branches.  */
16866   if (RELAX_MICROMIPS_P (fragp->fr_subtype))
16867     {
16868       char *buf = fragp->fr_literal + fragp->fr_fix;
16869       bfd_boolean compact = RELAX_MICROMIPS_COMPACT (fragp->fr_subtype);
16870       bfd_boolean al = RELAX_MICROMIPS_LINK (fragp->fr_subtype);
16871       int type = RELAX_MICROMIPS_TYPE (fragp->fr_subtype);
16872       bfd_boolean short_ds;
16873       unsigned long insn;
16874       expressionS exp;
16875       fixS *fixp;
16876
16877       exp.X_op = O_symbol;
16878       exp.X_add_symbol = fragp->fr_symbol;
16879       exp.X_add_number = fragp->fr_offset;
16880
16881       fragp->fr_fix += fragp->fr_var;
16882
16883       /* Handle 16-bit branches that fit or are forced to fit.  */
16884       if (type != 0 && !RELAX_MICROMIPS_TOOFAR16 (fragp->fr_subtype))
16885         {
16886           /* We generate a fixup instead of applying it right now,
16887              because if there is linker relaxation, we're going to
16888              need the relocations.  */
16889           if (type == 'D')
16890             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
16891                                 BFD_RELOC_MICROMIPS_10_PCREL_S1);
16892           else if (type == 'E')
16893             fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, TRUE,
16894                                 BFD_RELOC_MICROMIPS_7_PCREL_S1);
16895           else
16896             abort ();
16897
16898           fixp->fx_file = fragp->fr_file;
16899           fixp->fx_line = fragp->fr_line;
16900
16901           /* These relocations can have an addend that won't fit in
16902              2 octets.  */
16903           fixp->fx_no_overflow = 1;
16904
16905           return;
16906         }
16907
16908       /* Handle 32-bit branches that fit or are forced to fit.  */
16909       if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
16910           || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
16911         {
16912           /* We generate a fixup instead of applying it right now,
16913              because if there is linker relaxation, we're going to
16914              need the relocations.  */
16915           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE,
16916                               BFD_RELOC_MICROMIPS_16_PCREL_S1);
16917           fixp->fx_file = fragp->fr_file;
16918           fixp->fx_line = fragp->fr_line;
16919
16920           if (type == 0)
16921             return;
16922         }
16923
16924       /* Relax 16-bit branches to 32-bit branches.  */
16925       if (type != 0)
16926         {
16927           insn = read_compressed_insn (buf, 2);
16928
16929           if ((insn & 0xfc00) == 0xcc00)                /* b16  */
16930             insn = 0x94000000;                          /* beq  */
16931           else if ((insn & 0xdc00) == 0x8c00)           /* beqz16/bnez16  */
16932             {
16933               unsigned long regno;
16934
16935               regno = (insn >> MICROMIPSOP_SH_MD) & MICROMIPSOP_MASK_MD;
16936               regno = micromips_to_32_reg_d_map [regno];
16937               insn = ((insn & 0x2000) << 16) | 0x94000000;      /* beq/bne  */
16938               insn |= regno << MICROMIPSOP_SH_RS;
16939             }
16940           else
16941             abort ();
16942
16943           /* Nothing else to do, just write it out.  */
16944           if (!RELAX_MICROMIPS_RELAX32 (fragp->fr_subtype)
16945               || !RELAX_MICROMIPS_TOOFAR32 (fragp->fr_subtype))
16946             {
16947               buf = write_compressed_insn (buf, insn, 4);
16948               gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
16949               return;
16950             }
16951         }
16952       else
16953         insn = read_compressed_insn (buf, 4);
16954
16955       /* Relax 32-bit branches to a sequence of instructions.  */
16956       as_warn_where (fragp->fr_file, fragp->fr_line,
16957                      _("Relaxed out-of-range branch into a jump"));
16958
16959       /* Set the short-delay-slot bit.  */
16960       short_ds = al && (insn & 0x02000000) != 0;
16961
16962       if (!RELAX_MICROMIPS_UNCOND (fragp->fr_subtype))
16963         {
16964           symbolS *l;
16965
16966           /* Reverse the branch.  */
16967           if ((insn & 0xfc000000) == 0x94000000                 /* beq  */
16968               || (insn & 0xfc000000) == 0xb4000000)             /* bne  */
16969             insn ^= 0x20000000;
16970           else if ((insn & 0xffe00000) == 0x40000000            /* bltz  */
16971                    || (insn & 0xffe00000) == 0x40400000         /* bgez  */
16972                    || (insn & 0xffe00000) == 0x40800000         /* blez  */
16973                    || (insn & 0xffe00000) == 0x40c00000         /* bgtz  */
16974                    || (insn & 0xffe00000) == 0x40a00000         /* bnezc  */
16975                    || (insn & 0xffe00000) == 0x40e00000         /* beqzc  */
16976                    || (insn & 0xffe00000) == 0x40200000         /* bltzal  */
16977                    || (insn & 0xffe00000) == 0x40600000         /* bgezal  */
16978                    || (insn & 0xffe00000) == 0x42200000         /* bltzals  */
16979                    || (insn & 0xffe00000) == 0x42600000)        /* bgezals  */
16980             insn ^= 0x00400000;
16981           else if ((insn & 0xffe30000) == 0x43800000            /* bc1f  */
16982                    || (insn & 0xffe30000) == 0x43a00000         /* bc1t  */
16983                    || (insn & 0xffe30000) == 0x42800000         /* bc2f  */
16984                    || (insn & 0xffe30000) == 0x42a00000)        /* bc2t  */
16985             insn ^= 0x00200000;
16986           else
16987             abort ();
16988
16989           if (al)
16990             {
16991               /* Clear the and-link and short-delay-slot bits.  */
16992               gas_assert ((insn & 0xfda00000) == 0x40200000);
16993
16994               /* bltzal  0x40200000     bgezal  0x40600000  */
16995               /* bltzals 0x42200000     bgezals 0x42600000  */
16996               insn &= ~0x02200000;
16997             }
16998
16999           /* Make a label at the end for use with the branch.  */
17000           l = symbol_new (micromips_label_name (), asec, fragp->fr_fix, fragp);
17001           micromips_label_inc ();
17002           S_SET_OTHER (l, ELF_ST_SET_MICROMIPS (S_GET_OTHER (l)));
17003
17004           /* Refer to it.  */
17005           fixp = fix_new (fragp, buf - fragp->fr_literal, 4, l, 0, TRUE,
17006                           BFD_RELOC_MICROMIPS_16_PCREL_S1);
17007           fixp->fx_file = fragp->fr_file;
17008           fixp->fx_line = fragp->fr_line;
17009
17010           /* Branch over the jump.  */
17011           buf = write_compressed_insn (buf, insn, 4);
17012           if (!compact)
17013             /* nop */
17014             buf = write_compressed_insn (buf, 0x0c00, 2);
17015         }
17016
17017       if (mips_pic == NO_PIC)
17018         {
17019           unsigned long jal = short_ds ? 0x74000000 : 0xf4000000; /* jal/s  */
17020
17021           /* j/jal/jals <sym>  R_MICROMIPS_26_S1  */
17022           insn = al ? jal : 0xd4000000;
17023
17024           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17025                               BFD_RELOC_MICROMIPS_JMP);
17026           fixp->fx_file = fragp->fr_file;
17027           fixp->fx_line = fragp->fr_line;
17028
17029           buf = write_compressed_insn (buf, insn, 4);
17030           if (compact)
17031             /* nop */
17032             buf = write_compressed_insn (buf, 0x0c00, 2);
17033         }
17034       else
17035         {
17036           unsigned long at = RELAX_MICROMIPS_AT (fragp->fr_subtype);
17037           unsigned long jalr = short_ds ? 0x45e0 : 0x45c0;      /* jalr/s  */
17038           unsigned long jr = compact ? 0x45a0 : 0x4580;         /* jr/c  */
17039
17040           /* lw/ld $at, <sym>($gp)  R_MICROMIPS_GOT16  */
17041           insn = HAVE_64BIT_ADDRESSES ? 0xdc1c0000 : 0xfc1c0000;
17042           insn |= at << MICROMIPSOP_SH_RT;
17043
17044           if (exp.X_add_number)
17045             {
17046               exp.X_add_symbol = make_expr_symbol (&exp);
17047               exp.X_add_number = 0;
17048             }
17049
17050           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17051                               BFD_RELOC_MICROMIPS_GOT16);
17052           fixp->fx_file = fragp->fr_file;
17053           fixp->fx_line = fragp->fr_line;
17054
17055           buf = write_compressed_insn (buf, insn, 4);
17056
17057           /* d/addiu $at, $at, <sym>  R_MICROMIPS_LO16  */
17058           insn = HAVE_64BIT_ADDRESSES ? 0x5c000000 : 0x30000000;
17059           insn |= at << MICROMIPSOP_SH_RT | at << MICROMIPSOP_SH_RS;
17060
17061           fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, FALSE,
17062                               BFD_RELOC_MICROMIPS_LO16);
17063           fixp->fx_file = fragp->fr_file;
17064           fixp->fx_line = fragp->fr_line;
17065
17066           buf = write_compressed_insn (buf, insn, 4);
17067
17068           /* jr/jrc/jalr/jalrs $at  */
17069           insn = al ? jalr : jr;
17070           insn |= at << MICROMIPSOP_SH_MJ;
17071
17072           buf = write_compressed_insn (buf, insn, 2);
17073         }
17074
17075       gas_assert (buf == fragp->fr_literal + fragp->fr_fix);
17076       return;
17077     }
17078
17079   if (RELAX_MIPS16_P (fragp->fr_subtype))
17080     {
17081       int type;
17082       const struct mips_int_operand *operand;
17083       offsetT val;
17084       char *buf;
17085       unsigned int user_length, length;
17086       unsigned long insn;
17087       bfd_boolean ext;
17088
17089       type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
17090       operand = mips16_immed_operand (type, FALSE);
17091
17092       ext = RELAX_MIPS16_EXTENDED (fragp->fr_subtype);
17093       val = resolve_symbol_value (fragp->fr_symbol);
17094       if (operand->root.type == OP_PCREL)
17095         {
17096           const struct mips_pcrel_operand *pcrel_op;
17097           addressT addr;
17098
17099           pcrel_op = (const struct mips_pcrel_operand *) operand;
17100           addr = fragp->fr_address + fragp->fr_fix;
17101
17102           /* The rules for the base address of a PC relative reloc are
17103              complicated; see mips16_extended_frag.  */
17104           if (pcrel_op->include_isa_bit)
17105             {
17106               addr += 2;
17107               if (ext)
17108                 addr += 2;
17109               /* Ignore the low bit in the target, since it will be
17110                  set for a text label.  */
17111               val &= -2;
17112             }
17113           else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
17114             addr -= 4;
17115           else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
17116             addr -= 2;
17117
17118           addr &= -(1 << pcrel_op->align_log2);
17119           val -= addr;
17120
17121           /* Make sure the section winds up with the alignment we have
17122              assumed.  */
17123           if (operand->shift > 0)
17124             record_alignment (asec, operand->shift);
17125         }
17126
17127       if (ext
17128           && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
17129               || RELAX_MIPS16_DSLOT (fragp->fr_subtype)))
17130         as_warn_where (fragp->fr_file, fragp->fr_line,
17131                        _("extended instruction in delay slot"));
17132
17133       buf = fragp->fr_literal + fragp->fr_fix;
17134
17135       insn = read_compressed_insn (buf, 2);
17136       if (ext)
17137         insn |= MIPS16_EXTEND;
17138
17139       if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
17140         user_length = 4;
17141       else if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
17142         user_length = 2;
17143       else
17144         user_length = 0;
17145
17146       mips16_immed (fragp->fr_file, fragp->fr_line, type,
17147                     BFD_RELOC_UNUSED, val, user_length, &insn);
17148
17149       length = (ext ? 4 : 2);
17150       gas_assert (mips16_opcode_length (insn) == length);
17151       write_compressed_insn (buf, insn, length);
17152       fragp->fr_fix += length;
17153     }
17154   else
17155     {
17156       relax_substateT subtype = fragp->fr_subtype;
17157       bfd_boolean second_longer = (subtype & RELAX_SECOND_LONGER) != 0;
17158       bfd_boolean use_second = (subtype & RELAX_USE_SECOND) != 0;
17159       int first, second;
17160       fixS *fixp;
17161
17162       first = RELAX_FIRST (subtype);
17163       second = RELAX_SECOND (subtype);
17164       fixp = (fixS *) fragp->fr_opcode;
17165
17166       /* If the delay slot chosen does not match the size of the instruction,
17167          then emit a warning.  */
17168       if ((!use_second && (subtype & RELAX_DELAY_SLOT_SIZE_FIRST) != 0)
17169            || (use_second && (subtype & RELAX_DELAY_SLOT_SIZE_SECOND) != 0))
17170         {
17171           relax_substateT s;
17172           const char *msg;
17173
17174           s = subtype & (RELAX_DELAY_SLOT_16BIT
17175                          | RELAX_DELAY_SLOT_SIZE_FIRST
17176                          | RELAX_DELAY_SLOT_SIZE_SECOND);
17177           msg = macro_warning (s);
17178           if (msg != NULL)
17179             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17180           subtype &= ~s;
17181         }
17182
17183       /* Possibly emit a warning if we've chosen the longer option.  */
17184       if (use_second == second_longer)
17185         {
17186           relax_substateT s;
17187           const char *msg;
17188
17189           s = (subtype
17190                & (RELAX_SECOND_LONGER | RELAX_NOMACRO | RELAX_DELAY_SLOT));
17191           msg = macro_warning (s);
17192           if (msg != NULL)
17193             as_warn_where (fragp->fr_file, fragp->fr_line, "%s", msg);
17194           subtype &= ~s;
17195         }
17196
17197       /* Go through all the fixups for the first sequence.  Disable them
17198          (by marking them as done) if we're going to use the second
17199          sequence instead.  */
17200       while (fixp
17201              && fixp->fx_frag == fragp
17202              && fixp->fx_where < fragp->fr_fix - second)
17203         {
17204           if (subtype & RELAX_USE_SECOND)
17205             fixp->fx_done = 1;
17206           fixp = fixp->fx_next;
17207         }
17208
17209       /* Go through the fixups for the second sequence.  Disable them if
17210          we're going to use the first sequence, otherwise adjust their
17211          addresses to account for the relaxation.  */
17212       while (fixp && fixp->fx_frag == fragp)
17213         {
17214           if (subtype & RELAX_USE_SECOND)
17215             fixp->fx_where -= first;
17216           else
17217             fixp->fx_done = 1;
17218           fixp = fixp->fx_next;
17219         }
17220
17221       /* Now modify the frag contents.  */
17222       if (subtype & RELAX_USE_SECOND)
17223         {
17224           char *start;
17225
17226           start = fragp->fr_literal + fragp->fr_fix - first - second;
17227           memmove (start, start + first, second);
17228           fragp->fr_fix -= first;
17229         }
17230       else
17231         fragp->fr_fix -= second;
17232     }
17233 }
17234
17235 /* This function is called after the relocs have been generated.
17236    We've been storing mips16 text labels as odd.  Here we convert them
17237    back to even for the convenience of the debugger.  */
17238
17239 void
17240 mips_frob_file_after_relocs (void)
17241 {
17242   asymbol **syms;
17243   unsigned int count, i;
17244
17245   syms = bfd_get_outsymbols (stdoutput);
17246   count = bfd_get_symcount (stdoutput);
17247   for (i = 0; i < count; i++, syms++)
17248     if (ELF_ST_IS_COMPRESSED (elf_symbol (*syms)->internal_elf_sym.st_other)
17249         && ((*syms)->value & 1) != 0)
17250       {
17251         (*syms)->value &= ~1;
17252         /* If the symbol has an odd size, it was probably computed
17253            incorrectly, so adjust that as well.  */
17254         if ((elf_symbol (*syms)->internal_elf_sym.st_size & 1) != 0)
17255           ++elf_symbol (*syms)->internal_elf_sym.st_size;
17256       }
17257 }
17258
17259 /* This function is called whenever a label is defined, including fake
17260    labels instantiated off the dot special symbol.  It is used when
17261    handling branch delays; if a branch has a label, we assume we cannot
17262    move it.  This also bumps the value of the symbol by 1 in compressed
17263    code.  */
17264
17265 static void
17266 mips_record_label (symbolS *sym)
17267 {
17268   segment_info_type *si = seg_info (now_seg);
17269   struct insn_label_list *l;
17270
17271   if (free_insn_labels == NULL)
17272     l = (struct insn_label_list *) xmalloc (sizeof *l);
17273   else
17274     {
17275       l = free_insn_labels;
17276       free_insn_labels = l->next;
17277     }
17278
17279   l->label = sym;
17280   l->next = si->label_list;
17281   si->label_list = l;
17282 }
17283
17284 /* This function is called as tc_frob_label() whenever a label is defined
17285    and adds a DWARF-2 record we only want for true labels.  */
17286
17287 void
17288 mips_define_label (symbolS *sym)
17289 {
17290   mips_record_label (sym);
17291   dwarf2_emit_label (sym);
17292 }
17293
17294 /* This function is called by tc_new_dot_label whenever a new dot symbol
17295    is defined.  */
17296
17297 void
17298 mips_add_dot_label (symbolS *sym)
17299 {
17300   mips_record_label (sym);
17301   if (mips_assembling_insn && HAVE_CODE_COMPRESSION)
17302     mips_compressed_mark_label (sym);
17303 }
17304 \f
17305 /* Some special processing for a MIPS ELF file.  */
17306
17307 void
17308 mips_elf_final_processing (void)
17309 {
17310   /* Write out the register information.  */
17311   if (mips_abi != N64_ABI)
17312     {
17313       Elf32_RegInfo s;
17314
17315       s.ri_gprmask = mips_gprmask;
17316       s.ri_cprmask[0] = mips_cprmask[0];
17317       s.ri_cprmask[1] = mips_cprmask[1];
17318       s.ri_cprmask[2] = mips_cprmask[2];
17319       s.ri_cprmask[3] = mips_cprmask[3];
17320       /* The gp_value field is set by the MIPS ELF backend.  */
17321
17322       bfd_mips_elf32_swap_reginfo_out (stdoutput, &s,
17323                                        ((Elf32_External_RegInfo *)
17324                                         mips_regmask_frag));
17325     }
17326   else
17327     {
17328       Elf64_Internal_RegInfo s;
17329
17330       s.ri_gprmask = mips_gprmask;
17331       s.ri_pad = 0;
17332       s.ri_cprmask[0] = mips_cprmask[0];
17333       s.ri_cprmask[1] = mips_cprmask[1];
17334       s.ri_cprmask[2] = mips_cprmask[2];
17335       s.ri_cprmask[3] = mips_cprmask[3];
17336       /* The gp_value field is set by the MIPS ELF backend.  */
17337
17338       bfd_mips_elf64_swap_reginfo_out (stdoutput, &s,
17339                                        ((Elf64_External_RegInfo *)
17340                                         mips_regmask_frag));
17341     }
17342
17343   /* Set the MIPS ELF flag bits.  FIXME: There should probably be some
17344      sort of BFD interface for this.  */
17345   if (mips_any_noreorder)
17346     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NOREORDER;
17347   if (mips_pic != NO_PIC)
17348     {
17349       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_PIC;
17350       elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
17351     }
17352   if (mips_abicalls)
17353     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
17354
17355   /* Set MIPS ELF flags for ASEs.  Note that not all ASEs have flags
17356      defined at present; this might need to change in future.  */
17357   if (file_ase_mips16)
17358     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_M16;
17359   if (file_ase_micromips)
17360     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MICROMIPS;
17361   if (file_ase & ASE_MDMX)
17362     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MDMX;
17363
17364   /* Set the MIPS ELF ABI flags.  */
17365   if (mips_abi == O32_ABI && USE_E_MIPS_ABI_O32)
17366     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O32;
17367   else if (mips_abi == O64_ABI)
17368     elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O64;
17369   else if (mips_abi == EABI_ABI)
17370     {
17371       if (!file_mips_gp32)
17372         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI64;
17373       else
17374         elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI32;
17375     }
17376   else if (mips_abi == N32_ABI)
17377     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ABI2;
17378
17379   /* Nothing to do for N64_ABI.  */
17380
17381   if (mips_32bitmode)
17382     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_32BITMODE;
17383
17384   if (mips_flag_nan2008)
17385     elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NAN2008;
17386
17387 #if 0 /* XXX FIXME */
17388   /* 32 bit code with 64 bit FP registers.  */
17389   if (!file_mips_fp32 && ABI_NEEDS_32BIT_REGS (mips_abi))
17390     elf_elfheader (stdoutput)->e_flags |= ???;
17391 #endif
17392 }
17393 \f
17394 typedef struct proc {
17395   symbolS *func_sym;
17396   symbolS *func_end_sym;
17397   unsigned long reg_mask;
17398   unsigned long reg_offset;
17399   unsigned long fpreg_mask;
17400   unsigned long fpreg_offset;
17401   unsigned long frame_offset;
17402   unsigned long frame_reg;
17403   unsigned long pc_reg;
17404 } procS;
17405
17406 static procS cur_proc;
17407 static procS *cur_proc_ptr;
17408 static int numprocs;
17409
17410 /* Implement NOP_OPCODE.  We encode a MIPS16 nop as "1", a microMIPS nop
17411    as "2", and a normal nop as "0".  */
17412
17413 #define NOP_OPCODE_MIPS         0
17414 #define NOP_OPCODE_MIPS16       1
17415 #define NOP_OPCODE_MICROMIPS    2
17416
17417 char
17418 mips_nop_opcode (void)
17419 {
17420   if (seg_info (now_seg)->tc_segment_info_data.micromips)
17421     return NOP_OPCODE_MICROMIPS;
17422   else if (seg_info (now_seg)->tc_segment_info_data.mips16)
17423     return NOP_OPCODE_MIPS16;
17424   else
17425     return NOP_OPCODE_MIPS;
17426 }
17427
17428 /* Fill in an rs_align_code fragment.  Unlike elsewhere we want to use
17429    32-bit microMIPS NOPs here (if applicable).  */
17430
17431 void
17432 mips_handle_align (fragS *fragp)
17433 {
17434   char nop_opcode;
17435   char *p;
17436   int bytes, size, excess;
17437   valueT opcode;
17438
17439   if (fragp->fr_type != rs_align_code)
17440     return;
17441
17442   p = fragp->fr_literal + fragp->fr_fix;
17443   nop_opcode = *p;
17444   switch (nop_opcode)
17445     {
17446     case NOP_OPCODE_MICROMIPS:
17447       opcode = micromips_nop32_insn.insn_opcode;
17448       size = 4;
17449       break;
17450     case NOP_OPCODE_MIPS16:
17451       opcode = mips16_nop_insn.insn_opcode;
17452       size = 2;
17453       break;
17454     case NOP_OPCODE_MIPS:
17455     default:
17456       opcode = nop_insn.insn_opcode;
17457       size = 4;
17458       break;
17459     }
17460
17461   bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
17462   excess = bytes % size;
17463
17464   /* Handle the leading part if we're not inserting a whole number of
17465      instructions, and make it the end of the fixed part of the frag.
17466      Try to fit in a short microMIPS NOP if applicable and possible,
17467      and use zeroes otherwise.  */
17468   gas_assert (excess < 4);
17469   fragp->fr_fix += excess;
17470   switch (excess)
17471     {
17472     case 3:
17473       *p++ = '\0';
17474       /* Fall through.  */
17475     case 2:
17476       if (nop_opcode == NOP_OPCODE_MICROMIPS && !mips_opts.insn32)
17477         {
17478           p = write_compressed_insn (p, micromips_nop16_insn.insn_opcode, 2);
17479           break;
17480         }
17481       *p++ = '\0';
17482       /* Fall through.  */
17483     case 1:
17484       *p++ = '\0';
17485       /* Fall through.  */
17486     case 0:
17487       break;
17488     }
17489
17490   md_number_to_chars (p, opcode, size);
17491   fragp->fr_var = size;
17492 }
17493
17494 static void
17495 md_obj_begin (void)
17496 {
17497 }
17498
17499 static void
17500 md_obj_end (void)
17501 {
17502   /* Check for premature end, nesting errors, etc.  */
17503   if (cur_proc_ptr)
17504     as_warn (_("missing .end at end of assembly"));
17505 }
17506
17507 static long
17508 get_number (void)
17509 {
17510   int negative = 0;
17511   long val = 0;
17512
17513   if (*input_line_pointer == '-')
17514     {
17515       ++input_line_pointer;
17516       negative = 1;
17517     }
17518   if (!ISDIGIT (*input_line_pointer))
17519     as_bad (_("expected simple number"));
17520   if (input_line_pointer[0] == '0')
17521     {
17522       if (input_line_pointer[1] == 'x')
17523         {
17524           input_line_pointer += 2;
17525           while (ISXDIGIT (*input_line_pointer))
17526             {
17527               val <<= 4;
17528               val |= hex_value (*input_line_pointer++);
17529             }
17530           return negative ? -val : val;
17531         }
17532       else
17533         {
17534           ++input_line_pointer;
17535           while (ISDIGIT (*input_line_pointer))
17536             {
17537               val <<= 3;
17538               val |= *input_line_pointer++ - '0';
17539             }
17540           return negative ? -val : val;
17541         }
17542     }
17543   if (!ISDIGIT (*input_line_pointer))
17544     {
17545       printf (_(" *input_line_pointer == '%c' 0x%02x\n"),
17546               *input_line_pointer, *input_line_pointer);
17547       as_warn (_("invalid number"));
17548       return -1;
17549     }
17550   while (ISDIGIT (*input_line_pointer))
17551     {
17552       val *= 10;
17553       val += *input_line_pointer++ - '0';
17554     }
17555   return negative ? -val : val;
17556 }
17557
17558 /* The .file directive; just like the usual .file directive, but there
17559    is an initial number which is the ECOFF file index.  In the non-ECOFF
17560    case .file implies DWARF-2.  */
17561
17562 static void
17563 s_mips_file (int x ATTRIBUTE_UNUSED)
17564 {
17565   static int first_file_directive = 0;
17566
17567   if (ECOFF_DEBUGGING)
17568     {
17569       get_number ();
17570       s_app_file (0);
17571     }
17572   else
17573     {
17574       char *filename;
17575
17576       filename = dwarf2_directive_file (0);
17577
17578       /* Versions of GCC up to 3.1 start files with a ".file"
17579          directive even for stabs output.  Make sure that this
17580          ".file" is handled.  Note that you need a version of GCC
17581          after 3.1 in order to support DWARF-2 on MIPS.  */
17582       if (filename != NULL && ! first_file_directive)
17583         {
17584           (void) new_logical_line (filename, -1);
17585           s_app_file_string (filename, 0);
17586         }
17587       first_file_directive = 1;
17588     }
17589 }
17590
17591 /* The .loc directive, implying DWARF-2.  */
17592
17593 static void
17594 s_mips_loc (int x ATTRIBUTE_UNUSED)
17595 {
17596   if (!ECOFF_DEBUGGING)
17597     dwarf2_directive_loc (0);
17598 }
17599
17600 /* The .end directive.  */
17601
17602 static void
17603 s_mips_end (int x ATTRIBUTE_UNUSED)
17604 {
17605   symbolS *p;
17606
17607   /* Following functions need their own .frame and .cprestore directives.  */
17608   mips_frame_reg_valid = 0;
17609   mips_cprestore_valid = 0;
17610
17611   if (!is_end_of_line[(unsigned char) *input_line_pointer])
17612     {
17613       p = get_symbol ();
17614       demand_empty_rest_of_line ();
17615     }
17616   else
17617     p = NULL;
17618
17619   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
17620     as_warn (_(".end not in text section"));
17621
17622   if (!cur_proc_ptr)
17623     {
17624       as_warn (_(".end directive without a preceding .ent directive."));
17625       demand_empty_rest_of_line ();
17626       return;
17627     }
17628
17629   if (p != NULL)
17630     {
17631       gas_assert (S_GET_NAME (p));
17632       if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->func_sym)))
17633         as_warn (_(".end symbol does not match .ent symbol."));
17634
17635       if (debug_type == DEBUG_STABS)
17636         stabs_generate_asm_endfunc (S_GET_NAME (p),
17637                                     S_GET_NAME (p));
17638     }
17639   else
17640     as_warn (_(".end directive missing or unknown symbol"));
17641
17642   /* Create an expression to calculate the size of the function.  */
17643   if (p && cur_proc_ptr)
17644     {
17645       OBJ_SYMFIELD_TYPE *obj = symbol_get_obj (p);
17646       expressionS *exp = xmalloc (sizeof (expressionS));
17647
17648       obj->size = exp;
17649       exp->X_op = O_subtract;
17650       exp->X_add_symbol = symbol_temp_new_now ();
17651       exp->X_op_symbol = p;
17652       exp->X_add_number = 0;
17653
17654       cur_proc_ptr->func_end_sym = exp->X_add_symbol;
17655     }
17656
17657   /* Generate a .pdr section.  */
17658   if (!ECOFF_DEBUGGING && mips_flag_pdr)
17659     {
17660       segT saved_seg = now_seg;
17661       subsegT saved_subseg = now_subseg;
17662       expressionS exp;
17663       char *fragp;
17664
17665 #ifdef md_flush_pending_output
17666       md_flush_pending_output ();
17667 #endif
17668
17669       gas_assert (pdr_seg);
17670       subseg_set (pdr_seg, 0);
17671
17672       /* Write the symbol.  */
17673       exp.X_op = O_symbol;
17674       exp.X_add_symbol = p;
17675       exp.X_add_number = 0;
17676       emit_expr (&exp, 4);
17677
17678       fragp = frag_more (7 * 4);
17679
17680       md_number_to_chars (fragp, cur_proc_ptr->reg_mask, 4);
17681       md_number_to_chars (fragp + 4, cur_proc_ptr->reg_offset, 4);
17682       md_number_to_chars (fragp + 8, cur_proc_ptr->fpreg_mask, 4);
17683       md_number_to_chars (fragp + 12, cur_proc_ptr->fpreg_offset, 4);
17684       md_number_to_chars (fragp + 16, cur_proc_ptr->frame_offset, 4);
17685       md_number_to_chars (fragp + 20, cur_proc_ptr->frame_reg, 4);
17686       md_number_to_chars (fragp + 24, cur_proc_ptr->pc_reg, 4);
17687
17688       subseg_set (saved_seg, saved_subseg);
17689     }
17690
17691   cur_proc_ptr = NULL;
17692 }
17693
17694 /* The .aent and .ent directives.  */
17695
17696 static void
17697 s_mips_ent (int aent)
17698 {
17699   symbolS *symbolP;
17700
17701   symbolP = get_symbol ();
17702   if (*input_line_pointer == ',')
17703     ++input_line_pointer;
17704   SKIP_WHITESPACE ();
17705   if (ISDIGIT (*input_line_pointer)
17706       || *input_line_pointer == '-')
17707     get_number ();
17708
17709   if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
17710     as_warn (_(".ent or .aent not in text section."));
17711
17712   if (!aent && cur_proc_ptr)
17713     as_warn (_("missing .end"));
17714
17715   if (!aent)
17716     {
17717       /* This function needs its own .frame and .cprestore directives.  */
17718       mips_frame_reg_valid = 0;
17719       mips_cprestore_valid = 0;
17720
17721       cur_proc_ptr = &cur_proc;
17722       memset (cur_proc_ptr, '\0', sizeof (procS));
17723
17724       cur_proc_ptr->func_sym = symbolP;
17725
17726       ++numprocs;
17727
17728       if (debug_type == DEBUG_STABS)
17729         stabs_generate_asm_func (S_GET_NAME (symbolP),
17730                                  S_GET_NAME (symbolP));
17731     }
17732
17733   symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
17734
17735   demand_empty_rest_of_line ();
17736 }
17737
17738 /* The .frame directive. If the mdebug section is present (IRIX 5 native)
17739    then ecoff.c (ecoff_directive_frame) is used. For embedded targets,
17740    s_mips_frame is used so that we can set the PDR information correctly.
17741    We can't use the ecoff routines because they make reference to the ecoff
17742    symbol table (in the mdebug section).  */
17743
17744 static void
17745 s_mips_frame (int ignore ATTRIBUTE_UNUSED)
17746 {
17747   if (ECOFF_DEBUGGING)
17748     s_ignore (ignore);
17749   else
17750     {
17751       long val;
17752
17753       if (cur_proc_ptr == (procS *) NULL)
17754         {
17755           as_warn (_(".frame outside of .ent"));
17756           demand_empty_rest_of_line ();
17757           return;
17758         }
17759
17760       cur_proc_ptr->frame_reg = tc_get_register (1);
17761
17762       SKIP_WHITESPACE ();
17763       if (*input_line_pointer++ != ','
17764           || get_absolute_expression_and_terminator (&val) != ',')
17765         {
17766           as_warn (_("Bad .frame directive"));
17767           --input_line_pointer;
17768           demand_empty_rest_of_line ();
17769           return;
17770         }
17771
17772       cur_proc_ptr->frame_offset = val;
17773       cur_proc_ptr->pc_reg = tc_get_register (0);
17774
17775       demand_empty_rest_of_line ();
17776     }
17777 }
17778
17779 /* The .fmask and .mask directives. If the mdebug section is present
17780    (IRIX 5 native) then ecoff.c (ecoff_directive_mask) is used. For
17781    embedded targets, s_mips_mask is used so that we can set the PDR
17782    information correctly. We can't use the ecoff routines because they
17783    make reference to the ecoff symbol table (in the mdebug section).  */
17784
17785 static void
17786 s_mips_mask (int reg_type)
17787 {
17788   if (ECOFF_DEBUGGING)
17789     s_ignore (reg_type);
17790   else
17791     {
17792       long mask, off;
17793
17794       if (cur_proc_ptr == (procS *) NULL)
17795         {
17796           as_warn (_(".mask/.fmask outside of .ent"));
17797           demand_empty_rest_of_line ();
17798           return;
17799         }
17800
17801       if (get_absolute_expression_and_terminator (&mask) != ',')
17802         {
17803           as_warn (_("Bad .mask/.fmask directive"));
17804           --input_line_pointer;
17805           demand_empty_rest_of_line ();
17806           return;
17807         }
17808
17809       off = get_absolute_expression ();
17810
17811       if (reg_type == 'F')
17812         {
17813           cur_proc_ptr->fpreg_mask = mask;
17814           cur_proc_ptr->fpreg_offset = off;
17815         }
17816       else
17817         {
17818           cur_proc_ptr->reg_mask = mask;
17819           cur_proc_ptr->reg_offset = off;
17820         }
17821
17822       demand_empty_rest_of_line ();
17823     }
17824 }
17825
17826 /* A table describing all the processors gas knows about.  Names are
17827    matched in the order listed.
17828
17829    To ease comparison, please keep this table in the same order as
17830    gcc's mips_cpu_info_table[].  */
17831 static const struct mips_cpu_info mips_cpu_info_table[] =
17832 {
17833   /* Entries for generic ISAs */
17834   { "mips1",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS1,    CPU_R3000 },
17835   { "mips2",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS2,    CPU_R6000 },
17836   { "mips3",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS3,    CPU_R4000 },
17837   { "mips4",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS4,    CPU_R8000 },
17838   { "mips5",          MIPS_CPU_IS_ISA, 0,       ISA_MIPS5,    CPU_MIPS5 },
17839   { "mips32",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS32,   CPU_MIPS32 },
17840   { "mips32r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS32R2, CPU_MIPS32R2 },
17841   { "mips64",         MIPS_CPU_IS_ISA, 0,       ISA_MIPS64,   CPU_MIPS64 },
17842   { "mips64r2",       MIPS_CPU_IS_ISA, 0,       ISA_MIPS64R2, CPU_MIPS64R2 },
17843
17844   /* MIPS I */
17845   { "r3000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
17846   { "r2000",          0, 0,                     ISA_MIPS1,    CPU_R3000 },
17847   { "r3900",          0, 0,                     ISA_MIPS1,    CPU_R3900 },
17848
17849   /* MIPS II */
17850   { "r6000",          0, 0,                     ISA_MIPS2,    CPU_R6000 },
17851
17852   /* MIPS III */
17853   { "r4000",          0, 0,                     ISA_MIPS3,    CPU_R4000 },
17854   { "r4010",          0, 0,                     ISA_MIPS2,    CPU_R4010 },
17855   { "vr4100",         0, 0,                     ISA_MIPS3,    CPU_VR4100 },
17856   { "vr4111",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
17857   { "vr4120",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
17858   { "vr4130",         0, 0,                     ISA_MIPS3,    CPU_VR4120 },
17859   { "vr4181",         0, 0,                     ISA_MIPS3,    CPU_R4111 },
17860   { "vr4300",         0, 0,                     ISA_MIPS3,    CPU_R4300 },
17861   { "r4400",          0, 0,                     ISA_MIPS3,    CPU_R4400 },
17862   { "r4600",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
17863   { "orion",          0, 0,                     ISA_MIPS3,    CPU_R4600 },
17864   { "r4650",          0, 0,                     ISA_MIPS3,    CPU_R4650 },
17865   { "r5900",          0, 0,                     ISA_MIPS3,    CPU_R5900 },
17866   /* ST Microelectronics Loongson 2E and 2F cores */
17867   { "loongson2e",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2E },
17868   { "loongson2f",     0, 0,                     ISA_MIPS3,    CPU_LOONGSON_2F },
17869
17870   /* MIPS IV */
17871   { "r8000",          0, 0,                     ISA_MIPS4,    CPU_R8000 },
17872   { "r10000",         0, 0,                     ISA_MIPS4,    CPU_R10000 },
17873   { "r12000",         0, 0,                     ISA_MIPS4,    CPU_R12000 },
17874   { "r14000",         0, 0,                     ISA_MIPS4,    CPU_R14000 },
17875   { "r16000",         0, 0,                     ISA_MIPS4,    CPU_R16000 },
17876   { "vr5000",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
17877   { "vr5400",         0, 0,                     ISA_MIPS4,    CPU_VR5400 },
17878   { "vr5500",         0, 0,                     ISA_MIPS4,    CPU_VR5500 },
17879   { "rm5200",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
17880   { "rm5230",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
17881   { "rm5231",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
17882   { "rm5261",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
17883   { "rm5721",         0, 0,                     ISA_MIPS4,    CPU_R5000 },
17884   { "rm7000",         0, 0,                     ISA_MIPS4,    CPU_RM7000 },
17885   { "rm9000",         0, 0,                     ISA_MIPS4,    CPU_RM9000 },
17886
17887   /* MIPS 32 */
17888   { "4kc",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
17889   { "4km",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
17890   { "4kp",            0, 0,                     ISA_MIPS32,   CPU_MIPS32 },
17891   { "4ksc",           0, ASE_SMARTMIPS,         ISA_MIPS32,   CPU_MIPS32 },
17892
17893   /* MIPS 32 Release 2 */
17894   { "4kec",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17895   { "4kem",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17896   { "4kep",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17897   { "4ksd",           0, ASE_SMARTMIPS,         ISA_MIPS32R2, CPU_MIPS32R2 },
17898   { "m4k",            0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17899   { "m4kp",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17900   { "m14k",           0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
17901   { "m14kc",          0, ASE_MCU,               ISA_MIPS32R2, CPU_MIPS32R2 },
17902   { "m14ke",          0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
17903                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
17904   { "m14kec",         0, ASE_DSP | ASE_DSPR2 | ASE_MCU,
17905                                                 ISA_MIPS32R2, CPU_MIPS32R2 },
17906   { "24kc",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17907   { "24kf2_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17908   { "24kf",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17909   { "24kf1_1",        0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17910   /* Deprecated forms of the above.  */
17911   { "24kfx",          0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17912   { "24kx",           0, 0,                     ISA_MIPS32R2, CPU_MIPS32R2 },
17913   /* 24KE is a 24K with DSP ASE, other ASEs are optional.  */
17914   { "24kec",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
17915   { "24kef2_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
17916   { "24kef",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
17917   { "24kef1_1",       0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
17918   /* Deprecated forms of the above.  */
17919   { "24kefx",         0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
17920   { "24kex",          0, ASE_DSP,               ISA_MIPS32R2, CPU_MIPS32R2 },
17921   /* 34K is a 24K with DSP and MT ASE, other ASEs are optional.  */
17922   { "34kc",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17923   { "34kf2_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17924   { "34kf",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17925   { "34kf1_1",        0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17926   /* Deprecated forms of the above.  */
17927   { "34kfx",          0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17928   { "34kx",           0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17929   /* 34Kn is a 34kc without DSP.  */
17930   { "34kn",           0, ASE_MT,                ISA_MIPS32R2, CPU_MIPS32R2 },
17931   /* 74K with DSP and DSPR2 ASE, other ASEs are optional.  */
17932   { "74kc",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
17933   { "74kf2_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
17934   { "74kf",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
17935   { "74kf1_1",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
17936   { "74kf3_2",        0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
17937   /* Deprecated forms of the above.  */
17938   { "74kfx",          0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
17939   { "74kx",           0, ASE_DSP | ASE_DSPR2,   ISA_MIPS32R2, CPU_MIPS32R2 },
17940   /* 1004K cores are multiprocessor versions of the 34K.  */
17941   { "1004kc",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17942   { "1004kf2_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17943   { "1004kf",         0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17944   { "1004kf1_1",      0, ASE_DSP | ASE_MT,      ISA_MIPS32R2, CPU_MIPS32R2 },
17945
17946   /* MIPS 64 */
17947   { "5kc",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
17948   { "5kf",            0, 0,                     ISA_MIPS64,   CPU_MIPS64 },
17949   { "20kc",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
17950   { "25kf",           0, ASE_MIPS3D,            ISA_MIPS64,   CPU_MIPS64 },
17951
17952   /* Broadcom SB-1 CPU core */
17953   { "sb1",            0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
17954   /* Broadcom SB-1A CPU core */
17955   { "sb1a",           0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64,   CPU_SB1 },
17956   
17957   { "loongson3a",     0, 0,                     ISA_MIPS64,   CPU_LOONGSON_3A },
17958
17959   /* MIPS 64 Release 2 */
17960
17961   /* Cavium Networks Octeon CPU core */
17962   { "octeon",         0, 0,                     ISA_MIPS64R2, CPU_OCTEON },
17963   { "octeon+",        0, 0,                     ISA_MIPS64R2, CPU_OCTEONP },
17964   { "octeon2",        0, 0,                     ISA_MIPS64R2, CPU_OCTEON2 },
17965
17966   /* RMI Xlr */
17967   { "xlr",            0, 0,                     ISA_MIPS64,   CPU_XLR },
17968
17969   /* Broadcom XLP.
17970      XLP is mostly like XLR, with the prominent exception that it is
17971      MIPS64R2 rather than MIPS64.  */
17972   { "xlp",            0, 0,                     ISA_MIPS64R2, CPU_XLR },
17973
17974   /* End marker */
17975   { NULL, 0, 0, 0, 0 }
17976 };
17977
17978
17979 /* Return true if GIVEN is the same as CANONICAL, or if it is CANONICAL
17980    with a final "000" replaced by "k".  Ignore case.
17981
17982    Note: this function is shared between GCC and GAS.  */
17983
17984 static bfd_boolean
17985 mips_strict_matching_cpu_name_p (const char *canonical, const char *given)
17986 {
17987   while (*given != 0 && TOLOWER (*given) == TOLOWER (*canonical))
17988     given++, canonical++;
17989
17990   return ((*given == 0 && *canonical == 0)
17991           || (strcmp (canonical, "000") == 0 && strcasecmp (given, "k") == 0));
17992 }
17993
17994
17995 /* Return true if GIVEN matches CANONICAL, where GIVEN is a user-supplied
17996    CPU name.  We've traditionally allowed a lot of variation here.
17997
17998    Note: this function is shared between GCC and GAS.  */
17999
18000 static bfd_boolean
18001 mips_matching_cpu_name_p (const char *canonical, const char *given)
18002 {
18003   /* First see if the name matches exactly, or with a final "000"
18004      turned into "k".  */
18005   if (mips_strict_matching_cpu_name_p (canonical, given))
18006     return TRUE;
18007
18008   /* If not, try comparing based on numerical designation alone.
18009      See if GIVEN is an unadorned number, or 'r' followed by a number.  */
18010   if (TOLOWER (*given) == 'r')
18011     given++;
18012   if (!ISDIGIT (*given))
18013     return FALSE;
18014
18015   /* Skip over some well-known prefixes in the canonical name,
18016      hoping to find a number there too.  */
18017   if (TOLOWER (canonical[0]) == 'v' && TOLOWER (canonical[1]) == 'r')
18018     canonical += 2;
18019   else if (TOLOWER (canonical[0]) == 'r' && TOLOWER (canonical[1]) == 'm')
18020     canonical += 2;
18021   else if (TOLOWER (canonical[0]) == 'r')
18022     canonical += 1;
18023
18024   return mips_strict_matching_cpu_name_p (canonical, given);
18025 }
18026
18027
18028 /* Parse an option that takes the name of a processor as its argument.
18029    OPTION is the name of the option and CPU_STRING is the argument.
18030    Return the corresponding processor enumeration if the CPU_STRING is
18031    recognized, otherwise report an error and return null.
18032
18033    A similar function exists in GCC.  */
18034
18035 static const struct mips_cpu_info *
18036 mips_parse_cpu (const char *option, const char *cpu_string)
18037 {
18038   const struct mips_cpu_info *p;
18039
18040   /* 'from-abi' selects the most compatible architecture for the given
18041      ABI: MIPS I for 32-bit ABIs and MIPS III for 64-bit ABIs.  For the
18042      EABIs, we have to decide whether we're using the 32-bit or 64-bit
18043      version.  Look first at the -mgp options, if given, otherwise base
18044      the choice on MIPS_DEFAULT_64BIT.
18045
18046      Treat NO_ABI like the EABIs.  One reason to do this is that the
18047      plain 'mips' and 'mips64' configs have 'from-abi' as their default
18048      architecture.  This code picks MIPS I for 'mips' and MIPS III for
18049      'mips64', just as we did in the days before 'from-abi'.  */
18050   if (strcasecmp (cpu_string, "from-abi") == 0)
18051     {
18052       if (ABI_NEEDS_32BIT_REGS (mips_abi))
18053         return mips_cpu_info_from_isa (ISA_MIPS1);
18054
18055       if (ABI_NEEDS_64BIT_REGS (mips_abi))
18056         return mips_cpu_info_from_isa (ISA_MIPS3);
18057
18058       if (file_mips_gp32 >= 0)
18059         return mips_cpu_info_from_isa (file_mips_gp32 ? ISA_MIPS1 : ISA_MIPS3);
18060
18061       return mips_cpu_info_from_isa (MIPS_DEFAULT_64BIT
18062                                      ? ISA_MIPS3
18063                                      : ISA_MIPS1);
18064     }
18065
18066   /* 'default' has traditionally been a no-op.  Probably not very useful.  */
18067   if (strcasecmp (cpu_string, "default") == 0)
18068     return 0;
18069
18070   for (p = mips_cpu_info_table; p->name != 0; p++)
18071     if (mips_matching_cpu_name_p (p->name, cpu_string))
18072       return p;
18073
18074   as_bad (_("Bad value (%s) for %s"), cpu_string, option);
18075   return 0;
18076 }
18077
18078 /* Return the canonical processor information for ISA (a member of the
18079    ISA_MIPS* enumeration).  */
18080
18081 static const struct mips_cpu_info *
18082 mips_cpu_info_from_isa (int isa)
18083 {
18084   int i;
18085
18086   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18087     if ((mips_cpu_info_table[i].flags & MIPS_CPU_IS_ISA)
18088         && isa == mips_cpu_info_table[i].isa)
18089       return (&mips_cpu_info_table[i]);
18090
18091   return NULL;
18092 }
18093
18094 static const struct mips_cpu_info *
18095 mips_cpu_info_from_arch (int arch)
18096 {
18097   int i;
18098
18099   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18100     if (arch == mips_cpu_info_table[i].cpu)
18101       return (&mips_cpu_info_table[i]);
18102
18103   return NULL;
18104 }
18105 \f
18106 static void
18107 show (FILE *stream, const char *string, int *col_p, int *first_p)
18108 {
18109   if (*first_p)
18110     {
18111       fprintf (stream, "%24s", "");
18112       *col_p = 24;
18113     }
18114   else
18115     {
18116       fprintf (stream, ", ");
18117       *col_p += 2;
18118     }
18119
18120   if (*col_p + strlen (string) > 72)
18121     {
18122       fprintf (stream, "\n%24s", "");
18123       *col_p = 24;
18124     }
18125
18126   fprintf (stream, "%s", string);
18127   *col_p += strlen (string);
18128
18129   *first_p = 0;
18130 }
18131
18132 void
18133 md_show_usage (FILE *stream)
18134 {
18135   int column, first;
18136   size_t i;
18137
18138   fprintf (stream, _("\
18139 MIPS options:\n\
18140 -EB                     generate big endian output\n\
18141 -EL                     generate little endian output\n\
18142 -g, -g2                 do not remove unneeded NOPs or swap branches\n\
18143 -G NUM                  allow referencing objects up to NUM bytes\n\
18144                         implicitly with the gp register [default 8]\n"));
18145   fprintf (stream, _("\
18146 -mips1                  generate MIPS ISA I instructions\n\
18147 -mips2                  generate MIPS ISA II instructions\n\
18148 -mips3                  generate MIPS ISA III instructions\n\
18149 -mips4                  generate MIPS ISA IV instructions\n\
18150 -mips5                  generate MIPS ISA V instructions\n\
18151 -mips32                 generate MIPS32 ISA instructions\n\
18152 -mips32r2               generate MIPS32 release 2 ISA instructions\n\
18153 -mips64                 generate MIPS64 ISA instructions\n\
18154 -mips64r2               generate MIPS64 release 2 ISA instructions\n\
18155 -march=CPU/-mtune=CPU   generate code/schedule for CPU, where CPU is one of:\n"));
18156
18157   first = 1;
18158
18159   for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
18160     show (stream, mips_cpu_info_table[i].name, &column, &first);
18161   show (stream, "from-abi", &column, &first);
18162   fputc ('\n', stream);
18163
18164   fprintf (stream, _("\
18165 -mCPU                   equivalent to -march=CPU -mtune=CPU. Deprecated.\n\
18166 -no-mCPU                don't generate code specific to CPU.\n\
18167                         For -mCPU and -no-mCPU, CPU must be one of:\n"));
18168
18169   first = 1;
18170
18171   show (stream, "3900", &column, &first);
18172   show (stream, "4010", &column, &first);
18173   show (stream, "4100", &column, &first);
18174   show (stream, "4650", &column, &first);
18175   fputc ('\n', stream);
18176
18177   fprintf (stream, _("\
18178 -mips16                 generate mips16 instructions\n\
18179 -no-mips16              do not generate mips16 instructions\n"));
18180   fprintf (stream, _("\
18181 -mmicromips             generate microMIPS instructions\n\
18182 -mno-micromips          do not generate microMIPS instructions\n"));
18183   fprintf (stream, _("\
18184 -msmartmips             generate smartmips instructions\n\
18185 -mno-smartmips          do not generate smartmips instructions\n"));  
18186   fprintf (stream, _("\
18187 -mdsp                   generate DSP instructions\n\
18188 -mno-dsp                do not generate DSP instructions\n"));
18189   fprintf (stream, _("\
18190 -mdspr2                 generate DSP R2 instructions\n\
18191 -mno-dspr2              do not generate DSP R2 instructions\n"));
18192   fprintf (stream, _("\
18193 -mmt                    generate MT instructions\n\
18194 -mno-mt                 do not generate MT instructions\n"));
18195   fprintf (stream, _("\
18196 -mmcu                   generate MCU instructions\n\
18197 -mno-mcu                do not generate MCU instructions\n"));
18198   fprintf (stream, _("\
18199 -mvirt                  generate Virtualization instructions\n\
18200 -mno-virt               do not generate Virtualization instructions\n"));
18201   fprintf (stream, _("\
18202 -minsn32                only generate 32-bit microMIPS instructions\n\
18203 -mno-insn32             generate all microMIPS instructions\n"));
18204   fprintf (stream, _("\
18205 -mfix-loongson2f-jump   work around Loongson2F JUMP instructions\n\
18206 -mfix-loongson2f-nop    work around Loongson2F NOP errata\n\
18207 -mfix-vr4120            work around certain VR4120 errata\n\
18208 -mfix-vr4130            work around VR4130 mflo/mfhi errata\n\
18209 -mfix-24k               insert a nop after ERET and DERET instructions\n\
18210 -mfix-cn63xxp1          work around CN63XXP1 PREF errata\n\
18211 -mgp32                  use 32-bit GPRs, regardless of the chosen ISA\n\
18212 -mfp32                  use 32-bit FPRs, regardless of the chosen ISA\n\
18213 -msym32                 assume all symbols have 32-bit values\n\
18214 -O0                     remove unneeded NOPs, do not swap branches\n\
18215 -O                      remove unneeded NOPs and swap branches\n\
18216 --trap, --no-break      trap exception on div by 0 and mult overflow\n\
18217 --break, --no-trap      break exception on div by 0 and mult overflow\n"));
18218   fprintf (stream, _("\
18219 -mhard-float            allow floating-point instructions\n\
18220 -msoft-float            do not allow floating-point instructions\n\
18221 -msingle-float          only allow 32-bit floating-point operations\n\
18222 -mdouble-float          allow 32-bit and 64-bit floating-point operations\n\
18223 --[no-]construct-floats [dis]allow floating point values to be constructed\n\
18224 --[no-]relax-branch     [dis]allow out-of-range branches to be relaxed\n\
18225 -mnan=ENCODING          select an IEEE 754 NaN encoding convention, either of:\n"));
18226
18227   first = 1;
18228
18229   show (stream, "legacy", &column, &first);
18230   show (stream, "2008", &column, &first);
18231
18232   fputc ('\n', stream);
18233
18234   fprintf (stream, _("\
18235 -KPIC, -call_shared     generate SVR4 position independent code\n\
18236 -call_nonpic            generate non-PIC code that can operate with DSOs\n\
18237 -mvxworks-pic           generate VxWorks position independent code\n\
18238 -non_shared             do not generate code that can operate with DSOs\n\
18239 -xgot                   assume a 32 bit GOT\n\
18240 -mpdr, -mno-pdr         enable/disable creation of .pdr sections\n\
18241 -mshared, -mno-shared   disable/enable .cpload optimization for\n\
18242                         position dependent (non shared) code\n\
18243 -mabi=ABI               create ABI conformant object file for:\n"));
18244
18245   first = 1;
18246
18247   show (stream, "32", &column, &first);
18248   show (stream, "o64", &column, &first);
18249   show (stream, "n32", &column, &first);
18250   show (stream, "64", &column, &first);
18251   show (stream, "eabi", &column, &first);
18252
18253   fputc ('\n', stream);
18254
18255   fprintf (stream, _("\
18256 -32                     create o32 ABI object file (default)\n\
18257 -n32                    create n32 ABI object file\n\
18258 -64                     create 64 ABI object file\n"));
18259 }
18260
18261 #ifdef TE_IRIX
18262 enum dwarf2_format
18263 mips_dwarf2_format (asection *sec ATTRIBUTE_UNUSED)
18264 {
18265   if (HAVE_64BIT_SYMBOLS)
18266     return dwarf2_format_64bit_irix;
18267   else
18268     return dwarf2_format_32bit;
18269 }
18270 #endif
18271
18272 int
18273 mips_dwarf2_addr_size (void)
18274 {
18275   if (HAVE_64BIT_OBJECTS)
18276     return 8;
18277   else
18278     return 4;
18279 }
18280
18281 /* Standard calling conventions leave the CFA at SP on entry.  */
18282 void
18283 mips_cfi_frame_initial_instructions (void)
18284 {
18285   cfi_add_CFA_def_cfa_register (SP);
18286 }
18287
18288 int
18289 tc_mips_regname_to_dw2regnum (char *regname)
18290 {
18291   unsigned int regnum = -1;
18292   unsigned int reg;
18293
18294   if (reg_lookup (&regname, RTYPE_GP | RTYPE_NUM, &reg))
18295     regnum = reg;
18296
18297   return regnum;
18298 }