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 Free Software Foundation, Inc.
4 Contributed by the OSF and Ralph Campbell.
5 Written by Keith Knowles and Ralph Campbell, working independently.
6 Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus
9 This file is part of GAS.
11 GAS is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2, or (at your option)
16 GAS is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with GAS; see the file COPYING. If not, write to the Free
23 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
29 #include "safe-ctype.h"
33 #include "opcode/mips.h"
35 #include "dwarf2dbg.h"
36 #include "dw2gencfi.h"
39 #define DBG(x) printf x
45 /* Clean up namespace so we can include obj-elf.h too. */
46 static int mips_output_flavor (void);
47 static int mips_output_flavor (void) { return OUTPUT_FLAVOR; }
48 #undef OBJ_PROCESS_STAB
55 #undef obj_frob_file_after_relocs
56 #undef obj_frob_symbol
58 #undef obj_sec_sym_ok_for_reloc
59 #undef OBJ_COPY_SYMBOL_ATTRIBUTES
62 /* Fix any of them that we actually care about. */
64 #define OUTPUT_FLAVOR mips_output_flavor()
71 #ifndef ECOFF_DEBUGGING
72 #define NO_ECOFF_DEBUGGING
73 #define ECOFF_DEBUGGING 0
76 int mips_flag_mdebug = -1;
78 /* Control generation of .pdr sections. Off by default on IRIX: the native
79 linker doesn't know about and discards them, but relocations against them
80 remain, leading to rld crashes. */
82 int mips_flag_pdr = FALSE;
84 int mips_flag_pdr = TRUE;
89 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
90 static char *mips_regmask_frag;
96 #define PIC_CALL_REG 25
104 #define ILLEGAL_REG (32)
106 /* Allow override of standard little-endian ECOFF format. */
108 #ifndef ECOFF_LITTLE_FORMAT
109 #define ECOFF_LITTLE_FORMAT "ecoff-littlemips"
112 extern int target_big_endian;
114 /* The name of the readonly data section. */
115 #define RDATA_SECTION_NAME (OUTPUT_FLAVOR == bfd_target_ecoff_flavour \
117 : OUTPUT_FLAVOR == bfd_target_coff_flavour \
119 : OUTPUT_FLAVOR == bfd_target_elf_flavour \
123 /* Information about an instruction, including its format, operands
127 /* The opcode's entry in mips_opcodes or mips16_opcodes. */
128 const struct mips_opcode *insn_mo;
130 /* True if this is a mips16 instruction and if we want the extended
132 bfd_boolean use_extend;
134 /* The 16-bit extension instruction to use when USE_EXTEND is true. */
135 unsigned short extend;
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. */
139 unsigned long insn_opcode;
141 /* The frag that contains the instruction. */
144 /* The offset into FRAG of the first instruction byte. */
147 /* The relocs associated with the instruction, if any. */
150 /* True if this entry cannot be moved from its current position. */
151 unsigned int fixed_p : 1;
153 /* True if this instruction occurred in a .set noreorder block. */
154 unsigned int noreorder_p : 1;
156 /* True for mips16 instructions that jump to an absolute address. */
157 unsigned int mips16_absolute_jump_p : 1;
160 /* The ABI to use. */
171 /* MIPS ABI we are using for this output file. */
172 static enum mips_abi_level mips_abi = NO_ABI;
174 /* Whether or not we have code that can call pic code. */
175 int mips_abicalls = FALSE;
177 /* Whether or not we have code which can be put into a shared
179 static bfd_boolean mips_in_shared = TRUE;
181 /* This is the set of options which may be modified by the .set
182 pseudo-op. We use a struct so that .set push and .set pop are more
185 struct mips_set_options
187 /* MIPS ISA (Instruction Set Architecture) level. This is set to -1
188 if it has not been initialized. Changed by `.set mipsN', and the
189 -mipsN command line option, and the default CPU. */
191 /* Enabled Application Specific Extensions (ASEs). These are set to -1
192 if they have not been initialized. Changed by `.set <asename>', by
193 command line options, and based on the default architecture. */
199 /* Whether we are assembling for the mips16 processor. 0 if we are
200 not, 1 if we are, and -1 if the value has not been initialized.
201 Changed by `.set mips16' and `.set nomips16', and the -mips16 and
202 -nomips16 command line options, and the default CPU. */
204 /* Non-zero if we should not reorder instructions. Changed by `.set
205 reorder' and `.set noreorder'. */
207 /* Non-zero if we should not permit the $at ($1) register to be used
208 in instructions. Changed by `.set at' and `.set noat'. */
210 /* Non-zero if we should warn when a macro instruction expands into
211 more than one machine instruction. Changed by `.set nomacro' and
213 int warn_about_macros;
214 /* Non-zero if we should not move instructions. Changed by `.set
215 move', `.set volatile', `.set nomove', and `.set novolatile'. */
217 /* Non-zero if we should not optimize branches by moving the target
218 of the branch into the delay slot. Actually, we don't perform
219 this optimization anyhow. Changed by `.set bopt' and `.set
222 /* Non-zero if we should not autoextend mips16 instructions.
223 Changed by `.set autoextend' and `.set noautoextend'. */
225 /* Restrict general purpose registers and floating point registers
226 to 32 bit. This is initially determined when -mgp32 or -mfp32
227 is passed but can changed if the assembler code uses .set mipsN. */
230 /* MIPS architecture (CPU) type. Changed by .set arch=FOO, the -march
231 command line option, and the default CPU. */
233 /* True if ".set sym32" is in effect. */
237 /* True if -mgp32 was passed. */
238 static int file_mips_gp32 = -1;
240 /* True if -mfp32 was passed. */
241 static int file_mips_fp32 = -1;
243 /* This is the struct we use to hold the current set of options. Note
244 that we must set the isa field to ISA_UNKNOWN and the ASE fields to
245 -1 to indicate that they have not been initialized. */
247 static struct mips_set_options mips_opts =
249 ISA_UNKNOWN, -1, -1, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, CPU_UNKNOWN, FALSE
252 /* These variables are filled in with the masks of registers used.
253 The object format code reads them and puts them in the appropriate
255 unsigned long mips_gprmask;
256 unsigned long mips_cprmask[4];
258 /* MIPS ISA we are using for this output file. */
259 static int file_mips_isa = ISA_UNKNOWN;
261 /* True if -mips16 was passed or implied by arguments passed on the
262 command line (e.g., by -march). */
263 static int file_ase_mips16;
265 /* True if -mips3d was passed or implied by arguments passed on the
266 command line (e.g., by -march). */
267 static int file_ase_mips3d;
269 /* True if -mdmx was passed or implied by arguments passed on the
270 command line (e.g., by -march). */
271 static int file_ase_mdmx;
273 /* True if -msmartmips was passed or implied by arguments passed on the
274 command line (e.g., by -march). */
275 static int file_ase_smartmips;
277 #define ISA_SUPPORT_SMARTMIPS (mips_opts.isa == ISA_MIPS32 \
278 || mips_opts.isa == ISA_MIPS32R2)
280 /* True if -mdsp was passed or implied by arguments passed on the
281 command line (e.g., by -march). */
282 static int file_ase_dsp;
284 /* True if -mmt was passed or implied by arguments passed on the
285 command line (e.g., by -march). */
286 static int file_ase_mt;
288 /* The argument of the -march= flag. The architecture we are assembling. */
289 static int file_mips_arch = CPU_UNKNOWN;
290 static const char *mips_arch_string;
292 /* The argument of the -mtune= flag. The architecture for which we
294 static int mips_tune = CPU_UNKNOWN;
295 static const char *mips_tune_string;
297 /* True when generating 32-bit code for a 64-bit processor. */
298 static int mips_32bitmode = 0;
300 /* True if the given ABI requires 32-bit registers. */
301 #define ABI_NEEDS_32BIT_REGS(ABI) ((ABI) == O32_ABI)
303 /* Likewise 64-bit registers. */
304 #define ABI_NEEDS_64BIT_REGS(ABI) \
306 || (ABI) == N64_ABI \
309 /* Return true if ISA supports 64 bit gp register instructions. */
310 #define ISA_HAS_64BIT_REGS(ISA) \
311 ((ISA) == ISA_MIPS3 \
312 || (ISA) == ISA_MIPS4 \
313 || (ISA) == ISA_MIPS5 \
314 || (ISA) == ISA_MIPS64 \
315 || (ISA) == ISA_MIPS64R2)
317 /* Return true if ISA supports 64-bit right rotate (dror et al.)
319 #define ISA_HAS_DROR(ISA) \
320 ((ISA) == ISA_MIPS64R2)
322 /* Return true if ISA supports 32-bit right rotate (ror et al.)
324 #define ISA_HAS_ROR(ISA) \
325 ((ISA) == ISA_MIPS32R2 \
326 || (ISA) == ISA_MIPS64R2 \
327 || mips_opts.ase_smartmips)
329 /* Return true if ISA supports single-precision floats in odd registers. */
330 #define ISA_HAS_ODD_SINGLE_FPR(ISA) \
331 ((ISA) == ISA_MIPS32 \
332 || (ISA) == ISA_MIPS32R2 \
333 || (ISA) == ISA_MIPS64 \
334 || (ISA) == ISA_MIPS64R2)
336 #define HAVE_32BIT_GPRS \
337 (mips_opts.gp32 || ! ISA_HAS_64BIT_REGS (mips_opts.isa))
339 #define HAVE_32BIT_FPRS \
340 (mips_opts.fp32 || ! ISA_HAS_64BIT_REGS (mips_opts.isa))
342 #define HAVE_64BIT_GPRS (! HAVE_32BIT_GPRS)
343 #define HAVE_64BIT_FPRS (! HAVE_32BIT_FPRS)
345 #define HAVE_NEWABI (mips_abi == N32_ABI || mips_abi == N64_ABI)
347 #define HAVE_64BIT_OBJECTS (mips_abi == N64_ABI)
349 /* True if relocations are stored in-place. */
350 #define HAVE_IN_PLACE_ADDENDS (!HAVE_NEWABI)
352 /* The ABI-derived address size. */
353 #define HAVE_64BIT_ADDRESSES \
354 (HAVE_64BIT_GPRS && (mips_abi == EABI_ABI || mips_abi == N64_ABI))
355 #define HAVE_32BIT_ADDRESSES (!HAVE_64BIT_ADDRESSES)
357 /* The size of symbolic constants (i.e., expressions of the form
358 "SYMBOL" or "SYMBOL + OFFSET"). */
359 #define HAVE_32BIT_SYMBOLS \
360 (HAVE_32BIT_ADDRESSES || !HAVE_64BIT_OBJECTS || mips_opts.sym32)
361 #define HAVE_64BIT_SYMBOLS (!HAVE_32BIT_SYMBOLS)
363 /* Addresses are loaded in different ways, depending on the address size
364 in use. The n32 ABI Documentation also mandates the use of additions
365 with overflow checking, but existing implementations don't follow it. */
366 #define ADDRESS_ADD_INSN \
367 (HAVE_32BIT_ADDRESSES ? "addu" : "daddu")
369 #define ADDRESS_ADDI_INSN \
370 (HAVE_32BIT_ADDRESSES ? "addiu" : "daddiu")
372 #define ADDRESS_LOAD_INSN \
373 (HAVE_32BIT_ADDRESSES ? "lw" : "ld")
375 #define ADDRESS_STORE_INSN \
376 (HAVE_32BIT_ADDRESSES ? "sw" : "sd")
378 /* Return true if the given CPU supports the MIPS16 ASE. */
379 #define CPU_HAS_MIPS16(cpu) \
380 (strncmp (TARGET_CPU, "mips16", sizeof ("mips16") - 1) == 0 \
381 || strncmp (TARGET_CANONICAL, "mips-lsi-elf", sizeof ("mips-lsi-elf") - 1) == 0)
383 /* Return true if the given CPU supports the MIPS3D ASE. */
384 #define CPU_HAS_MIPS3D(cpu) ((cpu) == CPU_SB1 \
387 /* Return true if the given CPU supports the MDMX ASE. */
388 #define CPU_HAS_MDMX(cpu) (FALSE \
391 /* Return true if the given CPU supports the DSP ASE. */
392 #define CPU_HAS_DSP(cpu) (FALSE \
395 /* Return true if the given CPU supports the MT ASE. */
396 #define CPU_HAS_MT(cpu) (FALSE \
399 /* True if CPU has a dror instruction. */
400 #define CPU_HAS_DROR(CPU) ((CPU) == CPU_VR5400 || (CPU) == CPU_VR5500)
402 /* True if CPU has a ror instruction. */
403 #define CPU_HAS_ROR(CPU) CPU_HAS_DROR (CPU)
405 /* True if mflo and mfhi can be immediately followed by instructions
406 which write to the HI and LO registers.
408 According to MIPS specifications, MIPS ISAs I, II, and III need
409 (at least) two instructions between the reads of HI/LO and
410 instructions which write them, and later ISAs do not. Contradicting
411 the MIPS specifications, some MIPS IV processor user manuals (e.g.
412 the UM for the NEC Vr5000) document needing the instructions between
413 HI/LO reads and writes, as well. Therefore, we declare only MIPS32,
414 MIPS64 and later ISAs to have the interlocks, plus any specific
415 earlier-ISA CPUs for which CPU documentation declares that the
416 instructions are really interlocked. */
417 #define hilo_interlocks \
418 (mips_opts.isa == ISA_MIPS32 \
419 || mips_opts.isa == ISA_MIPS32R2 \
420 || mips_opts.isa == ISA_MIPS64 \
421 || mips_opts.isa == ISA_MIPS64R2 \
422 || mips_opts.arch == CPU_R4010 \
423 || mips_opts.arch == CPU_R10000 \
424 || mips_opts.arch == CPU_R12000 \
425 || mips_opts.arch == CPU_RM7000 \
426 || mips_opts.arch == CPU_VR5500 \
429 /* Whether the processor uses hardware interlocks to protect reads
430 from the GPRs after they are loaded from memory, and thus does not
431 require nops to be inserted. This applies to instructions marked
432 INSN_LOAD_MEMORY_DELAY. These nops are only required at MIPS ISA
434 #define gpr_interlocks \
435 (mips_opts.isa != ISA_MIPS1 \
436 || mips_opts.arch == CPU_R3900)
438 /* Whether the processor uses hardware interlocks to avoid delays
439 required by coprocessor instructions, and thus does not require
440 nops to be inserted. This applies to instructions marked
441 INSN_LOAD_COPROC_DELAY, INSN_COPROC_MOVE_DELAY, and to delays
442 between instructions marked INSN_WRITE_COND_CODE and ones marked
443 INSN_READ_COND_CODE. These nops are only required at MIPS ISA
444 levels I, II, and III. */
445 /* Itbl support may require additional care here. */
446 #define cop_interlocks \
447 ((mips_opts.isa != ISA_MIPS1 \
448 && mips_opts.isa != ISA_MIPS2 \
449 && mips_opts.isa != ISA_MIPS3) \
450 || mips_opts.arch == CPU_R4300 \
453 /* Whether the processor uses hardware interlocks to protect reads
454 from coprocessor registers after they are loaded from memory, and
455 thus does not require nops to be inserted. This applies to
456 instructions marked INSN_COPROC_MEMORY_DELAY. These nops are only
457 requires at MIPS ISA level I. */
458 #define cop_mem_interlocks (mips_opts.isa != ISA_MIPS1)
460 /* Is this a mfhi or mflo instruction? */
461 #define MF_HILO_INSN(PINFO) \
462 ((PINFO & INSN_READ_HI) || (PINFO & INSN_READ_LO))
464 /* MIPS PIC level. */
466 enum mips_pic_level mips_pic;
468 /* 1 if we should generate 32 bit offsets from the $gp register in
469 SVR4_PIC mode. Currently has no meaning in other modes. */
470 static int mips_big_got = 0;
472 /* 1 if trap instructions should used for overflow rather than break
474 static int mips_trap = 0;
476 /* 1 if double width floating point constants should not be constructed
477 by assembling two single width halves into two single width floating
478 point registers which just happen to alias the double width destination
479 register. On some architectures this aliasing can be disabled by a bit
480 in the status register, and the setting of this bit cannot be determined
481 automatically at assemble time. */
482 static int mips_disable_float_construction;
484 /* Non-zero if any .set noreorder directives were used. */
486 static int mips_any_noreorder;
488 /* Non-zero if nops should be inserted when the register referenced in
489 an mfhi/mflo instruction is read in the next two instructions. */
490 static int mips_7000_hilo_fix;
492 /* The size of the small data section. */
493 static unsigned int g_switch_value = 8;
494 /* Whether the -G option was used. */
495 static int g_switch_seen = 0;
500 /* If we can determine in advance that GP optimization won't be
501 possible, we can skip the relaxation stuff that tries to produce
502 GP-relative references. This makes delay slot optimization work
505 This function can only provide a guess, but it seems to work for
506 gcc output. It needs to guess right for gcc, otherwise gcc
507 will put what it thinks is a GP-relative instruction in a branch
510 I don't know if a fix is needed for the SVR4_PIC mode. I've only
511 fixed it for the non-PIC mode. KR 95/04/07 */
512 static int nopic_need_relax (symbolS *, int);
514 /* handle of the OPCODE hash table */
515 static struct hash_control *op_hash = NULL;
517 /* The opcode hash table we use for the mips16. */
518 static struct hash_control *mips16_op_hash = NULL;
520 /* This array holds the chars that always start a comment. If the
521 pre-processor is disabled, these aren't very useful */
522 const char comment_chars[] = "#";
524 /* This array holds the chars that only start a comment at the beginning of
525 a line. If the line seems to have the form '# 123 filename'
526 .line and .file directives will appear in the pre-processed output */
527 /* Note that input_file.c hand checks for '#' at the beginning of the
528 first line of the input file. This is because the compiler outputs
529 #NO_APP at the beginning of its output. */
530 /* Also note that C style comments are always supported. */
531 const char line_comment_chars[] = "#";
533 /* This array holds machine specific line separator characters. */
534 const char line_separator_chars[] = ";";
536 /* Chars that can be used to separate mant from exp in floating point nums */
537 const char EXP_CHARS[] = "eE";
539 /* Chars that mean this number is a floating point constant */
542 const char FLT_CHARS[] = "rRsSfFdDxXpP";
544 /* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be
545 changed in read.c . Ideally it shouldn't have to know about it at all,
546 but nothing is ideal around here.
549 static char *insn_error;
551 static int auto_align = 1;
553 /* When outputting SVR4 PIC code, the assembler needs to know the
554 offset in the stack frame from which to restore the $gp register.
555 This is set by the .cprestore pseudo-op, and saved in this
557 static offsetT mips_cprestore_offset = -1;
559 /* Similar for NewABI PIC code, where $gp is callee-saved. NewABI has some
560 more optimizations, it can use a register value instead of a memory-saved
561 offset and even an other register than $gp as global pointer. */
562 static offsetT mips_cpreturn_offset = -1;
563 static int mips_cpreturn_register = -1;
564 static int mips_gp_register = GP;
565 static int mips_gprel_offset = 0;
567 /* Whether mips_cprestore_offset has been set in the current function
568 (or whether it has already been warned about, if not). */
569 static int mips_cprestore_valid = 0;
571 /* This is the register which holds the stack frame, as set by the
572 .frame pseudo-op. This is needed to implement .cprestore. */
573 static int mips_frame_reg = SP;
575 /* Whether mips_frame_reg has been set in the current function
576 (or whether it has already been warned about, if not). */
577 static int mips_frame_reg_valid = 0;
579 /* To output NOP instructions correctly, we need to keep information
580 about the previous two instructions. */
582 /* Whether we are optimizing. The default value of 2 means to remove
583 unneeded NOPs and swap branch instructions when possible. A value
584 of 1 means to not swap branches. A value of 0 means to always
586 static int mips_optimize = 2;
588 /* Debugging level. -g sets this to 2. -gN sets this to N. -g0 is
589 equivalent to seeing no -g option at all. */
590 static int mips_debug = 0;
592 /* The maximum number of NOPs needed to avoid the VR4130 mflo/mfhi errata. */
593 #define MAX_VR4130_NOPS 4
595 /* The maximum number of NOPs needed to fill delay slots. */
596 #define MAX_DELAY_NOPS 2
598 /* The maximum number of NOPs needed for any purpose. */
601 /* A list of previous instructions, with index 0 being the most recent.
602 We need to look back MAX_NOPS instructions when filling delay slots
603 or working around processor errata. We need to look back one
604 instruction further if we're thinking about using history[0] to
605 fill a branch delay slot. */
606 static struct mips_cl_insn history[1 + MAX_NOPS];
608 /* Nop instructions used by emit_nop. */
609 static struct mips_cl_insn nop_insn, mips16_nop_insn;
611 /* The appropriate nop for the current mode. */
612 #define NOP_INSN (mips_opts.mips16 ? &mips16_nop_insn : &nop_insn)
614 /* If this is set, it points to a frag holding nop instructions which
615 were inserted before the start of a noreorder section. If those
616 nops turn out to be unnecessary, the size of the frag can be
618 static fragS *prev_nop_frag;
620 /* The number of nop instructions we created in prev_nop_frag. */
621 static int prev_nop_frag_holds;
623 /* The number of nop instructions that we know we need in
625 static int prev_nop_frag_required;
627 /* The number of instructions we've seen since prev_nop_frag. */
628 static int prev_nop_frag_since;
630 /* For ECOFF and ELF, relocations against symbols are done in two
631 parts, with a HI relocation and a LO relocation. Each relocation
632 has only 16 bits of space to store an addend. This means that in
633 order for the linker to handle carries correctly, it must be able
634 to locate both the HI and the LO relocation. This means that the
635 relocations must appear in order in the relocation table.
637 In order to implement this, we keep track of each unmatched HI
638 relocation. We then sort them so that they immediately precede the
639 corresponding LO relocation. */
644 struct mips_hi_fixup *next;
647 /* The section this fixup is in. */
651 /* The list of unmatched HI relocs. */
653 static struct mips_hi_fixup *mips_hi_fixup_list;
655 /* The frag containing the last explicit relocation operator.
656 Null if explicit relocations have not been used. */
658 static fragS *prev_reloc_op_frag;
660 /* Map normal MIPS register numbers to mips16 register numbers. */
662 #define X ILLEGAL_REG
663 static const int mips32_to_16_reg_map[] =
665 X, X, 2, 3, 4, 5, 6, 7,
666 X, X, X, X, X, X, X, X,
667 0, 1, X, X, X, X, X, X,
668 X, X, X, X, X, X, X, X
672 /* Map mips16 register numbers to normal MIPS register numbers. */
674 static const unsigned int mips16_to_32_reg_map[] =
676 16, 17, 2, 3, 4, 5, 6, 7
679 /* Classifies the kind of instructions we're interested in when
680 implementing -mfix-vr4120. */
681 enum fix_vr4120_class {
688 NUM_FIX_VR4120_CLASSES
691 /* Given two FIX_VR4120_* values X and Y, bit Y of element X is set if
692 there must be at least one other instruction between an instruction
693 of type X and an instruction of type Y. */
694 static unsigned int vr4120_conflicts[NUM_FIX_VR4120_CLASSES];
696 /* True if -mfix-vr4120 is in force. */
697 static int mips_fix_vr4120;
699 /* ...likewise -mfix-vr4130. */
700 static int mips_fix_vr4130;
702 /* We don't relax branches by default, since this causes us to expand
703 `la .l2 - .l1' if there's a branch between .l1 and .l2, because we
704 fail to compute the offset before expanding the macro to the most
705 efficient expansion. */
707 static int mips_relax_branch;
709 /* The expansion of many macros depends on the type of symbol that
710 they refer to. For example, when generating position-dependent code,
711 a macro that refers to a symbol may have two different expansions,
712 one which uses GP-relative addresses and one which uses absolute
713 addresses. When generating SVR4-style PIC, a macro may have
714 different expansions for local and global symbols.
716 We handle these situations by generating both sequences and putting
717 them in variant frags. In position-dependent code, the first sequence
718 will be the GP-relative one and the second sequence will be the
719 absolute one. In SVR4 PIC, the first sequence will be for global
720 symbols and the second will be for local symbols.
722 The frag's "subtype" is RELAX_ENCODE (FIRST, SECOND), where FIRST and
723 SECOND are the lengths of the two sequences in bytes. These fields
724 can be extracted using RELAX_FIRST() and RELAX_SECOND(). In addition,
725 the subtype has the following flags:
728 Set if it has been decided that we should use the second
729 sequence instead of the first.
732 Set in the first variant frag if the macro's second implementation
733 is longer than its first. This refers to the macro as a whole,
734 not an individual relaxation.
737 Set in the first variant frag if the macro appeared in a .set nomacro
738 block and if one alternative requires a warning but the other does not.
741 Like RELAX_NOMACRO, but indicates that the macro appears in a branch
744 The frag's "opcode" points to the first fixup for relaxable code.
746 Relaxable macros are generated using a sequence such as:
748 relax_start (SYMBOL);
749 ... generate first expansion ...
751 ... generate second expansion ...
754 The code and fixups for the unwanted alternative are discarded
755 by md_convert_frag. */
756 #define RELAX_ENCODE(FIRST, SECOND) (((FIRST) << 8) | (SECOND))
758 #define RELAX_FIRST(X) (((X) >> 8) & 0xff)
759 #define RELAX_SECOND(X) ((X) & 0xff)
760 #define RELAX_USE_SECOND 0x10000
761 #define RELAX_SECOND_LONGER 0x20000
762 #define RELAX_NOMACRO 0x40000
763 #define RELAX_DELAY_SLOT 0x80000
765 /* Branch without likely bit. If label is out of range, we turn:
767 beq reg1, reg2, label
777 with the following opcode replacements:
784 bltzal <-> bgezal (with jal label instead of j label)
786 Even though keeping the delay slot instruction in the delay slot of
787 the branch would be more efficient, it would be very tricky to do
788 correctly, because we'd have to introduce a variable frag *after*
789 the delay slot instruction, and expand that instead. Let's do it
790 the easy way for now, even if the branch-not-taken case now costs
791 one additional instruction. Out-of-range branches are not supposed
792 to be common, anyway.
794 Branch likely. If label is out of range, we turn:
796 beql reg1, reg2, label
797 delay slot (annulled if branch not taken)
806 delay slot (executed only if branch taken)
809 It would be possible to generate a shorter sequence by losing the
810 likely bit, generating something like:
815 delay slot (executed only if branch taken)
827 bltzall -> bgezal (with jal label instead of j label)
828 bgezall -> bltzal (ditto)
831 but it's not clear that it would actually improve performance. */
832 #define RELAX_BRANCH_ENCODE(uncond, likely, link, toofar) \
835 | ((toofar) ? 1 : 0) \
837 | ((likely) ? 4 : 0) \
838 | ((uncond) ? 8 : 0)))
839 #define RELAX_BRANCH_P(i) (((i) & 0xf0000000) == 0xc0000000)
840 #define RELAX_BRANCH_UNCOND(i) (((i) & 8) != 0)
841 #define RELAX_BRANCH_LIKELY(i) (((i) & 4) != 0)
842 #define RELAX_BRANCH_LINK(i) (((i) & 2) != 0)
843 #define RELAX_BRANCH_TOOFAR(i) (((i) & 1) != 0)
845 /* For mips16 code, we use an entirely different form of relaxation.
846 mips16 supports two versions of most instructions which take
847 immediate values: a small one which takes some small value, and a
848 larger one which takes a 16 bit value. Since branches also follow
849 this pattern, relaxing these values is required.
851 We can assemble both mips16 and normal MIPS code in a single
852 object. Therefore, we need to support this type of relaxation at
853 the same time that we support the relaxation described above. We
854 use the high bit of the subtype field to distinguish these cases.
856 The information we store for this type of relaxation is the
857 argument code found in the opcode file for this relocation, whether
858 the user explicitly requested a small or extended form, and whether
859 the relocation is in a jump or jal delay slot. That tells us the
860 size of the value, and how it should be stored. We also store
861 whether the fragment is considered to be extended or not. We also
862 store whether this is known to be a branch to a different section,
863 whether we have tried to relax this frag yet, and whether we have
864 ever extended a PC relative fragment because of a shift count. */
865 #define RELAX_MIPS16_ENCODE(type, small, ext, dslot, jal_dslot) \
868 | ((small) ? 0x100 : 0) \
869 | ((ext) ? 0x200 : 0) \
870 | ((dslot) ? 0x400 : 0) \
871 | ((jal_dslot) ? 0x800 : 0))
872 #define RELAX_MIPS16_P(i) (((i) & 0xc0000000) == 0x80000000)
873 #define RELAX_MIPS16_TYPE(i) ((i) & 0xff)
874 #define RELAX_MIPS16_USER_SMALL(i) (((i) & 0x100) != 0)
875 #define RELAX_MIPS16_USER_EXT(i) (((i) & 0x200) != 0)
876 #define RELAX_MIPS16_DSLOT(i) (((i) & 0x400) != 0)
877 #define RELAX_MIPS16_JAL_DSLOT(i) (((i) & 0x800) != 0)
878 #define RELAX_MIPS16_EXTENDED(i) (((i) & 0x1000) != 0)
879 #define RELAX_MIPS16_MARK_EXTENDED(i) ((i) | 0x1000)
880 #define RELAX_MIPS16_CLEAR_EXTENDED(i) ((i) &~ 0x1000)
881 #define RELAX_MIPS16_LONG_BRANCH(i) (((i) & 0x2000) != 0)
882 #define RELAX_MIPS16_MARK_LONG_BRANCH(i) ((i) | 0x2000)
883 #define RELAX_MIPS16_CLEAR_LONG_BRANCH(i) ((i) &~ 0x2000)
885 /* Is the given value a sign-extended 32-bit value? */
886 #define IS_SEXT_32BIT_NUM(x) \
887 (((x) &~ (offsetT) 0x7fffffff) == 0 \
888 || (((x) &~ (offsetT) 0x7fffffff) == ~ (offsetT) 0x7fffffff))
890 /* Is the given value a sign-extended 16-bit value? */
891 #define IS_SEXT_16BIT_NUM(x) \
892 (((x) &~ (offsetT) 0x7fff) == 0 \
893 || (((x) &~ (offsetT) 0x7fff) == ~ (offsetT) 0x7fff))
895 /* Is the given value a zero-extended 32-bit value? Or a negated one? */
896 #define IS_ZEXT_32BIT_NUM(x) \
897 (((x) &~ (offsetT) 0xffffffff) == 0 \
898 || (((x) &~ (offsetT) 0xffffffff) == ~ (offsetT) 0xffffffff))
900 /* Replace bits MASK << SHIFT of STRUCT with the equivalent bits in
901 VALUE << SHIFT. VALUE is evaluated exactly once. */
902 #define INSERT_BITS(STRUCT, VALUE, MASK, SHIFT) \
903 (STRUCT) = (((STRUCT) & ~((MASK) << (SHIFT))) \
904 | (((VALUE) & (MASK)) << (SHIFT)))
906 /* Extract bits MASK << SHIFT from STRUCT and shift them right
908 #define EXTRACT_BITS(STRUCT, MASK, SHIFT) \
909 (((STRUCT) >> (SHIFT)) & (MASK))
911 /* Change INSN's opcode so that the operand given by FIELD has value VALUE.
912 INSN is a mips_cl_insn structure and VALUE is evaluated exactly once.
914 include/opcode/mips.h specifies operand fields using the macros
915 OP_MASK_<FIELD> and OP_SH_<FIELD>. The MIPS16 equivalents start
916 with "MIPS16OP" instead of "OP". */
917 #define INSERT_OPERAND(FIELD, INSN, VALUE) \
918 INSERT_BITS ((INSN).insn_opcode, VALUE, OP_MASK_##FIELD, OP_SH_##FIELD)
919 #define MIPS16_INSERT_OPERAND(FIELD, INSN, VALUE) \
920 INSERT_BITS ((INSN).insn_opcode, VALUE, \
921 MIPS16OP_MASK_##FIELD, MIPS16OP_SH_##FIELD)
923 /* Extract the operand given by FIELD from mips_cl_insn INSN. */
924 #define EXTRACT_OPERAND(FIELD, INSN) \
925 EXTRACT_BITS ((INSN).insn_opcode, OP_MASK_##FIELD, OP_SH_##FIELD)
926 #define MIPS16_EXTRACT_OPERAND(FIELD, INSN) \
927 EXTRACT_BITS ((INSN).insn_opcode, \
928 MIPS16OP_MASK_##FIELD, \
931 /* Global variables used when generating relaxable macros. See the
932 comment above RELAX_ENCODE for more details about how relaxation
935 /* 0 if we're not emitting a relaxable macro.
936 1 if we're emitting the first of the two relaxation alternatives.
937 2 if we're emitting the second alternative. */
940 /* The first relaxable fixup in the current frag. (In other words,
941 the first fixup that refers to relaxable code.) */
944 /* sizes[0] says how many bytes of the first alternative are stored in
945 the current frag. Likewise sizes[1] for the second alternative. */
946 unsigned int sizes[2];
948 /* The symbol on which the choice of sequence depends. */
952 /* Global variables used to decide whether a macro needs a warning. */
954 /* True if the macro is in a branch delay slot. */
955 bfd_boolean delay_slot_p;
957 /* For relaxable macros, sizes[0] is the length of the first alternative
958 in bytes and sizes[1] is the length of the second alternative.
959 For non-relaxable macros, both elements give the length of the
961 unsigned int sizes[2];
963 /* The first variant frag for this macro. */
965 } mips_macro_warning;
967 /* Prototypes for static functions. */
969 #define internalError() \
970 as_fatal (_("internal Error, line %d, %s"), __LINE__, __FILE__)
972 enum mips_regclass { MIPS_GR_REG, MIPS_FP_REG, MIPS16_REG };
974 static void append_insn
975 (struct mips_cl_insn *ip, expressionS *p, bfd_reloc_code_real_type *r);
976 static void mips_no_prev_insn (void);
977 static void mips16_macro_build
978 (expressionS *, const char *, const char *, va_list);
979 static void load_register (int, expressionS *, int);
980 static void macro_start (void);
981 static void macro_end (void);
982 static void macro (struct mips_cl_insn * ip);
983 static void mips16_macro (struct mips_cl_insn * ip);
984 #ifdef LOSING_COMPILER
985 static void macro2 (struct mips_cl_insn * ip);
987 static void mips_ip (char *str, struct mips_cl_insn * ip);
988 static void mips16_ip (char *str, struct mips_cl_insn * ip);
989 static void mips16_immed
990 (char *, unsigned int, int, offsetT, bfd_boolean, bfd_boolean, bfd_boolean,
991 unsigned long *, bfd_boolean *, unsigned short *);
992 static size_t my_getSmallExpression
993 (expressionS *, bfd_reloc_code_real_type *, char *);
994 static void my_getExpression (expressionS *, char *);
995 static void s_align (int);
996 static void s_change_sec (int);
997 static void s_change_section (int);
998 static void s_cons (int);
999 static void s_float_cons (int);
1000 static void s_mips_globl (int);
1001 static void s_option (int);
1002 static void s_mipsset (int);
1003 static void s_abicalls (int);
1004 static void s_cpload (int);
1005 static void s_cpsetup (int);
1006 static void s_cplocal (int);
1007 static void s_cprestore (int);
1008 static void s_cpreturn (int);
1009 static void s_gpvalue (int);
1010 static void s_gpword (int);
1011 static void s_gpdword (int);
1012 static void s_cpadd (int);
1013 static void s_insn (int);
1014 static void md_obj_begin (void);
1015 static void md_obj_end (void);
1016 static void s_mips_ent (int);
1017 static void s_mips_end (int);
1018 static void s_mips_frame (int);
1019 static void s_mips_mask (int reg_type);
1020 static void s_mips_stab (int);
1021 static void s_mips_weakext (int);
1022 static void s_mips_file (int);
1023 static void s_mips_loc (int);
1024 static bfd_boolean pic_need_relax (symbolS *, asection *);
1025 static int relaxed_branch_length (fragS *, asection *, int);
1026 static int validate_mips_insn (const struct mips_opcode *);
1028 /* Table and functions used to map between CPU/ISA names, and
1029 ISA levels, and CPU numbers. */
1031 struct mips_cpu_info
1033 const char *name; /* CPU or ISA name. */
1034 int is_isa; /* Is this an ISA? (If 0, a CPU.) */
1035 int isa; /* ISA level. */
1036 int cpu; /* CPU number (default CPU if ISA). */
1039 static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *);
1040 static const struct mips_cpu_info *mips_cpu_info_from_isa (int);
1041 static const struct mips_cpu_info *mips_cpu_info_from_arch (int);
1045 The following pseudo-ops from the Kane and Heinrich MIPS book
1046 should be defined here, but are currently unsupported: .alias,
1047 .galive, .gjaldef, .gjrlive, .livereg, .noalias.
1049 The following pseudo-ops from the Kane and Heinrich MIPS book are
1050 specific to the type of debugging information being generated, and
1051 should be defined by the object format: .aent, .begin, .bend,
1052 .bgnb, .end, .endb, .ent, .fmask, .frame, .loc, .mask, .verstamp,
1055 The following pseudo-ops from the Kane and Heinrich MIPS book are
1056 not MIPS CPU specific, but are also not specific to the object file
1057 format. This file is probably the best place to define them, but
1058 they are not currently supported: .asm0, .endr, .lab, .repeat,
1061 static const pseudo_typeS mips_pseudo_table[] =
1063 /* MIPS specific pseudo-ops. */
1064 {"option", s_option, 0},
1065 {"set", s_mipsset, 0},
1066 {"rdata", s_change_sec, 'r'},
1067 {"sdata", s_change_sec, 's'},
1068 {"livereg", s_ignore, 0},
1069 {"abicalls", s_abicalls, 0},
1070 {"cpload", s_cpload, 0},
1071 {"cpsetup", s_cpsetup, 0},
1072 {"cplocal", s_cplocal, 0},
1073 {"cprestore", s_cprestore, 0},
1074 {"cpreturn", s_cpreturn, 0},
1075 {"gpvalue", s_gpvalue, 0},
1076 {"gpword", s_gpword, 0},
1077 {"gpdword", s_gpdword, 0},
1078 {"cpadd", s_cpadd, 0},
1079 {"insn", s_insn, 0},
1081 /* Relatively generic pseudo-ops that happen to be used on MIPS
1083 {"asciiz", stringer, 1},
1084 {"bss", s_change_sec, 'b'},
1086 {"half", s_cons, 1},
1087 {"dword", s_cons, 3},
1088 {"weakext", s_mips_weakext, 0},
1090 /* These pseudo-ops are defined in read.c, but must be overridden
1091 here for one reason or another. */
1092 {"align", s_align, 0},
1093 {"byte", s_cons, 0},
1094 {"data", s_change_sec, 'd'},
1095 {"double", s_float_cons, 'd'},
1096 {"float", s_float_cons, 'f'},
1097 {"globl", s_mips_globl, 0},
1098 {"global", s_mips_globl, 0},
1099 {"hword", s_cons, 1},
1101 {"long", s_cons, 2},
1102 {"octa", s_cons, 4},
1103 {"quad", s_cons, 3},
1104 {"section", s_change_section, 0},
1105 {"short", s_cons, 1},
1106 {"single", s_float_cons, 'f'},
1107 {"stabn", s_mips_stab, 'n'},
1108 {"text", s_change_sec, 't'},
1109 {"word", s_cons, 2},
1111 { "extern", ecoff_directive_extern, 0},
1116 static const pseudo_typeS mips_nonecoff_pseudo_table[] =
1118 /* These pseudo-ops should be defined by the object file format.
1119 However, a.out doesn't support them, so we have versions here. */
1120 {"aent", s_mips_ent, 1},
1121 {"bgnb", s_ignore, 0},
1122 {"end", s_mips_end, 0},
1123 {"endb", s_ignore, 0},
1124 {"ent", s_mips_ent, 0},
1125 {"file", s_mips_file, 0},
1126 {"fmask", s_mips_mask, 'F'},
1127 {"frame", s_mips_frame, 0},
1128 {"loc", s_mips_loc, 0},
1129 {"mask", s_mips_mask, 'R'},
1130 {"verstamp", s_ignore, 0},
1134 extern void pop_insert (const pseudo_typeS *);
1137 mips_pop_insert (void)
1139 pop_insert (mips_pseudo_table);
1140 if (! ECOFF_DEBUGGING)
1141 pop_insert (mips_nonecoff_pseudo_table);
1144 /* Symbols labelling the current insn. */
1146 struct insn_label_list
1148 struct insn_label_list *next;
1152 static struct insn_label_list *insn_labels;
1153 static struct insn_label_list *free_insn_labels;
1155 static void mips_clear_insn_labels (void);
1158 mips_clear_insn_labels (void)
1160 register struct insn_label_list **pl;
1162 for (pl = &free_insn_labels; *pl != NULL; pl = &(*pl)->next)
1168 static char *expr_end;
1170 /* Expressions which appear in instructions. These are set by
1173 static expressionS imm_expr;
1174 static expressionS imm2_expr;
1175 static expressionS offset_expr;
1177 /* Relocs associated with imm_expr and offset_expr. */
1179 static bfd_reloc_code_real_type imm_reloc[3]
1180 = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
1181 static bfd_reloc_code_real_type offset_reloc[3]
1182 = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
1184 /* These are set by mips16_ip if an explicit extension is used. */
1186 static bfd_boolean mips16_small, mips16_ext;
1189 /* The pdr segment for per procedure frame/regmask info. Not used for
1192 static segT pdr_seg;
1195 /* The default target format to use. */
1198 mips_target_format (void)
1200 switch (OUTPUT_FLAVOR)
1202 case bfd_target_ecoff_flavour:
1203 return target_big_endian ? "ecoff-bigmips" : ECOFF_LITTLE_FORMAT;
1204 case bfd_target_coff_flavour:
1206 case bfd_target_elf_flavour:
1208 if (!HAVE_64BIT_OBJECTS && !HAVE_NEWABI)
1209 return (target_big_endian
1210 ? "elf32-bigmips-vxworks"
1211 : "elf32-littlemips-vxworks");
1214 /* This is traditional mips. */
1215 return (target_big_endian
1216 ? (HAVE_64BIT_OBJECTS
1217 ? "elf64-tradbigmips"
1219 ? "elf32-ntradbigmips" : "elf32-tradbigmips"))
1220 : (HAVE_64BIT_OBJECTS
1221 ? "elf64-tradlittlemips"
1223 ? "elf32-ntradlittlemips" : "elf32-tradlittlemips")));
1225 return (target_big_endian
1226 ? (HAVE_64BIT_OBJECTS
1229 ? "elf32-nbigmips" : "elf32-bigmips"))
1230 : (HAVE_64BIT_OBJECTS
1231 ? "elf64-littlemips"
1233 ? "elf32-nlittlemips" : "elf32-littlemips")));
1241 /* Return the length of instruction INSN. */
1243 static inline unsigned int
1244 insn_length (const struct mips_cl_insn *insn)
1246 if (!mips_opts.mips16)
1248 return insn->mips16_absolute_jump_p || insn->use_extend ? 4 : 2;
1251 /* Initialise INSN from opcode entry MO. Leave its position unspecified. */
1254 create_insn (struct mips_cl_insn *insn, const struct mips_opcode *mo)
1259 insn->use_extend = FALSE;
1261 insn->insn_opcode = mo->match;
1264 for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
1265 insn->fixp[i] = NULL;
1266 insn->fixed_p = (mips_opts.noreorder > 0);
1267 insn->noreorder_p = (mips_opts.noreorder > 0);
1268 insn->mips16_absolute_jump_p = 0;
1271 /* Install INSN at the location specified by its "frag" and "where" fields. */
1274 install_insn (const struct mips_cl_insn *insn)
1276 char *f = insn->frag->fr_literal + insn->where;
1277 if (!mips_opts.mips16)
1278 md_number_to_chars (f, insn->insn_opcode, 4);
1279 else if (insn->mips16_absolute_jump_p)
1281 md_number_to_chars (f, insn->insn_opcode >> 16, 2);
1282 md_number_to_chars (f + 2, insn->insn_opcode & 0xffff, 2);
1286 if (insn->use_extend)
1288 md_number_to_chars (f, 0xf000 | insn->extend, 2);
1291 md_number_to_chars (f, insn->insn_opcode, 2);
1295 /* Move INSN to offset WHERE in FRAG. Adjust the fixups accordingly
1296 and install the opcode in the new location. */
1299 move_insn (struct mips_cl_insn *insn, fragS *frag, long where)
1304 insn->where = where;
1305 for (i = 0; i < ARRAY_SIZE (insn->fixp); i++)
1306 if (insn->fixp[i] != NULL)
1308 insn->fixp[i]->fx_frag = frag;
1309 insn->fixp[i]->fx_where = where;
1311 install_insn (insn);
1314 /* Add INSN to the end of the output. */
1317 add_fixed_insn (struct mips_cl_insn *insn)
1319 char *f = frag_more (insn_length (insn));
1320 move_insn (insn, frag_now, f - frag_now->fr_literal);
1323 /* Start a variant frag and move INSN to the start of the variant part,
1324 marking it as fixed. The other arguments are as for frag_var. */
1327 add_relaxed_insn (struct mips_cl_insn *insn, int max_chars, int var,
1328 relax_substateT subtype, symbolS *symbol, offsetT offset)
1330 frag_grow (max_chars);
1331 move_insn (insn, frag_now, frag_more (0) - frag_now->fr_literal);
1333 frag_var (rs_machine_dependent, max_chars, var,
1334 subtype, symbol, offset, NULL);
1337 /* Insert N copies of INSN into the history buffer, starting at
1338 position FIRST. Neither FIRST nor N need to be clipped. */
1341 insert_into_history (unsigned int first, unsigned int n,
1342 const struct mips_cl_insn *insn)
1344 if (mips_relax.sequence != 2)
1348 for (i = ARRAY_SIZE (history); i-- > first;)
1350 history[i] = history[i - n];
1356 /* Emit a nop instruction, recording it in the history buffer. */
1361 add_fixed_insn (NOP_INSN);
1362 insert_into_history (0, 1, NOP_INSN);
1365 /* Initialize vr4120_conflicts. There is a bit of duplication here:
1366 the idea is to make it obvious at a glance that each errata is
1370 init_vr4120_conflicts (void)
1372 #define CONFLICT(FIRST, SECOND) \
1373 vr4120_conflicts[FIX_VR4120_##FIRST] |= 1 << FIX_VR4120_##SECOND
1375 /* Errata 21 - [D]DIV[U] after [D]MACC */
1376 CONFLICT (MACC, DIV);
1377 CONFLICT (DMACC, DIV);
1379 /* Errata 23 - Continuous DMULT[U]/DMACC instructions. */
1380 CONFLICT (DMULT, DMULT);
1381 CONFLICT (DMULT, DMACC);
1382 CONFLICT (DMACC, DMULT);
1383 CONFLICT (DMACC, DMACC);
1385 /* Errata 24 - MT{LO,HI} after [D]MACC */
1386 CONFLICT (MACC, MTHILO);
1387 CONFLICT (DMACC, MTHILO);
1389 /* VR4181A errata MD(1): "If a MULT, MULTU, DMULT or DMULTU
1390 instruction is executed immediately after a MACC or DMACC
1391 instruction, the result of [either instruction] is incorrect." */
1392 CONFLICT (MACC, MULT);
1393 CONFLICT (MACC, DMULT);
1394 CONFLICT (DMACC, MULT);
1395 CONFLICT (DMACC, DMULT);
1397 /* VR4181A errata MD(4): "If a MACC or DMACC instruction is
1398 executed immediately after a DMULT, DMULTU, DIV, DIVU,
1399 DDIV or DDIVU instruction, the result of the MACC or
1400 DMACC instruction is incorrect.". */
1401 CONFLICT (DMULT, MACC);
1402 CONFLICT (DMULT, DMACC);
1403 CONFLICT (DIV, MACC);
1404 CONFLICT (DIV, DMACC);
1414 #define RTYPE_MASK 0x1ff00
1415 #define RTYPE_NUM 0x00100
1416 #define RTYPE_FPU 0x00200
1417 #define RTYPE_FCC 0x00400
1418 #define RTYPE_VEC 0x00800
1419 #define RTYPE_GP 0x01000
1420 #define RTYPE_CP0 0x02000
1421 #define RTYPE_PC 0x04000
1422 #define RTYPE_ACC 0x08000
1423 #define RTYPE_CCC 0x10000
1424 #define RNUM_MASK 0x000ff
1425 #define RWARN 0x80000
1427 #define GENERIC_REGISTER_NUMBERS \
1428 {"$0", RTYPE_NUM | 0}, \
1429 {"$1", RTYPE_NUM | 1}, \
1430 {"$2", RTYPE_NUM | 2}, \
1431 {"$3", RTYPE_NUM | 3}, \
1432 {"$4", RTYPE_NUM | 4}, \
1433 {"$5", RTYPE_NUM | 5}, \
1434 {"$6", RTYPE_NUM | 6}, \
1435 {"$7", RTYPE_NUM | 7}, \
1436 {"$8", RTYPE_NUM | 8}, \
1437 {"$9", RTYPE_NUM | 9}, \
1438 {"$10", RTYPE_NUM | 10}, \
1439 {"$11", RTYPE_NUM | 11}, \
1440 {"$12", RTYPE_NUM | 12}, \
1441 {"$13", RTYPE_NUM | 13}, \
1442 {"$14", RTYPE_NUM | 14}, \
1443 {"$15", RTYPE_NUM | 15}, \
1444 {"$16", RTYPE_NUM | 16}, \
1445 {"$17", RTYPE_NUM | 17}, \
1446 {"$18", RTYPE_NUM | 18}, \
1447 {"$19", RTYPE_NUM | 19}, \
1448 {"$20", RTYPE_NUM | 20}, \
1449 {"$21", RTYPE_NUM | 21}, \
1450 {"$22", RTYPE_NUM | 22}, \
1451 {"$23", RTYPE_NUM | 23}, \
1452 {"$24", RTYPE_NUM | 24}, \
1453 {"$25", RTYPE_NUM | 25}, \
1454 {"$26", RTYPE_NUM | 26}, \
1455 {"$27", RTYPE_NUM | 27}, \
1456 {"$28", RTYPE_NUM | 28}, \
1457 {"$29", RTYPE_NUM | 29}, \
1458 {"$30", RTYPE_NUM | 30}, \
1459 {"$31", RTYPE_NUM | 31}
1461 #define FPU_REGISTER_NAMES \
1462 {"$f0", RTYPE_FPU | 0}, \
1463 {"$f1", RTYPE_FPU | 1}, \
1464 {"$f2", RTYPE_FPU | 2}, \
1465 {"$f3", RTYPE_FPU | 3}, \
1466 {"$f4", RTYPE_FPU | 4}, \
1467 {"$f5", RTYPE_FPU | 5}, \
1468 {"$f6", RTYPE_FPU | 6}, \
1469 {"$f7", RTYPE_FPU | 7}, \
1470 {"$f8", RTYPE_FPU | 8}, \
1471 {"$f9", RTYPE_FPU | 9}, \
1472 {"$f10", RTYPE_FPU | 10}, \
1473 {"$f11", RTYPE_FPU | 11}, \
1474 {"$f12", RTYPE_FPU | 12}, \
1475 {"$f13", RTYPE_FPU | 13}, \
1476 {"$f14", RTYPE_FPU | 14}, \
1477 {"$f15", RTYPE_FPU | 15}, \
1478 {"$f16", RTYPE_FPU | 16}, \
1479 {"$f17", RTYPE_FPU | 17}, \
1480 {"$f18", RTYPE_FPU | 18}, \
1481 {"$f19", RTYPE_FPU | 19}, \
1482 {"$f20", RTYPE_FPU | 20}, \
1483 {"$f21", RTYPE_FPU | 21}, \
1484 {"$f22", RTYPE_FPU | 22}, \
1485 {"$f23", RTYPE_FPU | 23}, \
1486 {"$f24", RTYPE_FPU | 24}, \
1487 {"$f25", RTYPE_FPU | 25}, \
1488 {"$f26", RTYPE_FPU | 26}, \
1489 {"$f27", RTYPE_FPU | 27}, \
1490 {"$f28", RTYPE_FPU | 28}, \
1491 {"$f29", RTYPE_FPU | 29}, \
1492 {"$f30", RTYPE_FPU | 30}, \
1493 {"$f31", RTYPE_FPU | 31}
1495 #define FPU_CONDITION_CODE_NAMES \
1496 {"$fcc0", RTYPE_FCC | 0}, \
1497 {"$fcc1", RTYPE_FCC | 1}, \
1498 {"$fcc2", RTYPE_FCC | 2}, \
1499 {"$fcc3", RTYPE_FCC | 3}, \
1500 {"$fcc4", RTYPE_FCC | 4}, \
1501 {"$fcc5", RTYPE_FCC | 5}, \
1502 {"$fcc6", RTYPE_FCC | 6}, \
1503 {"$fcc7", RTYPE_FCC | 7}
1505 #define COPROC_CONDITION_CODE_NAMES \
1506 {"$cc0", RTYPE_FCC | RTYPE_CCC | 0}, \
1507 {"$cc1", RTYPE_FCC | RTYPE_CCC | 1}, \
1508 {"$cc2", RTYPE_FCC | RTYPE_CCC | 2}, \
1509 {"$cc3", RTYPE_FCC | RTYPE_CCC | 3}, \
1510 {"$cc4", RTYPE_FCC | RTYPE_CCC | 4}, \
1511 {"$cc5", RTYPE_FCC | RTYPE_CCC | 5}, \
1512 {"$cc6", RTYPE_FCC | RTYPE_CCC | 6}, \
1513 {"$cc7", RTYPE_FCC | RTYPE_CCC | 7}
1515 #define N32N64_SYMBOLIC_REGISTER_NAMES \
1516 {"$a4", RTYPE_GP | 8}, \
1517 {"$a5", RTYPE_GP | 9}, \
1518 {"$a6", RTYPE_GP | 10}, \
1519 {"$a7", RTYPE_GP | 11}, \
1520 {"$ta0", RTYPE_GP | 8}, /* alias for $a4 */ \
1521 {"$ta1", RTYPE_GP | 9}, /* alias for $a5 */ \
1522 {"$ta2", RTYPE_GP | 10}, /* alias for $a6 */ \
1523 {"$ta3", RTYPE_GP | 11}, /* alias for $a7 */ \
1524 {"$t0", RTYPE_GP | 12}, \
1525 {"$t1", RTYPE_GP | 13}, \
1526 {"$t2", RTYPE_GP | 14}, \
1527 {"$t3", RTYPE_GP | 15}
1529 #define O32_SYMBOLIC_REGISTER_NAMES \
1530 {"$t0", RTYPE_GP | 8}, \
1531 {"$t1", RTYPE_GP | 9}, \
1532 {"$t2", RTYPE_GP | 10}, \
1533 {"$t3", RTYPE_GP | 11}, \
1534 {"$t4", RTYPE_GP | 12}, \
1535 {"$t5", RTYPE_GP | 13}, \
1536 {"$t6", RTYPE_GP | 14}, \
1537 {"$t7", RTYPE_GP | 15}, \
1538 {"$ta0", RTYPE_GP | 12}, /* alias for $t4 */ \
1539 {"$ta1", RTYPE_GP | 13}, /* alias for $t5 */ \
1540 {"$ta2", RTYPE_GP | 14}, /* alias for $t6 */ \
1541 {"$ta3", RTYPE_GP | 15} /* alias for $t7 */
1543 /* Remaining symbolic register names */
1544 #define SYMBOLIC_REGISTER_NAMES \
1545 {"$zero", RTYPE_GP | 0}, \
1546 {"$at", RTYPE_GP | 1}, \
1547 {"$AT", RTYPE_GP | 1}, \
1548 {"$v0", RTYPE_GP | 2}, \
1549 {"$v1", RTYPE_GP | 3}, \
1550 {"$a0", RTYPE_GP | 4}, \
1551 {"$a1", RTYPE_GP | 5}, \
1552 {"$a2", RTYPE_GP | 6}, \
1553 {"$a3", RTYPE_GP | 7}, \
1554 {"$s0", RTYPE_GP | 16}, \
1555 {"$s1", RTYPE_GP | 17}, \
1556 {"$s2", RTYPE_GP | 18}, \
1557 {"$s3", RTYPE_GP | 19}, \
1558 {"$s4", RTYPE_GP | 20}, \
1559 {"$s5", RTYPE_GP | 21}, \
1560 {"$s6", RTYPE_GP | 22}, \
1561 {"$s7", RTYPE_GP | 23}, \
1562 {"$t8", RTYPE_GP | 24}, \
1563 {"$t9", RTYPE_GP | 25}, \
1564 {"$k0", RTYPE_GP | 26}, \
1565 {"$kt0", RTYPE_GP | 26}, \
1566 {"$k1", RTYPE_GP | 27}, \
1567 {"$kt1", RTYPE_GP | 27}, \
1568 {"$gp", RTYPE_GP | 28}, \
1569 {"$sp", RTYPE_GP | 29}, \
1570 {"$s8", RTYPE_GP | 30}, \
1571 {"$fp", RTYPE_GP | 30}, \
1572 {"$ra", RTYPE_GP | 31}
1574 #define MIPS16_SPECIAL_REGISTER_NAMES \
1575 {"$pc", RTYPE_PC | 0}
1577 #define MDMX_VECTOR_REGISTER_NAMES \
1578 /* {"$v0", RTYPE_VEC | 0}, clash with REG 2 above */ \
1579 /* {"$v1", RTYPE_VEC | 1}, clash with REG 3 above */ \
1580 {"$v2", RTYPE_VEC | 2}, \
1581 {"$v3", RTYPE_VEC | 3}, \
1582 {"$v4", RTYPE_VEC | 4}, \
1583 {"$v5", RTYPE_VEC | 5}, \
1584 {"$v6", RTYPE_VEC | 6}, \
1585 {"$v7", RTYPE_VEC | 7}, \
1586 {"$v8", RTYPE_VEC | 8}, \
1587 {"$v9", RTYPE_VEC | 9}, \
1588 {"$v10", RTYPE_VEC | 10}, \
1589 {"$v11", RTYPE_VEC | 11}, \
1590 {"$v12", RTYPE_VEC | 12}, \
1591 {"$v13", RTYPE_VEC | 13}, \
1592 {"$v14", RTYPE_VEC | 14}, \
1593 {"$v15", RTYPE_VEC | 15}, \
1594 {"$v16", RTYPE_VEC | 16}, \
1595 {"$v17", RTYPE_VEC | 17}, \
1596 {"$v18", RTYPE_VEC | 18}, \
1597 {"$v19", RTYPE_VEC | 19}, \
1598 {"$v20", RTYPE_VEC | 20}, \
1599 {"$v21", RTYPE_VEC | 21}, \
1600 {"$v22", RTYPE_VEC | 22}, \
1601 {"$v23", RTYPE_VEC | 23}, \
1602 {"$v24", RTYPE_VEC | 24}, \
1603 {"$v25", RTYPE_VEC | 25}, \
1604 {"$v26", RTYPE_VEC | 26}, \
1605 {"$v27", RTYPE_VEC | 27}, \
1606 {"$v28", RTYPE_VEC | 28}, \
1607 {"$v29", RTYPE_VEC | 29}, \
1608 {"$v30", RTYPE_VEC | 30}, \
1609 {"$v31", RTYPE_VEC | 31}
1611 #define MIPS_DSP_ACCUMULATOR_NAMES \
1612 {"$ac0", RTYPE_ACC | 0}, \
1613 {"$ac1", RTYPE_ACC | 1}, \
1614 {"$ac2", RTYPE_ACC | 2}, \
1615 {"$ac3", RTYPE_ACC | 3}
1617 static const struct regname reg_names[] = {
1618 GENERIC_REGISTER_NUMBERS,
1620 FPU_CONDITION_CODE_NAMES,
1621 COPROC_CONDITION_CODE_NAMES,
1623 /* The $txx registers depends on the abi,
1624 these will be added later into the symbol table from
1625 one of the tables below once mips_abi is set after
1626 parsing of arguments from the command line. */
1627 SYMBOLIC_REGISTER_NAMES,
1629 MIPS16_SPECIAL_REGISTER_NAMES,
1630 MDMX_VECTOR_REGISTER_NAMES,
1631 MIPS_DSP_ACCUMULATOR_NAMES,
1635 static const struct regname reg_names_o32[] = {
1636 O32_SYMBOLIC_REGISTER_NAMES,
1640 static const struct regname reg_names_n32n64[] = {
1641 N32N64_SYMBOLIC_REGISTER_NAMES,
1646 reg_lookup (char **s, unsigned int types, unsigned int *regnop)
1653 /* Find end of name. */
1655 if (is_name_beginner (*e))
1657 while (is_part_of_name (*e))
1660 /* Terminate name. */
1664 /* Look for a register symbol. */
1665 if ((symbolP = symbol_find (*s)) && S_GET_SEGMENT (symbolP) == reg_section)
1667 int r = S_GET_VALUE (symbolP);
1669 reg = r & RNUM_MASK;
1670 else if ((types & RTYPE_VEC) && (r & ~1) == (RTYPE_GP | 2))
1671 /* Convert GP reg $v0/1 to MDMX reg $v0/1! */
1672 reg = (r & RNUM_MASK) - 2;
1674 /* Else see if this is a register defined in an itbl entry. */
1675 else if ((types & RTYPE_GP) && itbl_have_entries)
1682 if (itbl_get_reg_val (n, &r))
1683 reg = r & RNUM_MASK;
1686 /* Advance to next token if a register was recognised. */
1689 else if (types & RWARN)
1690 as_warn ("Unrecognized register name `%s'", *s);
1698 /* This function is called once, at assembler startup time. It should set up
1699 all the tables, etc. that the MD part of the assembler will need. */
1704 register const char *retval = NULL;
1708 if (mips_pic != NO_PIC)
1710 if (g_switch_seen && g_switch_value != 0)
1711 as_bad (_("-G may not be used in position-independent code"));
1715 if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, file_mips_arch))
1716 as_warn (_("Could not set architecture and machine"));
1718 op_hash = hash_new ();
1720 for (i = 0; i < NUMOPCODES;)
1722 const char *name = mips_opcodes[i].name;
1724 retval = hash_insert (op_hash, name, (void *) &mips_opcodes[i]);
1727 fprintf (stderr, _("internal error: can't hash `%s': %s\n"),
1728 mips_opcodes[i].name, retval);
1729 /* Probably a memory allocation problem? Give up now. */
1730 as_fatal (_("Broken assembler. No assembly attempted."));
1734 if (mips_opcodes[i].pinfo != INSN_MACRO)
1736 if (!validate_mips_insn (&mips_opcodes[i]))
1738 if (nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
1740 create_insn (&nop_insn, mips_opcodes + i);
1741 nop_insn.fixed_p = 1;
1746 while ((i < NUMOPCODES) && !strcmp (mips_opcodes[i].name, name));
1749 mips16_op_hash = hash_new ();
1752 while (i < bfd_mips16_num_opcodes)
1754 const char *name = mips16_opcodes[i].name;
1756 retval = hash_insert (mips16_op_hash, name, (void *) &mips16_opcodes[i]);
1758 as_fatal (_("internal: can't hash `%s': %s"),
1759 mips16_opcodes[i].name, retval);
1762 if (mips16_opcodes[i].pinfo != INSN_MACRO
1763 && ((mips16_opcodes[i].match & mips16_opcodes[i].mask)
1764 != mips16_opcodes[i].match))
1766 fprintf (stderr, _("internal error: bad mips16 opcode: %s %s\n"),
1767 mips16_opcodes[i].name, mips16_opcodes[i].args);
1770 if (mips16_nop_insn.insn_mo == NULL && strcmp (name, "nop") == 0)
1772 create_insn (&mips16_nop_insn, mips16_opcodes + i);
1773 mips16_nop_insn.fixed_p = 1;
1777 while (i < bfd_mips16_num_opcodes
1778 && strcmp (mips16_opcodes[i].name, name) == 0);
1782 as_fatal (_("Broken assembler. No assembly attempted."));
1784 /* We add all the general register names to the symbol table. This
1785 helps us detect invalid uses of them. */
1786 for (i = 0; reg_names[i].name; i++)
1787 symbol_table_insert (symbol_new (reg_names[i].name, reg_section,
1788 reg_names[i].num, // & RNUM_MASK,
1789 &zero_address_frag));
1791 for (i = 0; reg_names_n32n64[i].name; i++)
1792 symbol_table_insert (symbol_new (reg_names_n32n64[i].name, reg_section,
1793 reg_names_n32n64[i].num, // & RNUM_MASK,
1794 &zero_address_frag));
1796 for (i = 0; reg_names_o32[i].name; i++)
1797 symbol_table_insert (symbol_new (reg_names_o32[i].name, reg_section,
1798 reg_names_o32[i].num, // & RNUM_MASK,
1799 &zero_address_frag));
1801 mips_no_prev_insn ();
1804 mips_cprmask[0] = 0;
1805 mips_cprmask[1] = 0;
1806 mips_cprmask[2] = 0;
1807 mips_cprmask[3] = 0;
1809 /* set the default alignment for the text section (2**2) */
1810 record_alignment (text_section, 2);
1812 bfd_set_gp_size (stdoutput, g_switch_value);
1815 if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
1817 /* On a native system other than VxWorks, sections must be aligned
1818 to 16 byte boundaries. When configured for an embedded ELF
1819 target, we don't bother. */
1820 if (strcmp (TARGET_OS, "elf") != 0
1821 && strcmp (TARGET_OS, "vxworks") != 0)
1823 (void) bfd_set_section_alignment (stdoutput, text_section, 4);
1824 (void) bfd_set_section_alignment (stdoutput, data_section, 4);
1825 (void) bfd_set_section_alignment (stdoutput, bss_section, 4);
1828 /* Create a .reginfo section for register masks and a .mdebug
1829 section for debugging information. */
1837 subseg = now_subseg;
1839 /* The ABI says this section should be loaded so that the
1840 running program can access it. However, we don't load it
1841 if we are configured for an embedded target */
1842 flags = SEC_READONLY | SEC_DATA;
1843 if (strcmp (TARGET_OS, "elf") != 0)
1844 flags |= SEC_ALLOC | SEC_LOAD;
1846 if (mips_abi != N64_ABI)
1848 sec = subseg_new (".reginfo", (subsegT) 0);
1850 bfd_set_section_flags (stdoutput, sec, flags);
1851 bfd_set_section_alignment (stdoutput, sec, HAVE_NEWABI ? 3 : 2);
1853 mips_regmask_frag = frag_more (sizeof (Elf32_External_RegInfo));
1857 /* The 64-bit ABI uses a .MIPS.options section rather than
1858 .reginfo section. */
1859 sec = subseg_new (".MIPS.options", (subsegT) 0);
1860 bfd_set_section_flags (stdoutput, sec, flags);
1861 bfd_set_section_alignment (stdoutput, sec, 3);
1863 /* Set up the option header. */
1865 Elf_Internal_Options opthdr;
1868 opthdr.kind = ODK_REGINFO;
1869 opthdr.size = (sizeof (Elf_External_Options)
1870 + sizeof (Elf64_External_RegInfo));
1873 f = frag_more (sizeof (Elf_External_Options));
1874 bfd_mips_elf_swap_options_out (stdoutput, &opthdr,
1875 (Elf_External_Options *) f);
1877 mips_regmask_frag = frag_more (sizeof (Elf64_External_RegInfo));
1881 if (ECOFF_DEBUGGING)
1883 sec = subseg_new (".mdebug", (subsegT) 0);
1884 (void) bfd_set_section_flags (stdoutput, sec,
1885 SEC_HAS_CONTENTS | SEC_READONLY);
1886 (void) bfd_set_section_alignment (stdoutput, sec, 2);
1888 else if (OUTPUT_FLAVOR == bfd_target_elf_flavour && mips_flag_pdr)
1890 pdr_seg = subseg_new (".pdr", (subsegT) 0);
1891 (void) bfd_set_section_flags (stdoutput, pdr_seg,
1892 SEC_READONLY | SEC_RELOC
1894 (void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
1897 subseg_set (seg, subseg);
1900 #endif /* OBJ_ELF */
1902 if (! ECOFF_DEBUGGING)
1905 if (mips_fix_vr4120)
1906 init_vr4120_conflicts ();
1912 if (! ECOFF_DEBUGGING)
1917 md_assemble (char *str)
1919 struct mips_cl_insn insn;
1920 bfd_reloc_code_real_type unused_reloc[3]
1921 = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
1923 imm_expr.X_op = O_absent;
1924 imm2_expr.X_op = O_absent;
1925 offset_expr.X_op = O_absent;
1926 imm_reloc[0] = BFD_RELOC_UNUSED;
1927 imm_reloc[1] = BFD_RELOC_UNUSED;
1928 imm_reloc[2] = BFD_RELOC_UNUSED;
1929 offset_reloc[0] = BFD_RELOC_UNUSED;
1930 offset_reloc[1] = BFD_RELOC_UNUSED;
1931 offset_reloc[2] = BFD_RELOC_UNUSED;
1933 if (mips_opts.mips16)
1934 mips16_ip (str, &insn);
1937 mips_ip (str, &insn);
1938 DBG ((_("returned from mips_ip(%s) insn_opcode = 0x%x\n"),
1939 str, insn.insn_opcode));
1944 as_bad ("%s `%s'", insn_error, str);
1948 if (insn.insn_mo->pinfo == INSN_MACRO)
1951 if (mips_opts.mips16)
1952 mips16_macro (&insn);
1959 if (imm_expr.X_op != O_absent)
1960 append_insn (&insn, &imm_expr, imm_reloc);
1961 else if (offset_expr.X_op != O_absent)
1962 append_insn (&insn, &offset_expr, offset_reloc);
1964 append_insn (&insn, NULL, unused_reloc);
1968 /* Return true if the given relocation might need a matching %lo().
1969 This is only "might" because SVR4 R_MIPS_GOT16 relocations only
1970 need a matching %lo() when applied to local symbols. */
1972 static inline bfd_boolean
1973 reloc_needs_lo_p (bfd_reloc_code_real_type reloc)
1975 return (HAVE_IN_PLACE_ADDENDS
1976 && (reloc == BFD_RELOC_HI16_S
1977 || reloc == BFD_RELOC_MIPS16_HI16_S
1978 /* VxWorks R_MIPS_GOT16 relocs never need a matching %lo();
1979 all GOT16 relocations evaluate to "G". */
1980 || (reloc == BFD_RELOC_MIPS_GOT16 && mips_pic != VXWORKS_PIC)));
1983 /* Return true if the given fixup is followed by a matching R_MIPS_LO16
1986 static inline bfd_boolean
1987 fixup_has_matching_lo_p (fixS *fixp)
1989 return (fixp->fx_next != NULL
1990 && (fixp->fx_next->fx_r_type == BFD_RELOC_LO16
1991 || fixp->fx_next->fx_r_type == BFD_RELOC_MIPS16_LO16)
1992 && fixp->fx_addsy == fixp->fx_next->fx_addsy
1993 && fixp->fx_offset == fixp->fx_next->fx_offset);
1996 /* See whether instruction IP reads register REG. CLASS is the type
2000 insn_uses_reg (const struct mips_cl_insn *ip, unsigned int reg,
2001 enum mips_regclass class)
2003 if (class == MIPS16_REG)
2005 assert (mips_opts.mips16);
2006 reg = mips16_to_32_reg_map[reg];
2007 class = MIPS_GR_REG;
2010 /* Don't report on general register ZERO, since it never changes. */
2011 if (class == MIPS_GR_REG && reg == ZERO)
2014 if (class == MIPS_FP_REG)
2016 assert (! mips_opts.mips16);
2017 /* If we are called with either $f0 or $f1, we must check $f0.
2018 This is not optimal, because it will introduce an unnecessary
2019 NOP between "lwc1 $f0" and "swc1 $f1". To fix this we would
2020 need to distinguish reading both $f0 and $f1 or just one of
2021 them. Note that we don't have to check the other way,
2022 because there is no instruction that sets both $f0 and $f1
2023 and requires a delay. */
2024 if ((ip->insn_mo->pinfo & INSN_READ_FPR_S)
2025 && ((EXTRACT_OPERAND (FS, *ip) & ~(unsigned) 1)
2026 == (reg &~ (unsigned) 1)))
2028 if ((ip->insn_mo->pinfo & INSN_READ_FPR_T)
2029 && ((EXTRACT_OPERAND (FT, *ip) & ~(unsigned) 1)
2030 == (reg &~ (unsigned) 1)))
2033 else if (! mips_opts.mips16)
2035 if ((ip->insn_mo->pinfo & INSN_READ_GPR_S)
2036 && EXTRACT_OPERAND (RS, *ip) == reg)
2038 if ((ip->insn_mo->pinfo & INSN_READ_GPR_T)
2039 && EXTRACT_OPERAND (RT, *ip) == reg)
2044 if ((ip->insn_mo->pinfo & MIPS16_INSN_READ_X)
2045 && mips16_to_32_reg_map[MIPS16_EXTRACT_OPERAND (RX, *ip)] == reg)
2047 if ((ip->insn_mo->pinfo & MIPS16_INSN_READ_Y)
2048 && mips16_to_32_reg_map[MIPS16_EXTRACT_OPERAND (RY, *ip)] == reg)
2050 if ((ip->insn_mo->pinfo & MIPS16_INSN_READ_Z)
2051 && (mips16_to_32_reg_map[MIPS16_EXTRACT_OPERAND (MOVE32Z, *ip)]
2054 if ((ip->insn_mo->pinfo & MIPS16_INSN_READ_T) && reg == TREG)
2056 if ((ip->insn_mo->pinfo & MIPS16_INSN_READ_SP) && reg == SP)
2058 if ((ip->insn_mo->pinfo & MIPS16_INSN_READ_31) && reg == RA)
2060 if ((ip->insn_mo->pinfo & MIPS16_INSN_READ_GPR_X)
2061 && MIPS16_EXTRACT_OPERAND (REGR32, *ip) == reg)
2068 /* This function returns true if modifying a register requires a
2072 reg_needs_delay (unsigned int reg)
2074 unsigned long prev_pinfo;
2076 prev_pinfo = history[0].insn_mo->pinfo;
2077 if (! mips_opts.noreorder
2078 && (((prev_pinfo & INSN_LOAD_MEMORY_DELAY)
2079 && ! gpr_interlocks)
2080 || ((prev_pinfo & INSN_LOAD_COPROC_DELAY)
2081 && ! cop_interlocks)))
2083 /* A load from a coprocessor or from memory. All load delays
2084 delay the use of general register rt for one instruction. */
2085 /* Itbl support may require additional care here. */
2086 know (prev_pinfo & INSN_WRITE_GPR_T);
2087 if (reg == EXTRACT_OPERAND (RT, history[0]))
2094 /* Move all labels in insn_labels to the current insertion point. */
2097 mips_move_labels (void)
2099 struct insn_label_list *l;
2102 for (l = insn_labels; l != NULL; l = l->next)
2104 assert (S_GET_SEGMENT (l->label) == now_seg);
2105 symbol_set_frag (l->label, frag_now);
2106 val = (valueT) frag_now_fix ();
2107 /* mips16 text labels are stored as odd. */
2108 if (mips_opts.mips16)
2110 S_SET_VALUE (l->label, val);
2114 /* Mark instruction labels in mips16 mode. This permits the linker to
2115 handle them specially, such as generating jalx instructions when
2116 needed. We also make them odd for the duration of the assembly, in
2117 order to generate the right sort of code. We will make them even
2118 in the adjust_symtab routine, while leaving them marked. This is
2119 convenient for the debugger and the disassembler. The linker knows
2120 to make them odd again. */
2123 mips16_mark_labels (void)
2125 if (mips_opts.mips16)
2127 struct insn_label_list *l;
2130 for (l = insn_labels; l != NULL; l = l->next)
2133 if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
2134 S_SET_OTHER (l->label, STO_MIPS16);
2136 val = S_GET_VALUE (l->label);
2138 S_SET_VALUE (l->label, val + 1);
2143 /* End the current frag. Make it a variant frag and record the
2147 relax_close_frag (void)
2149 mips_macro_warning.first_frag = frag_now;
2150 frag_var (rs_machine_dependent, 0, 0,
2151 RELAX_ENCODE (mips_relax.sizes[0], mips_relax.sizes[1]),
2152 mips_relax.symbol, 0, (char *) mips_relax.first_fixup);
2154 memset (&mips_relax.sizes, 0, sizeof (mips_relax.sizes));
2155 mips_relax.first_fixup = 0;
2158 /* Start a new relaxation sequence whose expansion depends on SYMBOL.
2159 See the comment above RELAX_ENCODE for more details. */
2162 relax_start (symbolS *symbol)
2164 assert (mips_relax.sequence == 0);
2165 mips_relax.sequence = 1;
2166 mips_relax.symbol = symbol;
2169 /* Start generating the second version of a relaxable sequence.
2170 See the comment above RELAX_ENCODE for more details. */
2175 assert (mips_relax.sequence == 1);
2176 mips_relax.sequence = 2;
2179 /* End the current relaxable sequence. */
2184 assert (mips_relax.sequence == 2);
2185 relax_close_frag ();
2186 mips_relax.sequence = 0;
2189 /* Classify an instruction according to the FIX_VR4120_* enumeration.
2190 Return NUM_FIX_VR4120_CLASSES if the instruction isn't affected
2191 by VR4120 errata. */
2194 classify_vr4120_insn (const char *name)
2196 if (strncmp (name, "macc", 4) == 0)
2197 return FIX_VR4120_MACC;
2198 if (strncmp (name, "dmacc", 5) == 0)
2199 return FIX_VR4120_DMACC;
2200 if (strncmp (name, "mult", 4) == 0)
2201 return FIX_VR4120_MULT;
2202 if (strncmp (name, "dmult", 5) == 0)
2203 return FIX_VR4120_DMULT;
2204 if (strstr (name, "div"))
2205 return FIX_VR4120_DIV;
2206 if (strcmp (name, "mtlo") == 0 || strcmp (name, "mthi") == 0)
2207 return FIX_VR4120_MTHILO;
2208 return NUM_FIX_VR4120_CLASSES;
2211 /* Return the number of instructions that must separate INSN1 and INSN2,
2212 where INSN1 is the earlier instruction. Return the worst-case value
2213 for any INSN2 if INSN2 is null. */
2216 insns_between (const struct mips_cl_insn *insn1,
2217 const struct mips_cl_insn *insn2)
2219 unsigned long pinfo1, pinfo2;
2221 /* This function needs to know which pinfo flags are set for INSN2
2222 and which registers INSN2 uses. The former is stored in PINFO2 and
2223 the latter is tested via INSN2_USES_REG. If INSN2 is null, PINFO2
2224 will have every flag set and INSN2_USES_REG will always return true. */
2225 pinfo1 = insn1->insn_mo->pinfo;
2226 pinfo2 = insn2 ? insn2->insn_mo->pinfo : ~0U;
2228 #define INSN2_USES_REG(REG, CLASS) \
2229 (insn2 == NULL || insn_uses_reg (insn2, REG, CLASS))
2231 /* For most targets, write-after-read dependencies on the HI and LO
2232 registers must be separated by at least two instructions. */
2233 if (!hilo_interlocks)
2235 if ((pinfo1 & INSN_READ_LO) && (pinfo2 & INSN_WRITE_LO))
2237 if ((pinfo1 & INSN_READ_HI) && (pinfo2 & INSN_WRITE_HI))
2241 /* If we're working around r7000 errata, there must be two instructions
2242 between an mfhi or mflo and any instruction that uses the result. */
2243 if (mips_7000_hilo_fix
2244 && MF_HILO_INSN (pinfo1)
2245 && INSN2_USES_REG (EXTRACT_OPERAND (RD, *insn1), MIPS_GR_REG))
2248 /* If working around VR4120 errata, check for combinations that need
2249 a single intervening instruction. */
2250 if (mips_fix_vr4120)
2252 unsigned int class1, class2;
2254 class1 = classify_vr4120_insn (insn1->insn_mo->name);
2255 if (class1 != NUM_FIX_VR4120_CLASSES && vr4120_conflicts[class1] != 0)
2259 class2 = classify_vr4120_insn (insn2->insn_mo->name);
2260 if (vr4120_conflicts[class1] & (1 << class2))
2265 if (!mips_opts.mips16)
2267 /* Check for GPR or coprocessor load delays. All such delays
2268 are on the RT register. */
2269 /* Itbl support may require additional care here. */
2270 if ((!gpr_interlocks && (pinfo1 & INSN_LOAD_MEMORY_DELAY))
2271 || (!cop_interlocks && (pinfo1 & INSN_LOAD_COPROC_DELAY)))
2273 know (pinfo1 & INSN_WRITE_GPR_T);
2274 if (INSN2_USES_REG (EXTRACT_OPERAND (RT, *insn1), MIPS_GR_REG))
2278 /* Check for generic coprocessor hazards.
2280 This case is not handled very well. There is no special
2281 knowledge of CP0 handling, and the coprocessors other than
2282 the floating point unit are not distinguished at all. */
2283 /* Itbl support may require additional care here. FIXME!
2284 Need to modify this to include knowledge about
2285 user specified delays! */
2286 else if ((!cop_interlocks && (pinfo1 & INSN_COPROC_MOVE_DELAY))
2287 || (!cop_mem_interlocks && (pinfo1 & INSN_COPROC_MEMORY_DELAY)))
2289 /* Handle cases where INSN1 writes to a known general coprocessor
2290 register. There must be a one instruction delay before INSN2
2291 if INSN2 reads that register, otherwise no delay is needed. */
2292 if (pinfo1 & INSN_WRITE_FPR_T)
2294 if (INSN2_USES_REG (EXTRACT_OPERAND (FT, *insn1), MIPS_FP_REG))
2297 else if (pinfo1 & INSN_WRITE_FPR_S)
2299 if (INSN2_USES_REG (EXTRACT_OPERAND (FS, *insn1), MIPS_FP_REG))
2304 /* Read-after-write dependencies on the control registers
2305 require a two-instruction gap. */
2306 if ((pinfo1 & INSN_WRITE_COND_CODE)
2307 && (pinfo2 & INSN_READ_COND_CODE))
2310 /* We don't know exactly what INSN1 does. If INSN2 is
2311 also a coprocessor instruction, assume there must be
2312 a one instruction gap. */
2313 if (pinfo2 & INSN_COP)
2318 /* Check for read-after-write dependencies on the coprocessor
2319 control registers in cases where INSN1 does not need a general
2320 coprocessor delay. This means that INSN1 is a floating point
2321 comparison instruction. */
2322 /* Itbl support may require additional care here. */
2323 else if (!cop_interlocks
2324 && (pinfo1 & INSN_WRITE_COND_CODE)
2325 && (pinfo2 & INSN_READ_COND_CODE))
2329 #undef INSN2_USES_REG
2334 /* Return the number of nops that would be needed to work around the
2335 VR4130 mflo/mfhi errata if instruction INSN immediately followed
2336 the MAX_VR4130_NOPS instructions described by HISTORY. */
2339 nops_for_vr4130 (const struct mips_cl_insn *history,
2340 const struct mips_cl_insn *insn)
2344 /* Check if the instruction writes to HI or LO. MTHI and MTLO
2345 are not affected by the errata. */
2347 && ((insn->insn_mo->pinfo & (INSN_WRITE_HI | INSN_WRITE_LO)) == 0
2348 || strcmp (insn->insn_mo->name, "mtlo") == 0
2349 || strcmp (insn->insn_mo->name, "mthi") == 0))
2352 /* Search for the first MFLO or MFHI. */
2353 for (i = 0; i < MAX_VR4130_NOPS; i++)
2354 if (!history[i].noreorder_p && MF_HILO_INSN (history[i].insn_mo->pinfo))
2356 /* Extract the destination register. */
2357 if (mips_opts.mips16)
2358 reg = mips16_to_32_reg_map[MIPS16_EXTRACT_OPERAND (RX, history[i])];
2360 reg = EXTRACT_OPERAND (RD, history[i]);
2362 /* No nops are needed if INSN reads that register. */
2363 if (insn != NULL && insn_uses_reg (insn, reg, MIPS_GR_REG))
2366 /* ...or if any of the intervening instructions do. */
2367 for (j = 0; j < i; j++)
2368 if (insn_uses_reg (&history[j], reg, MIPS_GR_REG))
2371 return MAX_VR4130_NOPS - i;
2376 /* Return the number of nops that would be needed if instruction INSN
2377 immediately followed the MAX_NOPS instructions given by HISTORY,
2378 where HISTORY[0] is the most recent instruction. If INSN is null,
2379 return the worse-case number of nops for any instruction. */
2382 nops_for_insn (const struct mips_cl_insn *history,
2383 const struct mips_cl_insn *insn)
2385 int i, nops, tmp_nops;
2388 for (i = 0; i < MAX_DELAY_NOPS; i++)
2389 if (!history[i].noreorder_p)
2391 tmp_nops = insns_between (history + i, insn) - i;
2392 if (tmp_nops > nops)
2396 if (mips_fix_vr4130)
2398 tmp_nops = nops_for_vr4130 (history, insn);
2399 if (tmp_nops > nops)
2406 /* The variable arguments provide NUM_INSNS extra instructions that
2407 might be added to HISTORY. Return the largest number of nops that
2408 would be needed after the extended sequence. */
2411 nops_for_sequence (int num_insns, const struct mips_cl_insn *history, ...)
2414 struct mips_cl_insn buffer[MAX_NOPS];
2415 struct mips_cl_insn *cursor;
2418 va_start (args, history);
2419 cursor = buffer + num_insns;
2420 memcpy (cursor, history, (MAX_NOPS - num_insns) * sizeof (*cursor));
2421 while (cursor > buffer)
2422 *--cursor = *va_arg (args, const struct mips_cl_insn *);
2424 nops = nops_for_insn (buffer, NULL);
2429 /* Like nops_for_insn, but if INSN is a branch, take into account the
2430 worst-case delay for the branch target. */
2433 nops_for_insn_or_target (const struct mips_cl_insn *history,
2434 const struct mips_cl_insn *insn)
2438 nops = nops_for_insn (history, insn);
2439 if (insn->insn_mo->pinfo & (INSN_UNCOND_BRANCH_DELAY
2440 | INSN_COND_BRANCH_DELAY
2441 | INSN_COND_BRANCH_LIKELY))
2443 tmp_nops = nops_for_sequence (2, history, insn, NOP_INSN);
2444 if (tmp_nops > nops)
2447 else if (mips_opts.mips16 && (insn->insn_mo->pinfo & MIPS16_INSN_BRANCH))
2449 tmp_nops = nops_for_sequence (1, history, insn);
2450 if (tmp_nops > nops)
2456 /* Output an instruction. IP is the instruction information.
2457 ADDRESS_EXPR is an operand of the instruction to be used with
2461 append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
2462 bfd_reloc_code_real_type *reloc_type)
2464 register unsigned long prev_pinfo, pinfo;
2465 relax_stateT prev_insn_frag_type = 0;
2466 bfd_boolean relaxed_branch = FALSE;
2468 /* Mark instruction labels in mips16 mode. */
2469 mips16_mark_labels ();
2471 prev_pinfo = history[0].insn_mo->pinfo;
2472 pinfo = ip->insn_mo->pinfo;
2474 if (mips_relax.sequence != 2 && !mips_opts.noreorder)
2476 /* There are a lot of optimizations we could do that we don't.
2477 In particular, we do not, in general, reorder instructions.
2478 If you use gcc with optimization, it will reorder
2479 instructions and generally do much more optimization then we
2480 do here; repeating all that work in the assembler would only
2481 benefit hand written assembly code, and does not seem worth
2483 int nops = (mips_optimize == 0
2484 ? nops_for_insn (history, NULL)
2485 : nops_for_insn_or_target (history, ip));
2489 unsigned long old_frag_offset;
2492 old_frag = frag_now;
2493 old_frag_offset = frag_now_fix ();
2495 for (i = 0; i < nops; i++)
2500 listing_prev_line ();
2501 /* We may be at the start of a variant frag. In case we
2502 are, make sure there is enough space for the frag
2503 after the frags created by listing_prev_line. The
2504 argument to frag_grow here must be at least as large
2505 as the argument to all other calls to frag_grow in
2506 this file. We don't have to worry about being in the
2507 middle of a variant frag, because the variants insert
2508 all needed nop instructions themselves. */
2512 mips_move_labels ();
2514 #ifndef NO_ECOFF_DEBUGGING
2515 if (ECOFF_DEBUGGING)
2516 ecoff_fix_loc (old_frag, old_frag_offset);
2520 else if (mips_relax.sequence != 2 && prev_nop_frag != NULL)
2522 /* Work out how many nops in prev_nop_frag are needed by IP. */
2523 int nops = nops_for_insn_or_target (history, ip);
2524 assert (nops <= prev_nop_frag_holds);
2526 /* Enforce NOPS as a minimum. */
2527 if (nops > prev_nop_frag_required)
2528 prev_nop_frag_required = nops;
2530 if (prev_nop_frag_holds == prev_nop_frag_required)
2532 /* Settle for the current number of nops. Update the history
2533 accordingly (for the benefit of any future .set reorder code). */
2534 prev_nop_frag = NULL;
2535 insert_into_history (prev_nop_frag_since,
2536 prev_nop_frag_holds, NOP_INSN);
2540 /* Allow this instruction to replace one of the nops that was
2541 tentatively added to prev_nop_frag. */
2542 prev_nop_frag->fr_fix -= mips_opts.mips16 ? 2 : 4;
2543 prev_nop_frag_holds--;
2544 prev_nop_frag_since++;
2549 /* The value passed to dwarf2_emit_insn is the distance between
2550 the beginning of the current instruction and the address that
2551 should be recorded in the debug tables. For MIPS16 debug info
2552 we want to use ISA-encoded addresses, so we pass -1 for an
2553 address higher by one than the current. */
2554 dwarf2_emit_insn (mips_opts.mips16 ? -1 : 0);
2557 /* Record the frag type before frag_var. */
2558 if (history[0].frag)
2559 prev_insn_frag_type = history[0].frag->fr_type;
2562 && *reloc_type == BFD_RELOC_16_PCREL_S2
2563 && (pinfo & INSN_UNCOND_BRANCH_DELAY || pinfo & INSN_COND_BRANCH_DELAY
2564 || pinfo & INSN_COND_BRANCH_LIKELY)
2565 && mips_relax_branch
2566 /* Don't try branch relaxation within .set nomacro, or within
2567 .set noat if we use $at for PIC computations. If it turns
2568 out that the branch was out-of-range, we'll get an error. */
2569 && !mips_opts.warn_about_macros
2570 && !(mips_opts.noat && mips_pic != NO_PIC)
2571 && !mips_opts.mips16)
2573 relaxed_branch = TRUE;
2574 add_relaxed_insn (ip, (relaxed_branch_length
2576 (pinfo & INSN_UNCOND_BRANCH_DELAY) ? -1
2577 : (pinfo & INSN_COND_BRANCH_LIKELY) ? 1
2580 (pinfo & INSN_UNCOND_BRANCH_DELAY,
2581 pinfo & INSN_COND_BRANCH_LIKELY,
2582 pinfo & INSN_WRITE_GPR_31,
2584 address_expr->X_add_symbol,
2585 address_expr->X_add_number);
2586 *reloc_type = BFD_RELOC_UNUSED;
2588 else if (*reloc_type > BFD_RELOC_UNUSED)
2590 /* We need to set up a variant frag. */
2591 assert (mips_opts.mips16 && address_expr != NULL);
2592 add_relaxed_insn (ip, 4, 0,
2594 (*reloc_type - BFD_RELOC_UNUSED,
2595 mips16_small, mips16_ext,
2596 prev_pinfo & INSN_UNCOND_BRANCH_DELAY,
2597 history[0].mips16_absolute_jump_p),
2598 make_expr_symbol (address_expr), 0);
2600 else if (mips_opts.mips16
2602 && *reloc_type != BFD_RELOC_MIPS16_JMP)
2604 if ((pinfo & INSN_UNCOND_BRANCH_DELAY) == 0)
2605 /* Make sure there is enough room to swap this instruction with
2606 a following jump instruction. */
2608 add_fixed_insn (ip);
2612 if (mips_opts.mips16
2613 && mips_opts.noreorder
2614 && (prev_pinfo & INSN_UNCOND_BRANCH_DELAY) != 0)
2615 as_warn (_("extended instruction in delay slot"));
2617 if (mips_relax.sequence)
2619 /* If we've reached the end of this frag, turn it into a variant
2620 frag and record the information for the instructions we've
2622 if (frag_room () < 4)
2623 relax_close_frag ();
2624 mips_relax.sizes[mips_relax.sequence - 1] += 4;
2627 if (mips_relax.sequence != 2)
2628 mips_macro_warning.sizes[0] += 4;
2629 if (mips_relax.sequence != 1)
2630 mips_macro_warning.sizes[1] += 4;
2632 if (mips_opts.mips16)
2635 ip->mips16_absolute_jump_p = (*reloc_type == BFD_RELOC_MIPS16_JMP);
2637 add_fixed_insn (ip);
2640 if (address_expr != NULL && *reloc_type <= BFD_RELOC_UNUSED)
2642 if (address_expr->X_op == O_constant)
2646 switch (*reloc_type)
2649 ip->insn_opcode |= address_expr->X_add_number;
2652 case BFD_RELOC_MIPS_HIGHEST:
2653 tmp = (address_expr->X_add_number + 0x800080008000ull) >> 48;
2654 ip->insn_opcode |= tmp & 0xffff;
2657 case BFD_RELOC_MIPS_HIGHER:
2658 tmp = (address_expr->X_add_number + 0x80008000ull) >> 32;
2659 ip->insn_opcode |= tmp & 0xffff;
2662 case BFD_RELOC_HI16_S:
2663 tmp = (address_expr->X_add_number + 0x8000) >> 16;
2664 ip->insn_opcode |= tmp & 0xffff;
2667 case BFD_RELOC_HI16:
2668 ip->insn_opcode |= (address_expr->X_add_number >> 16) & 0xffff;
2671 case BFD_RELOC_UNUSED:
2672 case BFD_RELOC_LO16:
2673 case BFD_RELOC_MIPS_GOT_DISP:
2674 ip->insn_opcode |= address_expr->X_add_number & 0xffff;
2677 case BFD_RELOC_MIPS_JMP:
2678 if ((address_expr->X_add_number & 3) != 0)
2679 as_bad (_("jump to misaligned address (0x%lx)"),
2680 (unsigned long) address_expr->X_add_number);
2681 ip->insn_opcode |= (address_expr->X_add_number >> 2) & 0x3ffffff;
2684 case BFD_RELOC_MIPS16_JMP:
2685 if ((address_expr->X_add_number & 3) != 0)
2686 as_bad (_("jump to misaligned address (0x%lx)"),
2687 (unsigned long) address_expr->X_add_number);
2689 (((address_expr->X_add_number & 0x7c0000) << 3)
2690 | ((address_expr->X_add_number & 0xf800000) >> 7)
2691 | ((address_expr->X_add_number & 0x3fffc) >> 2));
2694 case BFD_RELOC_16_PCREL_S2:
2695 if ((address_expr->X_add_number & 3) != 0)
2696 as_bad (_("branch to misaligned address (0x%lx)"),
2697 (unsigned long) address_expr->X_add_number);
2698 if (mips_relax_branch)
2700 if ((address_expr->X_add_number + 0x20000) & ~0x3ffff)
2701 as_bad (_("branch address range overflow (0x%lx)"),
2702 (unsigned long) address_expr->X_add_number);
2703 ip->insn_opcode |= (address_expr->X_add_number >> 2) & 0xffff;
2710 else if (*reloc_type < BFD_RELOC_UNUSED)
2713 reloc_howto_type *howto;
2716 /* In a compound relocation, it is the final (outermost)
2717 operator that determines the relocated field. */
2718 for (i = 1; i < 3; i++)
2719 if (reloc_type[i] == BFD_RELOC_UNUSED)
2722 howto = bfd_reloc_type_lookup (stdoutput, reloc_type[i - 1]);
2723 ip->fixp[0] = fix_new_exp (ip->frag, ip->where,
2724 bfd_get_reloc_size (howto),
2726 reloc_type[0] == BFD_RELOC_16_PCREL_S2,
2729 /* These relocations can have an addend that won't fit in
2730 4 octets for 64bit assembly. */
2732 && ! howto->partial_inplace
2733 && (reloc_type[0] == BFD_RELOC_16
2734 || reloc_type[0] == BFD_RELOC_32
2735 || reloc_type[0] == BFD_RELOC_MIPS_JMP
2736 || reloc_type[0] == BFD_RELOC_HI16_S
2737 || reloc_type[0] == BFD_RELOC_LO16
2738 || reloc_type[0] == BFD_RELOC_GPREL16
2739 || reloc_type[0] == BFD_RELOC_MIPS_LITERAL
2740 || reloc_type[0] == BFD_RELOC_GPREL32
2741 || reloc_type[0] == BFD_RELOC_64
2742 || reloc_type[0] == BFD_RELOC_CTOR
2743 || reloc_type[0] == BFD_RELOC_MIPS_SUB
2744 || reloc_type[0] == BFD_RELOC_MIPS_HIGHEST
2745 || reloc_type[0] == BFD_RELOC_MIPS_HIGHER
2746 || reloc_type[0] == BFD_RELOC_MIPS_SCN_DISP
2747 || reloc_type[0] == BFD_RELOC_MIPS_REL16
2748 || reloc_type[0] == BFD_RELOC_MIPS_RELGOT
2749 || reloc_type[0] == BFD_RELOC_MIPS16_GPREL
2750 || reloc_type[0] == BFD_RELOC_MIPS16_HI16_S
2751 || reloc_type[0] == BFD_RELOC_MIPS16_LO16))
2752 ip->fixp[0]->fx_no_overflow = 1;
2754 if (mips_relax.sequence)
2756 if (mips_relax.first_fixup == 0)
2757 mips_relax.first_fixup = ip->fixp[0];
2759 else if (reloc_needs_lo_p (*reloc_type))
2761 struct mips_hi_fixup *hi_fixup;
2763 /* Reuse the last entry if it already has a matching %lo. */
2764 hi_fixup = mips_hi_fixup_list;
2766 || !fixup_has_matching_lo_p (hi_fixup->fixp))
2768 hi_fixup = ((struct mips_hi_fixup *)
2769 xmalloc (sizeof (struct mips_hi_fixup)));
2770 hi_fixup->next = mips_hi_fixup_list;
2771 mips_hi_fixup_list = hi_fixup;
2773 hi_fixup->fixp = ip->fixp[0];
2774 hi_fixup->seg = now_seg;
2777 /* Add fixups for the second and third relocations, if given.
2778 Note that the ABI allows the second relocation to be
2779 against RSS_UNDEF, RSS_GP, RSS_GP0 or RSS_LOC. At the
2780 moment we only use RSS_UNDEF, but we could add support
2781 for the others if it ever becomes necessary. */
2782 for (i = 1; i < 3; i++)
2783 if (reloc_type[i] != BFD_RELOC_UNUSED)
2785 ip->fixp[i] = fix_new (ip->frag, ip->where,
2786 ip->fixp[0]->fx_size, NULL, 0,
2787 FALSE, reloc_type[i]);
2789 /* Use fx_tcbit to mark compound relocs. */
2790 ip->fixp[0]->fx_tcbit = 1;
2791 ip->fixp[i]->fx_tcbit = 1;
2797 /* Update the register mask information. */
2798 if (! mips_opts.mips16)
2800 if (pinfo & INSN_WRITE_GPR_D)
2801 mips_gprmask |= 1 << EXTRACT_OPERAND (RD, *ip);
2802 if ((pinfo & (INSN_WRITE_GPR_T | INSN_READ_GPR_T)) != 0)
2803 mips_gprmask |= 1 << EXTRACT_OPERAND (RT, *ip);
2804 if (pinfo & INSN_READ_GPR_S)
2805 mips_gprmask |= 1 << EXTRACT_OPERAND (RS, *ip);
2806 if (pinfo & INSN_WRITE_GPR_31)
2807 mips_gprmask |= 1 << RA;
2808 if (pinfo & INSN_WRITE_FPR_D)
2809 mips_cprmask[1] |= 1 << EXTRACT_OPERAND (FD, *ip);
2810 if ((pinfo & (INSN_WRITE_FPR_S | INSN_READ_FPR_S)) != 0)
2811 mips_cprmask[1] |= 1 << EXTRACT_OPERAND (FS, *ip);
2812 if ((pinfo & (INSN_WRITE_FPR_T | INSN_READ_FPR_T)) != 0)
2813 mips_cprmask[1] |= 1 << EXTRACT_OPERAND (FT, *ip);
2814 if ((pinfo & INSN_READ_FPR_R) != 0)
2815 mips_cprmask[1] |= 1 << EXTRACT_OPERAND (FR, *ip);
2816 if (pinfo & INSN_COP)
2818 /* We don't keep enough information to sort these cases out.
2819 The itbl support does keep this information however, although
2820 we currently don't support itbl fprmats as part of the cop
2821 instruction. May want to add this support in the future. */
2823 /* Never set the bit for $0, which is always zero. */
2824 mips_gprmask &= ~1 << 0;
2828 if (pinfo & (MIPS16_INSN_WRITE_X | MIPS16_INSN_READ_X))
2829 mips_gprmask |= 1 << MIPS16_EXTRACT_OPERAND (RX, *ip);
2830 if (pinfo & (MIPS16_INSN_WRITE_Y | MIPS16_INSN_READ_Y))
2831 mips_gprmask |= 1 << MIPS16_EXTRACT_OPERAND (RY, *ip);
2832 if (pinfo & MIPS16_INSN_WRITE_Z)
2833 mips_gprmask |= 1 << MIPS16_EXTRACT_OPERAND (RZ, *ip);
2834 if (pinfo & (MIPS16_INSN_WRITE_T | MIPS16_INSN_READ_T))
2835 mips_gprmask |= 1 << TREG;
2836 if (pinfo & (MIPS16_INSN_WRITE_SP | MIPS16_INSN_READ_SP))
2837 mips_gprmask |= 1 << SP;
2838 if (pinfo & (MIPS16_INSN_WRITE_31 | MIPS16_INSN_READ_31))
2839 mips_gprmask |= 1 << RA;
2840 if (pinfo & MIPS16_INSN_WRITE_GPR_Y)
2841 mips_gprmask |= 1 << MIPS16OP_EXTRACT_REG32R (ip->insn_opcode);
2842 if (pinfo & MIPS16_INSN_READ_Z)
2843 mips_gprmask |= 1 << MIPS16_EXTRACT_OPERAND (MOVE32Z, *ip);
2844 if (pinfo & MIPS16_INSN_READ_GPR_X)
2845 mips_gprmask |= 1 << MIPS16_EXTRACT_OPERAND (REGR32, *ip);
2848 if (mips_relax.sequence != 2 && !mips_opts.noreorder)
2850 /* Filling the branch delay slot is more complex. We try to
2851 switch the branch with the previous instruction, which we can
2852 do if the previous instruction does not set up a condition
2853 that the branch tests and if the branch is not itself the
2854 target of any branch. */
2855 if ((pinfo & INSN_UNCOND_BRANCH_DELAY)
2856 || (pinfo & INSN_COND_BRANCH_DELAY))
2858 if (mips_optimize < 2
2859 /* If we have seen .set volatile or .set nomove, don't
2861 || mips_opts.nomove != 0
2862 /* We can't swap if the previous instruction's position
2864 || history[0].fixed_p
2865 /* If the previous previous insn was in a .set
2866 noreorder, we can't swap. Actually, the MIPS
2867 assembler will swap in this situation. However, gcc
2868 configured -with-gnu-as will generate code like
2874 in which we can not swap the bne and INSN. If gcc is
2875 not configured -with-gnu-as, it does not output the
2877 || history[1].noreorder_p
2878 /* If the branch is itself the target of a branch, we
2879 can not swap. We cheat on this; all we check for is
2880 whether there is a label on this instruction. If
2881 there are any branches to anything other than a
2882 label, users must use .set noreorder. */
2883 || insn_labels != NULL
2884 /* If the previous instruction is in a variant frag
2885 other than this branch's one, we cannot do the swap.
2886 This does not apply to the mips16, which uses variant
2887 frags for different purposes. */
2888 || (! mips_opts.mips16
2889 && prev_insn_frag_type == rs_machine_dependent)
2890 /* Check for conflicts between the branch and the instructions
2891 before the candidate delay slot. */
2892 || nops_for_insn (history + 1, ip) > 0
2893 /* Check for conflicts between the swapped sequence and the
2894 target of the branch. */
2895 || nops_for_sequence (2, history + 1, ip, history) > 0
2896 /* We do not swap with a trap instruction, since it
2897 complicates trap handlers to have the trap
2898 instruction be in a delay slot. */
2899 || (prev_pinfo & INSN_TRAP)
2900 /* If the branch reads a register that the previous
2901 instruction sets, we can not swap. */
2902 || (! mips_opts.mips16
2903 && (prev_pinfo & INSN_WRITE_GPR_T)
2904 && insn_uses_reg (ip, EXTRACT_OPERAND (RT, history[0]),
2906 || (! mips_opts.mips16
2907 && (prev_pinfo & INSN_WRITE_GPR_D)
2908 && insn_uses_reg (ip, EXTRACT_OPERAND (RD, history[0]),
2910 || (mips_opts.mips16
2911 && (((prev_pinfo & MIPS16_INSN_WRITE_X)
2913 (ip, MIPS16_EXTRACT_OPERAND (RX, history[0]),
2915 || ((prev_pinfo & MIPS16_INSN_WRITE_Y)
2917 (ip, MIPS16_EXTRACT_OPERAND (RY, history[0]),
2919 || ((prev_pinfo & MIPS16_INSN_WRITE_Z)
2921 (ip, MIPS16_EXTRACT_OPERAND (RZ, history[0]),
2923 || ((prev_pinfo & MIPS16_INSN_WRITE_T)
2924 && insn_uses_reg (ip, TREG, MIPS_GR_REG))
2925 || ((prev_pinfo & MIPS16_INSN_WRITE_31)
2926 && insn_uses_reg (ip, RA, MIPS_GR_REG))
2927 || ((prev_pinfo & MIPS16_INSN_WRITE_GPR_Y)
2928 && insn_uses_reg (ip,
2929 MIPS16OP_EXTRACT_REG32R
2930 (history[0].insn_opcode),
2932 /* If the branch writes a register that the previous
2933 instruction sets, we can not swap (we know that
2934 branches write only to RD or to $31). */
2935 || (! mips_opts.mips16
2936 && (prev_pinfo & INSN_WRITE_GPR_T)
2937 && (((pinfo & INSN_WRITE_GPR_D)
2938 && (EXTRACT_OPERAND (RT, history[0])
2939 == EXTRACT_OPERAND (RD, *ip)))
2940 || ((pinfo & INSN_WRITE_GPR_31)
2941 && EXTRACT_OPERAND (RT, history[0]) == RA)))
2942 || (! mips_opts.mips16
2943 && (prev_pinfo & INSN_WRITE_GPR_D)
2944 && (((pinfo & INSN_WRITE_GPR_D)
2945 && (EXTRACT_OPERAND (RD, history[0])
2946 == EXTRACT_OPERAND (RD, *ip)))
2947 || ((pinfo & INSN_WRITE_GPR_31)
2948 && EXTRACT_OPERAND (RD, history[0]) == RA)))
2949 || (mips_opts.mips16
2950 && (pinfo & MIPS16_INSN_WRITE_31)
2951 && ((prev_pinfo & MIPS16_INSN_WRITE_31)
2952 || ((prev_pinfo & MIPS16_INSN_WRITE_GPR_Y)
2953 && (MIPS16OP_EXTRACT_REG32R (history[0].insn_opcode)
2955 /* If the branch writes a register that the previous
2956 instruction reads, we can not swap (we know that
2957 branches only write to RD or to $31). */
2958 || (! mips_opts.mips16
2959 && (pinfo & INSN_WRITE_GPR_D)
2960 && insn_uses_reg (&history[0],
2961 EXTRACT_OPERAND (RD, *ip),
2963 || (! mips_opts.mips16
2964 && (pinfo & INSN_WRITE_GPR_31)
2965 && insn_uses_reg (&history[0], RA, MIPS_GR_REG))
2966 || (mips_opts.mips16
2967 && (pinfo & MIPS16_INSN_WRITE_31)
2968 && insn_uses_reg (&history[0], RA, MIPS_GR_REG))
2969 /* If one instruction sets a condition code and the
2970 other one uses a condition code, we can not swap. */
2971 || ((pinfo & INSN_READ_COND_CODE)
2972 && (prev_pinfo & INSN_WRITE_COND_CODE))
2973 || ((pinfo & INSN_WRITE_COND_CODE)
2974 && (prev_pinfo & INSN_READ_COND_CODE))
2975 /* If the previous instruction uses the PC, we can not
2977 || (mips_opts.mips16
2978 && (prev_pinfo & MIPS16_INSN_READ_PC))
2979 /* If the previous instruction had a fixup in mips16
2980 mode, we can not swap. This normally means that the
2981 previous instruction was a 4 byte branch anyhow. */
2982 || (mips_opts.mips16 && history[0].fixp[0])
2983 /* If the previous instruction is a sync, sync.l, or
2984 sync.p, we can not swap. */
2985 || (prev_pinfo & INSN_SYNC))
2987 if (mips_opts.mips16
2988 && (pinfo & INSN_UNCOND_BRANCH_DELAY)
2989 && (pinfo & (MIPS16_INSN_READ_X | MIPS16_INSN_READ_31))
2990 && (mips_opts.isa == ISA_MIPS32
2991 || mips_opts.isa == ISA_MIPS32R2
2992 || mips_opts.isa == ISA_MIPS64
2993 || mips_opts.isa == ISA_MIPS64R2))
2995 /* Convert MIPS16 jr/jalr into a "compact" jump. */
2996 ip->insn_opcode |= 0x0080;
2998 insert_into_history (0, 1, ip);
3002 /* We could do even better for unconditional branches to
3003 portions of this object file; we could pick up the
3004 instruction at the destination, put it in the delay
3005 slot, and bump the destination address. */
3006 insert_into_history (0, 1, ip);
3010 if (mips_relax.sequence)
3011 mips_relax.sizes[mips_relax.sequence - 1] += 4;
3015 /* It looks like we can actually do the swap. */
3016 struct mips_cl_insn delay = history[0];
3017 if (mips_opts.mips16)
3019 know (delay.frag == ip->frag);
3020 move_insn (ip, delay.frag, delay.where);
3021 move_insn (&delay, ip->frag, ip->where + insn_length (ip));
3023 else if (relaxed_branch)
3025 /* Add the delay slot instruction to the end of the
3026 current frag and shrink the fixed part of the
3027 original frag. If the branch occupies the tail of
3028 the latter, move it backwards to cover the gap. */
3029 delay.frag->fr_fix -= 4;
3030 if (delay.frag == ip->frag)
3031 move_insn (ip, ip->frag, ip->where - 4);
3032 add_fixed_insn (&delay);
3036 move_insn (&delay, ip->frag, ip->where);
3037 move_insn (ip, history[0].frag, history[0].where);
3041 insert_into_history (0, 1, &delay);
3044 /* If that was an unconditional branch, forget the previous
3045 insn information. */
3046 if (pinfo & INSN_UNCOND_BRANCH_DELAY)
3047 mips_no_prev_insn ();
3049 else if (pinfo & INSN_COND_BRANCH_LIKELY)
3051 /* We don't yet optimize a branch likely. What we should do
3052 is look at the target, copy the instruction found there
3053 into the delay slot, and increment the branch to jump to
3054 the next instruction. */
3055 insert_into_history (0, 1, ip);
3059 insert_into_history (0, 1, ip);
3062 insert_into_history (0, 1, ip);
3064 /* We just output an insn, so the next one doesn't have a label. */
3065 mips_clear_insn_labels ();
3068 /* Forget that there was any previous instruction or label. */
3071 mips_no_prev_insn (void)
3073 prev_nop_frag = NULL;
3074 insert_into_history (0, ARRAY_SIZE (history), NOP_INSN);
3075 mips_clear_insn_labels ();
3078 /* This function must be called before we emit something other than
3079 instructions. It is like mips_no_prev_insn except that it inserts
3080 any NOPS that might be needed by previous instructions. */
3083 mips_emit_delays (void)
3085 if (! mips_opts.noreorder)
3087 int nops = nops_for_insn (history, NULL);
3091 add_fixed_insn (NOP_INSN);
3092 mips_move_labels ();
3095 mips_no_prev_insn ();
3098 /* Start a (possibly nested) noreorder block. */
3101 start_noreorder (void)
3103 if (mips_opts.noreorder == 0)
3108 /* None of the instructions before the .set noreorder can be moved. */
3109 for (i = 0; i < ARRAY_SIZE (history); i++)
3110 history[i].fixed_p = 1;
3112 /* Insert any nops that might be needed between the .set noreorder
3113 block and the previous instructions. We will later remove any
3114 nops that turn out not to be needed. */
3115 nops = nops_for_insn (history, NULL);
3118 if (mips_optimize != 0)
3120 /* Record the frag which holds the nop instructions, so
3121 that we can remove them if we don't need them. */
3122 frag_grow (mips_opts.mips16 ? nops * 2 : nops * 4);
3123 prev_nop_frag = frag_now;
3124 prev_nop_frag_holds = nops;
3125 prev_nop_frag_required = 0;
3126 prev_nop_frag_since = 0;
3129 for (; nops > 0; --nops)
3130 add_fixed_insn (NOP_INSN);
3132 /* Move on to a new frag, so that it is safe to simply
3133 decrease the size of prev_nop_frag. */
3134 frag_wane (frag_now);
3136 mips_move_labels ();
3138 mips16_mark_labels ();
3139 mips_clear_insn_labels ();
3141 mips_opts.noreorder++;
3142 mips_any_noreorder = 1;
3145 /* End a nested noreorder block. */
3148 end_noreorder (void)
3150 mips_opts.noreorder--;
3151 if (mips_opts.noreorder == 0 && prev_nop_frag != NULL)
3153 /* Commit to inserting prev_nop_frag_required nops and go back to
3154 handling nop insertion the .set reorder way. */
3155 prev_nop_frag->fr_fix -= ((prev_nop_frag_holds - prev_nop_frag_required)
3156 * (mips_opts.mips16 ? 2 : 4));
3157 insert_into_history (prev_nop_frag_since,
3158 prev_nop_frag_required, NOP_INSN);
3159 prev_nop_frag = NULL;
3163 /* Set up global variables for the start of a new macro. */
3168 memset (&mips_macro_warning.sizes, 0, sizeof (mips_macro_warning.sizes));
3169 mips_macro_warning.delay_slot_p = (mips_opts.noreorder
3170 && (history[0].insn_mo->pinfo
3171 & (INSN_UNCOND_BRANCH_DELAY
3172 | INSN_COND_BRANCH_DELAY
3173 | INSN_COND_BRANCH_LIKELY)) != 0);
3176 /* Given that a macro is longer than 4 bytes, return the appropriate warning
3177 for it. Return null if no warning is needed. SUBTYPE is a bitmask of
3178 RELAX_DELAY_SLOT and RELAX_NOMACRO. */
3181 macro_warning (relax_substateT subtype)
3183 if (subtype & RELAX_DELAY_SLOT)
3184 return _("Macro instruction expanded into multiple instructions"
3185 " in a branch delay slot");
3186 else if (subtype & RELAX_NOMACRO)
3187 return _("Macro instruction expanded into multiple instructions");
3192 /* Finish up a macro. Emit warnings as appropriate. */
3197 if (mips_macro_warning.sizes[0] > 4 || mips_macro_warning.sizes[1] > 4)
3199 relax_substateT subtype;
3201 /* Set up the relaxation warning flags. */
3203 if (mips_macro_warning.sizes[1] > mips_macro_warning.sizes[0])
3204 subtype |= RELAX_SECOND_LONGER;
3205 if (mips_opts.warn_about_macros)
3206 subtype |= RELAX_NOMACRO;
3207 if (mips_macro_warning.delay_slot_p)
3208 subtype |= RELAX_DELAY_SLOT;
3210 if (mips_macro_warning.sizes[0] > 4 && mips_macro_warning.sizes[1] > 4)
3212 /* Either the macro has a single implementation or both
3213 implementations are longer than 4 bytes. Emit the
3215 const char *msg = macro_warning (subtype);
3221 /* One implementation might need a warning but the other
3222 definitely doesn't. */
3223 mips_macro_warning.first_frag->fr_subtype |= subtype;
3228 /* Read a macro's relocation codes from *ARGS and store them in *R.
3229 The first argument in *ARGS will be either the code for a single
3230 relocation or -1 followed by the three codes that make up a
3231 composite relocation. */
3234 macro_read_relocs (va_list *args, bfd_reloc_code_real_type *r)
3238 next = va_arg (*args, int);
3240 r[0] = (bfd_reloc_code_real_type) next;
3242 for (i = 0; i < 3; i++)
3243 r[i] = (bfd_reloc_code_real_type) va_arg (*args, int);
3246 /* Build an instruction created by a macro expansion. This is passed
3247 a pointer to the count of instructions created so far, an
3248 expression, the name of the instruction to build, an operand format
3249 string, and corresponding arguments. */
3252 macro_build (expressionS *ep, const char *name, const char *fmt, ...)
3254 const struct mips_opcode *mo;
3255 struct mips_cl_insn insn;
3256 bfd_reloc_code_real_type r[3];
3259 va_start (args, fmt);
3261 if (mips_opts.mips16)
3263 mips16_macro_build (ep, name, fmt, args);
3268 r[0] = BFD_RELOC_UNUSED;
3269 r[1] = BFD_RELOC_UNUSED;
3270 r[2] = BFD_RELOC_UNUSED;
3271 mo = (struct mips_opcode *) hash_find (op_hash, name);
3273 assert (strcmp (name, mo->name) == 0);
3275 /* Search until we get a match for NAME. It is assumed here that
3276 macros will never generate MDMX or MIPS-3D instructions. */
3277 while (strcmp (fmt, mo->args) != 0
3278 || mo->pinfo == INSN_MACRO
3279 || !OPCODE_IS_MEMBER (mo,
3281 | (mips_opts.mips16 ? INSN_MIPS16 : 0)
3282 | (mips_opts.ase_smartmips ? INSN_SMARTMIPS : 0)),
3284 || (mips_opts.arch == CPU_R4650 && (mo->pinfo & FP_D) != 0))
3288 assert (strcmp (name, mo->name) == 0);
3291 create_insn (&insn, mo);
3309 INSERT_OPERAND (SHAMT, insn, va_arg (args, int));
3314 /* Note that in the macro case, these arguments are already
3315 in MSB form. (When handling the instruction in the
3316 non-macro case, these arguments are sizes from which
3317 MSB values must be calculated.) */
3318 INSERT_OPERAND (INSMSB, insn, va_arg (args, int));
3324 /* Note that in the macro case, these arguments are already
3325 in MSBD form. (When handling the instruction in the
3326 non-macro case, these arguments are sizes from which
3327 MSBD values must be calculated.) */
3328 INSERT_OPERAND (EXTMSBD, insn, va_arg (args, int));
3339 INSERT_OPERAND (RT, insn, va_arg (args, int));
3343 INSERT_OPERAND (CODE, insn, va_arg (args, int));
3348 INSERT_OPERAND (FT, insn, va_arg (args, int));
3354 INSERT_OPERAND (RD, insn, va_arg (args, int));
3359 int tmp = va_arg (args, int);
3361 INSERT_OPERAND (RT, insn, tmp);
3362 INSERT_OPERAND (RD, insn, tmp);
3368 INSERT_OPERAND (FS, insn, va_arg (args, int));
3375 INSERT_OPERAND (SHAMT, insn, va_arg (args, int));
3379 INSERT_OPERAND (FD, insn, va_arg (args, int));
3383 INSERT_OPERAND (CODE20, insn, va_arg (args, int));
3387 INSERT_OPERAND (CODE19, insn, va_arg (args, int));
3391 INSERT_OPERAND (CODE2, insn, va_arg (args, int));
3398 INSERT_OPERAND (RS, insn, va_arg (args, int));
3404 macro_read_relocs (&args, r);
3405 assert (*r == BFD_RELOC_GPREL16
3406 || *r == BFD_RELOC_MIPS_LITERAL
3407 || *r == BFD_RELOC_MIPS_HIGHER
3408 || *r == BFD_RELOC_HI16_S
3409 || *r == BFD_RELOC_LO16
3410 || *r == BFD_RELOC_MIPS_GOT16
3411 || *r == BFD_RELOC_MIPS_CALL16
3412 || *r == BFD_RELOC_MIPS_GOT_DISP
3413 || *r == BFD_RELOC_MIPS_GOT_PAGE
3414 || *r == BFD_RELOC_MIPS_GOT_OFST
3415 || *r == BFD_RELOC_MIPS_GOT_LO16
3416 || *r == BFD_RELOC_MIPS_CALL_LO16);
3420 macro_read_relocs (&args, r);
3422 && (ep->X_op == O_constant
3423 || (ep->X_op == O_symbol
3424 && (*r == BFD_RELOC_MIPS_HIGHEST
3425 || *r == BFD_RELOC_HI16_S
3426 || *r == BFD_RELOC_HI16
3427 || *r == BFD_RELOC_GPREL16
3428 || *r == BFD_RELOC_MIPS_GOT_HI16
3429 || *r == BFD_RELOC_MIPS_CALL_HI16))));
3433 assert (ep != NULL);
3436 * This allows macro() to pass an immediate expression for
3437 * creating short branches without creating a symbol.
3439 * We don't allow branch relaxation for these branches, as
3440 * they should only appear in ".set nomacro" anyway.
3442 if (ep->X_op == O_constant)
3444 if ((ep->X_add_number & 3) != 0)
3445 as_bad (_("branch to misaligned address (0x%lx)"),
3446 (unsigned long) ep->X_add_number);
3447 if ((ep->X_add_number + 0x20000) & ~0x3ffff)
3448 as_bad (_("branch address range overflow (0x%lx)"),
3449 (unsigned long) ep->X_add_number);
3450 insn.insn_opcode |= (ep->X_add_number >> 2) & 0xffff;
3454 *r = BFD_RELOC_16_PCREL_S2;
3458 assert (ep != NULL);
3459 *r = BFD_RELOC_MIPS_JMP;
3463 insn.insn_opcode |= va_arg (args, unsigned long);
3467 insn.insn_opcode |= va_arg (args, unsigned long) << OP_SH_CACHE;
3476 assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
3478 append_insn (&insn, ep, r);
3482 mips16_macro_build (expressionS *ep, const char *name, const char *fmt,
3485 struct mips_opcode *mo;
3486 struct mips_cl_insn insn;
3487 bfd_reloc_code_real_type r[3]
3488 = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
3490 mo = (struct mips_opcode *) hash_find (mips16_op_hash, name);
3492 assert (strcmp (name, mo->name) == 0);
3494 while (strcmp (fmt, mo->args) != 0 || mo->pinfo == INSN_MACRO)
3498 assert (strcmp (name, mo->name) == 0);
3501 create_insn (&insn, mo);
3519 MIPS16_INSERT_OPERAND (RY, insn, va_arg (args, int));
3524 MIPS16_INSERT_OPERAND (RX, insn, va_arg (args, int));
3528 MIPS16_INSERT_OPERAND (RZ, insn, va_arg (args, int));
3532 MIPS16_INSERT_OPERAND (MOVE32Z, insn, va_arg (args, int));
3542 MIPS16_INSERT_OPERAND (REGR32, insn, va_arg (args, int));
3549 regno = va_arg (args, int);
3550 regno = ((regno & 7) << 2) | ((regno & 0x18) >> 3);
3551 insn.insn_opcode |= regno << MIPS16OP_SH_REG32R;
3572 assert (ep != NULL);
3574 if (ep->X_op != O_constant)
3575 *r = (int) BFD_RELOC_UNUSED + c;
3578 mips16_immed (NULL, 0, c, ep->X_add_number, FALSE, FALSE,
3579 FALSE, &insn.insn_opcode, &insn.use_extend,
3582 *r = BFD_RELOC_UNUSED;
3588 MIPS16_INSERT_OPERAND (IMM6, insn, va_arg (args, int));
3595 assert (*r == BFD_RELOC_UNUSED ? ep == NULL : ep != NULL);
3597 append_insn (&insn, ep, r);
3601 * Sign-extend 32-bit mode constants that have bit 31 set and all
3602 * higher bits unset.
3605 normalize_constant_expr (expressionS *ex)
3607 if (ex->X_op == O_constant
3608 && IS_ZEXT_32BIT_NUM (ex->X_add_number))
3609 ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
3614 * Sign-extend 32-bit mode address offsets that have bit 31 set and
3615 * all higher bits unset.
3618 normalize_address_expr (expressionS *ex)
3620 if (((ex->X_op == O_constant && HAVE_32BIT_ADDRESSES)
3621 || (ex->X_op == O_symbol && HAVE_32BIT_SYMBOLS))
3622 && IS_ZEXT_32BIT_NUM (ex->X_add_number))
3623 ex->X_add_number = (((ex->X_add_number & 0xffffffff) ^ 0x80000000)
3628 * Generate a "jalr" instruction with a relocation hint to the called
3629 * function. This occurs in NewABI PIC code.
3632 macro_build_jalr (expressionS *ep)
3641 macro_build (NULL, "jalr", "d,s", RA, PIC_CALL_REG);
3643 fix_new_exp (frag_now, f - frag_now->fr_literal,
3644 4, ep, FALSE, BFD_RELOC_MIPS_JALR);
3648 * Generate a "lui" instruction.
3651 macro_build_lui (expressionS *ep, int regnum)
3653 expressionS high_expr;
3654 const struct mips_opcode *mo;
3655 struct mips_cl_insn insn;
3656 bfd_reloc_code_real_type r[3]
3657 = {BFD_RELOC_UNUSED, BFD_RELOC_UNUSED, BFD_RELOC_UNUSED};
3658 const char *name = "lui";
3659 const char *fmt = "t,u";
3661 assert (! mips_opts.mips16);
3665 if (high_expr.X_op == O_constant)
3667 /* we can compute the instruction now without a relocation entry */
3668 high_expr.X_add_number = ((high_expr.X_add_number + 0x8000)
3670 *r = BFD_RELOC_UNUSED;
3674 assert (ep->X_op == O_symbol);
3675 /* _gp_disp is a special case, used from s_cpload.
3676 __gnu_local_gp is used if mips_no_shared. */
3677 assert (mips_pic == NO_PIC
3679 && strcmp (S_GET_NAME (ep->X_add_symbol), "_gp_disp") == 0)
3680 || (! mips_in_shared
3681 && strcmp (S_GET_NAME (ep->X_add_symbol),
3682 "__gnu_local_gp") == 0));
3683 *r = BFD_RELOC_HI16_S;
3686 mo = hash_find (op_hash, name);
3687 assert (strcmp (name, mo->name) == 0);
3688 assert (strcmp (fmt, mo->args) == 0);
3689 create_insn (&insn, mo);
3691 insn.insn_opcode = insn.insn_mo->match;
3692 INSERT_OPERAND (RT, insn, regnum);
3693 if (*r == BFD_RELOC_UNUSED)
3695 insn.insn_opcode |= high_expr.X_add_number;
3696 append_insn (&insn, NULL, r);
3699 append_insn (&insn, &high_expr, r);
3702 /* Generate a sequence of instructions to do a load or store from a constant
3703 offset off of a base register (breg) into/from a target register (treg),
3704 using AT if necessary. */
3706 macro_build_ldst_constoffset (expressionS *ep, const char *op,
3707 int treg, int breg, int dbl)
3709 assert (ep->X_op == O_constant);
3711 /* Sign-extending 32-bit constants makes their handling easier. */
3713 normalize_constant_expr (ep);
3715 /* Right now, this routine can only handle signed 32-bit constants. */
3716 if (! IS_SEXT_32BIT_NUM(ep->X_add_number + 0x8000))
3717 as_warn (_("operand overflow"));
3719 if (IS_SEXT_16BIT_NUM(ep->X_add_number))
3721 /* Signed 16-bit offset will fit in the op. Easy! */
3722 macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, breg);
3726 /* 32-bit offset, need multiple instructions and AT, like:
3727 lui $tempreg,const_hi (BFD_RELOC_HI16_S)
3728 addu $tempreg,$tempreg,$breg
3729 <op> $treg,const_lo($tempreg) (BFD_RELOC_LO16)
3730 to handle the complete offset. */
3731 macro_build_lui (ep, AT);
3732 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
3733 macro_build (ep, op, "t,o(b)", treg, BFD_RELOC_LO16, AT);
3736 as_bad (_("Macro used $at after \".set noat\""));
3741 * Generates code to set the $at register to true (one)
3742 * if reg is less than the immediate expression.
3745 set_at (int reg, int unsignedp)
3747 if (imm_expr.X_op == O_constant
3748 && imm_expr.X_add_number >= -0x8000
3749 && imm_expr.X_add_number < 0x8000)
3750 macro_build (&imm_expr, unsignedp ? "sltiu" : "slti", "t,r,j",
3751 AT, reg, BFD_RELOC_LO16);
3754 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
3755 macro_build (NULL, unsignedp ? "sltu" : "slt", "d,v,t", AT, reg, AT);
3759 /* Warn if an expression is not a constant. */
3762 check_absolute_expr (struct mips_cl_insn *ip, expressionS *ex)
3764 if (ex->X_op == O_big)
3765 as_bad (_("unsupported large constant"));
3766 else if (ex->X_op != O_constant)
3767 as_bad (_("Instruction %s requires absolute expression"),
3770 if (HAVE_32BIT_GPRS)
3771 normalize_constant_expr (ex);
3774 /* Count the leading zeroes by performing a binary chop. This is a
3775 bulky bit of source, but performance is a LOT better for the
3776 majority of values than a simple loop to count the bits:
3777 for (lcnt = 0; (lcnt < 32); lcnt++)
3778 if ((v) & (1 << (31 - lcnt)))
3780 However it is not code size friendly, and the gain will drop a bit
3781 on certain cached systems.
3783 #define COUNT_TOP_ZEROES(v) \
3784 (((v) & ~0xffff) == 0 \
3785 ? ((v) & ~0xff) == 0 \
3786 ? ((v) & ~0xf) == 0 \
3787 ? ((v) & ~0x3) == 0 \
3788 ? ((v) & ~0x1) == 0 \
3793 : ((v) & ~0x7) == 0 \
3796 : ((v) & ~0x3f) == 0 \
3797 ? ((v) & ~0x1f) == 0 \
3800 : ((v) & ~0x7f) == 0 \
3803 : ((v) & ~0xfff) == 0 \
3804 ? ((v) & ~0x3ff) == 0 \
3805 ? ((v) & ~0x1ff) == 0 \
3808 : ((v) & ~0x7ff) == 0 \
3811 : ((v) & ~0x3fff) == 0 \
3812 ? ((v) & ~0x1fff) == 0 \
3815 : ((v) & ~0x7fff) == 0 \
3818 : ((v) & ~0xffffff) == 0 \
3819 ? ((v) & ~0xfffff) == 0 \
3820 ? ((v) & ~0x3ffff) == 0 \
3821 ? ((v) & ~0x1ffff) == 0 \
3824 : ((v) & ~0x7ffff) == 0 \
3827 : ((v) & ~0x3fffff) == 0 \
3828 ? ((v) & ~0x1fffff) == 0 \
3831 : ((v) & ~0x7fffff) == 0 \
3834 : ((v) & ~0xfffffff) == 0 \
3835 ? ((v) & ~0x3ffffff) == 0 \
3836 ? ((v) & ~0x1ffffff) == 0 \
3839 : ((v) & ~0x7ffffff) == 0 \
3842 : ((v) & ~0x3fffffff) == 0 \
3843 ? ((v) & ~0x1fffffff) == 0 \
3846 : ((v) & ~0x7fffffff) == 0 \
3851 * This routine generates the least number of instructions necessary to load
3852 * an absolute expression value into a register.
3855 load_register (int reg, expressionS *ep, int dbl)
3858 expressionS hi32, lo32;
3860 if (ep->X_op != O_big)
3862 assert (ep->X_op == O_constant);
3864 /* Sign-extending 32-bit constants makes their handling easier. */
3866 normalize_constant_expr (ep);
3868 if (IS_SEXT_16BIT_NUM (ep->X_add_number))
3870 /* We can handle 16 bit signed values with an addiu to
3871 $zero. No need to ever use daddiu here, since $zero and
3872 the result are always correct in 32 bit mode. */
3873 macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
3876 else if (ep->X_add_number >= 0 && ep->X_add_number < 0x10000)
3878 /* We can handle 16 bit unsigned values with an ori to
3880 macro_build (ep, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
3883 else if ((IS_SEXT_32BIT_NUM (ep->X_add_number)))
3885 /* 32 bit values require an lui. */
3886 macro_build (ep, "lui", "t,u", reg, BFD_RELOC_HI16);
3887 if ((ep->X_add_number & 0xffff) != 0)
3888 macro_build (ep, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
3893 /* The value is larger than 32 bits. */
3895 if (!dbl || HAVE_32BIT_GPRS)
3899 sprintf_vma (value, ep->X_add_number);
3900 as_bad (_("Number (0x%s) larger than 32 bits"), value);
3901 macro_build (ep, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
3905 if (ep->X_op != O_big)
3908 hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
3909 hi32.X_add_number = (valueT) hi32.X_add_number >> 16;
3910 hi32.X_add_number &= 0xffffffff;
3912 lo32.X_add_number &= 0xffffffff;
3916 assert (ep->X_add_number > 2);
3917 if (ep->X_add_number == 3)
3918 generic_bignum[3] = 0;
3919 else if (ep->X_add_number > 4)
3920 as_bad (_("Number larger than 64 bits"));
3921 lo32.X_op = O_constant;
3922 lo32.X_add_number = generic_bignum[0] + (generic_bignum[1] << 16);
3923 hi32.X_op = O_constant;
3924 hi32.X_add_number = generic_bignum[2] + (generic_bignum[3] << 16);
3927 if (hi32.X_add_number == 0)
3932 unsigned long hi, lo;
3934 if (hi32.X_add_number == (offsetT) 0xffffffff)
3936 if ((lo32.X_add_number & 0xffff8000) == 0xffff8000)
3938 macro_build (&lo32, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
3941 if (lo32.X_add_number & 0x80000000)
3943 macro_build (&lo32, "lui", "t,u", reg, BFD_RELOC_HI16);
3944 if (lo32.X_add_number & 0xffff)
3945 macro_build (&lo32, "ori", "t,r,i", reg, reg, BFD_RELOC_LO16);
3950 /* Check for 16bit shifted constant. We know that hi32 is
3951 non-zero, so start the mask on the first bit of the hi32
3956 unsigned long himask, lomask;
3960 himask = 0xffff >> (32 - shift);
3961 lomask = (0xffff << shift) & 0xffffffff;
3965 himask = 0xffff << (shift - 32);
3968 if ((hi32.X_add_number & ~(offsetT) himask) == 0
3969 && (lo32.X_add_number & ~(offsetT) lomask) == 0)
3973 tmp.X_op = O_constant;
3975 tmp.X_add_number = ((hi32.X_add_number << (32 - shift))
3976 | (lo32.X_add_number >> shift));
3978 tmp.X_add_number = hi32.X_add_number >> (shift - 32);
3979 macro_build (&tmp, "ori", "t,r,i", reg, 0, BFD_RELOC_LO16);
3980 macro_build (NULL, (shift >= 32) ? "dsll32" : "dsll", "d,w,<",
3981 reg, reg, (shift >= 32) ? shift - 32 : shift);
3986 while (shift <= (64 - 16));
3988 /* Find the bit number of the lowest one bit, and store the
3989 shifted value in hi/lo. */
3990 hi = (unsigned long) (hi32.X_add_number & 0xffffffff);
3991 lo = (unsigned long) (lo32.X_add_number & 0xffffffff);
3995 while ((lo & 1) == 0)
4000 lo |= (hi & (((unsigned long) 1 << bit) - 1)) << (32 - bit);
4006 while ((hi & 1) == 0)
4015 /* Optimize if the shifted value is a (power of 2) - 1. */
4016 if ((hi == 0 && ((lo + 1) & lo) == 0)
4017 || (lo == 0xffffffff && ((hi + 1) & hi) == 0))
4019 shift = COUNT_TOP_ZEROES ((unsigned int) hi32.X_add_number);
4024 /* This instruction will set the register to be all
4026 tmp.X_op = O_constant;
4027 tmp.X_add_number = (offsetT) -1;
4028 macro_build (&tmp, "addiu", "t,r,j", reg, 0, BFD_RELOC_LO16);
4032 macro_build (NULL, (bit >= 32) ? "dsll32" : "dsll", "d,w,<",
4033 reg, reg, (bit >= 32) ? bit - 32 : bit);
4035 macro_build (NULL, (shift >= 32) ? "dsrl32" : "dsrl", "d,w,<",
4036 reg, reg, (shift >= 32) ? shift - 32 : shift);
4041 /* Sign extend hi32 before calling load_register, because we can
4042 generally get better code when we load a sign extended value. */
4043 if ((hi32.X_add_number & 0x80000000) != 0)
4044 hi32.X_add_number |= ~(offsetT) 0xffffffff;
4045 load_register (reg, &hi32, 0);
4048 if ((lo32.X_add_number & 0xffff0000) == 0)
4052 macro_build (NULL, "dsll32", "d,w,<", reg, freg, 0);
4060 if ((freg == 0) && (lo32.X_add_number == (offsetT) 0xffffffff))
4062 macro_build (&lo32, "lui", "t,u", reg, BFD_RELOC_HI16);
4063 macro_build (NULL, "dsrl32", "d,w,<", reg, reg, 0);
4069 macro_build (NULL, "dsll", "d,w,<", reg, freg, 16);
4073 mid16.X_add_number >>= 16;
4074 macro_build (&mid16, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
4075 macro_build (NULL, "dsll", "d,w,<", reg, reg, 16);
4078 if ((lo32.X_add_number & 0xffff) != 0)
4079 macro_build (&lo32, "ori", "t,r,i", reg, freg, BFD_RELOC_LO16);
4083 load_delay_nop (void)
4085 if (!gpr_interlocks)
4086 macro_build (NULL, "nop", "");
4089 /* Load an address into a register. */
4092 load_address (int reg, expressionS *ep, int *used_at)
4094 if (ep->X_op != O_constant
4095 && ep->X_op != O_symbol)
4097 as_bad (_("expression too complex"));
4098 ep->X_op = O_constant;
4101 if (ep->X_op == O_constant)
4103 load_register (reg, ep, HAVE_64BIT_ADDRESSES);
4107 if (mips_pic == NO_PIC)
4109 /* If this is a reference to a GP relative symbol, we want
4110 addiu $reg,$gp,<sym> (BFD_RELOC_GPREL16)
4112 lui $reg,<sym> (BFD_RELOC_HI16_S)
4113 addiu $reg,$reg,<sym> (BFD_RELOC_LO16)
4114 If we have an addend, we always use the latter form.
4116 With 64bit address space and a usable $at we want
4117 lui $reg,<sym> (BFD_RELOC_MIPS_HIGHEST)
4118 lui $at,<sym> (BFD_RELOC_HI16_S)
4119 daddiu $reg,<sym> (BFD_RELOC_MIPS_HIGHER)
4120 daddiu $at,<sym> (BFD_RELOC_LO16)
4124 If $at is already in use, we use a path which is suboptimal
4125 on superscalar processors.
4126 lui $reg,<sym> (BFD_RELOC_MIPS_HIGHEST)
4127 daddiu $reg,<sym> (BFD_RELOC_MIPS_HIGHER)
4129 daddiu $reg,<sym> (BFD_RELOC_HI16_S)
4131 daddiu $reg,<sym> (BFD_RELOC_LO16)
4133 For GP relative symbols in 64bit address space we can use
4134 the same sequence as in 32bit address space. */
4135 if (HAVE_64BIT_SYMBOLS)
4137 if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
4138 && !nopic_need_relax (ep->X_add_symbol, 1))
4140 relax_start (ep->X_add_symbol);
4141 macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
4142 mips_gp_register, BFD_RELOC_GPREL16);
4146 if (*used_at == 0 && !mips_opts.noat)
4148 macro_build (ep, "lui", "t,u", reg, BFD_RELOC_MIPS_HIGHEST);
4149 macro_build (ep, "lui", "t,u", AT, BFD_RELOC_HI16_S);
4150 macro_build (ep, "daddiu", "t,r,j", reg, reg,
4151 BFD_RELOC_MIPS_HIGHER);
4152 macro_build (ep, "daddiu", "t,r,j", AT, AT, BFD_RELOC_LO16);
4153 macro_build (NULL, "dsll32", "d,w,<", reg, reg, 0);
4154 macro_build (NULL, "daddu", "d,v,t", reg, reg, AT);
4159 macro_build (ep, "lui", "t,u", reg, BFD_RELOC_MIPS_HIGHEST);
4160 macro_build (ep, "daddiu", "t,r,j", reg, reg,
4161 BFD_RELOC_MIPS_HIGHER);
4162 macro_build (NULL, "dsll", "d,w,<", reg, reg, 16);
4163 macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_HI16_S);
4164 macro_build (NULL, "dsll", "d,w,<", reg, reg, 16);
4165 macro_build (ep, "daddiu", "t,r,j", reg, reg, BFD_RELOC_LO16);
4168 if (mips_relax.sequence)
4173 if ((valueT) ep->X_add_number <= MAX_GPREL_OFFSET
4174 && !nopic_need_relax (ep->X_add_symbol, 1))
4176 relax_start (ep->X_add_symbol);
4177 macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg,
4178 mips_gp_register, BFD_RELOC_GPREL16);
4181 macro_build_lui (ep, reg);
4182 macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j",
4183 reg, reg, BFD_RELOC_LO16);
4184 if (mips_relax.sequence)
4188 else if (!mips_big_got)
4192 /* If this is a reference to an external symbol, we want
4193 lw $reg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
4195 lw $reg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
4197 addiu $reg,$reg,<sym> (BFD_RELOC_LO16)
4198 If there is a constant, it must be added in after.
4200 If we have NewABI, we want
4201 lw $reg,<sym+cst>($gp) (BFD_RELOC_MIPS_GOT_DISP)
4202 unless we're referencing a global symbol with a non-zero
4203 offset, in which case cst must be added separately. */
4206 if (ep->X_add_number)
4208 ex.X_add_number = ep->X_add_number;
4209 ep->X_add_number = 0;
4210 relax_start (ep->X_add_symbol);
4211 macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
4212 BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
4213 if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
4214 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
4215 ex.X_op = O_constant;
4216 macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
4217 reg, reg, BFD_RELOC_LO16);
4218 ep->X_add_number = ex.X_add_number;
4221 macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
4222 BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
4223 if (mips_relax.sequence)
4228 ex.X_add_number = ep->X_add_number;
4229 ep->X_add_number = 0;
4230 macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
4231 BFD_RELOC_MIPS_GOT16, mips_gp_register);
4233 relax_start (ep->X_add_symbol);
4235 macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
4239 if (ex.X_add_number != 0)
4241 if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
4242 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
4243 ex.X_op = O_constant;
4244 macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j",
4245 reg, reg, BFD_RELOC_LO16);
4249 else if (mips_big_got)
4253 /* This is the large GOT case. If this is a reference to an
4254 external symbol, we want
4255 lui $reg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
4257 lw $reg,<sym>($reg) (BFD_RELOC_MIPS_GOT_LO16)
4259 Otherwise, for a reference to a local symbol in old ABI, we want
4260 lw $reg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
4262 addiu $reg,$reg,<sym> (BFD_RELOC_LO16)
4263 If there is a constant, it must be added in after.
4265 In the NewABI, for local symbols, with or without offsets, we want:
4266 lw $reg,<sym>($gp) (BFD_RELOC_MIPS_GOT_PAGE)
4267 addiu $reg,$reg,<sym> (BFD_RELOC_MIPS_GOT_OFST)
4271 ex.X_add_number = ep->X_add_number;
4272 ep->X_add_number = 0;
4273 relax_start (ep->X_add_symbol);
4274 macro_build (ep, "lui", "t,u", reg, BFD_RELOC_MIPS_GOT_HI16);
4275 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
4276 reg, reg, mips_gp_register);
4277 macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
4278 reg, BFD_RELOC_MIPS_GOT_LO16, reg);
4279 if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
4280 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
4281 else if (ex.X_add_number)
4283 ex.X_op = O_constant;
4284 macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
4288 ep->X_add_number = ex.X_add_number;
4290 macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
4291 BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
4292 macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
4293 BFD_RELOC_MIPS_GOT_OFST);
4298 ex.X_add_number = ep->X_add_number;
4299 ep->X_add_number = 0;
4300 relax_start (ep->X_add_symbol);
4301 macro_build (ep, "lui", "t,u", reg, BFD_RELOC_MIPS_GOT_HI16);
4302 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
4303 reg, reg, mips_gp_register);
4304 macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)",
4305 reg, BFD_RELOC_MIPS_GOT_LO16, reg);
4307 if (reg_needs_delay (mips_gp_register))
4309 /* We need a nop before loading from $gp. This special
4310 check is required because the lui which starts the main
4311 instruction stream does not refer to $gp, and so will not
4312 insert the nop which may be required. */
4313 macro_build (NULL, "nop", "");
4315 macro_build (ep, ADDRESS_LOAD_INSN, "t,o(b)", reg,
4316 BFD_RELOC_MIPS_GOT16, mips_gp_register);
4318 macro_build (ep, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
4322 if (ex.X_add_number != 0)
4324 if (ex.X_add_number < -0x8000 || ex.X_add_number >= 0x8000)
4325 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
4326 ex.X_op = O_constant;
4327 macro_build (&ex, ADDRESS_ADDI_INSN, "t,r,j", reg, reg,
4335 if (mips_opts.noat && *used_at == 1)
4336 as_bad (_("Macro used $at after \".set noat\""));
4339 /* Move the contents of register SOURCE into register DEST. */
4342 move_register (int dest, int source)
4344 macro_build (NULL, HAVE_32BIT_GPRS ? "addu" : "daddu", "d,v,t",
4348 /* Emit an SVR4 PIC sequence to load address LOCAL into DEST, where
4349 LOCAL is the sum of a symbol and a 16-bit or 32-bit displacement.
4350 The two alternatives are:
4352 Global symbol Local sybmol
4353 ------------- ------------
4354 lw DEST,%got(SYMBOL) lw DEST,%got(SYMBOL + OFFSET)
4356 addiu DEST,DEST,OFFSET addiu DEST,DEST,%lo(SYMBOL + OFFSET)
4358 load_got_offset emits the first instruction and add_got_offset
4359 emits the second for a 16-bit offset or add_got_offset_hilo emits
4360 a sequence to add a 32-bit offset using a scratch register. */
4363 load_got_offset (int dest, expressionS *local)
4368 global.X_add_number = 0;
4370 relax_start (local->X_add_symbol);
4371 macro_build (&global, ADDRESS_LOAD_INSN, "t,o(b)", dest,
4372 BFD_RELOC_MIPS_GOT16, mips_gp_register);
4374 macro_build (local, ADDRESS_LOAD_INSN, "t,o(b)", dest,
4375 BFD_RELOC_MIPS_GOT16, mips_gp_register);
4380 add_got_offset (int dest, expressionS *local)
4384 global.X_op = O_constant;
4385 global.X_op_symbol = NULL;
4386 global.X_add_symbol = NULL;
4387 global.X_add_number = local->X_add_number;
4389 relax_start (local->X_add_symbol);
4390 macro_build (&global, ADDRESS_ADDI_INSN, "t,r,j",
4391 dest, dest, BFD_RELOC_LO16);
4393 macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", dest, dest, BFD_RELOC_LO16);
4398 add_got_offset_hilo (int dest, expressionS *local, int tmp)
4401 int hold_mips_optimize;
4403 global.X_op = O_constant;
4404 global.X_op_symbol = NULL;
4405 global.X_add_symbol = NULL;
4406 global.X_add_number = local->X_add_number;
4408 relax_start (local->X_add_symbol);
4409 load_register (tmp, &global, HAVE_64BIT_ADDRESSES);
4411 /* Set mips_optimize around the lui instruction to avoid
4412 inserting an unnecessary nop after the lw. */
4413 hold_mips_optimize = mips_optimize;
4415 macro_build_lui (&global, tmp);
4416 mips_optimize = hold_mips_optimize;
4417 macro_build (local, ADDRESS_ADDI_INSN, "t,r,j", tmp, tmp, BFD_RELOC_LO16);
4420 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dest, dest, tmp);
4425 * This routine implements the seemingly endless macro or synthesized
4426 * instructions and addressing modes in the mips assembly language. Many
4427 * of these macros are simple and are similar to each other. These could
4428 * probably be handled by some kind of table or grammar approach instead of
4429 * this verbose method. Others are not simple macros but are more like
4430 * optimizing code generation.
4431 * One interesting optimization is when several store macros appear
4432 * consecutively that would load AT with the upper half of the same address.
4433 * The ensuing load upper instructions are ommited. This implies some kind
4434 * of global optimization. We currently only optimize within a single macro.
4435 * For many of the load and store macros if the address is specified as a
4436 * constant expression in the first 64k of memory (ie ld $2,0x4000c) we
4437 * first load register 'at' with zero and use it as the base register. The
4438 * mips assembler simply uses register $zero. Just one tiny optimization
4442 macro (struct mips_cl_insn *ip)
4444 register int treg, sreg, dreg, breg;
4460 bfd_reloc_code_real_type r;
4461 int hold_mips_optimize;
4463 assert (! mips_opts.mips16);
4465 treg = (ip->insn_opcode >> 16) & 0x1f;
4466 dreg = (ip->insn_opcode >> 11) & 0x1f;
4467 sreg = breg = (ip->insn_opcode >> 21) & 0x1f;
4468 mask = ip->insn_mo->mask;
4470 expr1.X_op = O_constant;
4471 expr1.X_op_symbol = NULL;
4472 expr1.X_add_symbol = NULL;
4473 expr1.X_add_number = 1;
4487 expr1.X_add_number = 8;
4488 macro_build (&expr1, "bgez", "s,p", sreg);
4490 macro_build (NULL, "nop", "", 0);
4492 move_register (dreg, sreg);
4493 macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", dreg, 0, sreg);
4516 if (imm_expr.X_op == O_constant
4517 && imm_expr.X_add_number >= -0x8000
4518 && imm_expr.X_add_number < 0x8000)
4520 macro_build (&imm_expr, s, "t,r,j", treg, sreg, BFD_RELOC_LO16);
4524 load_register (AT, &imm_expr, dbl);
4525 macro_build (NULL, s2, "d,v,t", treg, sreg, AT);
4544 if (imm_expr.X_op == O_constant
4545 && imm_expr.X_add_number >= 0
4546 && imm_expr.X_add_number < 0x10000)
4548 if (mask != M_NOR_I)
4549 macro_build (&imm_expr, s, "t,r,i", treg, sreg, BFD_RELOC_LO16);
4552 macro_build (&imm_expr, "ori", "t,r,i",
4553 treg, sreg, BFD_RELOC_LO16);
4554 macro_build (NULL, "nor", "d,v,t", treg, treg, 0);
4560 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
4561 macro_build (NULL, s2, "d,v,t", treg, sreg, AT);
4578 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
4580 macro_build (&offset_expr, s, "s,t,p", sreg, 0);
4584 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
4585 macro_build (&offset_expr, s, "s,t,p", sreg, AT);
4593 macro_build (&offset_expr, likely ? "bgezl" : "bgez", "s,p", sreg);
4598 macro_build (&offset_expr, likely ? "blezl" : "blez", "s,p", treg);
4602 macro_build (NULL, "slt", "d,v,t", AT, sreg, treg);
4603 macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0);
4609 /* check for > max integer */
4610 maxnum = 0x7fffffff;
4611 if (HAVE_64BIT_GPRS && sizeof (maxnum) > 4)
4618 if (imm_expr.X_op == O_constant
4619 && imm_expr.X_add_number >= maxnum
4620 && (HAVE_32BIT_GPRS || sizeof (maxnum) > 4))
4623 /* result is always false */
4625 macro_build (NULL, "nop", "", 0);
4627 macro_build (&offset_expr, "bnel", "s,t,p", 0, 0);
4630 if (imm_expr.X_op != O_constant)
4631 as_bad (_("Unsupported large constant"));
4632 ++imm_expr.X_add_number;
4636 if (mask == M_BGEL_I)
4638 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
4640 macro_build (&offset_expr, likely ? "bgezl" : "bgez", "s,p", sreg);
4643 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
4645 macro_build (&offset_expr, likely ? "bgtzl" : "bgtz", "s,p", sreg);
4648 maxnum = 0x7fffffff;
4649 if (HAVE_64BIT_GPRS && sizeof (maxnum) > 4)
4656 maxnum = - maxnum - 1;
4657 if (imm_expr.X_op == O_constant
4658 && imm_expr.X_add_number <= maxnum
4659 && (HAVE_32BIT_GPRS || sizeof (maxnum) > 4))
4662 /* result is always true */
4663 as_warn (_("Branch %s is always true"), ip->insn_mo->name);
4664 macro_build (&offset_expr, "b", "p");
4669 macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0);
4679 macro_build (&offset_expr, likely ? "beql" : "beq",
4684 macro_build (NULL, "sltu", "d,v,t", AT, sreg, treg);
4685 macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0);
4693 && imm_expr.X_op == O_constant
4694 && imm_expr.X_add_number == (offsetT) 0xffffffff))
4696 if (imm_expr.X_op != O_constant)
4697 as_bad (_("Unsupported large constant"));
4698 ++imm_expr.X_add_number;
4702 if (mask == M_BGEUL_I)
4704 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
4706 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
4708 macro_build (&offset_expr, likely ? "bnel" : "bne",
4714 macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0);
4722 macro_build (&offset_expr, likely ? "bgtzl" : "bgtz", "s,p", sreg);
4727 macro_build (&offset_expr, likely ? "bltzl" : "bltz", "s,p", treg);
4731 macro_build (NULL, "slt", "d,v,t", AT, treg, sreg);
4732 macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0);
4740 macro_build (&offset_expr, likely ? "bnel" : "bne",
4747 macro_build (NULL, "sltu", "d,v,t", AT, treg, sreg);
4748 macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0);
4756 macro_build (&offset_expr, likely ? "blezl" : "blez", "s,p", sreg);
4761 macro_build (&offset_expr, likely ? "bgezl" : "bgez", "s,p", treg);
4765 macro_build (NULL, "slt", "d,v,t", AT, treg, sreg);
4766 macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0);
4772 maxnum = 0x7fffffff;
4773 if (HAVE_64BIT_GPRS && sizeof (maxnum) > 4)
4780 if (imm_expr.X_op == O_constant
4781 && imm_expr.X_add_number >= maxnum
4782 && (HAVE_32BIT_GPRS || sizeof (maxnum) > 4))
4784 if (imm_expr.X_op != O_constant)
4785 as_bad (_("Unsupported large constant"));
4786 ++imm_expr.X_add_number;
4790 if (mask == M_BLTL_I)
4792 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
4794 macro_build (&offset_expr, likely ? "bltzl" : "bltz", "s,p", sreg);
4797 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
4799 macro_build (&offset_expr, likely ? "blezl" : "blez", "s,p", sreg);
4804 macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0);
4812 macro_build (&offset_expr, likely ? "beql" : "beq",
4819 macro_build (NULL, "sltu", "d,v,t", AT, treg, sreg);
4820 macro_build (&offset_expr, likely ? "beql" : "beq", "s,t,p", AT, 0);
4828 && imm_expr.X_op == O_constant
4829 && imm_expr.X_add_number == (offsetT) 0xffffffff))
4831 if (imm_expr.X_op != O_constant)
4832 as_bad (_("Unsupported large constant"));
4833 ++imm_expr.X_add_number;
4837 if (mask == M_BLTUL_I)
4839 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
4841 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
4843 macro_build (&offset_expr, likely ? "beql" : "beq",
4849 macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0);
4857 macro_build (&offset_expr, likely ? "bltzl" : "bltz", "s,p", sreg);
4862 macro_build (&offset_expr, likely ? "bgtzl" : "bgtz", "s,p", treg);
4866 macro_build (NULL, "slt", "d,v,t", AT, sreg, treg);
4867 macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0);
4877 macro_build (&offset_expr, likely ? "bnel" : "bne",
4882 macro_build (NULL, "sltu", "d,v,t", AT, sreg, treg);
4883 macro_build (&offset_expr, likely ? "bnel" : "bne", "s,t,p", AT, 0);
4891 if (imm_expr.X_op != O_constant || imm2_expr.X_op != O_constant)
4893 as_bad (_("Unsupported large constant"));
4898 pos = (unsigned long) imm_expr.X_add_number;
4899 size = (unsigned long) imm2_expr.X_add_number;
4904 as_bad (_("Improper position (%lu)"), pos);
4907 if (size == 0 || size > 64
4908 || (pos + size - 1) > 63)
4910 as_bad (_("Improper extract size (%lu, position %lu)"),
4915 if (size <= 32 && pos < 32)
4920 else if (size <= 32)
4930 macro_build ((expressionS *) NULL, s, fmt, treg, sreg, pos, size - 1);
4939 if (imm_expr.X_op != O_constant || imm2_expr.X_op != O_constant)
4941 as_bad (_("Unsupported large constant"));
4946 pos = (unsigned long) imm_expr.X_add_number;
4947 size = (unsigned long) imm2_expr.X_add_number;
4952 as_bad (_("Improper position (%lu)"), pos);
4955 if (size == 0 || size > 64
4956 || (pos + size - 1) > 63)
4958 as_bad (_("Improper insert size (%lu, position %lu)"),
4963 if (pos < 32 && (pos + size - 1) < 32)
4978 macro_build ((expressionS *) NULL, s, fmt, treg, sreg, pos,
4995 as_warn (_("Divide by zero."));
4997 macro_build (NULL, "teq", "s,t,q", 0, 0, 7);
4999 macro_build (NULL, "break", "c", 7);
5006 macro_build (NULL, "teq", "s,t,q", treg, 0, 7);
5007 macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", sreg, treg);
5011 expr1.X_add_number = 8;
5012 macro_build (&expr1, "bne", "s,t,p", treg, 0);
5013 macro_build (NULL, dbl ? "ddiv" : "div", "z,s,t", sreg, treg);
5014 macro_build (NULL, "break", "c", 7);
5016 expr1.X_add_number = -1;
5018 load_register (AT, &expr1, dbl);
5019 expr1.X_add_number = mips_trap ? (dbl ? 12 : 8) : (dbl ? 20 : 16);
5020 macro_build (&expr1, "bne", "s,t,p", treg, AT);
5023 expr1.X_add_number = 1;
5024 load_register (AT, &expr1, dbl);
5025 macro_build (NULL, "dsll32", "d,w,<", AT, AT, 31);
5029 expr1.X_add_number = 0x80000000;
5030 macro_build (&expr1, "lui", "t,u", AT, BFD_RELOC_HI16);
5034 macro_build (NULL, "teq", "s,t,q", sreg, AT, 6);
5035 /* We want to close the noreorder block as soon as possible, so
5036 that later insns are available for delay slot filling. */
5041 expr1.X_add_number = 8;
5042 macro_build (&expr1, "bne", "s,t,p", sreg, AT);
5043 macro_build (NULL, "nop", "", 0);
5045 /* We want to close the noreorder block as soon as possible, so
5046 that later insns are available for delay slot filling. */
5049 macro_build (NULL, "break", "c", 6);
5051 macro_build (NULL, s, "d", dreg);
5090 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
5092 as_warn (_("Divide by zero."));
5094 macro_build (NULL, "teq", "s,t,q", 0, 0, 7);
5096 macro_build (NULL, "break", "c", 7);
5099 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 1)
5101 if (strcmp (s2, "mflo") == 0)
5102 move_register (dreg, sreg);
5104 move_register (dreg, 0);
5107 if (imm_expr.X_op == O_constant
5108 && imm_expr.X_add_number == -1
5109 && s[strlen (s) - 1] != 'u')
5111 if (strcmp (s2, "mflo") == 0)
5113 macro_build (NULL, dbl ? "dneg" : "neg", "d,w", dreg, sreg);
5116 move_register (dreg, 0);
5121 load_register (AT, &imm_expr, dbl);
5122 macro_build (NULL, s, "z,s,t", sreg, AT);
5123 macro_build (NULL, s2, "d", dreg);
5145 macro_build (NULL, "teq", "s,t,q", treg, 0, 7);
5146 macro_build (NULL, s, "z,s,t", sreg, treg);
5147 /* We want to close the noreorder block as soon as possible, so
5148 that later insns are available for delay slot filling. */
5153 expr1.X_add_number = 8;
5154 macro_build (&expr1, "bne", "s,t,p", treg, 0);
5155 macro_build (NULL, s, "z,s,t", sreg, treg);
5157 /* We want to close the noreorder block as soon as possible, so
5158 that later insns are available for delay slot filling. */
5160 macro_build (NULL, "break", "c", 7);
5162 macro_build (NULL, s2, "d", dreg);
5174 /* Load the address of a symbol into a register. If breg is not
5175 zero, we then add a base register to it. */
5177 if (dbl && HAVE_32BIT_GPRS)
5178 as_warn (_("dla used to load 32-bit register"));
5180 if (! dbl && HAVE_64BIT_OBJECTS)
5181 as_warn (_("la used to load 64-bit address"));
5183 if (offset_expr.X_op == O_constant
5184 && offset_expr.X_add_number >= -0x8000
5185 && offset_expr.X_add_number < 0x8000)
5187 macro_build (&offset_expr, ADDRESS_ADDI_INSN,
5188 "t,r,j", treg, sreg, BFD_RELOC_LO16);
5192 if (!mips_opts.noat && (treg == breg))
5202 if (offset_expr.X_op != O_symbol
5203 && offset_expr.X_op != O_constant)
5205 as_bad (_("expression too complex"));
5206 offset_expr.X_op = O_constant;
5209 if (offset_expr.X_op == O_constant)
5210 load_register (tempreg, &offset_expr, HAVE_64BIT_ADDRESSES);
5211 else if (mips_pic == NO_PIC)
5213 /* If this is a reference to a GP relative symbol, we want
5214 addiu $tempreg,$gp,<sym> (BFD_RELOC_GPREL16)
5216 lui $tempreg,<sym> (BFD_RELOC_HI16_S)
5217 addiu $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
5218 If we have a constant, we need two instructions anyhow,
5219 so we may as well always use the latter form.
5221 With 64bit address space and a usable $at we want
5222 lui $tempreg,<sym> (BFD_RELOC_MIPS_HIGHEST)
5223 lui $at,<sym> (BFD_RELOC_HI16_S)
5224 daddiu $tempreg,<sym> (BFD_RELOC_MIPS_HIGHER)
5225 daddiu $at,<sym> (BFD_RELOC_LO16)
5227 daddu $tempreg,$tempreg,$at
5229 If $at is already in use, we use a path which is suboptimal
5230 on superscalar processors.
5231 lui $tempreg,<sym> (BFD_RELOC_MIPS_HIGHEST)
5232 daddiu $tempreg,<sym> (BFD_RELOC_MIPS_HIGHER)
5234 daddiu $tempreg,<sym> (BFD_RELOC_HI16_S)
5236 daddiu $tempreg,<sym> (BFD_RELOC_LO16)
5238 For GP relative symbols in 64bit address space we can use
5239 the same sequence as in 32bit address space. */
5240 if (HAVE_64BIT_SYMBOLS)
5242 if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
5243 && !nopic_need_relax (offset_expr.X_add_symbol, 1))
5245 relax_start (offset_expr.X_add_symbol);
5246 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5247 tempreg, mips_gp_register, BFD_RELOC_GPREL16);
5251 if (used_at == 0 && !mips_opts.noat)
5253 macro_build (&offset_expr, "lui", "t,u",
5254 tempreg, BFD_RELOC_MIPS_HIGHEST);
5255 macro_build (&offset_expr, "lui", "t,u",
5256 AT, BFD_RELOC_HI16_S);
5257 macro_build (&offset_expr, "daddiu", "t,r,j",
5258 tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
5259 macro_build (&offset_expr, "daddiu", "t,r,j",
5260 AT, AT, BFD_RELOC_LO16);
5261 macro_build (NULL, "dsll32", "d,w,<", tempreg, tempreg, 0);
5262 macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
5267 macro_build (&offset_expr, "lui", "t,u",
5268 tempreg, BFD_RELOC_MIPS_HIGHEST);
5269 macro_build (&offset_expr, "daddiu", "t,r,j",
5270 tempreg, tempreg, BFD_RELOC_MIPS_HIGHER);
5271 macro_build (NULL, "dsll", "d,w,<", tempreg, tempreg, 16);
5272 macro_build (&offset_expr, "daddiu", "t,r,j",
5273 tempreg, tempreg, BFD_RELOC_HI16_S);
5274 macro_build (NULL, "dsll", "d,w,<", tempreg, tempreg, 16);
5275 macro_build (&offset_expr, "daddiu", "t,r,j",
5276 tempreg, tempreg, BFD_RELOC_LO16);
5279 if (mips_relax.sequence)
5284 if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
5285 && !nopic_need_relax (offset_expr.X_add_symbol, 1))
5287 relax_start (offset_expr.X_add_symbol);
5288 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5289 tempreg, mips_gp_register, BFD_RELOC_GPREL16);
5292 if (!IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
5293 as_bad (_("offset too large"));
5294 macro_build_lui (&offset_expr, tempreg);
5295 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5296 tempreg, tempreg, BFD_RELOC_LO16);
5297 if (mips_relax.sequence)
5301 else if (!mips_big_got && !HAVE_NEWABI)
5303 int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
5305 /* If this is a reference to an external symbol, and there
5306 is no constant, we want
5307 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5308 or for lca or if tempreg is PIC_CALL_REG
5309 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_CALL16)
5310 For a local symbol, we want
5311 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5313 addiu $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
5315 If we have a small constant, and this is a reference to
5316 an external symbol, we want
5317 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5319 addiu $tempreg,$tempreg,<constant>
5320 For a local symbol, we want the same instruction
5321 sequence, but we output a BFD_RELOC_LO16 reloc on the
5324 If we have a large constant, and this is a reference to
5325 an external symbol, we want
5326 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5327 lui $at,<hiconstant>
5328 addiu $at,$at,<loconstant>
5329 addu $tempreg,$tempreg,$at
5330 For a local symbol, we want the same instruction
5331 sequence, but we output a BFD_RELOC_LO16 reloc on the
5335 if (offset_expr.X_add_number == 0)
5337 if (mips_pic == SVR4_PIC
5339 && (call || tempreg == PIC_CALL_REG))
5340 lw_reloc_type = (int) BFD_RELOC_MIPS_CALL16;
5342 relax_start (offset_expr.X_add_symbol);
5343 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5344 lw_reloc_type, mips_gp_register);
5347 /* We're going to put in an addu instruction using
5348 tempreg, so we may as well insert the nop right
5353 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5354 tempreg, BFD_RELOC_MIPS_GOT16, mips_gp_register);
5356 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5357 tempreg, tempreg, BFD_RELOC_LO16);
5359 /* FIXME: If breg == 0, and the next instruction uses
5360 $tempreg, then if this variant case is used an extra
5361 nop will be generated. */
5363 else if (offset_expr.X_add_number >= -0x8000
5364 && offset_expr.X_add_number < 0x8000)
5366 load_got_offset (tempreg, &offset_expr);
5368 add_got_offset (tempreg, &offset_expr);
5372 expr1.X_add_number = offset_expr.X_add_number;
5373 offset_expr.X_add_number =
5374 ((offset_expr.X_add_number + 0x8000) & 0xffff) - 0x8000;
5375 load_got_offset (tempreg, &offset_expr);
5376 offset_expr.X_add_number = expr1.X_add_number;
5377 /* If we are going to add in a base register, and the
5378 target register and the base register are the same,
5379 then we are using AT as a temporary register. Since
5380 we want to load the constant into AT, we add our
5381 current AT (from the global offset table) and the
5382 register into the register now, and pretend we were
5383 not using a base register. */
5387 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5392 add_got_offset_hilo (tempreg, &offset_expr, AT);
5396 else if (!mips_big_got && HAVE_NEWABI)
5398 int add_breg_early = 0;
5400 /* If this is a reference to an external, and there is no
5401 constant, or local symbol (*), with or without a
5403 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT_DISP)
5404 or for lca or if tempreg is PIC_CALL_REG
5405 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_CALL16)
5407 If we have a small constant, and this is a reference to
5408 an external symbol, we want
5409 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT_DISP)
5410 addiu $tempreg,$tempreg,<constant>
5412 If we have a large constant, and this is a reference to
5413 an external symbol, we want
5414 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT_DISP)
5415 lui $at,<hiconstant>
5416 addiu $at,$at,<loconstant>
5417 addu $tempreg,$tempreg,$at
5419 (*) Other assemblers seem to prefer GOT_PAGE/GOT_OFST for
5420 local symbols, even though it introduces an additional
5423 if (offset_expr.X_add_number)
5425 expr1.X_add_number = offset_expr.X_add_number;
5426 offset_expr.X_add_number = 0;
5428 relax_start (offset_expr.X_add_symbol);
5429 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5430 BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
5432 if (expr1.X_add_number >= -0x8000
5433 && expr1.X_add_number < 0x8000)
5435 macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
5436 tempreg, tempreg, BFD_RELOC_LO16);
5438 else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
5442 /* If we are going to add in a base register, and the
5443 target register and the base register are the same,
5444 then we are using AT as a temporary register. Since
5445 we want to load the constant into AT, we add our
5446 current AT (from the global offset table) and the
5447 register into the register now, and pretend we were
5448 not using a base register. */
5453 assert (tempreg == AT);
5454 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5460 load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
5461 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5467 as_bad (_("PIC code offset overflow (max 32 signed bits)"));
5470 offset_expr.X_add_number = expr1.X_add_number;
5472 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5473 BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
5476 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5477 treg, tempreg, breg);
5483 else if (breg == 0 && (call || tempreg == PIC_CALL_REG))
5485 relax_start (offset_expr.X_add_symbol);
5486 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5487 BFD_RELOC_MIPS_CALL16, mips_gp_register);
5489 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5490 BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
5495 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5496 BFD_RELOC_MIPS_GOT_DISP, mips_gp_register);
5499 else if (mips_big_got && !HAVE_NEWABI)
5502 int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
5503 int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
5504 int local_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
5506 /* This is the large GOT case. If this is a reference to an
5507 external symbol, and there is no constant, we want
5508 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
5509 addu $tempreg,$tempreg,$gp
5510 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
5511 or for lca or if tempreg is PIC_CALL_REG
5512 lui $tempreg,<sym> (BFD_RELOC_MIPS_CALL_HI16)
5513 addu $tempreg,$tempreg,$gp
5514 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
5515 For a local symbol, we want
5516 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5518 addiu $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
5520 If we have a small constant, and this is a reference to
5521 an external symbol, we want
5522 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
5523 addu $tempreg,$tempreg,$gp
5524 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
5526 addiu $tempreg,$tempreg,<constant>
5527 For a local symbol, we want
5528 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5530 addiu $tempreg,$tempreg,<constant> (BFD_RELOC_LO16)
5532 If we have a large constant, and this is a reference to
5533 an external symbol, we want
5534 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
5535 addu $tempreg,$tempreg,$gp
5536 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
5537 lui $at,<hiconstant>
5538 addiu $at,$at,<loconstant>
5539 addu $tempreg,$tempreg,$at
5540 For a local symbol, we want
5541 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5542 lui $at,<hiconstant>
5543 addiu $at,$at,<loconstant> (BFD_RELOC_LO16)
5544 addu $tempreg,$tempreg,$at
5547 expr1.X_add_number = offset_expr.X_add_number;
5548 offset_expr.X_add_number = 0;
5549 relax_start (offset_expr.X_add_symbol);
5550 gpdelay = reg_needs_delay (mips_gp_register);
5551 if (expr1.X_add_number == 0 && breg == 0
5552 && (call || tempreg == PIC_CALL_REG))
5554 lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
5555 lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
5557 macro_build (&offset_expr, "lui", "t,u", tempreg, lui_reloc_type);
5558 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5559 tempreg, tempreg, mips_gp_register);
5560 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5561 tempreg, lw_reloc_type, tempreg);
5562 if (expr1.X_add_number == 0)
5566 /* We're going to put in an addu instruction using
5567 tempreg, so we may as well insert the nop right
5572 else if (expr1.X_add_number >= -0x8000
5573 && expr1.X_add_number < 0x8000)
5576 macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
5577 tempreg, tempreg, BFD_RELOC_LO16);
5583 /* If we are going to add in a base register, and the
5584 target register and the base register are the same,
5585 then we are using AT as a temporary register. Since
5586 we want to load the constant into AT, we add our
5587 current AT (from the global offset table) and the
5588 register into the register now, and pretend we were
5589 not using a base register. */
5594 assert (tempreg == AT);
5596 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5601 load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
5602 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
5606 offset_expr.X_add_number =
5607 ((expr1.X_add_number + 0x8000) & 0xffff) - 0x8000;
5612 /* This is needed because this instruction uses $gp, but
5613 the first instruction on the main stream does not. */
5614 macro_build (NULL, "nop", "");
5617 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5618 local_reloc_type, mips_gp_register);
5619 if (expr1.X_add_number >= -0x8000
5620 && expr1.X_add_number < 0x8000)
5623 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5624 tempreg, tempreg, BFD_RELOC_LO16);
5625 /* FIXME: If add_number is 0, and there was no base
5626 register, the external symbol case ended with a load,
5627 so if the symbol turns out to not be external, and
5628 the next instruction uses tempreg, an unnecessary nop
5629 will be inserted. */
5635 /* We must add in the base register now, as in the
5636 external symbol case. */
5637 assert (tempreg == AT);
5639 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5642 /* We set breg to 0 because we have arranged to add
5643 it in in both cases. */
5647 macro_build_lui (&expr1, AT);
5648 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5649 AT, AT, BFD_RELOC_LO16);
5650 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5651 tempreg, tempreg, AT);
5656 else if (mips_big_got && HAVE_NEWABI)
5658 int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
5659 int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
5660 int add_breg_early = 0;
5662 /* This is the large GOT case. If this is a reference to an
5663 external symbol, and there is no constant, we want
5664 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
5665 add $tempreg,$tempreg,$gp
5666 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
5667 or for lca or if tempreg is PIC_CALL_REG
5668 lui $tempreg,<sym> (BFD_RELOC_MIPS_CALL_HI16)
5669 add $tempreg,$tempreg,$gp
5670 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
5672 If we have a small constant, and this is a reference to
5673 an external symbol, we want
5674 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
5675 add $tempreg,$tempreg,$gp
5676 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
5677 addi $tempreg,$tempreg,<constant>
5679 If we have a large constant, and this is a reference to
5680 an external symbol, we want
5681 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
5682 addu $tempreg,$tempreg,$gp
5683 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
5684 lui $at,<hiconstant>
5685 addi $at,$at,<loconstant>
5686 add $tempreg,$tempreg,$at
5688 If we have NewABI, and we know it's a local symbol, we want
5689 lw $reg,<sym>($gp) (BFD_RELOC_MIPS_GOT_PAGE)
5690 addiu $reg,$reg,<sym> (BFD_RELOC_MIPS_GOT_OFST)
5691 otherwise we have to resort to GOT_HI16/GOT_LO16. */
5693 relax_start (offset_expr.X_add_symbol);
5695 expr1.X_add_number = offset_expr.X_add_number;
5696 offset_expr.X_add_number = 0;
5698 if (expr1.X_add_number == 0 && breg == 0
5699 && (call || tempreg == PIC_CALL_REG))
5701 lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
5702 lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
5704 macro_build (&offset_expr, "lui", "t,u", tempreg, lui_reloc_type);
5705 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5706 tempreg, tempreg, mips_gp_register);
5707 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5708 tempreg, lw_reloc_type, tempreg);
5710 if (expr1.X_add_number == 0)
5712 else if (expr1.X_add_number >= -0x8000
5713 && expr1.X_add_number < 0x8000)
5715 macro_build (&expr1, ADDRESS_ADDI_INSN, "t,r,j",
5716 tempreg, tempreg, BFD_RELOC_LO16);
5718 else if (IS_SEXT_32BIT_NUM (expr1.X_add_number + 0x8000))
5722 /* If we are going to add in a base register, and the
5723 target register and the base register are the same,
5724 then we are using AT as a temporary register. Since
5725 we want to load the constant into AT, we add our
5726 current AT (from the global offset table) and the
5727 register into the register now, and pretend we were
5728 not using a base register. */
5733 assert (tempreg == AT);
5734 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5740 load_register (AT, &expr1, HAVE_64BIT_ADDRESSES);
5741 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", dreg, dreg, AT);
5746 as_bad (_("PIC code offset overflow (max 32 signed bits)"));
5749 offset_expr.X_add_number = expr1.X_add_number;
5750 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
5751 BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
5752 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
5753 tempreg, BFD_RELOC_MIPS_GOT_OFST);
5756 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
5757 treg, tempreg, breg);
5767 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", treg, tempreg, breg);
5771 /* The j instruction may not be used in PIC code, since it
5772 requires an absolute address. We convert it to a b
5774 if (mips_pic == NO_PIC)
5775 macro_build (&offset_expr, "j", "a");
5777 macro_build (&offset_expr, "b", "p");
5780 /* The jal instructions must be handled as macros because when
5781 generating PIC code they expand to multi-instruction
5782 sequences. Normally they are simple instructions. */
5787 if (mips_pic == NO_PIC)
5788 macro_build (NULL, "jalr", "d,s", dreg, sreg);
5791 if (sreg != PIC_CALL_REG)
5792 as_warn (_("MIPS PIC call to register other than $25"));
5794 macro_build (NULL, "jalr", "d,s", dreg, sreg);
5795 if (mips_pic == SVR4_PIC && !HAVE_NEWABI)
5797 if (mips_cprestore_offset < 0)
5798 as_warn (_("No .cprestore pseudo-op used in PIC code"));
5801 if (! mips_frame_reg_valid)
5803 as_warn (_("No .frame pseudo-op used in PIC code"));
5804 /* Quiet this warning. */
5805 mips_frame_reg_valid = 1;
5807 if (! mips_cprestore_valid)
5809 as_warn (_("No .cprestore pseudo-op used in PIC code"));
5810 /* Quiet this warning. */
5811 mips_cprestore_valid = 1;
5813 expr1.X_add_number = mips_cprestore_offset;
5814 macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
5817 HAVE_64BIT_ADDRESSES);
5825 if (mips_pic == NO_PIC)
5826 macro_build (&offset_expr, "jal", "a");
5827 else if (mips_pic == SVR4_PIC)
5829 /* If this is a reference to an external symbol, and we are
5830 using a small GOT, we want
5831 lw $25,<sym>($gp) (BFD_RELOC_MIPS_CALL16)
5835 lw $gp,cprestore($sp)
5836 The cprestore value is set using the .cprestore
5837 pseudo-op. If we are using a big GOT, we want
5838 lui $25,<sym> (BFD_RELOC_MIPS_CALL_HI16)
5840 lw $25,<sym>($25) (BFD_RELOC_MIPS_CALL_LO16)
5844 lw $gp,cprestore($sp)
5845 If the symbol is not external, we want
5846 lw $25,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
5848 addiu $25,$25,<sym> (BFD_RELOC_LO16)
5851 lw $gp,cprestore($sp)
5853 For NewABI, we use the same CALL16 or CALL_HI16/CALL_LO16
5854 sequences above, minus nops, unless the symbol is local,
5855 which enables us to use GOT_PAGE/GOT_OFST (big got) or
5861 relax_start (offset_expr.X_add_symbol);
5862 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5863 PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
5866 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5867 PIC_CALL_REG, BFD_RELOC_MIPS_GOT_DISP,
5873 relax_start (offset_expr.X_add_symbol);
5874 macro_build (&offset_expr, "lui", "t,u", PIC_CALL_REG,
5875 BFD_RELOC_MIPS_CALL_HI16);
5876 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
5877 PIC_CALL_REG, mips_gp_register);
5878 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5879 PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
5882 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5883 PIC_CALL_REG, BFD_RELOC_MIPS_GOT_PAGE,
5885 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5886 PIC_CALL_REG, PIC_CALL_REG,
5887 BFD_RELOC_MIPS_GOT_OFST);
5891 macro_build_jalr (&offset_expr);
5895 relax_start (offset_expr.X_add_symbol);
5898 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5899 PIC_CALL_REG, BFD_RELOC_MIPS_CALL16,
5908 gpdelay = reg_needs_delay (mips_gp_register);
5909 macro_build (&offset_expr, "lui", "t,u", PIC_CALL_REG,
5910 BFD_RELOC_MIPS_CALL_HI16);
5911 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", PIC_CALL_REG,
5912 PIC_CALL_REG, mips_gp_register);
5913 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5914 PIC_CALL_REG, BFD_RELOC_MIPS_CALL_LO16,
5919 macro_build (NULL, "nop", "");
5921 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
5922 PIC_CALL_REG, BFD_RELOC_MIPS_GOT16,
5925 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j",
5926 PIC_CALL_REG, PIC_CALL_REG, BFD_RELOC_LO16);
5928 macro_build_jalr (&offset_expr);
5930 if (mips_cprestore_offset < 0)
5931 as_warn (_("No .cprestore pseudo-op used in PIC code"));
5934 if (! mips_frame_reg_valid)
5936 as_warn (_("No .frame pseudo-op used in PIC code"));
5937 /* Quiet this warning. */
5938 mips_frame_reg_valid = 1;
5940 if (! mips_cprestore_valid)
5942 as_warn (_("No .cprestore pseudo-op used in PIC code"));
5943 /* Quiet this warning. */
5944 mips_cprestore_valid = 1;
5946 if (mips_opts.noreorder)
5947 macro_build (NULL, "nop", "");
5948 expr1.X_add_number = mips_cprestore_offset;
5949 macro_build_ldst_constoffset (&expr1, ADDRESS_LOAD_INSN,
5952 HAVE_64BIT_ADDRESSES);
5956 else if (mips_pic == VXWORKS_PIC)
5957 as_bad (_("Non-PIC jump used in PIC library"));
5980 /* Itbl support may require additional care here. */
5985 /* Itbl support may require additional care here. */
5990 /* Itbl support may require additional care here. */
5995 /* Itbl support may require additional care here. */
6007 if (mips_opts.arch == CPU_R4650)
6009 as_bad (_("opcode not supported on this processor"));
6013 /* Itbl support may require additional care here. */
6018 /* Itbl support may require additional care here. */
6023 /* Itbl support may require additional care here. */
6043 if (breg == treg || coproc || lr)
6064 /* Itbl support may require additional care here. */
6069 /* Itbl support may require additional care here. */
6074 /* Itbl support may require additional care here. */
6079 /* Itbl support may require additional care here. */
6098 if (mips_opts.arch == CPU_R4650)
6100 as_bad (_("opcode not supported on this processor"));
6105 /* Itbl support may require additional care here. */
6109 /* Itbl support may require additional care here. */
6114 /* Itbl support may require additional care here. */
6126 /* Itbl support may require additional care here. */
6127 if (mask == M_LWC1_AB
6128 || mask == M_SWC1_AB
6129 || mask == M_LDC1_AB
6130 || mask == M_SDC1_AB
6134 else if (mask == M_CACHE_AB)
6141 if (offset_expr.X_op != O_constant
6142 && offset_expr.X_op != O_symbol)
6144 as_bad (_("expression too complex"));
6145 offset_expr.X_op = O_constant;
6148 if (HAVE_32BIT_ADDRESSES
6149 && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
6153 sprintf_vma (value, offset_expr.X_add_number);
6154 as_bad (_("Number (0x%s) larger than 32 bits"), value);
6157 /* A constant expression in PIC code can be handled just as it
6158 is in non PIC code. */
6159 if (offset_expr.X_op == O_constant)
6161 expr1.X_add_number = ((offset_expr.X_add_number + 0x8000)
6162 & ~(bfd_vma) 0xffff);
6163 normalize_address_expr (&expr1);
6164 load_register (tempreg, &expr1, HAVE_64BIT_ADDRESSES);
6166 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6167 tempreg, tempreg, breg);
6168 macro_build (&offset_expr, s, fmt, treg, BFD_RELOC_LO16, tempreg);
6170 else if (mips_pic == NO_PIC)
6172 /* If this is a reference to a GP relative symbol, and there
6173 is no base register, we want
6174 <op> $treg,<sym>($gp) (BFD_RELOC_GPREL16)
6175 Otherwise, if there is no base register, we want
6176 lui $tempreg,<sym> (BFD_RELOC_HI16_S)
6177 <op> $treg,<sym>($tempreg) (BFD_RELOC_LO16)
6178 If we have a constant, we need two instructions anyhow,
6179 so we always use the latter form.
6181 If we have a base register, and this is a reference to a
6182 GP relative symbol, we want
6183 addu $tempreg,$breg,$gp
6184 <op> $treg,<sym>($tempreg) (BFD_RELOC_GPREL16)
6186 lui $tempreg,<sym> (BFD_RELOC_HI16_S)
6187 addu $tempreg,$tempreg,$breg
6188 <op> $treg,<sym>($tempreg) (BFD_RELOC_LO16)
6189 With a constant we always use the latter case.
6191 With 64bit address space and no base register and $at usable,
6193 lui $tempreg,<sym> (BFD_RELOC_MIPS_HIGHEST)
6194 lui $at,<sym> (BFD_RELOC_HI16_S)
6195 daddiu $tempreg,<sym> (BFD_RELOC_MIPS_HIGHER)
6198 <op> $treg,<sym>($tempreg) (BFD_RELOC_LO16)
6199 If we have a base register, we want
6200 lui $tempreg,<sym> (BFD_RELOC_MIPS_HIGHEST)
6201 lui $at,<sym> (BFD_RELOC_HI16_S)
6202 daddiu $tempreg,<sym> (BFD_RELOC_MIPS_HIGHER)
6206 <op> $treg,<sym>($tempreg) (BFD_RELOC_LO16)
6208 Without $at we can't generate the optimal path for superscalar
6209 processors here since this would require two temporary registers.
6210 lui $tempreg,<sym> (BFD_RELOC_MIPS_HIGHEST)
6211 daddiu $tempreg,<sym> (BFD_RELOC_MIPS_HIGHER)
6213 daddiu $tempreg,<sym> (BFD_RELOC_HI16_S)
6215 <op> $treg,<sym>($tempreg) (BFD_RELOC_LO16)
6216 If we have a base register, we want
6217 lui $tempreg,<sym> (BFD_RELOC_MIPS_HIGHEST)
6218 daddiu $tempreg,<sym> (BFD_RELOC_MIPS_HIGHER)
6220 daddiu $tempreg,<sym> (BFD_RELOC_HI16_S)
6222 daddu $tempreg,$tempreg,$breg
6223 <op> $treg,<sym>($tempreg) (BFD_RELOC_LO16)
6225 For GP relative symbols in 64bit address space we can use
6226 the same sequence as in 32bit address space. */
6227 if (HAVE_64BIT_SYMBOLS)
6229 if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
6230 && !nopic_need_relax (offset_expr.X_add_symbol, 1))
6232 relax_start (offset_expr.X_add_symbol);
6235 macro_build (&offset_expr, s, fmt, treg,
6236 BFD_RELOC_GPREL16, mips_gp_register);
6240 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6241 tempreg, breg, mips_gp_register);
6242 macro_build (&offset_expr, s, fmt, treg,
6243 BFD_RELOC_GPREL16, tempreg);
6248 if (used_at == 0 && !mips_opts.noat)
6250 macro_build (&offset_expr, "lui", "t,u", tempreg,
6251 BFD_RELOC_MIPS_HIGHEST);
6252 macro_build (&offset_expr, "lui", "t,u", AT,
6254 macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
6255 tempreg, BFD_RELOC_MIPS_HIGHER);
6257 macro_build (NULL, "daddu", "d,v,t", AT, AT, breg);
6258 macro_build (NULL, "dsll32", "d,w,<", tempreg, tempreg, 0);
6259 macro_build (NULL, "daddu", "d,v,t", tempreg, tempreg, AT);
6260 macro_build (&offset_expr, s, fmt, treg, BFD_RELOC_LO16,
6266 macro_build (&offset_expr, "lui", "t,u", tempreg,
6267 BFD_RELOC_MIPS_HIGHEST);
6268 macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
6269 tempreg, BFD_RELOC_MIPS_HIGHER);
6270 macro_build (NULL, "dsll", "d,w,<", tempreg, tempreg, 16);
6271 macro_build (&offset_expr, "daddiu", "t,r,j", tempreg,
6272 tempreg, BFD_RELOC_HI16_S);
6273 macro_build (NULL, "dsll", "d,w,<", tempreg, tempreg, 16);
6275 macro_build (NULL, "daddu", "d,v,t",
6276 tempreg, tempreg, breg);
6277 macro_build (&offset_expr, s, fmt, treg,
6278 BFD_RELOC_LO16, tempreg);
6281 if (mips_relax.sequence)
6288 if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
6289 && !nopic_need_relax (offset_expr.X_add_symbol, 1))
6291 relax_start (offset_expr.X_add_symbol);
6292 macro_build (&offset_expr, s, fmt, treg, BFD_RELOC_GPREL16,
6296 macro_build_lui (&offset_expr, tempreg);
6297 macro_build (&offset_expr, s, fmt, treg,
6298 BFD_RELOC_LO16, tempreg);
6299 if (mips_relax.sequence)
6304 if ((valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
6305 && !nopic_need_relax (offset_expr.X_add_symbol, 1))
6307 relax_start (offset_expr.X_add_symbol);
6308 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6309 tempreg, breg, mips_gp_register);
6310 macro_build (&offset_expr, s, fmt, treg,
6311 BFD_RELOC_GPREL16, tempreg);
6314 macro_build_lui (&offset_expr, tempreg);
6315 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6316 tempreg, tempreg, breg);
6317 macro_build (&offset_expr, s, fmt, treg,
6318 BFD_RELOC_LO16, tempreg);
6319 if (mips_relax.sequence)
6323 else if (!mips_big_got)
6325 int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
6327 /* If this is a reference to an external symbol, we want
6328 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
6330 <op> $treg,0($tempreg)
6332 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
6334 addiu $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
6335 <op> $treg,0($tempreg)
6338 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT_PAGE)
6339 <op> $treg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_OFST)
6341 If there is a base register, we add it to $tempreg before
6342 the <op>. If there is a constant, we stick it in the
6343 <op> instruction. We don't handle constants larger than
6344 16 bits, because we have no way to load the upper 16 bits
6345 (actually, we could handle them for the subset of cases
6346 in which we are not using $at). */
6347 assert (offset_expr.X_op == O_symbol);
6350 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
6351 BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
6353 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6354 tempreg, tempreg, breg);
6355 macro_build (&offset_expr, s, fmt, treg,
6356 BFD_RELOC_MIPS_GOT_OFST, tempreg);
6359 expr1.X_add_number = offset_expr.X_add_number;
6360 offset_expr.X_add_number = 0;
6361 if (expr1.X_add_number < -0x8000
6362 || expr1.X_add_number >= 0x8000)
6363 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
6364 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
6365 lw_reloc_type, mips_gp_register);
6367 relax_start (offset_expr.X_add_symbol);
6369 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
6370 tempreg, BFD_RELOC_LO16);
6373 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6374 tempreg, tempreg, breg);
6375 macro_build (&expr1, s, fmt, treg, BFD_RELOC_LO16, tempreg);
6377 else if (mips_big_got && !HAVE_NEWABI)
6381 /* If this is a reference to an external symbol, we want
6382 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
6383 addu $tempreg,$tempreg,$gp
6384 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
6385 <op> $treg,0($tempreg)
6387 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
6389 addiu $tempreg,$tempreg,<sym> (BFD_RELOC_LO16)
6390 <op> $treg,0($tempreg)
6391 If there is a base register, we add it to $tempreg before
6392 the <op>. If there is a constant, we stick it in the
6393 <op> instruction. We don't handle constants larger than
6394 16 bits, because we have no way to load the upper 16 bits
6395 (actually, we could handle them for the subset of cases
6396 in which we are not using $at). */
6397 assert (offset_expr.X_op == O_symbol);
6398 expr1.X_add_number = offset_expr.X_add_number;
6399 offset_expr.X_add_number = 0;
6400 if (expr1.X_add_number < -0x8000
6401 || expr1.X_add_number >= 0x8000)
6402 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
6403 gpdelay = reg_needs_delay (mips_gp_register);
6404 relax_start (offset_expr.X_add_symbol);
6405 macro_build (&offset_expr, "lui", "t,u", tempreg,
6406 BFD_RELOC_MIPS_GOT_HI16);
6407 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
6409 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
6410 BFD_RELOC_MIPS_GOT_LO16, tempreg);
6413 macro_build (NULL, "nop", "");
6414 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
6415 BFD_RELOC_MIPS_GOT16, mips_gp_register);
6417 macro_build (&offset_expr, ADDRESS_ADDI_INSN, "t,r,j", tempreg,
6418 tempreg, BFD_RELOC_LO16);
6422 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6423 tempreg, tempreg, breg);
6424 macro_build (&expr1, s, fmt, treg, BFD_RELOC_LO16, tempreg);
6426 else if (mips_big_got && HAVE_NEWABI)
6428 /* If this is a reference to an external symbol, we want
6429 lui $tempreg,<sym> (BFD_RELOC_MIPS_GOT_HI16)
6430 add $tempreg,$tempreg,$gp
6431 lw $tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
6432 <op> $treg,<ofst>($tempreg)
6433 Otherwise, for local symbols, we want:
6434 lw $tempreg,<sym>($gp) (BFD_RELOC_MIPS_GOT_PAGE)
6435 <op> $treg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_OFST) */
6436 assert (offset_expr.X_op == O_symbol);
6437 expr1.X_add_number = offset_expr.X_add_number;
6438 offset_expr.X_add_number = 0;
6439 if (expr1.X_add_number < -0x8000
6440 || expr1.X_add_number >= 0x8000)
6441 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
6442 relax_start (offset_expr.X_add_symbol);
6443 macro_build (&offset_expr, "lui", "t,u", tempreg,
6444 BFD_RELOC_MIPS_GOT_HI16);
6445 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", tempreg, tempreg,
6447 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
6448 BFD_RELOC_MIPS_GOT_LO16, tempreg);
6450 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6451 tempreg, tempreg, breg);
6452 macro_build (&expr1, s, fmt, treg, BFD_RELOC_LO16, tempreg);
6455 offset_expr.X_add_number = expr1.X_add_number;
6456 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", tempreg,
6457 BFD_RELOC_MIPS_GOT_PAGE, mips_gp_register);
6459 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6460 tempreg, tempreg, breg);
6461 macro_build (&offset_expr, s, fmt, treg,
6462 BFD_RELOC_MIPS_GOT_OFST, tempreg);
6472 load_register (treg, &imm_expr, 0);
6476 load_register (treg, &imm_expr, 1);
6480 if (imm_expr.X_op == O_constant)
6483 load_register (AT, &imm_expr, 0);
6484 macro_build (NULL, "mtc1", "t,G", AT, treg);
6489 assert (offset_expr.X_op == O_symbol
6490 && strcmp (segment_name (S_GET_SEGMENT
6491 (offset_expr.X_add_symbol)),
6493 && offset_expr.X_add_number == 0);
6494 macro_build (&offset_expr, "lwc1", "T,o(b)", treg,
6495 BFD_RELOC_MIPS_LITERAL, mips_gp_register);
6500 /* Check if we have a constant in IMM_EXPR. If the GPRs are 64 bits
6501 wide, IMM_EXPR is the entire value. Otherwise IMM_EXPR is the high
6502 order 32 bits of the value and the low order 32 bits are either
6503 zero or in OFFSET_EXPR. */
6504 if (imm_expr.X_op == O_constant || imm_expr.X_op == O_big)
6506 if (HAVE_64BIT_GPRS)
6507 load_register (treg, &imm_expr, 1);
6512 if (target_big_endian)
6524 load_register (hreg, &imm_expr, 0);
6527 if (offset_expr.X_op == O_absent)
6528 move_register (lreg, 0);
6531 assert (offset_expr.X_op == O_constant);
6532 load_register (lreg, &offset_expr, 0);
6539 /* We know that sym is in the .rdata section. First we get the
6540 upper 16 bits of the address. */
6541 if (mips_pic == NO_PIC)
6543 macro_build_lui (&offset_expr, AT);
6548 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
6549 BFD_RELOC_MIPS_GOT16, mips_gp_register);
6553 /* Now we load the register(s). */
6554 if (HAVE_64BIT_GPRS)
6557 macro_build (&offset_expr, "ld", "t,o(b)", treg, BFD_RELOC_LO16, AT);
6562 macro_build (&offset_expr, "lw", "t,o(b)", treg, BFD_RELOC_LO16, AT);
6565 /* FIXME: How in the world do we deal with the possible
6567 offset_expr.X_add_number += 4;
6568 macro_build (&offset_expr, "lw", "t,o(b)",
6569 treg + 1, BFD_RELOC_LO16, AT);
6575 /* Check if we have a constant in IMM_EXPR. If the FPRs are 64 bits
6576 wide, IMM_EXPR is the entire value and the GPRs are known to be 64
6577 bits wide as well. Otherwise IMM_EXPR is the high order 32 bits of
6578 the value and the low order 32 bits are either zero or in
6580 if (imm_expr.X_op == O_constant || imm_expr.X_op == O_big)
6583 load_register (AT, &imm_expr, HAVE_64BIT_FPRS);
6584 if (HAVE_64BIT_FPRS)
6586 assert (HAVE_64BIT_GPRS);
6587 macro_build (NULL, "dmtc1", "t,S", AT, treg);
6591 macro_build (NULL, "mtc1", "t,G", AT, treg + 1);
6592 if (offset_expr.X_op == O_absent)
6593 macro_build (NULL, "mtc1", "t,G", 0, treg);
6596 assert (offset_expr.X_op == O_constant);
6597 load_register (AT, &offset_expr, 0);
6598 macro_build (NULL, "mtc1", "t,G", AT, treg);
6604 assert (offset_expr.X_op == O_symbol
6605 && offset_expr.X_add_number == 0);
6606 s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
6607 if (strcmp (s, ".lit8") == 0)
6609 if (mips_opts.isa != ISA_MIPS1)
6611 macro_build (&offset_expr, "ldc1", "T,o(b)", treg,
6612 BFD_RELOC_MIPS_LITERAL, mips_gp_register);
6615 breg = mips_gp_register;
6616 r = BFD_RELOC_MIPS_LITERAL;
6621 assert (strcmp (s, RDATA_SECTION_NAME) == 0);
6623 if (mips_pic != NO_PIC)
6624 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
6625 BFD_RELOC_MIPS_GOT16, mips_gp_register);
6628 /* FIXME: This won't work for a 64 bit address. */
6629 macro_build_lui (&offset_expr, AT);
6632 if (mips_opts.isa != ISA_MIPS1)
6634 macro_build (&offset_expr, "ldc1", "T,o(b)",
6635 treg, BFD_RELOC_LO16, AT);
6644 if (mips_opts.arch == CPU_R4650)
6646 as_bad (_("opcode not supported on this processor"));
6649 /* Even on a big endian machine $fn comes before $fn+1. We have
6650 to adjust when loading from memory. */
6653 assert (mips_opts.isa == ISA_MIPS1);
6654 macro_build (&offset_expr, "lwc1", "T,o(b)",
6655 target_big_endian ? treg + 1 : treg, r, breg);
6656 /* FIXME: A possible overflow which I don't know how to deal
6658 offset_expr.X_add_number += 4;
6659 macro_build (&offset_expr, "lwc1", "T,o(b)",
6660 target_big_endian ? treg : treg + 1, r, breg);
6665 * The MIPS assembler seems to check for X_add_number not
6666 * being double aligned and generating:
6669 * addiu at,at,%lo(foo+1)
6672 * But, the resulting address is the same after relocation so why
6673 * generate the extra instruction?
6675 if (mips_opts.arch == CPU_R4650)
6677 as_bad (_("opcode not supported on this processor"));
6680 /* Itbl support may require additional care here. */
6682 if (mips_opts.isa != ISA_MIPS1)
6693 if (mips_opts.arch == CPU_R4650)
6695 as_bad (_("opcode not supported on this processor"));
6699 if (mips_opts.isa != ISA_MIPS1)
6707 /* Itbl support may require additional care here. */
6712 if (HAVE_64BIT_GPRS)
6723 if (HAVE_64BIT_GPRS)
6733 if (offset_expr.X_op != O_symbol
6734 && offset_expr.X_op != O_constant)
6736 as_bad (_("expression too complex"));
6737 offset_expr.X_op = O_constant;
6740 if (HAVE_32BIT_ADDRESSES
6741 && !IS_SEXT_32BIT_NUM (offset_expr.X_add_number))
6745 sprintf_vma (value, offset_expr.X_add_number);
6746 as_bad (_("Number (0x%s) larger than 32 bits"), value);
6749 /* Even on a big endian machine $fn comes before $fn+1. We have
6750 to adjust when loading from memory. We set coproc if we must
6751 load $fn+1 first. */
6752 /* Itbl support may require additional care here. */
6753 if (! target_big_endian)
6756 if (mips_pic == NO_PIC
6757 || offset_expr.X_op == O_constant)
6759 /* If this is a reference to a GP relative symbol, we want
6760 <op> $treg,<sym>($gp) (BFD_RELOC_GPREL16)
6761 <op> $treg+1,<sym>+4($gp) (BFD_RELOC_GPREL16)
6762 If we have a base register, we use this
6764 <op> $treg,<sym>($at) (BFD_RELOC_GPREL16)
6765 <op> $treg+1,<sym>+4($at) (BFD_RELOC_GPREL16)
6766 If this is not a GP relative symbol, we want
6767 lui $at,<sym> (BFD_RELOC_HI16_S)
6768 <op> $treg,<sym>($at) (BFD_RELOC_LO16)
6769 <op> $treg+1,<sym>+4($at) (BFD_RELOC_LO16)
6770 If there is a base register, we add it to $at after the
6771 lui instruction. If there is a constant, we always use
6773 if (offset_expr.X_op == O_symbol
6774 && (valueT) offset_expr.X_add_number <= MAX_GPREL_OFFSET
6775 && !nopic_need_relax (offset_expr.X_add_symbol, 1))
6777 relax_start (offset_expr.X_add_symbol);
6780 tempreg = mips_gp_register;
6784 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6785 AT, breg, mips_gp_register);
6790 /* Itbl support may require additional care here. */
6791 macro_build (&offset_expr, s, fmt, coproc ? treg + 1 : treg,
6792 BFD_RELOC_GPREL16, tempreg);
6793 offset_expr.X_add_number += 4;
6795 /* Set mips_optimize to 2 to avoid inserting an
6797 hold_mips_optimize = mips_optimize;
6799 /* Itbl support may require additional care here. */
6800 macro_build (&offset_expr, s, fmt, coproc ? treg : treg + 1,
6801 BFD_RELOC_GPREL16, tempreg);
6802 mips_optimize = hold_mips_optimize;
6806 /* We just generated two relocs. When tc_gen_reloc
6807 handles this case, it will skip the first reloc and
6808 handle the second. The second reloc already has an
6809 extra addend of 4, which we added above. We must
6810 subtract it out, and then subtract another 4 to make
6811 the first reloc come out right. The second reloc
6812 will come out right because we are going to add 4 to
6813 offset_expr when we build its instruction below.
6815 If we have a symbol, then we don't want to include
6816 the offset, because it will wind up being included
6817 when we generate the reloc. */
6819 if (offset_expr.X_op == O_constant)
6820 offset_expr.X_add_number -= 8;
6823 offset_expr.X_add_number = -4;
6824 offset_expr.X_op = O_constant;
6828 macro_build_lui (&offset_expr, AT);
6830 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
6831 /* Itbl support may require additional care here. */
6832 macro_build (&offset_expr, s, fmt, coproc ? treg + 1 : treg,
6833 BFD_RELOC_LO16, AT);
6834 /* FIXME: How do we handle overflow here? */
6835 offset_expr.X_add_number += 4;
6836 /* Itbl support may require additional care here. */
6837 macro_build (&offset_expr, s, fmt, coproc ? treg : treg + 1,
6838 BFD_RELOC_LO16, AT);
6839 if (mips_relax.sequence)
6842 else if (!mips_big_got)
6844 /* If this is a reference to an external symbol, we want
6845 lw $at,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
6850 lw $at,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
6852 <op> $treg,<sym>($at) (BFD_RELOC_LO16)
6853 <op> $treg+1,<sym>+4($at) (BFD_RELOC_LO16)
6854 If there is a base register we add it to $at before the
6855 lwc1 instructions. If there is a constant we include it
6856 in the lwc1 instructions. */
6858 expr1.X_add_number = offset_expr.X_add_number;
6859 if (expr1.X_add_number < -0x8000
6860 || expr1.X_add_number >= 0x8000 - 4)
6861 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
6862 load_got_offset (AT, &offset_expr);
6865 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
6867 /* Set mips_optimize to 2 to avoid inserting an undesired
6869 hold_mips_optimize = mips_optimize;
6872 /* Itbl support may require additional care here. */
6873 relax_start (offset_expr.X_add_symbol);
6874 macro_build (&expr1, s, fmt, coproc ? treg + 1 : treg,
6875 BFD_RELOC_LO16, AT);
6876 expr1.X_add_number += 4;
6877 macro_build (&expr1, s, fmt, coproc ? treg : treg + 1,
6878 BFD_RELOC_LO16, AT);
6880 macro_build (&offset_expr, s, fmt, coproc ? treg + 1 : treg,
6881 BFD_RELOC_LO16, AT);
6882 offset_expr.X_add_number += 4;
6883 macro_build (&offset_expr, s, fmt, coproc ? treg : treg + 1,
6884 BFD_RELOC_LO16, AT);
6887 mips_optimize = hold_mips_optimize;
6889 else if (mips_big_got)
6893 /* If this is a reference to an external symbol, we want
6894 lui $at,<sym> (BFD_RELOC_MIPS_GOT_HI16)
6896 lw $at,<sym>($at) (BFD_RELOC_MIPS_GOT_LO16)
6901 lw $at,<sym>($gp) (BFD_RELOC_MIPS_GOT16)
6903 <op> $treg,<sym>($at) (BFD_RELOC_LO16)
6904 <op> $treg+1,<sym>+4($at) (BFD_RELOC_LO16)
6905 If there is a base register we add it to $at before the
6906 lwc1 instructions. If there is a constant we include it
6907 in the lwc1 instructions. */
6909 expr1.X_add_number = offset_expr.X_add_number;
6910 offset_expr.X_add_number = 0;
6911 if (expr1.X_add_number < -0x8000
6912 || expr1.X_add_number >= 0x8000 - 4)
6913 as_bad (_("PIC code offset overflow (max 16 signed bits)"));
6914 gpdelay = reg_needs_delay (mips_gp_register);
6915 relax_start (offset_expr.X_add_symbol);
6916 macro_build (&offset_expr, "lui", "t,u",
6917 AT, BFD_RELOC_MIPS_GOT_HI16);
6918 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t",
6919 AT, AT, mips_gp_register);
6920 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)",
6921 AT, BFD_RELOC_MIPS_GOT_LO16, AT);
6924 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
6925 /* Itbl support may require additional care here. */
6926 macro_build (&expr1, s, fmt, coproc ? treg + 1 : treg,
6927 BFD_RELOC_LO16, AT);
6928 expr1.X_add_number += 4;
6930 /* Set mips_optimize to 2 to avoid inserting an undesired
6932 hold_mips_optimize = mips_optimize;
6934 /* Itbl support may require additional care here. */
6935 macro_build (&expr1, s, fmt, coproc ? treg : treg + 1,
6936 BFD_RELOC_LO16, AT);
6937 mips_optimize = hold_mips_optimize;
6938 expr1.X_add_number -= 4;
6941 offset_expr.X_add_number = expr1.X_add_number;
6943 macro_build (NULL, "nop", "");
6944 macro_build (&offset_expr, ADDRESS_LOAD_INSN, "t,o(b)", AT,
6945 BFD_RELOC_MIPS_GOT16, mips_gp_register);
6948 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, breg, AT);
6949 /* Itbl support may require additional care here. */
6950 macro_build (&offset_expr, s, fmt, coproc ? treg + 1 : treg,
6951 BFD_RELOC_LO16, AT);
6952 offset_expr.X_add_number += 4;
6954 /* Set mips_optimize to 2 to avoid inserting an undesired
6956 hold_mips_optimize = mips_optimize;
6958 /* Itbl support may require additional care here. */
6959 macro_build (&offset_expr, s, fmt, coproc ? treg : treg + 1,
6960 BFD_RELOC_LO16, AT);
6961 mips_optimize = hold_mips_optimize;
6975 assert (HAVE_32BIT_ADDRESSES);
6976 macro_build (&offset_expr, s, "t,o(b)", treg, BFD_RELOC_LO16, breg);
6977 offset_expr.X_add_number += 4;
6978 macro_build (&offset_expr, s, "t,o(b)", treg + 1, BFD_RELOC_LO16, breg);
6981 /* New code added to support COPZ instructions.
6982 This code builds table entries out of the macros in mip_opcodes.
6983 R4000 uses interlocks to handle coproc delays.
6984 Other chips (like the R3000) require nops to be inserted for delays.
6986 FIXME: Currently, we require that the user handle delays.
6987 In order to fill delay slots for non-interlocked chips,
6988 we must have a way to specify delays based on the coprocessor.
6989 Eg. 4 cycles if load coproc reg from memory, 1 if in cache, etc.
6990 What are the side-effects of the cop instruction?
6991 What cache support might we have and what are its effects?
6992 Both coprocessor & memory require delays. how long???
6993 What registers are read/set/modified?
6995 If an itbl is provided to interpret cop instructions,
6996 this knowledge can be encoded in the itbl spec. */
7010 /* For now we just do C (same as Cz). The parameter will be
7011 stored in insn_opcode by mips_ip. */
7012 macro_build (NULL, s, "C", ip->insn_opcode);
7016 move_register (dreg, sreg);
7019 #ifdef LOSING_COMPILER
7021 /* Try and see if this is a new itbl instruction.
7022 This code builds table entries out of the macros in mip_opcodes.
7023 FIXME: For now we just assemble the expression and pass it's
7024 value along as a 32-bit immediate.
7025 We may want to have the assembler assemble this value,
7026 so that we gain the assembler's knowledge of delay slots,
7028 Would it be more efficient to use mask (id) here? */
7029 if (itbl_have_entries
7030 && (immed_expr = itbl_assemble (ip->insn_mo->name, "")))
7032 s = ip->insn_mo->name;
7034 coproc = ITBL_DECODE_PNUM (immed_expr);;
7035 macro_build (&immed_expr, s, "C");
7041 if (mips_opts.noat && used_at)
7042 as_bad (_("Macro used $at after \".set noat\""));
7046 macro2 (struct mips_cl_insn *ip)
7048 register int treg, sreg, dreg, breg;
7063 bfd_reloc_code_real_type r;
7065 treg = (ip->insn_opcode >> 16) & 0x1f;
7066 dreg = (ip->insn_opcode >> 11) & 0x1f;
7067 sreg = breg = (ip->insn_opcode >> 21) & 0x1f;
7068 mask = ip->insn_mo->mask;
7070 expr1.X_op = O_constant;
7071 expr1.X_op_symbol = NULL;
7072 expr1.X_add_symbol = NULL;
7073 expr1.X_add_number = 1;
7077 #endif /* LOSING_COMPILER */
7082 macro_build (NULL, dbl ? "dmultu" : "multu", "s,t", sreg, treg);
7083 macro_build (NULL, "mflo", "d", dreg);
7089 /* The MIPS assembler some times generates shifts and adds. I'm
7090 not trying to be that fancy. GCC should do this for us
7093 load_register (AT, &imm_expr, dbl);
7094 macro_build (NULL, dbl ? "dmult" : "mult", "s,t", sreg, AT);
7095 macro_build (NULL, "mflo", "d", dreg);
7111 load_register (AT, &imm_expr, dbl);
7112 macro_build (NULL, dbl ? "dmult" : "mult", "s,t", sreg, imm ? AT : treg);
7113 macro_build (NULL, "mflo", "d", dreg);
7114 macro_build (NULL, dbl ? "dsra32" : "sra", "d,w,<", dreg, dreg, RA);
7115 macro_build (NULL, "mfhi", "d", AT);
7117 macro_build (NULL, "tne", "s,t,q", dreg, AT, 6);
7120 expr1.X_add_number = 8;
7121 macro_build (&expr1, "beq", "s,t,p", dreg, AT);
7122 macro_build (NULL, "nop", "", 0);
7123 macro_build (NULL, "break", "c", 6);
7126 macro_build (NULL, "mflo", "d", dreg);
7142 load_register (AT, &imm_expr, dbl);
7143 macro_build (NULL, dbl ? "dmultu" : "multu", "s,t",
7144 sreg, imm ? AT : treg);
7145 macro_build (NULL, "mfhi", "d", AT);
7146 macro_build (NULL, "mflo", "d", dreg);
7148 macro_build (NULL, "tne", "s,t,q", AT, 0, 6);
7151 expr1.X_add_number = 8;
7152 macro_build (&expr1, "beq", "s,t,p", AT, 0);
7153 macro_build (NULL, "nop", "", 0);
7154 macro_build (NULL, "break", "c", 6);
7160 if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
7171 macro_build (NULL, "dnegu", "d,w", tempreg, treg);
7172 macro_build (NULL, "drorv", "d,t,s", dreg, sreg, tempreg);
7176 macro_build (NULL, "dsubu", "d,v,t", AT, 0, treg);
7177 macro_build (NULL, "dsrlv", "d,t,s", AT, sreg, AT);
7178 macro_build (NULL, "dsllv", "d,t,s", dreg, sreg, treg);
7179 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7183 if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
7194 macro_build (NULL, "negu", "d,w", tempreg, treg);
7195 macro_build (NULL, "rorv", "d,t,s", dreg, sreg, tempreg);
7199 macro_build (NULL, "subu", "d,v,t", AT, 0, treg);
7200 macro_build (NULL, "srlv", "d,t,s", AT, sreg, AT);
7201 macro_build (NULL, "sllv", "d,t,s", dreg, sreg, treg);
7202 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7210 if (imm_expr.X_op != O_constant)
7211 as_bad (_("Improper rotate count"));
7212 rot = imm_expr.X_add_number & 0x3f;
7213 if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
7215 rot = (64 - rot) & 0x3f;
7217 macro_build (NULL, "dror32", "d,w,<", dreg, sreg, rot - 32);
7219 macro_build (NULL, "dror", "d,w,<", dreg, sreg, rot);
7224 macro_build (NULL, "dsrl", "d,w,<", dreg, sreg, 0);
7227 l = (rot < 0x20) ? "dsll" : "dsll32";
7228 r = ((0x40 - rot) < 0x20) ? "dsrl" : "dsrl32";
7231 macro_build (NULL, l, "d,w,<", AT, sreg, rot);
7232 macro_build (NULL, r, "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f);
7233 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7241 if (imm_expr.X_op != O_constant)
7242 as_bad (_("Improper rotate count"));
7243 rot = imm_expr.X_add_number & 0x1f;
7244 if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
7246 macro_build (NULL, "ror", "d,w,<", dreg, sreg, (32 - rot) & 0x1f);
7251 macro_build (NULL, "srl", "d,w,<", dreg, sreg, 0);
7255 macro_build (NULL, "sll", "d,w,<", AT, sreg, rot);
7256 macro_build (NULL, "srl", "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f);
7257 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7262 if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
7264 macro_build (NULL, "drorv", "d,t,s", dreg, sreg, treg);
7268 macro_build (NULL, "dsubu", "d,v,t", AT, 0, treg);
7269 macro_build (NULL, "dsllv", "d,t,s", AT, sreg, AT);
7270 macro_build (NULL, "dsrlv", "d,t,s", dreg, sreg, treg);
7271 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7275 if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
7277 macro_build (NULL, "rorv", "d,t,s", dreg, sreg, treg);
7281 macro_build (NULL, "subu", "d,v,t", AT, 0, treg);
7282 macro_build (NULL, "sllv", "d,t,s", AT, sreg, AT);
7283 macro_build (NULL, "srlv", "d,t,s", dreg, sreg, treg);
7284 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7292 if (imm_expr.X_op != O_constant)
7293 as_bad (_("Improper rotate count"));
7294 rot = imm_expr.X_add_number & 0x3f;
7295 if (ISA_HAS_DROR (mips_opts.isa) || CPU_HAS_DROR (mips_opts.arch))
7298 macro_build (NULL, "dror32", "d,w,<", dreg, sreg, rot - 32);
7300 macro_build (NULL, "dror", "d,w,<", dreg, sreg, rot);
7305 macro_build (NULL, "dsrl", "d,w,<", dreg, sreg, 0);
7308 r = (rot < 0x20) ? "dsrl" : "dsrl32";
7309 l = ((0x40 - rot) < 0x20) ? "dsll" : "dsll32";
7312 macro_build (NULL, r, "d,w,<", AT, sreg, rot);
7313 macro_build (NULL, l, "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f);
7314 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7322 if (imm_expr.X_op != O_constant)
7323 as_bad (_("Improper rotate count"));
7324 rot = imm_expr.X_add_number & 0x1f;
7325 if (ISA_HAS_ROR (mips_opts.isa) || CPU_HAS_ROR (mips_opts.arch))
7327 macro_build (NULL, "ror", "d,w,<", dreg, sreg, rot);
7332 macro_build (NULL, "srl", "d,w,<", dreg, sreg, 0);
7336 macro_build (NULL, "srl", "d,w,<", AT, sreg, rot);
7337 macro_build (NULL, "sll", "d,w,<", dreg, sreg, (0x20 - rot) & 0x1f);
7338 macro_build (NULL, "or", "d,v,t", dreg, dreg, AT);
7343 if (mips_opts.arch == CPU_R4650)
7345 as_bad (_("opcode not supported on this processor"));
7348 assert (mips_opts.isa == ISA_MIPS1);
7349 /* Even on a big endian machine $fn comes before $fn+1. We have
7350 to adjust when storing to memory. */
7351 macro_build (&offset_expr, "swc1", "T,o(b)",
7352 target_big_endian ? treg + 1 : treg, BFD_RELOC_LO16, breg);
7353 offset_expr.X_add_number += 4;
7354 macro_build (&offset_expr, "swc1", "T,o(b)",
7355 target_big_endian ? treg : treg + 1, BFD_RELOC_LO16, breg);
7360 macro_build (&expr1, "sltiu", "t,r,j", dreg, treg, BFD_RELOC_LO16);
7362 macro_build (&expr1, "sltiu", "t,r,j", dreg, sreg, BFD_RELOC_LO16);
7365 macro_build (NULL, "xor", "d,v,t", dreg, sreg, treg);
7366 macro_build (&expr1, "sltiu", "t,r,j", dreg, dreg, BFD_RELOC_LO16);
7371 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
7373 macro_build (&expr1, "sltiu", "t,r,j", dreg, sreg, BFD_RELOC_LO16);
7378 as_warn (_("Instruction %s: result is always false"),
7380 move_register (dreg, 0);
7383 if (imm_expr.X_op == O_constant
7384 && imm_expr.X_add_number >= 0
7385 && imm_expr.X_add_number < 0x10000)
7387 macro_build (&imm_expr, "xori", "t,r,i", dreg, sreg, BFD_RELOC_LO16);
7389 else if (imm_expr.X_op == O_constant
7390 && imm_expr.X_add_number > -0x8000
7391 && imm_expr.X_add_number < 0)
7393 imm_expr.X_add_number = -imm_expr.X_add_number;
7394 macro_build (&imm_expr, HAVE_32BIT_GPRS ? "addiu" : "daddiu",
7395 "t,r,j", dreg, sreg, BFD_RELOC_LO16);
7399 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7400 macro_build (NULL, "xor", "d,v,t", dreg, sreg, AT);
7403 macro_build (&expr1, "sltiu", "t,r,j", dreg, dreg, BFD_RELOC_LO16);
7406 case M_SGE: /* sreg >= treg <==> not (sreg < treg) */
7412 macro_build (NULL, s, "d,v,t", dreg, sreg, treg);
7413 macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16);
7416 case M_SGE_I: /* sreg >= I <==> not (sreg < I) */
7418 if (imm_expr.X_op == O_constant
7419 && imm_expr.X_add_number >= -0x8000
7420 && imm_expr.X_add_number < 0x8000)
7422 macro_build (&imm_expr, mask == M_SGE_I ? "slti" : "sltiu", "t,r,j",
7423 dreg, sreg, BFD_RELOC_LO16);
7427 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7428 macro_build (NULL, mask == M_SGE_I ? "slt" : "sltu", "d,v,t",
7432 macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16);
7435 case M_SGT: /* sreg > treg <==> treg < sreg */
7441 macro_build (NULL, s, "d,v,t", dreg, treg, sreg);
7444 case M_SGT_I: /* sreg > I <==> I < sreg */
7451 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7452 macro_build (NULL, s, "d,v,t", dreg, AT, sreg);
7455 case M_SLE: /* sreg <= treg <==> treg >= sreg <==> not (treg < sreg) */
7461 macro_build (NULL, s, "d,v,t", dreg, treg, sreg);
7462 macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16);
7465 case M_SLE_I: /* sreg <= I <==> I >= sreg <==> not (I < sreg) */
7472 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7473 macro_build (NULL, s, "d,v,t", dreg, AT, sreg);
7474 macro_build (&expr1, "xori", "t,r,i", dreg, dreg, BFD_RELOC_LO16);
7478 if (imm_expr.X_op == O_constant
7479 && imm_expr.X_add_number >= -0x8000
7480 && imm_expr.X_add_number < 0x8000)
7482 macro_build (&imm_expr, "slti", "t,r,j", dreg, sreg, BFD_RELOC_LO16);
7486 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7487 macro_build (NULL, "slt", "d,v,t", dreg, sreg, AT);
7491 if (imm_expr.X_op == O_constant
7492 && imm_expr.X_add_number >= -0x8000
7493 && imm_expr.X_add_number < 0x8000)
7495 macro_build (&imm_expr, "sltiu", "t,r,j", dreg, sreg,
7500 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7501 macro_build (NULL, "sltu", "d,v,t", dreg, sreg, AT);
7506 macro_build (NULL, "sltu", "d,v,t", dreg, 0, treg);
7508 macro_build (NULL, "sltu", "d,v,t", dreg, 0, sreg);
7511 macro_build (NULL, "xor", "d,v,t", dreg, sreg, treg);
7512 macro_build (NULL, "sltu", "d,v,t", dreg, 0, dreg);
7517 if (imm_expr.X_op == O_constant && imm_expr.X_add_number == 0)
7519 macro_build (NULL, "sltu", "d,v,t", dreg, 0, sreg);
7524 as_warn (_("Instruction %s: result is always true"),
7526 macro_build (&expr1, HAVE_32BIT_GPRS ? "addiu" : "daddiu", "t,r,j",
7527 dreg, 0, BFD_RELOC_LO16);
7530 if (imm_expr.X_op == O_constant
7531 && imm_expr.X_add_number >= 0
7532 && imm_expr.X_add_number < 0x10000)
7534 macro_build (&imm_expr, "xori", "t,r,i", dreg, sreg, BFD_RELOC_LO16);
7536 else if (imm_expr.X_op == O_constant
7537 && imm_expr.X_add_number > -0x8000
7538 && imm_expr.X_add_number < 0)
7540 imm_expr.X_add_number = -imm_expr.X_add_number;
7541 macro_build (&imm_expr, HAVE_32BIT_GPRS ? "addiu" : "daddiu",
7542 "t,r,j", dreg, sreg, BFD_RELOC_LO16);
7546 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7547 macro_build (NULL, "xor", "d,v,t", dreg, sreg, AT);
7550 macro_build (NULL, "sltu", "d,v,t", dreg, 0, dreg);
7556 if (imm_expr.X_op == O_constant
7557 && imm_expr.X_add_number > -0x8000
7558 && imm_expr.X_add_number <= 0x8000)
7560 imm_expr.X_add_number = -imm_expr.X_add_number;
7561 macro_build (&imm_expr, dbl ? "daddi" : "addi", "t,r,j",
7562 dreg, sreg, BFD_RELOC_LO16);
7566 load_register (AT, &imm_expr, dbl);
7567 macro_build (NULL, dbl ? "dsub" : "sub", "d,v,t", dreg, sreg, AT);
7573 if (imm_expr.X_op == O_constant
7574 && imm_expr.X_add_number > -0x8000
7575 && imm_expr.X_add_number <= 0x8000)
7577 imm_expr.X_add_number = -imm_expr.X_add_number;
7578 macro_build (&imm_expr, dbl ? "daddiu" : "addiu", "t,r,j",
7579 dreg, sreg, BFD_RELOC_LO16);
7583 load_register (AT, &imm_expr, dbl);
7584 macro_build (NULL, dbl ? "dsubu" : "subu", "d,v,t", dreg, sreg, AT);
7606 load_register (AT, &imm_expr, HAVE_64BIT_GPRS);
7607 macro_build (NULL, s, "s,t", sreg, AT);
7612 assert (mips_opts.isa == ISA_MIPS1);
7614 sreg = (ip->insn_opcode >> 11) & 0x1f; /* floating reg */
7615 dreg = (ip->insn_opcode >> 06) & 0x1f; /* floating reg */
7618 * Is the double cfc1 instruction a bug in the mips assembler;
7619 * or is there a reason for it?
7622 macro_build (NULL, "cfc1", "t,G", treg, RA);
7623 macro_build (NULL, "cfc1", "t,G", treg, RA);
7624 macro_build (NULL, "nop", "");
7625 expr1.X_add_number = 3;
7626 macro_build (&expr1, "ori", "t,r,i", AT, treg, BFD_RELOC_LO16);
7627 expr1.X_add_number = 2;
7628 macro_build (&expr1, "xori", "t,r,i", AT, AT, BFD_RELOC_LO16);
7629 macro_build (NULL, "ctc1", "t,G", AT, RA);
7630 macro_build (NULL, "nop", "");
7631 macro_build (NULL, mask == M_TRUNCWD ? "cvt.w.d" : "cvt.w.s", "D,S",
7633 macro_build (NULL, "ctc1", "t,G", treg, RA);
7634 macro_build (NULL, "nop", "");
7645 if (offset_expr.X_add_number >= 0x7fff)
7646 as_bad (_("operand overflow"));
7647 if (! target_big_endian)
7648 ++offset_expr.X_add_number;
7649 macro_build (&offset_expr, s, "t,o(b)", AT, BFD_RELOC_LO16, breg);
7650 if (! target_big_endian)
7651 --offset_expr.X_add_number;
7653 ++offset_expr.X_add_number;
7654 macro_build (&offset_expr, "lbu", "t,o(b)", treg, BFD_RELOC_LO16, breg);
7655 macro_build (NULL, "sll", "d,w,<", AT, AT, 8);
7656 macro_build (NULL, "or", "d,v,t", treg, treg, AT);
7669 if (offset_expr.X_add_number >= 0x8000 - off)
7670 as_bad (_("operand overflow"));
7678 if (! target_big_endian)
7679 offset_expr.X_add_number += off;
7680 macro_build (&offset_expr, s, "t,o(b)", tempreg, BFD_RELOC_LO16, breg);
7681 if (! target_big_endian)
7682 offset_expr.X_add_number -= off;
7684 offset_expr.X_add_number += off;
7685 macro_build (&offset_expr, s2, "t,o(b)", tempreg, BFD_RELOC_LO16, breg);
7687 /* If necessary, move the result in tempreg the final destination. */
7688 if (treg == tempreg)
7690 /* Protect second load's delay slot. */
7692 move_register (treg, tempreg);
7706 load_address (AT, &offset_expr, &used_at);
7708 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
7709 if (! target_big_endian)
7710 expr1.X_add_number = off;
7712 expr1.X_add_number = 0;
7713 macro_build (&expr1, s, "t,o(b)", treg, BFD_RELOC_LO16, AT);
7714 if (! target_big_endian)
7715 expr1.X_add_number = 0;
7717 expr1.X_add_number = off;
7718 macro_build (&expr1, s2, "t,o(b)", treg, BFD_RELOC_LO16, AT);
7724 load_address (AT, &offset_expr, &used_at);
7726 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
7727 if (target_big_endian)
7728 expr1.X_add_number = 0;
7729 macro_build (&expr1, mask == M_ULH_A ? "lb" : "lbu", "t,o(b)",
7730 treg, BFD_RELOC_LO16, AT);
7731 if (target_big_endian)
7732 expr1.X_add_number = 1;
7734 expr1.X_add_number = 0;
7735 macro_build (&expr1, "lbu", "t,o(b)", AT, BFD_RELOC_LO16, AT);
7736 macro_build (NULL, "sll", "d,w,<", treg, treg, 8);
7737 macro_build (NULL, "or", "d,v,t", treg, treg, AT);
7742 if (offset_expr.X_add_number >= 0x7fff)
7743 as_bad (_("operand overflow"));
7744 if (target_big_endian)
7745 ++offset_expr.X_add_number;
7746 macro_build (&offset_expr, "sb", "t,o(b)", treg, BFD_RELOC_LO16, breg);
7747 macro_build (NULL, "srl", "d,w,<", AT, treg, 8);
7748 if (target_big_endian)
7749 --offset_expr.X_add_number;
7751 ++offset_expr.X_add_number;
7752 macro_build (&offset_expr, "sb", "t,o(b)", AT, BFD_RELOC_LO16, breg);
7765 if (offset_expr.X_add_number >= 0x8000 - off)
7766 as_bad (_("operand overflow"));
7767 if (! target_big_endian)
7768 offset_expr.X_add_number += off;
7769 macro_build (&offset_expr, s, "t,o(b)", treg, BFD_RELOC_LO16, breg);
7770 if (! target_big_endian)
7771 offset_expr.X_add_number -= off;
7773 offset_expr.X_add_number += off;
7774 macro_build (&offset_expr, s2, "t,o(b)", treg, BFD_RELOC_LO16, breg);
7788 load_address (AT, &offset_expr, &used_at);
7790 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
7791 if (! target_big_endian)
7792 expr1.X_add_number = off;
7794 expr1.X_add_number = 0;
7795 macro_build (&expr1, s, "t,o(b)", treg, BFD_RELOC_LO16, AT);
7796 if (! target_big_endian)
7797 expr1.X_add_number = 0;
7799 expr1.X_add_number = off;
7800 macro_build (&expr1, s2, "t,o(b)", treg, BFD_RELOC_LO16, AT);
7805 load_address (AT, &offset_expr, &used_at);
7807 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", AT, AT, breg);
7808 if (! target_big_endian)
7809 expr1.X_add_number = 0;
7810 macro_build (&expr1, "sb", "t,o(b)", treg, BFD_RELOC_LO16, AT);
7811 macro_build (NULL, "srl", "d,w,<", treg, treg, 8);
7812 if (! target_big_endian)
7813 expr1.X_add_number = 1;
7815 expr1.X_add_number = 0;
7816 macro_build (&expr1, "sb", "t,o(b)", treg, BFD_RELOC_LO16, AT);
7817 if (! target_big_endian)
7818 expr1.X_add_number = 0;
7820 expr1.X_add_number = 1;
7821 macro_build (&expr1, "lbu", "t,o(b)", AT, BFD_RELOC_LO16, AT);
7822 macro_build (NULL, "sll", "d,w,<", treg, treg, 8);
7823 macro_build (NULL, "or", "d,v,t", treg, treg, AT);
7827 /* FIXME: Check if this is one of the itbl macros, since they
7828 are added dynamically. */
7829 as_bad (_("Macro %s not implemented yet"), ip->insn_mo->name);
7832 if (mips_opts.noat && used_at)
7833 as_bad (_("Macro used $at after \".set noat\""));
7836 /* Implement macros in mips16 mode. */
7839 mips16_macro (struct mips_cl_insn *ip)
7842 int xreg, yreg, zreg, tmp;
7845 const char *s, *s2, *s3;
7847 mask = ip->insn_mo->mask;
7849 xreg = MIPS16_EXTRACT_OPERAND (RX, *ip);
7850 yreg = MIPS16_EXTRACT_OPERAND (RY, *ip);
7851 zreg = MIPS16_EXTRACT_OPERAND (RZ, *ip);
7853 expr1.X_op = O_constant;
7854 expr1.X_op_symbol = NULL;
7855 expr1.X_add_symbol = NULL;
7856 expr1.X_add_number = 1;
7876 macro_build (NULL, dbl ? "ddiv" : "div", "0,x,y", xreg, yreg);
7877 expr1.X_add_number = 2;
7878 macro_build (&expr1, "bnez", "x,p", yreg);
7879 macro_build (NULL, "break", "6", 7);
7881 /* FIXME: The normal code checks for of -1 / -0x80000000 here,
7882 since that causes an overflow. We should do that as well,
7883 but I don't see how to do the comparisons without a temporary
7886 macro_build (NULL, s, "x", zreg);
7906 macro_build (NULL, s, "0,x,y", xreg, yreg);
7907 expr1.X_add_number = 2;
7908 macro_build (&expr1, "bnez", "x,p", yreg);
7909 macro_build (NULL, "break", "6", 7);
7911 macro_build (NULL, s2, "x", zreg);
7917 macro_build (NULL, dbl ? "dmultu" : "multu", "x,y", xreg, yreg);
7918 macro_build (NULL, "mflo", "x", zreg);
7926 if (imm_expr.X_op != O_constant)
7927 as_bad (_("Unsupported large constant"));
7928 imm_expr.X_add_number = -imm_expr.X_add_number;
7929 macro_build (&imm_expr, dbl ? "daddiu" : "addiu", "y,x,4", yreg, xreg);
7933 if (imm_expr.X_op != O_constant)
7934 as_bad (_("Unsupported large constant"));
7935 imm_expr.X_add_number = -imm_expr.X_add_number;
7936 macro_build (&imm_expr, "addiu", "x,k", xreg);
7940 if (imm_expr.X_op != O_constant)
7941 as_bad (_("Unsupported large constant"));
7942 imm_expr.X_add_number = -imm_expr.X_add_number;
7943 macro_build (&imm_expr, "daddiu", "y,j", yreg);
7965 goto do_reverse_branch;
7969 goto do_reverse_branch;
7981 goto do_reverse_branch;
7992 macro_build (NULL, s, "x,y", xreg, yreg);
7993 macro_build (&offset_expr, s2, "p");
8020 goto do_addone_branch_i;
8025 goto do_addone_branch_i;
8040 goto do_addone_branch_i;
8047 if (imm_expr.X_op != O_constant)
8048 as_bad (_("Unsupported large constant"));
8049 ++imm_expr.X_add_number;
8052 macro_build (&imm_expr, s, s3, xreg);
8053 macro_build (&offset_expr, s2, "p");
8057 expr1.X_add_number = 0;
8058 macro_build (&expr1, "slti", "x,8", yreg);
8060 move_register (xreg, yreg);
8061 expr1.X_add_number = 2;
8062 macro_build (&expr1, "bteqz", "p");
8063 macro_build (NULL, "neg", "x,w", xreg, xreg);
8067 /* For consistency checking, verify that all bits are specified either
8068 by the match/mask part of the instruction definition, or by the
8071 validate_mips_insn (const struct mips_opcode *opc)
8073 const char *p = opc->args;
8075 unsigned long used_bits = opc->mask;
8077 if ((used_bits & opc->match) != opc->match)
8079 as_bad (_("internal: bad mips opcode (mask error): %s %s"),
8080 opc->name, opc->args);
8083 #define USE_BITS(mask,shift) (used_bits |= ((mask) << (shift)))
8093 case '1': USE_BITS (OP_MASK_UDI1, OP_SH_UDI1); break;
8094 case '2': USE_BITS (OP_MASK_UDI2, OP_SH_UDI2); break;
8095 case '3': USE_BITS (OP_MASK_UDI3, OP_SH_UDI3); break;
8096 case '4': USE_BITS (OP_MASK_UDI4, OP_SH_UDI4); break;
8097 case 'A': USE_BITS (OP_MASK_SHAMT, OP_SH_SHAMT); break;
8098 case 'B': USE_BITS (OP_MASK_INSMSB, OP_SH_INSMSB); break;
8099 case 'C': USE_BITS (OP_MASK_EXTMSBD, OP_SH_EXTMSBD); break;
8100 case 'D': USE_BITS (OP_MASK_RD, OP_SH_RD);
8101 USE_BITS (OP_MASK_SEL, OP_SH_SEL); break;
8102 case 'E': USE_BITS (OP_MASK_SHAMT, OP_SH_SHAMT); break;
8103 case 'F': USE_BITS (OP_MASK_INSMSB, OP_SH_INSMSB); break;
8104 case 'G': USE_BITS (OP_MASK_EXTMSBD, OP_SH_EXTMSBD); break;
8105 case 'H': USE_BITS (OP_MASK_EXTMSBD, OP_SH_EXTMSBD); break;
8107 case 't': USE_BITS (OP_MASK_RT, OP_SH_RT); break;
8108 case 'T': USE_BITS (OP_MASK_RT, OP_SH_RT);
8109 USE_BITS (OP_MASK_SEL, OP_SH_SEL); break;
8111 as_bad (_("internal: bad mips opcode (unknown extension operand type `+%c'): %s %s"),
8112 c, opc->name, opc->args);
8116 case '<': USE_BITS (OP_MASK_SHAMT, OP_SH_SHAMT); break;
8117 case '>': USE_BITS (OP_MASK_SHAMT, OP_SH_SHAMT); break;
8119 case 'B': USE_BITS (OP_MASK_CODE20, OP_SH_CODE20); break;
8120 case 'C': USE_BITS (OP_MASK_COPZ, OP_SH_COPZ); break;
8121 case 'D': USE_BITS (OP_MASK_FD, OP_SH_FD); break;
8122 case 'E': USE_BITS (OP_MASK_RT, OP_SH_RT); break;
8124 case 'G': USE_BITS (OP_MASK_RD, OP_SH_RD); break;
8125 case 'H': USE_BITS (OP_MASK_SEL, OP_SH_SEL); break;
8127 case 'J': USE_BITS (OP_MASK_CODE19, OP_SH_CODE19); break;
8128 case 'K': USE_BITS (OP_MASK_RD, OP_SH_RD); break;
8130 case 'M': USE_BITS (OP_MASK_CCC, OP_SH_CCC); break;
8131 case 'N': USE_BITS (OP_MASK_BCC, OP_SH_BCC); break;
8132 case 'O': USE_BITS (OP_MASK_ALN, OP_SH_ALN); break;
8133 case 'Q': USE_BITS (OP_MASK_VSEL, OP_SH_VSEL);
8134 USE_BITS (OP_MASK_FT, OP_SH_FT); break;
8135 case 'R': USE_BITS (OP_MASK_FR, OP_SH_FR); break;
8136 case 'S': USE_BITS (OP_MASK_FS, OP_SH_FS); break;
8137 case 'T': USE_BITS (OP_MASK_FT, OP_SH_FT); break;
8138 case 'V': USE_BITS (OP_MASK_FS, OP_SH_FS); break;
8139 case 'W': USE_BITS (OP_MASK_FT, OP_SH_FT); break;
8140 case 'X': USE_BITS (OP_MASK_FD, OP_SH_FD); break;
8141 case 'Y': USE_BITS (OP_MASK_FS, OP_SH_FS); break;
8142 case 'Z': USE_BITS (OP_MASK_FT, OP_SH_FT); break;
8143 case 'a': USE_BITS (OP_MASK_TARGET, OP_SH_TARGET); break;
8144 case 'b': USE_BITS (OP_MASK_RS, OP_SH_RS); break;
8145 case 'c': USE_BITS (OP_MASK_CODE, OP_SH_CODE); break;
8146 case 'd': USE_BITS (OP_MASK_RD, OP_SH_RD); break;
8148 case 'h': USE_BITS (OP_MASK_PREFX, OP_SH_PREFX); break;
8149 case 'i': USE_BITS (OP_MASK_IMMEDIATE, OP_SH_IMMEDIATE); break;
8150 case 'j': USE_BITS (OP_MASK_DELTA, OP_SH_DELTA); break;
8151 case 'k': USE_BITS (OP_MASK_CACHE, OP_SH_CACHE); break;
8153 case 'o': USE_BITS (OP_MASK_DELTA, OP_SH_DELTA); break;
8154 case 'p': USE_BITS (OP_MASK_DELTA, OP_SH_DELTA); break;
8155 case 'q': USE_BITS (OP_MASK_CODE2, OP_SH_CODE2); break;
8156 case 'r': USE_BITS (OP_MASK_RS, OP_SH_RS); break;
8157 case 's': USE_BITS (OP_MASK_RS, OP_SH_RS); break;
8158 case 't': USE_BITS (OP_MASK_RT, OP_SH_RT); break;
8159 case 'u': USE_BITS (OP_MASK_IMMEDIATE, OP_SH_IMMEDIATE); break;
8160 case 'v': USE_BITS (OP_MASK_RS, OP_SH_RS); break;
8161 case 'w': USE_BITS (OP_MASK_RT, OP_SH_RT); break;
8164 case 'P': USE_BITS (OP_MASK_PERFREG, OP_SH_PERFREG); break;
8165 case 'U': USE_BITS (OP_MASK_RD, OP_SH_RD);
8166 USE_BITS (OP_MASK_RT, OP_SH_RT); break;
8167 case 'e': USE_BITS (OP_MASK_VECBYTE, OP_SH_VECBYTE); break;
8168 case '%': USE_BITS (OP_MASK_VECALIGN, OP_SH_VECALIGN); break;
8171 case '3': USE_BITS (OP_MASK_SA3, OP_SH_SA3); break;
8172 case '4': USE_BITS (OP_MASK_SA4, OP_SH_SA4); break;
8173 case '5': USE_BITS (OP_MASK_IMM8, OP_SH_IMM8); break;
8174 case '6': USE_BITS (OP_MASK_RS, OP_SH_RS); break;
8175 case '7': USE_BITS (OP_MASK_DSPACC, OP_SH_DSPACC); break;
8176 case '8': USE_BITS (OP_MASK_WRDSP, OP_SH_WRDSP); break;
8177 case '9': USE_BITS (OP_MASK_DSPACC_S, OP_SH_DSPACC_S);break;
8178 case '0': USE_BITS (OP_MASK_DSPSFT, OP_SH_DSPSFT); break;
8179 case '\'': USE_BITS (OP_MASK_RDDSP, OP_SH_RDDSP); break;
8180 case ':': USE_BITS (OP_MASK_DSPSFT_7, OP_SH_DSPSFT_7);break;
8181 case '@': USE_BITS (OP_MASK_IMM10, OP_SH_IMM10); break;
8182 case '!': USE_BITS (OP_MASK_MT_U, OP_SH_MT_U); break;
8183 case '$': USE_BITS (OP_MASK_MT_H, OP_SH_MT_H); break;
8184 case '*': USE_BITS (OP_MASK_MTACC_T, OP_SH_MTACC_T); break;
8185 case '&': USE_BITS (OP_MASK_MTACC_D, OP_SH_MTACC_D); break;
8186 case 'g': USE_BITS (OP_MASK_RD, OP_SH_RD); break;
8188 as_bad (_("internal: bad mips opcode (unknown operand type `%c'): %s %s"),
8189 c, opc->name, opc->args);
8193 if (used_bits != 0xffffffff)
8195 as_bad (_("internal: bad mips opcode (bits 0x%lx undefined): %s %s"),
8196 ~used_bits & 0xffffffff, opc->name, opc->args);
8202 /* UDI immediates. */
8210 static const struct mips_immed mips_immed[] = {
8211 { '1', OP_SH_UDI1, OP_MASK_UDI1, 0},
8212 { '2', OP_SH_UDI2, OP_MASK_UDI2, 0},
8213 { '3', OP_SH_UDI3, OP_MASK_UDI3, 0},
8214 { '4', OP_SH_UDI4, OP_MASK_UDI4, 0},
8218 /* Check whether an odd floating-point register is allowed. */
8220 mips_oddfpreg_ok (const struct mips_opcode *insn, int argnum)
8222 const char *s = insn->name;
8224 if (insn->pinfo == INSN_MACRO)
8225 /* Let a macro pass, we'll catch it later when it is expanded. */
8228 if (ISA_HAS_ODD_SINGLE_FPR (mips_opts.isa))
8230 /* Allow odd registers for single-precision ops. */
8231 switch (insn->pinfo & (FP_S | FP_D))
8235 return 1; /* both single precision - ok */
8237 return 0; /* both double precision - fail */
8242 /* Cvt.w.x and cvt.x.w allow an odd register for a 'w' or 's' operand. */
8243 s = strchr (insn->name, '.');
8245 s = s != NULL ? strchr (s + 1, '.') : NULL;
8246 return (s != NULL && (s[1] == 'w' || s[1] == 's'));
8249 /* Single-precision coprocessor loads and moves are OK too. */
8250 if ((insn->pinfo & FP_S)
8251 && (insn->pinfo & (INSN_COPROC_MEMORY_DELAY | INSN_STORE_MEMORY
8252 | INSN_LOAD_COPROC_DELAY | INSN_COPROC_MOVE_DELAY)))
8258 /* This routine assembles an instruction into its binary format. As a
8259 side effect, it sets one of the global variables imm_reloc or
8260 offset_reloc to the type of relocation to do if one of the operands
8261 is an address expression. */
8264 mips_ip (char *str, struct mips_cl_insn *ip)
8269 struct mips_opcode *insn;
8272 unsigned int lastregno = 0;
8273 unsigned int lastpos = 0;
8274 unsigned int limlo, limhi;
8277 offsetT min_range, max_range;
8283 /* If the instruction contains a '.', we first try to match an instruction
8284 including the '.'. Then we try again without the '.'. */
8286 for (s = str; *s != '\0' && !ISSPACE (*s); ++s)
8289 /* If we stopped on whitespace, then replace the whitespace with null for
8290 the call to hash_find. Save the character we replaced just in case we
8291 have to re-parse the instruction. */
8298 insn = (struct mips_opcode *) hash_find (op_hash, str);
8300 /* If we didn't find the instruction in the opcode table, try again, but
8301 this time with just the instruction up to, but not including the
8305 /* Restore the character we overwrite above (if any). */
8309 /* Scan up to the first '.' or whitespace. */
8311 *s != '\0' && *s != '.' && !ISSPACE (*s);
8315 /* If we did not find a '.', then we can quit now. */
8318 insn_error = "unrecognized opcode";
8322 /* Lookup the instruction in the hash table. */
8324 if ((insn = (struct mips_opcode *) hash_find (op_hash, str)) == NULL)
8326 insn_error = "unrecognized opcode";
8336 assert (strcmp (insn->name, str) == 0);
8338 if (OPCODE_IS_MEMBER (insn,
8340 /* We don't check for mips_opts.mips16 here since
8341 we want to allow jalx if -mips16 was specified
8342 on the command line. */
8343 | (file_ase_mips16 ? INSN_MIPS16 : 0)
8344 | (mips_opts.ase_mdmx ? INSN_MDMX : 0)
8345 | (mips_opts.ase_dsp ? INSN_DSP : 0)
8346 | (mips_opts.ase_mt ? INSN_MT : 0)
8347 | (mips_opts.ase_mips3d ? INSN_MIPS3D : 0)
8348 | (mips_opts.ase_smartmips ? INSN_SMARTMIPS : 0)),
8354 if (insn->pinfo != INSN_MACRO)
8356 if (mips_opts.arch == CPU_R4650 && (insn->pinfo & FP_D) != 0)
8362 if (insn + 1 < &mips_opcodes[NUMOPCODES]
8363 && strcmp (insn->name, insn[1].name) == 0)
8372 static char buf[100];
8374 _("opcode not supported on this processor: %s (%s)"),
8375 mips_cpu_info_from_arch (mips_opts.arch)->name,
8376 mips_cpu_info_from_isa (mips_opts.isa)->name);
8385 create_insn (ip, insn);
8388 for (args = insn->args;; ++args)
8392 s += strspn (s, " \t");
8396 case '\0': /* end of args */
8401 case '3': /* dsp 3-bit unsigned immediate in bit 21 */
8402 my_getExpression (&imm_expr, s);
8403 check_absolute_expr (ip, &imm_expr);
8404 if (imm_expr.X_add_number & ~OP_MASK_SA3)
8406 as_warn (_("DSP immediate not in range 0..%d (%lu)"),
8407 OP_MASK_SA3, (unsigned long) imm_expr.X_add_number);
8408 imm_expr.X_add_number &= OP_MASK_SA3;
8410 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_SA3;
8411 imm_expr.X_op = O_absent;
8415 case '4': /* dsp 4-bit unsigned immediate in bit 21 */
8416 my_getExpression (&imm_expr, s);
8417 check_absolute_expr (ip, &imm_expr);
8418 if (imm_expr.X_add_number & ~OP_MASK_SA4)
8420 as_warn (_("DSP immediate not in range 0..%d (%lu)"),
8421 OP_MASK_SA4, (unsigned long) imm_expr.X_add_number);
8422 imm_expr.X_add_number &= OP_MASK_SA4;
8424 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_SA4;
8425 imm_expr.X_op = O_absent;
8429 case '5': /* dsp 8-bit unsigned immediate in bit 16 */
8430 my_getExpression (&imm_expr, s);
8431 check_absolute_expr (ip, &imm_expr);
8432 if (imm_expr.X_add_number & ~OP_MASK_IMM8)
8434 as_warn (_("DSP immediate not in range 0..%d (%lu)"),
8435 OP_MASK_IMM8, (unsigned long) imm_expr.X_add_number);
8436 imm_expr.X_add_number &= OP_MASK_IMM8;
8438 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_IMM8;
8439 imm_expr.X_op = O_absent;
8443 case '6': /* dsp 5-bit unsigned immediate in bit 21 */
8444 my_getExpression (&imm_expr, s);
8445 check_absolute_expr (ip, &imm_expr);
8446 if (imm_expr.X_add_number & ~OP_MASK_RS)
8448 as_warn (_("DSP immediate not in range 0..%d (%lu)"),
8449 OP_MASK_RS, (unsigned long) imm_expr.X_add_number);
8450 imm_expr.X_add_number &= OP_MASK_RS;
8452 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_RS;
8453 imm_expr.X_op = O_absent;
8457 case '7': /* four dsp accumulators in bits 11,12 */
8458 if (s[0] == '$' && s[1] == 'a' && s[2] == 'c' &&
8459 s[3] >= '0' && s[3] <= '3')
8463 ip->insn_opcode |= regno << OP_SH_DSPACC;
8467 as_bad (_("Invalid dsp acc register"));
8470 case '8': /* dsp 6-bit unsigned immediate in bit 11 */
8471 my_getExpression (&imm_expr, s);
8472 check_absolute_expr (ip, &imm_expr);
8473 if (imm_expr.X_add_number & ~OP_MASK_WRDSP)
8475 as_warn (_("DSP immediate not in range 0..%d (%lu)"),
8477 (unsigned long) imm_expr.X_add_number);
8478 imm_expr.X_add_number &= OP_MASK_WRDSP;
8480 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_WRDSP;
8481 imm_expr.X_op = O_absent;
8485 case '9': /* four dsp accumulators in bits 21,22 */
8486 if (s[0] == '$' && s[1] == 'a' && s[2] == 'c' &&
8487 s[3] >= '0' && s[3] <= '3')
8491 ip->insn_opcode |= regno << OP_SH_DSPACC_S;
8495 as_bad (_("Invalid dsp acc register"));
8498 case '0': /* dsp 6-bit signed immediate in bit 20 */
8499 my_getExpression (&imm_expr, s);
8500 check_absolute_expr (ip, &imm_expr);
8501 min_range = -((OP_MASK_DSPSFT + 1) >> 1);
8502 max_range = ((OP_MASK_DSPSFT + 1) >> 1) - 1;
8503 if (imm_expr.X_add_number < min_range ||
8504 imm_expr.X_add_number > max_range)
8506 as_warn (_("DSP immediate not in range %ld..%ld (%ld)"),
8507 (long) min_range, (long) max_range,
8508 (long) imm_expr.X_add_number);
8510 imm_expr.X_add_number &= OP_MASK_DSPSFT;
8511 ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
8513 imm_expr.X_op = O_absent;
8517 case '\'': /* dsp 6-bit unsigned immediate in bit 16 */
8518 my_getExpression (&imm_expr, s);
8519 check_absolute_expr (ip, &imm_expr);
8520 if (imm_expr.X_add_number & ~OP_MASK_RDDSP)
8522 as_warn (_("DSP immediate not in range 0..%d (%lu)"),
8524 (unsigned long) imm_expr.X_add_number);
8525 imm_expr.X_add_number &= OP_MASK_RDDSP;
8527 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_RDDSP;
8528 imm_expr.X_op = O_absent;
8532 case ':': /* dsp 7-bit signed immediate in bit 19 */
8533 my_getExpression (&imm_expr, s);
8534 check_absolute_expr (ip, &imm_expr);
8535 min_range = -((OP_MASK_DSPSFT_7 + 1) >> 1);
8536 max_range = ((OP_MASK_DSPSFT_7 + 1) >> 1) - 1;
8537 if (imm_expr.X_add_number < min_range ||
8538 imm_expr.X_add_number > max_range)
8540 as_warn (_("DSP immediate not in range %ld..%ld (%ld)"),
8541 (long) min_range, (long) max_range,
8542 (long) imm_expr.X_add_number);
8544 imm_expr.X_add_number &= OP_MASK_DSPSFT_7;
8545 ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
8547 imm_expr.X_op = O_absent;
8551 case '@': /* dsp 10-bit signed immediate in bit 16 */
8552 my_getExpression (&imm_expr, s);
8553 check_absolute_expr (ip, &imm_expr);
8554 min_range = -((OP_MASK_IMM10 + 1) >> 1);
8555 max_range = ((OP_MASK_IMM10 + 1) >> 1) - 1;
8556 if (imm_expr.X_add_number < min_range ||
8557 imm_expr.X_add_number > max_range)
8559 as_warn (_("DSP immediate not in range %ld..%ld (%ld)"),
8560 (long) min_range, (long) max_range,
8561 (long) imm_expr.X_add_number);
8563 imm_expr.X_add_number &= OP_MASK_IMM10;
8564 ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
8566 imm_expr.X_op = O_absent;
8570 case '!': /* mt 1-bit unsigned immediate in bit 5 */
8571 my_getExpression (&imm_expr, s);
8572 check_absolute_expr (ip, &imm_expr);
8573 if (imm_expr.X_add_number & ~OP_MASK_MT_U)
8575 as_warn (_("MT immediate not in range 0..%d (%lu)"),
8576 OP_MASK_MT_U, (unsigned long) imm_expr.X_add_number);
8577 imm_expr.X_add_number &= OP_MASK_MT_U;
8579 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_MT_U;
8580 imm_expr.X_op = O_absent;
8584 case '$': /* mt 1-bit unsigned immediate in bit 4 */
8585 my_getExpression (&imm_expr, s);
8586 check_absolute_expr (ip, &imm_expr);
8587 if (imm_expr.X_add_number & ~OP_MASK_MT_H)
8589 as_warn (_("MT immediate not in range 0..%d (%lu)"),
8590 OP_MASK_MT_H, (unsigned long) imm_expr.X_add_number);
8591 imm_expr.X_add_number &= OP_MASK_MT_H;
8593 ip->insn_opcode |= imm_expr.X_add_number << OP_SH_MT_H;
8594 imm_expr.X_op = O_absent;
8598 case '*': /* four dsp accumulators in bits 18,19 */
8599 if (s[0] == '$' && s[1] == 'a' && s[2] == 'c' &&
8600 s[3] >= '0' && s[3] <= '3')
8604 ip->insn_opcode |= regno << OP_SH_MTACC_T;
8608 as_bad (_("Invalid dsp/smartmips acc register"));
8611 case '&': /* four dsp accumulators in bits 13,14 */
8612 if (s[0] == '$' && s[1] == 'a' && s[2] == 'c' &&
8613 s[3] >= '0' && s[3] <= '3')
8617 ip->insn_opcode |= regno << OP_SH_MTACC_D;
8621 as_bad (_("Invalid dsp/smartmips acc register"));
8632 INSERT_OPERAND (RS, *ip, lastregno);
8636 INSERT_OPERAND (RT, *ip, lastregno);
8640 INSERT_OPERAND (FT, *ip, lastregno);
8644 INSERT_OPERAND (FS, *ip, lastregno);
8650 /* Handle optional base register.
8651 Either the base register is omitted or
8652 we must have a left paren. */
8653 /* This is dependent on the next operand specifier
8654 is a base register specification. */
8655 assert (args[1] == 'b' || args[1] == '5'
8656 || args[1] == '-' || args[1] == '4');
8660 case ')': /* these must match exactly */
8667 case '+': /* Opcode extension character. */
8670 case '1': /* UDI immediates. */
8675 const struct mips_immed *imm = mips_immed;
8677 while (imm->type && imm->type != *args)
8681 my_getExpression (&imm_expr, s);
8682 check_absolute_expr (ip, &imm_expr);
8683 if ((unsigned long) imm_expr.X_add_number & ~imm->mask)
8685 as_warn (_("Illegal %s number (%lu, 0x%lx)"),
8686 imm->desc ? imm->desc : ip->insn_mo->name,
8687 (unsigned long) imm_expr.X_add_number,
8688 (unsigned long) imm_expr.X_add_number);
8689 imm_expr.X_add_number &= imm->mask;
8691 ip->insn_opcode |= ((unsigned long) imm_expr.X_add_number
8693 imm_expr.X_op = O_absent;
8698 case 'A': /* ins/ext position, becomes LSB. */
8707 my_getExpression (&imm_expr, s);
8708 check_absolute_expr (ip, &imm_expr);
8709 if ((unsigned long) imm_expr.X_add_number < limlo
8710 || (unsigned long) imm_expr.X_add_number > limhi)
8712 as_bad (_("Improper position (%lu)"),
8713 (unsigned long) imm_expr.X_add_number);
8714 imm_expr.X_add_number = limlo;
8716 lastpos = imm_expr.X_add_number;
8717 INSERT_OPERAND (SHAMT, *ip, imm_expr.X_add_number);
8718 imm_expr.X_op = O_absent;
8722 case 'B': /* ins size, becomes MSB. */
8731 my_getExpression (&imm_expr, s);
8732 check_absolute_expr (ip, &imm_expr);
8733 /* Check for negative input so that small negative numbers
8734 will not succeed incorrectly. The checks against
8735 (pos+size) transitively check "size" itself,
8736 assuming that "pos" is reasonable. */
8737 if ((long) imm_expr.X_add_number < 0
8738 || ((unsigned long) imm_expr.X_add_number
8740 || ((unsigned long) imm_expr.X_add_number
8743 as_bad (_("Improper insert size (%lu, position %lu)"),
8744 (unsigned long) imm_expr.X_add_number,
8745 (unsigned long) lastpos);
8746 imm_expr.X_add_number = limlo - lastpos;
8748 INSERT_OPERAND (INSMSB, *ip,
8749 lastpos + imm_expr.X_add_number - 1);
8750 imm_expr.X_op = O_absent;
8754 case 'C': /* ext size, becomes MSBD. */
8767 my_getExpression (&imm_expr, s);
8768 check_absolute_expr (ip, &imm_expr);
8769 /* Check for negative input so that small negative numbers
8770 will not succeed incorrectly. The checks against
8771 (pos+size) transitively check "size" itself,
8772 assuming that "pos" is reasonable. */
8773 if ((long) imm_expr.X_add_number < 0
8774 || ((unsigned long) imm_expr.X_add_number
8776 || ((unsigned long) imm_expr.X_add_number
8779 as_bad (_("Improper extract size (%lu, position %lu)"),
8780 (unsigned long) imm_expr.X_add_number,
8781 (unsigned long) lastpos);
8782 imm_expr.X_add_number = limlo - lastpos;
8784 INSERT_OPERAND (EXTMSBD, *ip, imm_expr.X_add_number - 1);
8785 imm_expr.X_op = O_absent;
8790 /* +D is for disassembly only; never match. */
8794 /* "+I" is like "I", except that imm2_expr is used. */
8795 my_getExpression (&imm2_expr, s);
8796 if (imm2_expr.X_op != O_big
8797 && imm2_expr.X_op != O_constant)
8798 insn_error = _("absolute expression required");
8799 if (HAVE_32BIT_GPRS)
8800 normalize_constant_expr (&imm2_expr);
8804 case 'T': /* Coprocessor register. */
8805 /* +T is for disassembly only; never match. */
8808 case 't': /* Coprocessor register number. */
8809 if (s[0] == '$' && ISDIGIT (s[1]))
8819 while (ISDIGIT (*s));
8821 as_bad (_("Invalid register number (%d)"), regno);
8824 ip->insn_opcode |= regno << OP_SH_RT;
8829 as_bad (_("Invalid coprocessor 0 register number"));
8833 as_bad (_("internal: bad mips opcode (unknown extension operand type `+%c'): %s %s"),
8834 *args, insn->name, insn->args);
8835 /* Further processing is fruitless. */
8840 case '<': /* must be at least one digit */
8842 * According to the manual, if the shift amount is greater
8843 * than 31 or less than 0, then the shift amount should be
8844 * mod 32. In reality the mips assembler issues an error.
8845 * We issue a warning and mask out all but the low 5 bits.
8847 my_getExpression (&imm_expr, s);
8848 check_absolute_expr (ip, &imm_expr);
8849 if ((unsigned long) imm_expr.X_add_number > 31)
8850 as_warn (_("Improper shift amount (%lu)"),
8851 (unsigned long) imm_expr.X_add_number);
8852 INSERT_OPERAND (SHAMT, *ip, imm_expr.X_add_number);
8853 imm_expr.X_op = O_absent;
8857 case '>': /* shift amount minus 32 */
8858 my_getExpression (&imm_expr, s);
8859 check_absolute_expr (ip, &imm_expr);
8860 if ((unsigned long) imm_expr.X_add_number < 32
8861 || (unsigned long) imm_expr.X_add_number > 63)
8863 INSERT_OPERAND (SHAMT, *ip, imm_expr.X_add_number - 32);
8864 imm_expr.X_op = O_absent;
8868 case 'k': /* cache code */
8869 case 'h': /* prefx code */
8870 my_getExpression (&imm_expr, s);
8871 check_absolute_expr (ip, &imm_expr);
8872 if ((unsigned long) imm_expr.X_add_number > 31)
8873 as_warn (_("Invalid value for `%s' (%lu)"),
8875 (unsigned long) imm_expr.X_add_number);
8877 INSERT_OPERAND (CACHE, *ip, imm_expr.X_add_number);
8879 INSERT_OPERAND (PREFX, *ip, imm_expr.X_add_number);
8880 imm_expr.X_op = O_absent;
8884 case 'c': /* break code */
8885 my_getExpression (&imm_expr, s);
8886 check_absolute_expr (ip, &imm_expr);
8887 if ((unsigned long) imm_expr.X_add_number > 1023)
8888 as_warn (_("Illegal break code (%lu)"),
8889 (unsigned long) imm_expr.X_add_number);
8890 INSERT_OPERAND (CODE, *ip, imm_expr.X_add_number);
8891 imm_expr.X_op = O_absent;
8895 case 'q': /* lower break code */
8896 my_getExpression (&imm_expr, s);
8897 check_absolute_expr (ip, &imm_expr);
8898 if ((unsigned long) imm_expr.X_add_number > 1023)
8899 as_warn (_("Illegal lower break code (%lu)"),
8900 (unsigned long) imm_expr.X_add_number);
8901 INSERT_OPERAND (CODE2, *ip, imm_expr.X_add_number);
8902 imm_expr.X_op = O_absent;
8906 case 'B': /* 20-bit syscall/break code. */
8907 my_getExpression (&imm_expr, s);
8908 check_absolute_expr (ip, &imm_expr);
8909 if ((unsigned long) imm_expr.X_add_number > OP_MASK_CODE20)
8910 as_warn (_("Illegal 20-bit code (%lu)"),
8911 (unsigned long) imm_expr.X_add_number);
8912 INSERT_OPERAND (CODE20, *ip, imm_expr.X_add_number);
8913 imm_expr.X_op = O_absent;
8917 case 'C': /* Coprocessor code */
8918 my_getExpression (&imm_expr, s);
8919 check_absolute_expr (ip, &imm_expr);
8920 if ((unsigned long) imm_expr.X_add_number >= (1 << 25))
8922 as_warn (_("Coproccesor code > 25 bits (%lu)"),
8923 (unsigned long) imm_expr.X_add_number);
8924 imm_expr.X_add_number &= ((1 << 25) - 1);
8926 ip->insn_opcode |= imm_expr.X_add_number;
8927 imm_expr.X_op = O_absent;
8931 case 'J': /* 19-bit wait code. */
8932 my_getExpression (&imm_expr, s);
8933 check_absolute_expr (ip, &imm_expr);
8934 if ((unsigned long) imm_expr.X_add_number > OP_MASK_CODE19)
8935 as_warn (_("Illegal 19-bit code (%lu)"),
8936 (unsigned long) imm_expr.X_add_number);
8937 INSERT_OPERAND (CODE19, *ip, imm_expr.X_add_number);
8938 imm_expr.X_op = O_absent;
8942 case 'P': /* Performance register. */
8943 my_getExpression (&imm_expr, s);
8944 check_absolute_expr (ip, &imm_expr);
8945 if (imm_expr.X_add_number != 0 && imm_expr.X_add_number != 1)
8946 as_warn (_("Invalid performance register (%lu)"),
8947 (unsigned long) imm_expr.X_add_number);
8948 INSERT_OPERAND (PERFREG, *ip, imm_expr.X_add_number);
8949 imm_expr.X_op = O_absent;
8953 case 'G': /* Coprocessor destination register. */
8954 if (((ip->insn_opcode >> OP_SH_OP) & OP_MASK_OP) == OP_OP_COP0)
8955 ok = reg_lookup (&s, RTYPE_NUM | RTYPE_CP0, ®no);
8957 ok = reg_lookup (&s, RTYPE_NUM | RTYPE_GP, ®no);
8958 ip->insn_opcode |= regno << OP_SH_RD;
8967 case 'b': /* base register */
8968 case 'd': /* destination register */
8969 case 's': /* source register */
8970 case 't': /* target register */
8971 case 'r': /* both target and source */
8972 case 'v': /* both dest and source */
8973 case 'w': /* both dest and target */
8974 case 'E': /* coprocessor target register */
8975 case 'K': /* 'rdhwr' destination register */
8976 case 'x': /* ignore register name */
8977 case 'z': /* must be zero register */
8978 case 'U': /* destination register (clo/clz). */
8979 case 'g': /* coprocessor destination register */
8981 if (*args == 'E' || *args == 'K')
8982 ok = reg_lookup (&s, RTYPE_NUM, ®no);
8985 ok = reg_lookup (&s, RTYPE_NUM | RTYPE_GP, ®no);
8986 if (regno == AT && ! mips_opts.noat)
8987 as_warn ("Used $at without \".set noat\"");
8996 if (c == 'r' || c == 'v' || c == 'w')
9003 /* 'z' only matches $0. */
9004 if (c == 'z' && regno != 0)
9007 /* Now that we have assembled one operand, we use the args string
9008 * to figure out where it goes in the instruction. */
9015 INSERT_OPERAND (RS, *ip, regno);
9021 INSERT_OPERAND (RD, *ip, regno);
9024 INSERT_OPERAND (RD, *ip, regno);
9025 INSERT_OPERAND (RT, *ip, regno);
9030 INSERT_OPERAND (RT, *ip, regno);
9033 /* This case exists because on the r3000 trunc
9034 expands into a macro which requires a gp
9035 register. On the r6000 or r4000 it is
9036 assembled into a single instruction which
9037 ignores the register. Thus the insn version
9038 is MIPS_ISA2 and uses 'x', and the macro
9039 version is MIPS_ISA1 and uses 't'. */
9042 /* This case is for the div instruction, which
9043 acts differently if the destination argument
9044 is $0. This only matches $0, and is checked
9045 outside the switch. */
9048 /* Itbl operand; not yet implemented. FIXME ?? */
9050 /* What about all other operands like 'i', which
9051 can be specified in the opcode table? */
9060 INSERT_OPERAND (RS, *ip, lastregno);
9063 INSERT_OPERAND (RT, *ip, lastregno);
9068 case 'O': /* MDMX alignment immediate constant. */
9069 my_getExpression (&imm_expr, s);
9070 check_absolute_expr (ip, &imm_expr);
9071 if ((unsigned long) imm_expr.X_add_number > OP_MASK_ALN)
9072 as_warn ("Improper align amount (%ld), using low bits",
9073 (long) imm_expr.X_add_number);
9074 INSERT_OPERAND (ALN, *ip, imm_expr.X_add_number);
9075 imm_expr.X_op = O_absent;
9079 case 'Q': /* MDMX vector, element sel, or const. */
9082 /* MDMX Immediate. */
9083 my_getExpression (&imm_expr, s);
9084 check_absolute_expr (ip, &imm_expr);
9085 if ((unsigned long) imm_expr.X_add_number > OP_MASK_FT)
9086 as_warn (_("Invalid MDMX Immediate (%ld)"),
9087 (long) imm_expr.X_add_number);
9088 INSERT_OPERAND (FT, *ip, imm_expr.X_add_number);
9089 if (ip->insn_opcode & (OP_MASK_VSEL << OP_SH_VSEL))
9090 ip->insn_opcode |= MDMX_FMTSEL_IMM_QH << OP_SH_VSEL;
9092 ip->insn_opcode |= MDMX_FMTSEL_IMM_OB << OP_SH_VSEL;
9093 imm_expr.X_op = O_absent;
9097 /* Not MDMX Immediate. Fall through. */
9098 case 'X': /* MDMX destination register. */
9099 case 'Y': /* MDMX source register. */
9100 case 'Z': /* MDMX target register. */
9102 case 'D': /* floating point destination register */
9103 case 'S': /* floating point source register */
9104 case 'T': /* floating point target register */
9105 case 'R': /* floating point source register */
9110 || (mips_opts.ase_mdmx
9111 && (ip->insn_mo->pinfo & FP_D)
9112 && (ip->insn_mo->pinfo & (INSN_COPROC_MOVE_DELAY
9113 | INSN_COPROC_MEMORY_DELAY
9114 | INSN_LOAD_COPROC_DELAY
9115 | INSN_LOAD_MEMORY_DELAY
9116 | INSN_STORE_MEMORY))))
9119 if (reg_lookup (&s, rtype, ®no))
9121 if ((regno & 1) != 0
9123 && ! mips_oddfpreg_ok (ip->insn_mo, argnum))
9124 as_warn (_("Float register should be even, was %d"),
9132 if (c == 'V' || c == 'W')
9143 INSERT_OPERAND (FD, *ip, regno);
9148 INSERT_OPERAND (FS, *ip, regno);
9151 /* This is like 'Z', but also needs to fix the MDMX
9152 vector/scalar select bits. Note that the
9153 scalar immediate case is handled above. */
9156 int is_qh = (ip->insn_opcode & (1 << OP_SH_VSEL));
9157 int max_el = (is_qh ? 3 : 7);
9159 my_getExpression(&imm_expr, s);
9160 check_absolute_expr (ip, &imm_expr);
9162 if (imm_expr.X_add_number > max_el)
9163 as_bad(_("Bad element selector %ld"),
9164 (long) imm_expr.X_add_number);
9165 imm_expr.X_add_number &= max_el;
9166 ip->insn_opcode |= (imm_expr.X_add_number
9169 imm_expr.X_op = O_absent;
9171 as_warn(_("Expecting ']' found '%s'"), s);
9177 if (ip->insn_opcode & (OP_MASK_VSEL << OP_SH_VSEL))
9178 ip->insn_opcode |= (MDMX_FMTSEL_VEC_QH
9181 ip->insn_opcode |= (MDMX_FMTSEL_VEC_OB <<
9188 INSERT_OPERAND (FT, *ip, regno);
9191 INSERT_OPERAND (FR, *ip, regno);
9201 INSERT_OPERAND (FS, *ip, lastregno);
9204 INSERT_OPERAND (FT, *ip, lastregno);
9210 my_getExpression (&imm_expr, s);
9211 if (imm_expr.X_op != O_big
9212 && imm_expr.X_op != O_constant)
9213 insn_error = _("absolute expression required");
9214 if (HAVE_32BIT_GPRS)
9215 normalize_constant_expr (&imm_expr);
9220 my_getExpression (&offset_expr, s);
9221 normalize_address_expr (&offset_expr);
9222 *imm_reloc = BFD_RELOC_32;
9235 unsigned char temp[8];
9237 unsigned int length;
9242 /* These only appear as the last operand in an
9243 instruction, and every instruction that accepts
9244 them in any variant accepts them in all variants.
9245 This means we don't have to worry about backing out
9246 any changes if the instruction does not match.
9248 The difference between them is the size of the
9249 floating point constant and where it goes. For 'F'
9250 and 'L' the constant is 64 bits; for 'f' and 'l' it
9251 is 32 bits. Where the constant is placed is based
9252 on how the MIPS assembler does things:
9255 f -- immediate value
9258 The .lit4 and .lit8 sections are only used if
9259 permitted by the -G argument.
9261 The code below needs to know whether the target register
9262 is 32 or 64 bits wide. It relies on the fact 'f' and
9263 'F' are used with GPR-based instructions and 'l' and
9264 'L' are used with FPR-based instructions. */
9266 f64 = *args == 'F' || *args == 'L';
9267 using_gprs = *args == 'F' || *args == 'f';
9269 save_in = input_line_pointer;
9270 input_line_pointer = s;
9271 err = md_atof (f64 ? 'd' : 'f', (char *) temp, &len);
9273 s = input_line_pointer;
9274 input_line_pointer = save_in;
9275 if (err != NULL && *err != '\0')
9277 as_bad (_("Bad floating point constant: %s"), err);
9278 memset (temp, '\0', sizeof temp);
9279 length = f64 ? 8 : 4;
9282 assert (length == (unsigned) (f64 ? 8 : 4));
9286 && (g_switch_value < 4
9287 || (temp[0] == 0 && temp[1] == 0)
9288 || (temp[2] == 0 && temp[3] == 0))))
9290 imm_expr.X_op = O_constant;
9291 if (! target_big_endian)
9292 imm_expr.X_add_number = bfd_getl32 (temp);
9294 imm_expr.X_add_number = bfd_getb32 (temp);
9297 && ! mips_disable_float_construction
9298 /* Constants can only be constructed in GPRs and
9299 copied to FPRs if the GPRs are at least as wide
9300 as the FPRs. Force the constant into memory if
9301 we are using 64-bit FPRs but the GPRs are only
9304 || ! (HAVE_64BIT_FPRS && HAVE_32BIT_GPRS))
9305 && ((temp[0] == 0 && temp[1] == 0)
9306 || (temp[2] == 0 && temp[3] == 0))
9307 && ((temp[4] == 0 && temp[5] == 0)
9308 || (temp[6] == 0 && temp[7] == 0)))
9310 /* The value is simple enough to load with a couple of
9311 instructions. If using 32-bit registers, set
9312 imm_expr to the high order 32 bits and offset_expr to
9313 the low order 32 bits. Otherwise, set imm_expr to
9314 the entire 64 bit constant. */
9315 if (using_gprs ? HAVE_32BIT_GPRS : HAVE_32BIT_FPRS)
9317 imm_expr.X_op = O_constant;
9318 offset_expr.X_op = O_constant;
9319 if (! target_big_endian)
9321 imm_expr.X_add_number = bfd_getl32 (temp + 4);
9322 offset_expr.X_add_number = bfd_getl32 (temp);
9326 imm_expr.X_add_number = bfd_getb32 (temp);
9327 offset_expr.X_add_number = bfd_getb32 (temp + 4);
9329 if (offset_expr.X_add_number == 0)
9330 offset_expr.X_op = O_absent;
9332 else if (sizeof (imm_expr.X_add_number) > 4)
9334 imm_expr.X_op = O_constant;
9335 if (! target_big_endian)
9336 imm_expr.X_add_number = bfd_getl64 (temp);
9338 imm_expr.X_add_number = bfd_getb64 (temp);
9342 imm_expr.X_op = O_big;
9343 imm_expr.X_add_number = 4;
9344 if (! target_big_endian)
9346 generic_bignum[0] = bfd_getl16 (temp);
9347 generic_bignum[1] = bfd_getl16 (temp + 2);
9348 generic_bignum[2] = bfd_getl16 (temp + 4);
9349 generic_bignum[3] = bfd_getl16 (temp + 6);
9353 generic_bignum[0] = bfd_getb16 (temp + 6);
9354 generic_bignum[1] = bfd_getb16 (temp + 4);
9355 generic_bignum[2] = bfd_getb16 (temp + 2);
9356 generic_bignum[3] = bfd_getb16 (temp);
9362 const char *newname;
9365 /* Switch to the right section. */
9367 subseg = now_subseg;
9370 default: /* unused default case avoids warnings. */
9372 newname = RDATA_SECTION_NAME;
9373 if (g_switch_value >= 8)
9377 newname = RDATA_SECTION_NAME;
9380 assert (g_switch_value >= 4);
9384 new_seg = subseg_new (newname, (subsegT) 0);
9385 if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
9386 bfd_set_section_flags (stdoutput, new_seg,
9391 frag_align (*args == 'l' ? 2 : 3, 0, 0);
9392 if (OUTPUT_FLAVOR == bfd_target_elf_flavour
9393 && strcmp (TARGET_OS, "elf") != 0)
9394 record_alignment (new_seg, 4);
9396 record_alignment (new_seg, *args == 'l' ? 2 : 3);
9398 as_bad (_("Can't use floating point insn in this section"));
9400 /* Set the argument to the current address in the
9402 offset_expr.X_op = O_symbol;
9403 offset_expr.X_add_symbol =
9404 symbol_new ("L0\001", now_seg,
9405 (valueT) frag_now_fix (), frag_now);
9406 offset_expr.X_add_number = 0;
9408 /* Put the floating point number into the section. */
9409 p = frag_more ((int) length);
9410 memcpy (p, temp, length);
9412 /* Switch back to the original section. */
9413 subseg_set (seg, subseg);
9418 case 'i': /* 16 bit unsigned immediate */
9419 case 'j': /* 16 bit signed immediate */
9420 *imm_reloc = BFD_RELOC_LO16;
9421 if (my_getSmallExpression (&imm_expr, imm_reloc, s) == 0)
9424 offsetT minval, maxval;
9426 more = (insn + 1 < &mips_opcodes[NUMOPCODES]
9427 && strcmp (insn->name, insn[1].name) == 0);
9429 /* If the expression was written as an unsigned number,
9430 only treat it as signed if there are no more
9434 && sizeof (imm_expr.X_add_number) <= 4
9435 && imm_expr.X_op == O_constant
9436 && imm_expr.X_add_number < 0
9437 && imm_expr.X_unsigned
9441 /* For compatibility with older assemblers, we accept
9442 0x8000-0xffff as signed 16-bit numbers when only
9443 signed numbers are allowed. */
9445 minval = 0, maxval = 0xffff;
9447 minval = -0x8000, maxval = 0x7fff;
9449 minval = -0x8000, maxval = 0xffff;
9451 if (imm_expr.X_op != O_constant
9452 || imm_expr.X_add_number < minval
9453 || imm_expr.X_add_number > maxval)
9457 if (imm_expr.X_op == O_constant
9458 || imm_expr.X_op == O_big)
9459 as_bad (_("expression out of range"));
9465 case 'o': /* 16 bit offset */
9466 /* Check whether there is only a single bracketed expression
9467 left. If so, it must be the base register and the
9468 constant must be zero. */
9469 if (*s == '(' && strchr (s + 1, '(') == 0)
9471 offset_expr.X_op = O_constant;
9472 offset_expr.X_add_number = 0;
9476 /* If this value won't fit into a 16 bit offset, then go
9477 find a macro that will generate the 32 bit offset
9479 if (my_getSmallExpression (&offset_expr, offset_reloc, s) == 0
9480 && (offset_expr.X_op != O_constant
9481 || offset_expr.X_add_number >= 0x8000
9482 || offset_expr.X_add_number < -0x8000))
9488 case 'p': /* pc relative offset */
9489 *offset_reloc = BFD_RELOC_16_PCREL_S2;
9490 my_getExpression (&offset_expr, s);
9494 case 'u': /* upper 16 bits */
9495 if (my_getSmallExpression (&imm_expr, imm_reloc, s) == 0
9496 && imm_expr.X_op == O_constant
9497 && (imm_expr.X_add_number < 0
9498 || imm_expr.X_add_number >= 0x10000))
9499 as_bad (_("lui expression not in range 0..65535"));
9503 case 'a': /* 26 bit address */
9504 my_getExpression (&offset_expr, s);
9506 *offset_reloc = BFD_RELOC_MIPS_JMP;
9509 case 'N': /* 3 bit branch condition code */
9510 case 'M': /* 3 bit compare condition code */
9512 if (ip->insn_mo->pinfo & (FP_D| FP_S))
9514 if (!reg_lookup (&s, rtype, ®no))
9516 if ((strcmp(str + strlen(str) - 3, ".ps") == 0
9517 || strcmp(str + strlen(str) - 5, "any2f") == 0
9518 || strcmp(str + strlen(str) - 5, "any2t") == 0)
9519 && (regno & 1) != 0)
9520 as_warn(_("Condition code register should be even for %s, was %d"),
9522 if ((strcmp(str + strlen(str) - 5, "any4f") == 0
9523 || strcmp(str + strlen(str) - 5, "any4t") == 0)
9524 && (regno & 3) != 0)
9525 as_warn(_("Condition code register should be 0 or 4 for %s, was %d"),
9528 INSERT_OPERAND (BCC, *ip, regno);
9530 INSERT_OPERAND (CCC, *ip, regno);
9534 if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X'))
9545 while (ISDIGIT (*s));
9548 c = 8; /* Invalid sel value. */
9551 as_bad (_("invalid coprocessor sub-selection value (0-7)"));
9552 ip->insn_opcode |= c;
9556 /* Must be at least one digit. */
9557 my_getExpression (&imm_expr, s);
9558 check_absolute_expr (ip, &imm_expr);
9560 if ((unsigned long) imm_expr.X_add_number
9561 > (unsigned long) OP_MASK_VECBYTE)
9563 as_bad (_("bad byte vector index (%ld)"),
9564 (long) imm_expr.X_add_number);
9565 imm_expr.X_add_number = 0;
9568 INSERT_OPERAND (VECBYTE, *ip, imm_expr.X_add_number);
9569 imm_expr.X_op = O_absent;
9574 my_getExpression (&imm_expr, s);
9575 check_absolute_expr (ip, &imm_expr);
9577 if ((unsigned long) imm_expr.X_add_number
9578 > (unsigned long) OP_MASK_VECALIGN)
9580 as_bad (_("bad byte vector index (%ld)"),
9581 (long) imm_expr.X_add_number);
9582 imm_expr.X_add_number = 0;
9585 INSERT_OPERAND (VECALIGN, *ip, imm_expr.X_add_number);
9586 imm_expr.X_op = O_absent;
9591 as_bad (_("bad char = '%c'\n"), *args);
9596 /* Args don't match. */
9597 if (insn + 1 < &mips_opcodes[NUMOPCODES] &&
9598 !strcmp (insn->name, insn[1].name))
9602 insn_error = _("illegal operands");
9607 insn_error = _("illegal operands");
9612 #define SKIP_SPACE_TABS(S) { while (*(S) == ' ' || *(S) == '\t') ++(S); }
9614 /* This routine assembles an instruction into its binary format when
9615 assembling for the mips16. As a side effect, it sets one of the
9616 global variables imm_reloc or offset_reloc to the type of
9617 relocation to do if one of the operands is an address expression.
9618 It also sets mips16_small and mips16_ext if the user explicitly
9619 requested a small or extended instruction. */
9622 mips16_ip (char *str, struct mips_cl_insn *ip)
9626 struct mips_opcode *insn;
9629 unsigned int lastregno = 0;
9635 mips16_small = FALSE;
9638 for (s = str; ISLOWER (*s); ++s)
9650 if (s[1] == 't' && s[2] == ' ')
9653 mips16_small = TRUE;
9657 else if (s[1] == 'e' && s[2] == ' ')
9666 insn_error = _("unknown opcode");
9670 if (mips_opts.noautoextend && ! mips16_ext)
9671 mips16_small = TRUE;
9673 if ((insn = (struct mips_opcode *) hash_find (mips16_op_hash, str)) == NULL)
9675 insn_error = _("unrecognized opcode");
9684 assert (strcmp (insn->name, str) == 0);
9686 if (OPCODE_IS_MEMBER (insn, mips_opts.isa, mips_opts.arch))
9693 if (insn + 1 < &mips16_opcodes[bfd_mips16_num_opcodes]
9694 && strcmp (insn->name, insn[1].name) == 0)
9703 static char buf[100];
9705 _("opcode not supported on this processor: %s (%s)"),
9706 mips_cpu_info_from_arch (mips_opts.arch)->name,
9707 mips_cpu_info_from_isa (mips_opts.isa)->name);
9714 create_insn (ip, insn);
9715 imm_expr.X_op = O_absent;
9716 imm_reloc[0] = BFD_RELOC_UNUSED;
9717 imm_reloc[1] = BFD_RELOC_UNUSED;
9718 imm_reloc[2] = BFD_RELOC_UNUSED;
9719 imm2_expr.X_op = O_absent;
9720 offset_expr.X_op = O_absent;
9721 offset_reloc[0] = BFD_RELOC_UNUSED;
9722 offset_reloc[1] = BFD_RELOC_UNUSED;
9723 offset_reloc[2] = BFD_RELOC_UNUSED;
9724 for (args = insn->args; 1; ++args)
9731 /* In this switch statement we call break if we did not find
9732 a match, continue if we did find a match, or return if we
9741 /* Stuff the immediate value in now, if we can. */
9742 if (imm_expr.X_op == O_constant
9743 && *imm_reloc > BFD_RELOC_UNUSED
9744 && insn->pinfo != INSN_MACRO)
9748 switch (*offset_reloc)
9750 case BFD_RELOC_MIPS16_HI16_S:
9751 tmp = (imm_expr.X_add_number + 0x8000) >> 16;
9754 case BFD_RELOC_MIPS16_HI16:
9755 tmp = imm_expr.X_add_number >> 16;
9758 case BFD_RELOC_MIPS16_LO16:
9759 tmp = ((imm_expr.X_add_number + 0x8000) & 0xffff)
9763 case BFD_RELOC_UNUSED:
9764 tmp = imm_expr.X_add_number;
9770 *offset_reloc = BFD_RELOC_UNUSED;
9772 mips16_immed (NULL, 0, *imm_reloc - BFD_RELOC_UNUSED,
9773 tmp, TRUE, mips16_small,
9774 mips16_ext, &ip->insn_opcode,
9775 &ip->use_extend, &ip->extend);
9776 imm_expr.X_op = O_absent;
9777 *imm_reloc = BFD_RELOC_UNUSED;
9791 MIPS16_INSERT_OPERAND (RX, *ip, lastregno);
9794 MIPS16_INSERT_OPERAND (RY, *ip, lastregno);
9810 MIPS16_INSERT_OPERAND (RX, *ip, lastregno);
9812 MIPS16_INSERT_OPERAND (RY, *ip, lastregno);
9827 if (!reg_lookup (&s, RTYPE_NUM | RTYPE_GP, ®no))
9829 if (c == 'v' || c == 'w')
9832 ip->insn_opcode |= lastregno << MIPS16OP_SH_RX;
9834 ip->insn_opcode |= lastregno << MIPS16OP_SH_RY;
9845 if (c == 'v' || c == 'w')
9847 regno = mips16_to_32_reg_map[lastregno];
9861 regno = mips32_to_16_reg_map[regno];
9866 regno = ILLEGAL_REG;
9871 regno = ILLEGAL_REG;
9876 regno = ILLEGAL_REG;
9881 if (regno == AT && ! mips_opts.noat)
9882 as_warn (_("used $at without \".set noat\""));
9889 if (regno == ILLEGAL_REG)
9896 MIPS16_INSERT_OPERAND (RX, *ip, regno);
9900 MIPS16_INSERT_OPERAND (RY, *ip, regno);
9903 MIPS16_INSERT_OPERAND (RZ, *ip, regno);
9906 MIPS16_INSERT_OPERAND (MOVE32Z, *ip, regno);
9912 MIPS16_INSERT_OPERAND (REGR32, *ip, regno);
9915 regno = ((regno & 7) << 2) | ((regno & 0x18) >> 3);
9916 MIPS16_INSERT_OPERAND (REG32R, *ip, regno);
9926 if (strncmp (s, "$pc", 3) == 0)
9943 i = my_getSmallExpression (&imm_expr, imm_reloc, s);
9946 if (imm_expr.X_op != O_constant)
9949 ip->use_extend = TRUE;
9954 /* We need to relax this instruction. */
9955 *offset_reloc = *imm_reloc;
9956 *imm_reloc = (int) BFD_RELOC_UNUSED + c;
9961 *imm_reloc = BFD_RELOC_UNUSED;
9969 my_getExpression (&imm_expr, s);
9970 if (imm_expr.X_op == O_register)
9972 /* What we thought was an expression turned out to
9975 if (s[0] == '(' && args[1] == '(')
9977 /* It looks like the expression was omitted
9978 before a register indirection, which means
9979 that the expression is implicitly zero. We
9980 still set up imm_expr, so that we handle
9981 explicit extensions correctly. */
9982 imm_expr.X_op = O_constant;
9983 imm_expr.X_add_number = 0;
9984 *imm_reloc = (int) BFD_RELOC_UNUSED + c;
9991 /* We need to relax this instruction. */
9992 *imm_reloc = (int) BFD_RELOC_UNUSED + c;
10001 /* We use offset_reloc rather than imm_reloc for the PC
10002 relative operands. This lets macros with both
10003 immediate and address operands work correctly. */
10004 my_getExpression (&offset_expr, s);
10006 if (offset_expr.X_op == O_register)
10009 /* We need to relax this instruction. */
10010 *offset_reloc = (int) BFD_RELOC_UNUSED + c;
10014 case '6': /* break code */
10015 my_getExpression (&imm_expr, s);
10016 check_absolute_expr (ip, &imm_expr);
10017 if ((unsigned long) imm_expr.X_add_number > 63)
10018 as_warn (_("Invalid value for `%s' (%lu)"),
10020 (unsigned long) imm_expr.X_add_number);
10021 MIPS16_INSERT_OPERAND (IMM6, *ip, imm_expr.X_add_number);
10022 imm_expr.X_op = O_absent;
10026 case 'a': /* 26 bit address */
10027 my_getExpression (&offset_expr, s);
10029 *offset_reloc = BFD_RELOC_MIPS16_JMP;
10030 ip->insn_opcode <<= 16;
10033 case 'l': /* register list for entry macro */
10034 case 'L': /* register list for exit macro */
10044 unsigned int freg, reg1, reg2;
10046 while (*s == ' ' || *s == ',')
10048 if (reg_lookup (&s, RTYPE_GP | RTYPE_NUM, ®1))
10050 else if (reg_lookup (&s, RTYPE_FPU, ®1))
10054 as_bad (_("can't parse register list"));
10064 if (!reg_lookup (&s, freg ? RTYPE_FPU
10065 : (RTYPE_GP | RTYPE_NUM), ®2))
10067 as_bad (_("invalid register list"));
10071 if (freg && reg1 == 0 && reg2 == 0 && c == 'L')
10073 mask &= ~ (7 << 3);
10076 else if (freg && reg1 == 0 && reg2 == 1 && c == 'L')
10078 mask &= ~ (7 << 3);
10081 else if (reg1 == 4 && reg2 >= 4 && reg2 <= 7 && c != 'L')
10082 mask |= (reg2 - 3) << 3;
10083 else if (reg1 == 16 && reg2 >= 16 && reg2 <= 17)
10084 mask |= (reg2 - 15) << 1;
10085 else if (reg1 == RA && reg2 == RA)
10089 as_bad (_("invalid register list"));
10093 /* The mask is filled in in the opcode table for the
10094 benefit of the disassembler. We remove it before
10095 applying the actual mask. */
10096 ip->insn_opcode &= ~ ((7 << 3) << MIPS16OP_SH_IMM6);
10097 ip->insn_opcode |= mask << MIPS16OP_SH_IMM6;
10101 case 'm': /* Register list for save insn. */
10102 case 'M': /* Register list for restore insn. */
10105 int framesz = 0, seen_framesz = 0;
10106 int args = 0, statics = 0, sregs = 0;
10110 unsigned int reg1, reg2;
10112 SKIP_SPACE_TABS (s);
10115 SKIP_SPACE_TABS (s);
10117 my_getExpression (&imm_expr, s);
10118 if (imm_expr.X_op == O_constant)
10120 /* Handle the frame size. */
10123 as_bad (_("more than one frame size in list"));
10127 framesz = imm_expr.X_add_number;
10128 imm_expr.X_op = O_absent;
10133 if (! reg_lookup (&s, RTYPE_GP | RTYPE_NUM, ®1))
10135 as_bad (_("can't parse register list"));
10147 if (! reg_lookup (&s, RTYPE_GP | RTYPE_NUM, ®2)
10150 as_bad (_("can't parse register list"));
10155 while (reg1 <= reg2)
10157 if (reg1 >= 4 && reg1 <= 7)
10159 if (c == 'm' && !seen_framesz)
10161 args |= 1 << (reg1 - 4);
10163 /* statics $a0-$a3 */
10164 statics |= 1 << (reg1 - 4);
10166 else if ((reg1 >= 16 && reg1 <= 23) || reg1 == 30)
10169 sregs |= 1 << ((reg1 == 30) ? 8 : (reg1 - 16));
10171 else if (reg1 == 31)
10173 /* Add $ra to insn. */
10178 as_bad (_("unexpected register in list"));
10186 /* Encode args/statics combination. */
10187 if (args & statics)
10188 as_bad (_("arg/static registers overlap"));
10189 else if (args == 0xf)
10190 /* All $a0-$a3 are args. */
10191 opcode |= MIPS16_ALL_ARGS << 16;
10192 else if (statics == 0xf)
10193 /* All $a0-$a3 are statics. */
10194 opcode |= MIPS16_ALL_STATICS << 16;
10197 int narg = 0, nstat = 0;
10199 /* Count arg registers. */
10206 as_bad (_("invalid arg register list"));
10208 /* Count static registers. */
10209 while (statics & 0x8)
10211 statics = (statics << 1) & 0xf;
10215 as_bad (_("invalid static register list"));
10217 /* Encode args/statics. */
10218 opcode |= ((narg << 2) | nstat) << 16;
10221 /* Encode $s0/$s1. */
10222 if (sregs & (1 << 0)) /* $s0 */
10224 if (sregs & (1 << 1)) /* $s1 */
10230 /* Count regs $s2-$s8. */
10238 as_bad (_("invalid static register list"));
10239 /* Encode $s2-$s8. */
10240 opcode |= nsreg << 24;
10243 /* Encode frame size. */
10245 as_bad (_("missing frame size"));
10246 else if ((framesz & 7) != 0 || framesz < 0
10247 || framesz > 0xff * 8)
10248 as_bad (_("invalid frame size"));
10249 else if (framesz != 128 || (opcode >> 16) != 0)
10252 opcode |= (((framesz & 0xf0) << 16)
10253 | (framesz & 0x0f));
10256 /* Finally build the instruction. */
10257 if ((opcode >> 16) != 0 || framesz == 0)
10259 ip->use_extend = TRUE;
10260 ip->extend = opcode >> 16;
10262 ip->insn_opcode |= opcode & 0x7f;
10266 case 'e': /* extend code */
10267 my_getExpression (&imm_expr, s);
10268 check_absolute_expr (ip, &imm_expr);
10269 if ((unsigned long) imm_expr.X_add_number > 0x7ff)
10271 as_warn (_("Invalid value for `%s' (%lu)"),
10273 (unsigned long) imm_expr.X_add_number);
10274 imm_expr.X_add_number &= 0x7ff;
10276 ip->insn_opcode |= imm_expr.X_add_number;
10277 imm_expr.X_op = O_absent;
10287 /* Args don't match. */
10288 if (insn + 1 < &mips16_opcodes[bfd_mips16_num_opcodes] &&
10289 strcmp (insn->name, insn[1].name) == 0)
10296 insn_error = _("illegal operands");
10302 /* This structure holds information we know about a mips16 immediate
10305 struct mips16_immed_operand
10307 /* The type code used in the argument string in the opcode table. */
10309 /* The number of bits in the short form of the opcode. */
10311 /* The number of bits in the extended form of the opcode. */
10313 /* The amount by which the short form is shifted when it is used;
10314 for example, the sw instruction has a shift count of 2. */
10316 /* The amount by which the short form is shifted when it is stored
10317 into the instruction code. */
10319 /* Non-zero if the short form is unsigned. */
10321 /* Non-zero if the extended form is unsigned. */
10323 /* Non-zero if the value is PC relative. */
10327 /* The mips16 immediate operand types. */
10329 static const struct mips16_immed_operand mips16_immed_operands[] =
10331 { '<', 3, 5, 0, MIPS16OP_SH_RZ, 1, 1, 0 },
10332 { '>', 3, 5, 0, MIPS16OP_SH_RX, 1, 1, 0 },
10333 { '[', 3, 6, 0, MIPS16OP_SH_RZ, 1, 1, 0 },
10334 { ']', 3, 6, 0, MIPS16OP_SH_RX, 1, 1, 0 },
10335 { '4', 4, 15, 0, MIPS16OP_SH_IMM4, 0, 0, 0 },
10336 { '5', 5, 16, 0, MIPS16OP_SH_IMM5, 1, 0, 0 },
10337 { 'H', 5, 16, 1, MIPS16OP_SH_IMM5, 1, 0, 0 },
10338 { 'W', 5, 16, 2, MIPS16OP_SH_IMM5, 1, 0, 0 },
10339 { 'D', 5, 16, 3, MIPS16OP_SH_IMM5, 1, 0, 0 },
10340 { 'j', 5, 16, 0, MIPS16OP_SH_IMM5, 0, 0, 0 },
10341 { '8', 8, 16, 0, MIPS16OP_SH_IMM8, 1, 0, 0 },
10342 { 'V', 8, 16, 2, MIPS16OP_SH_IMM8, 1, 0, 0 },
10343 { 'C', 8, 16, 3, MIPS16OP_SH_IMM8, 1, 0, 0 },
10344 { 'U', 8, 16, 0, MIPS16OP_SH_IMM8, 1, 1, 0 },
10345 { 'k', 8, 16, 0, MIPS16OP_SH_IMM8, 0, 0, 0 },
10346 { 'K', 8, 16, 3, MIPS16OP_SH_IMM8, 0, 0, 0 },
10347 { 'p', 8, 16, 0, MIPS16OP_SH_IMM8, 0, 0, 1 },
10348 { 'q', 11, 16, 0, MIPS16OP_SH_IMM8, 0, 0, 1 },
10349 { 'A', 8, 16, 2, MIPS16OP_SH_IMM8, 1, 0, 1 },
10350 { 'B', 5, 16, 3, MIPS16OP_SH_IMM5, 1, 0, 1 },
10351 { 'E', 5, 16, 2, MIPS16OP_SH_IMM5, 1, 0, 1 }
10354 #define MIPS16_NUM_IMMED \
10355 (sizeof mips16_immed_operands / sizeof mips16_immed_operands[0])
10357 /* Handle a mips16 instruction with an immediate value. This or's the
10358 small immediate value into *INSN. It sets *USE_EXTEND to indicate
10359 whether an extended value is needed; if one is needed, it sets
10360 *EXTEND to the value. The argument type is TYPE. The value is VAL.
10361 If SMALL is true, an unextended opcode was explicitly requested.
10362 If EXT is true, an extended opcode was explicitly requested. If
10363 WARN is true, warn if EXT does not match reality. */
10366 mips16_immed (char *file, unsigned int line, int type, offsetT val,
10367 bfd_boolean warn, bfd_boolean small, bfd_boolean ext,
10368 unsigned long *insn, bfd_boolean *use_extend,
10369 unsigned short *extend)
10371 register const struct mips16_immed_operand *op;
10372 int mintiny, maxtiny;
10373 bfd_boolean needext;
10375 op = mips16_immed_operands;
10376 while (op->type != type)
10379 assert (op < mips16_immed_operands + MIPS16_NUM_IMMED);
10384 if (type == '<' || type == '>' || type == '[' || type == ']')
10387 maxtiny = 1 << op->nbits;
10392 maxtiny = (1 << op->nbits) - 1;
10397 mintiny = - (1 << (op->nbits - 1));
10398 maxtiny = (1 << (op->nbits - 1)) - 1;
10401 /* Branch offsets have an implicit 0 in the lowest bit. */
10402 if (type == 'p' || type == 'q')
10405 if ((val & ((1 << op->shift) - 1)) != 0
10406 || val < (mintiny << op->shift)
10407 || val > (maxtiny << op->shift))
10412 if (warn && ext && ! needext)
10413 as_warn_where (file, line,
10414 _("extended operand requested but not required"));
10415 if (small && needext)
10416 as_bad_where (file, line, _("invalid unextended operand value"));
10418 if (small || (! ext && ! needext))
10422 *use_extend = FALSE;
10423 insnval = ((val >> op->shift) & ((1 << op->nbits) - 1));
10424 insnval <<= op->op_shift;
10429 long minext, maxext;
10435 maxext = (1 << op->extbits) - 1;
10439 minext = - (1 << (op->extbits - 1));
10440 maxext = (1 << (op->extbits - 1)) - 1;
10442 if (val < minext || val > maxext)
10443 as_bad_where (file, line,
10444 _("operand value out of range for instruction"));
10446 *use_extend = TRUE;
10447 if (op->extbits == 16)
10449 extval = ((val >> 11) & 0x1f) | (val & 0x7e0);
10452 else if (op->extbits == 15)
10454 extval = ((val >> 11) & 0xf) | (val & 0x7f0);
10459 extval = ((val & 0x1f) << 6) | (val & 0x20);
10463 *extend = (unsigned short) extval;
10468 struct percent_op_match
10471 bfd_reloc_code_real_type reloc;
10474 static const struct percent_op_match mips_percent_op[] =
10476 {"%lo", BFD_RELOC_LO16},
10478 {"%call_hi", BFD_RELOC_MIPS_CALL_HI16},
10479 {"%call_lo", BFD_RELOC_MIPS_CALL_LO16},
10480 {"%call16", BFD_RELOC_MIPS_CALL16},
10481 {"%got_disp", BFD_RELOC_MIPS_GOT_DISP},
10482 {"%got_page", BFD_RELOC_MIPS_GOT_PAGE},
10483 {"%got_ofst", BFD_RELOC_MIPS_GOT_OFST},
10484 {"%got_hi", BFD_RELOC_MIPS_GOT_HI16},
10485 {"%got_lo", BFD_RELOC_MIPS_GOT_LO16},
10486 {"%got", BFD_RELOC_MIPS_GOT16},
10487 {"%gp_rel", BFD_RELOC_GPREL16},
10488 {"%half", BFD_RELOC_16},
10489 {"%highest", BFD_RELOC_MIPS_HIGHEST},
10490 {"%higher", BFD_RELOC_MIPS_HIGHER},
10491 {"%neg", BFD_RELOC_MIPS_SUB},
10492 {"%tlsgd", BFD_RELOC_MIPS_TLS_GD},
10493 {"%tlsldm", BFD_RELOC_MIPS_TLS_LDM},
10494 {"%dtprel_hi", BFD_RELOC_MIPS_TLS_DTPREL_HI16},
10495 {"%dtprel_lo", BFD_RELOC_MIPS_TLS_DTPREL_LO16},
10496 {"%tprel_hi", BFD_RELOC_MIPS_TLS_TPREL_HI16},
10497 {"%tprel_lo", BFD_RELOC_MIPS_TLS_TPREL_LO16},
10498 {"%gottprel", BFD_RELOC_MIPS_TLS_GOTTPREL},
10500 {"%hi", BFD_RELOC_HI16_S}
10503 static const struct percent_op_match mips16_percent_op[] =
10505 {"%lo", BFD_RELOC_MIPS16_LO16},
10506 {"%gprel", BFD_RELOC_MIPS16_GPREL},
10507 {"%hi", BFD_RELOC_MIPS16_HI16_S}
10511 /* Return true if *STR points to a relocation operator. When returning true,
10512 move *STR over the operator and store its relocation code in *RELOC.
10513 Leave both *STR and *RELOC alone when returning false. */
10516 parse_relocation (char **str, bfd_reloc_code_real_type *reloc)
10518 const struct percent_op_match *percent_op;
10521 if (mips_opts.mips16)
10523 percent_op = mips16_percent_op;
10524 limit = ARRAY_SIZE (mips16_percent_op);
10528 percent_op = mips_percent_op;
10529 limit = ARRAY_SIZE (mips_percent_op);
10532 for (i = 0; i < limit; i++)
10533 if (strncasecmp (*str, percent_op[i].str, strlen (percent_op[i].str)) == 0)
10535 int len = strlen (percent_op[i].str);
10537 if (!ISSPACE ((*str)[len]) && (*str)[len] != '(')
10540 *str += strlen (percent_op[i].str);
10541 *reloc = percent_op[i].reloc;
10543 /* Check whether the output BFD supports this relocation.
10544 If not, issue an error and fall back on something safe. */
10545 if (!bfd_reloc_type_lookup (stdoutput, percent_op[i].reloc))
10547 as_bad ("relocation %s isn't supported by the current ABI",
10548 percent_op[i].str);
10549 *reloc = BFD_RELOC_UNUSED;
10557 /* Parse string STR as a 16-bit relocatable operand. Store the
10558 expression in *EP and the relocations in the array starting
10559 at RELOC. Return the number of relocation operators used.
10561 On exit, EXPR_END points to the first character after the expression. */
10564 my_getSmallExpression (expressionS *ep, bfd_reloc_code_real_type *reloc,
10567 bfd_reloc_code_real_type reversed_reloc[3];
10568 size_t reloc_index, i;
10569 int crux_depth, str_depth;
10572 /* Search for the start of the main expression, recoding relocations
10573 in REVERSED_RELOC. End the loop with CRUX pointing to the start
10574 of the main expression and with CRUX_DEPTH containing the number
10575 of open brackets at that point. */
10582 crux_depth = str_depth;
10584 /* Skip over whitespace and brackets, keeping count of the number
10586 while (*str == ' ' || *str == '\t' || *str == '(')
10591 && reloc_index < (HAVE_NEWABI ? 3 : 1)
10592 && parse_relocation (&str, &reversed_reloc[reloc_index]));
10594 my_getExpression (ep, crux);
10597 /* Match every open bracket. */
10598 while (crux_depth > 0 && (*str == ')' || *str == ' ' || *str == '\t'))
10602 if (crux_depth > 0)
10603 as_bad ("unclosed '('");
10607 if (reloc_index != 0)
10609 prev_reloc_op_frag = frag_now;
10610 for (i = 0; i < reloc_index; i++)
10611 reloc[i] = reversed_reloc[reloc_index - 1 - i];
10614 return reloc_index;
10618 my_getExpression (expressionS *ep, char *str)
10623 save_in = input_line_pointer;
10624 input_line_pointer = str;
10626 expr_end = input_line_pointer;
10627 input_line_pointer = save_in;
10629 /* If we are in mips16 mode, and this is an expression based on `.',
10630 then we bump the value of the symbol by 1 since that is how other
10631 text symbols are handled. We don't bother to handle complex
10632 expressions, just `.' plus or minus a constant. */
10633 if (mips_opts.mips16
10634 && ep->X_op == O_symbol
10635 && strcmp (S_GET_NAME (ep->X_add_symbol), FAKE_LABEL_NAME) == 0
10636 && S_GET_SEGMENT (ep->X_add_symbol) == now_seg
10637 && symbol_get_frag (ep->X_add_symbol) == frag_now
10638 && symbol_constant_p (ep->X_add_symbol)
10639 && (val = S_GET_VALUE (ep->X_add_symbol)) == frag_now_fix ())
10640 S_SET_VALUE (ep->X_add_symbol, val + 1);
10643 /* Turn a string in input_line_pointer into a floating point constant
10644 of type TYPE, and store the appropriate bytes in *LITP. The number
10645 of LITTLENUMS emitted is stored in *SIZEP. An error message is
10646 returned, or NULL on OK. */
10649 md_atof (int type, char *litP, int *sizeP)
10652 LITTLENUM_TYPE words[4];
10668 return _("bad call to md_atof");
10671 t = atof_ieee (input_line_pointer, type, words);
10673 input_line_pointer = t;
10677 if (! target_big_endian)
10679 for (i = prec - 1; i >= 0; i--)
10681 md_number_to_chars (litP, words[i], 2);
10687 for (i = 0; i < prec; i++)
10689 md_number_to_chars (litP, words[i], 2);
10698 md_number_to_chars (char *buf, valueT val, int n)
10700 if (target_big_endian)
10701 number_to_chars_bigendian (buf, val, n);
10703 number_to_chars_littleendian (buf, val, n);
10707 static int support_64bit_objects(void)
10709 const char **list, **l;
10712 list = bfd_target_list ();
10713 for (l = list; *l != NULL; l++)
10715 /* This is traditional mips */
10716 if (strcmp (*l, "elf64-tradbigmips") == 0
10717 || strcmp (*l, "elf64-tradlittlemips") == 0)
10719 if (strcmp (*l, "elf64-bigmips") == 0
10720 || strcmp (*l, "elf64-littlemips") == 0)
10723 yes = (*l != NULL);
10727 #endif /* OBJ_ELF */
10729 const char *md_shortopts = "O::g::G:";
10731 struct option md_longopts[] =
10733 /* Options which specify architecture. */
10734 #define OPTION_ARCH_BASE (OPTION_MD_BASE)
10735 #define OPTION_MARCH (OPTION_ARCH_BASE + 0)
10736 {"march", required_argument, NULL, OPTION_MARCH},
10737 #define OPTION_MTUNE (OPTION_ARCH_BASE + 1)
10738 {"mtune", required_argument, NULL, OPTION_MTUNE},
10739 #define OPTION_MIPS1 (OPTION_ARCH_BASE + 2)
10740 {"mips0", no_argument, NULL, OPTION_MIPS1},
10741 {"mips1", no_argument, NULL, OPTION_MIPS1},
10742 #define OPTION_MIPS2 (OPTION_ARCH_BASE + 3)
10743 {"mips2", no_argument, NULL, OPTION_MIPS2},
10744 #define OPTION_MIPS3 (OPTION_ARCH_BASE + 4)
10745 {"mips3", no_argument, NULL, OPTION_MIPS3},
10746 #define OPTION_MIPS4 (OPTION_ARCH_BASE + 5)
10747 {"mips4", no_argument, NULL, OPTION_MIPS4},
10748 #define OPTION_MIPS5 (OPTION_ARCH_BASE + 6)
10749 {"mips5", no_argument, NULL, OPTION_MIPS5},
10750 #define OPTION_MIPS32 (OPTION_ARCH_BASE + 7)
10751 {"mips32", no_argument, NULL, OPTION_MIPS32},
10752 #define OPTION_MIPS64 (OPTION_ARCH_BASE + 8)
10753 {"mips64", no_argument, NULL, OPTION_MIPS64},
10754 #define OPTION_MIPS32R2 (OPTION_ARCH_BASE + 9)
10755 {"mips32r2", no_argument, NULL, OPTION_MIPS32R2},
10756 #define OPTION_MIPS64R2 (OPTION_ARCH_BASE + 10)
10757 {"mips64r2", no_argument, NULL, OPTION_MIPS64R2},
10759 /* Options which specify Application Specific Extensions (ASEs). */
10760 #define OPTION_ASE_BASE (OPTION_ARCH_BASE + 11)
10761 #define OPTION_MIPS16 (OPTION_ASE_BASE + 0)
10762 {"mips16", no_argument, NULL, OPTION_MIPS16},
10763 #define OPTION_NO_MIPS16 (OPTION_ASE_BASE + 1)
10764 {"no-mips16", no_argument, NULL, OPTION_NO_MIPS16},
10765 #define OPTION_MIPS3D (OPTION_ASE_BASE + 2)
10766 {"mips3d", no_argument, NULL, OPTION_MIPS3D},
10767 #define OPTION_NO_MIPS3D (OPTION_ASE_BASE + 3)
10768 {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D},
10769 #define OPTION_MDMX (OPTION_ASE_BASE + 4)
10770 {"mdmx", no_argument, NULL, OPTION_MDMX},
10771 #define OPTION_NO_MDMX (OPTION_ASE_BASE + 5)
10772 {"no-mdmx", no_argument, NULL, OPTION_NO_MDMX},
10773 #define OPTION_DSP (OPTION_ASE_BASE + 6)
10774 {"mdsp", no_argument, NULL, OPTION_DSP},
10775 #define OPTION_NO_DSP (OPTION_ASE_BASE + 7)
10776 {"mno-dsp", no_argument, NULL, OPTION_NO_DSP},
10777 #define OPTION_MT (OPTION_ASE_BASE + 8)
10778 {"mmt", no_argument, NULL, OPTION_MT},
10779 #define OPTION_NO_MT (OPTION_ASE_BASE + 9)
10780 {"mno-mt", no_argument, NULL, OPTION_NO_MT},
10781 #define OPTION_SMARTMIPS (OPTION_ASE_BASE + 10)
10782 {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS},
10783 #define OPTION_NO_SMARTMIPS (OPTION_ASE_BASE + 11)
10784 {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS},
10786 /* Old-style architecture options. Don't add more of these. */
10787 #define OPTION_COMPAT_ARCH_BASE (OPTION_ASE_BASE + 12)
10788 #define OPTION_M4650 (OPTION_COMPAT_ARCH_BASE + 0)
10789 {"m4650", no_argument, NULL, OPTION_M4650},
10790 #define OPTION_NO_M4650 (OPTION_COMPAT_ARCH_BASE + 1)
10791 {"no-m4650", no_argument, NULL, OPTION_NO_M4650},
10792 #define OPTION_M4010 (OPTION_COMPAT_ARCH_BASE + 2)
10793 {"m4010", no_argument, NULL, OPTION_M4010},
10794 #define OPTION_NO_M4010 (OPTION_COMPAT_ARCH_BASE + 3)
10795 {"no-m4010", no_argument, NULL, OPTION_NO_M4010},
10796 #define OPTION_M4100 (OPTION_COMPAT_ARCH_BASE + 4)
10797 {"m4100", no_argument, NULL, OPTION_M4100},
10798 #define OPTION_NO_M4100 (OPTION_COMPAT_ARCH_BASE + 5)
10799 {"no-m4100", no_argument, NULL, OPTION_NO_M4100},
10800 #define OPTION_M3900 (OPTION_COMPAT_ARCH_BASE + 6)
10801 {"m3900", no_argument, NULL, OPTION_M3900},
10802 #define OPTION_NO_M3900 (OPTION_COMPAT_ARCH_BASE + 7)
10803 {"no-m3900", no_argument, NULL, OPTION_NO_M3900},
10805 /* Options which enable bug fixes. */
10806 #define OPTION_FIX_BASE (OPTION_COMPAT_ARCH_BASE + 8)
10807 #define OPTION_M7000_HILO_FIX (OPTION_FIX_BASE + 0)
10808 {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX},
10809 #define OPTION_MNO_7000_HILO_FIX (OPTION_FIX_BASE + 1)
10810 {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
10811 {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX},
10812 #define OPTION_FIX_VR4120 (OPTION_FIX_BASE + 2)
10813 #define OPTION_NO_FIX_VR4120 (OPTION_FIX_BASE + 3)
10814 {"mfix-vr4120", no_argument, NULL, OPTION_FIX_VR4120},
10815 {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120},
10816 #define OPTION_FIX_VR4130 (OPTION_FIX_BASE + 4)
10817 #define OPTION_NO_FIX_VR4130 (OPTION_FIX_BASE + 5)
10818 {"mfix-vr4130", no_argument, NULL, OPTION_FIX_VR4130},
10819 {"mno-fix-vr4130", no_argument, NULL, OPTION_NO_FIX_VR4130},
10821 /* Miscellaneous options. */
10822 #define OPTION_MISC_BASE (OPTION_FIX_BASE + 6)
10823 #define OPTION_TRAP (OPTION_MISC_BASE + 0)
10824 {"trap", no_argument, NULL, OPTION_TRAP},
10825 {"no-break", no_argument, NULL, OPTION_TRAP},
10826 #define OPTION_BREAK (OPTION_MISC_BASE + 1)
10827 {"break", no_argument, NULL, OPTION_BREAK},
10828 {"no-trap", no_argument, NULL, OPTION_BREAK},
10829 #define OPTION_EB (OPTION_MISC_BASE + 2)
10830 {"EB", no_argument, NULL, OPTION_EB},
10831 #define OPTION_EL (OPTION_MISC_BASE + 3)
10832 {"EL", no_argument, NULL, OPTION_EL},
10833 #define OPTION_FP32 (OPTION_MISC_BASE + 4)
10834 {"mfp32", no_argument, NULL, OPTION_FP32},
10835 #define OPTION_GP32 (OPTION_MISC_BASE + 5)
10836 {"mgp32", no_argument, NULL, OPTION_GP32},
10837 #define OPTION_CONSTRUCT_FLOATS (OPTION_MISC_BASE + 6)
10838 {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS},
10839 #define OPTION_NO_CONSTRUCT_FLOATS (OPTION_MISC_BASE + 7)
10840 {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
10841 #define OPTION_FP64 (OPTION_MISC_BASE + 8)
10842 {"mfp64", no_argument, NULL, OPTION_FP64},
10843 #define OPTION_GP64 (OPTION_MISC_BASE + 9)
10844 {"mgp64", no_argument, NULL, OPTION_GP64},
10845 #define OPTION_RELAX_BRANCH (OPTION_MISC_BASE + 10)
10846 #define OPTION_NO_RELAX_BRANCH (OPTION_MISC_BASE + 11)
10847 {"relax-branch", no_argument, NULL, OPTION_RELAX_BRANCH},
10848 {"no-relax-branch", no_argument, NULL, OPTION_NO_RELAX_BRANCH},
10849 #define OPTION_MSHARED (OPTION_MISC_BASE + 12)
10850 #define OPTION_MNO_SHARED (OPTION_MISC_BASE + 13)
10851 {"mshared", no_argument, NULL, OPTION_MSHARED},
10852 {"mno-shared", no_argument, NULL, OPTION_MNO_SHARED},
10853 #define OPTION_MSYM32 (OPTION_MISC_BASE + 14)
10854 #define OPTION_MNO_SYM32 (OPTION_MISC_BASE + 15)
10855 {"msym32", no_argument, NULL, OPTION_MSYM32},
10856 {"mno-sym32", no_argument, NULL, OPTION_MNO_SYM32},
10858 /* ELF-specific options. */
10860 #define OPTION_ELF_BASE (OPTION_MISC_BASE + 16)
10861 #define OPTION_CALL_SHARED (OPTION_ELF_BASE + 0)
10862 {"KPIC", no_argument, NULL, OPTION_CALL_SHARED},
10863 {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
10864 #define OPTION_NON_SHARED (OPTION_ELF_BASE + 1)
10865 {"non_shared", no_argument, NULL, OPTION_NON_SHARED},
10866 #define OPTION_XGOT (OPTION_ELF_BASE + 2)
10867 {"xgot", no_argument, NULL, OPTION_XGOT},
10868 #define OPTION_MABI (OPTION_ELF_BASE + 3)
10869 {"mabi", required_argument, NULL, OPTION_MABI},
10870 #define OPTION_32 (OPTION_ELF_BASE + 4)
10871 {"32", no_argument, NULL, OPTION_32},
10872 #define OPTION_N32 (OPTION_ELF_BASE + 5)
10873 {"n32", no_argument, NULL, OPTION_N32},
10874 #define OPTION_64 (OPTION_ELF_BASE + 6)
10875 {"64", no_argument, NULL, OPTION_64},
10876 #define OPTION_MDEBUG (OPTION_ELF_BASE + 7)
10877 {"mdebug", no_argument, NULL, OPTION_MDEBUG},
10878 #define OPTION_NO_MDEBUG (OPTION_ELF_BASE + 8)
10879 {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG},
10880 #define OPTION_PDR (OPTION_ELF_BASE + 9)
10881 {"mpdr", no_argument, NULL, OPTION_PDR},
10882 #define OPTION_NO_PDR (OPTION_ELF_BASE + 10)
10883 {"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
10884 #define OPTION_MVXWORKS_PIC (OPTION_ELF_BASE + 11)
10885 {"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC},
10886 #endif /* OBJ_ELF */
10888 {NULL, no_argument, NULL, 0}
10890 size_t md_longopts_size = sizeof (md_longopts);
10892 /* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to
10893 NEW_VALUE. Warn if another value was already specified. Note:
10894 we have to defer parsing the -march and -mtune arguments in order
10895 to handle 'from-abi' correctly, since the ABI might be specified
10896 in a later argument. */
10899 mips_set_option_string (const char **string_ptr, const char *new_value)
10901 if (*string_ptr != 0 && strcasecmp (*string_ptr, new_value) != 0)
10902 as_warn (_("A different %s was already specified, is now %s"),
10903 string_ptr == &mips_arch_string ? "-march" : "-mtune",
10906 *string_ptr = new_value;
10910 md_parse_option (int c, char *arg)
10914 case OPTION_CONSTRUCT_FLOATS:
10915 mips_disable_float_construction = 0;
10918 case OPTION_NO_CONSTRUCT_FLOATS:
10919 mips_disable_float_construction = 1;
10931 target_big_endian = 1;
10935 target_big_endian = 0;
10939 if (arg && arg[1] == '0')
10949 mips_debug = atoi (arg);
10950 /* When the MIPS assembler sees -g or -g2, it does not do
10951 optimizations which limit full symbolic debugging. We take
10952 that to be equivalent to -O0. */
10953 if (mips_debug == 2)
10958 file_mips_isa = ISA_MIPS1;
10962 file_mips_isa = ISA_MIPS2;
10966 file_mips_isa = ISA_MIPS3;
10970 file_mips_isa = ISA_MIPS4;
10974 file_mips_isa = ISA_MIPS5;
10977 case OPTION_MIPS32:
10978 file_mips_isa = ISA_MIPS32;
10981 case OPTION_MIPS32R2:
10982 file_mips_isa = ISA_MIPS32R2;
10985 case OPTION_MIPS64R2:
10986 file_mips_isa = ISA_MIPS64R2;
10989 case OPTION_MIPS64:
10990 file_mips_isa = ISA_MIPS64;
10994 mips_set_option_string (&mips_tune_string, arg);
10998 mips_set_option_string (&mips_arch_string, arg);
11002 mips_set_option_string (&mips_arch_string, "4650");
11003 mips_set_option_string (&mips_tune_string, "4650");
11006 case OPTION_NO_M4650:
11010 mips_set_option_string (&mips_arch_string, "4010");
11011 mips_set_option_string (&mips_tune_string, "4010");
11014 case OPTION_NO_M4010:
11018 mips_set_option_string (&mips_arch_string, "4100");
11019 mips_set_option_string (&mips_tune_string, "4100");
11022 case OPTION_NO_M4100:
11026 mips_set_option_string (&mips_arch_string, "3900");
11027 mips_set_option_string (&mips_tune_string, "3900");
11030 case OPTION_NO_M3900:
11034 mips_opts.ase_mdmx = 1;
11037 case OPTION_NO_MDMX:
11038 mips_opts.ase_mdmx = 0;
11042 mips_opts.ase_dsp = 1;
11045 case OPTION_NO_DSP:
11046 mips_opts.ase_dsp = 0;
11050 mips_opts.ase_mt = 1;
11054 mips_opts.ase_mt = 0;
11057 case OPTION_MIPS16:
11058 mips_opts.mips16 = 1;
11059 mips_no_prev_insn ();
11062 case OPTION_NO_MIPS16:
11063 mips_opts.mips16 = 0;
11064 mips_no_prev_insn ();
11067 case OPTION_MIPS3D:
11068 mips_opts.ase_mips3d = 1;
11071 case OPTION_NO_MIPS3D:
11072 mips_opts.ase_mips3d = 0;
11075 case OPTION_SMARTMIPS:
11076 mips_opts.ase_smartmips = 1;
11079 case OPTION_NO_SMARTMIPS:
11080 mips_opts.ase_smartmips = 0;
11083 case OPTION_FIX_VR4120:
11084 mips_fix_vr4120 = 1;
11087 case OPTION_NO_FIX_VR4120:
11088 mips_fix_vr4120 = 0;
11091 case OPTION_FIX_VR4130:
11092 mips_fix_vr4130 = 1;
11095 case OPTION_NO_FIX_VR4130:
11096 mips_fix_vr4130 = 0;
11099 case OPTION_RELAX_BRANCH:
11100 mips_relax_branch = 1;
11103 case OPTION_NO_RELAX_BRANCH:
11104 mips_relax_branch = 0;
11107 case OPTION_MSHARED:
11108 mips_in_shared = TRUE;
11111 case OPTION_MNO_SHARED:
11112 mips_in_shared = FALSE;
11115 case OPTION_MSYM32:
11116 mips_opts.sym32 = TRUE;
11119 case OPTION_MNO_SYM32:
11120 mips_opts.sym32 = FALSE;
11124 /* When generating ELF code, we permit -KPIC and -call_shared to
11125 select SVR4_PIC, and -non_shared to select no PIC. This is
11126 intended to be compatible with Irix 5. */
11127 case OPTION_CALL_SHARED:
11128 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
11130 as_bad (_("-call_shared is supported only for ELF format"));
11133 mips_pic = SVR4_PIC;
11134 mips_abicalls = TRUE;
11137 case OPTION_NON_SHARED:
11138 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
11140 as_bad (_("-non_shared is supported only for ELF format"));
11144 mips_abicalls = FALSE;
11147 /* The -xgot option tells the assembler to use 32 bit offsets
11148 when accessing the got in SVR4_PIC mode. It is for Irix
11153 #endif /* OBJ_ELF */
11156 g_switch_value = atoi (arg);
11161 /* The -32, -n32 and -64 options are shortcuts for -mabi=32, -mabi=n32
11164 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
11166 as_bad (_("-32 is supported for ELF format only"));
11169 mips_abi = O32_ABI;
11173 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
11175 as_bad (_("-n32 is supported for ELF format only"));
11178 mips_abi = N32_ABI;
11182 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
11184 as_bad (_("-64 is supported for ELF format only"));
11187 mips_abi = N64_ABI;
11188 if (! support_64bit_objects())
11189 as_fatal (_("No compiled in support for 64 bit object file format"));
11191 #endif /* OBJ_ELF */
11194 file_mips_gp32 = 1;
11198 file_mips_gp32 = 0;
11202 file_mips_fp32 = 1;
11206 file_mips_fp32 = 0;
11211 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
11213 as_bad (_("-mabi is supported for ELF format only"));
11216 if (strcmp (arg, "32") == 0)
11217 mips_abi = O32_ABI;
11218 else if (strcmp (arg, "o64") == 0)
11219 mips_abi = O64_ABI;
11220 else if (strcmp (arg, "n32") == 0)
11221 mips_abi = N32_ABI;
11222 else if (strcmp (arg, "64") == 0)
11224 mips_abi = N64_ABI;
11225 if (! support_64bit_objects())
11226 as_fatal (_("No compiled in support for 64 bit object file "
11229 else if (strcmp (arg, "eabi") == 0)
11230 mips_abi = EABI_ABI;
11233 as_fatal (_("invalid abi -mabi=%s"), arg);
11237 #endif /* OBJ_ELF */
11239 case OPTION_M7000_HILO_FIX:
11240 mips_7000_hilo_fix = TRUE;
11243 case OPTION_MNO_7000_HILO_FIX:
11244 mips_7000_hilo_fix = FALSE;
11248 case OPTION_MDEBUG:
11249 mips_flag_mdebug = TRUE;
11252 case OPTION_NO_MDEBUG:
11253 mips_flag_mdebug = FALSE;
11257 mips_flag_pdr = TRUE;
11260 case OPTION_NO_PDR:
11261 mips_flag_pdr = FALSE;
11264 case OPTION_MVXWORKS_PIC:
11265 mips_pic = VXWORKS_PIC;
11267 #endif /* OBJ_ELF */
11276 /* Set up globals to generate code for the ISA or processor
11277 described by INFO. */
11280 mips_set_architecture (const struct mips_cpu_info *info)
11284 file_mips_arch = info->cpu;
11285 mips_opts.arch = info->cpu;
11286 mips_opts.isa = info->isa;
11291 /* Likewise for tuning. */
11294 mips_set_tune (const struct mips_cpu_info *info)
11297 mips_tune = info->cpu;
11302 mips_after_parse_args (void)
11304 const struct mips_cpu_info *arch_info = 0;
11305 const struct mips_cpu_info *tune_info = 0;
11307 /* GP relative stuff not working for PE */
11308 if (strncmp (TARGET_OS, "pe", 2) == 0)
11310 if (g_switch_seen && g_switch_value != 0)
11311 as_bad (_("-G not supported in this configuration."));
11312 g_switch_value = 0;
11315 if (mips_abi == NO_ABI)
11316 mips_abi = MIPS_DEFAULT_ABI;
11318 /* The following code determines the architecture and register size.
11319 Similar code was added to GCC 3.3 (see override_options() in
11320 config/mips/mips.c). The GAS and GCC code should be kept in sync
11321 as much as possible. */
11323 if (mips_arch_string != 0)
11324 arch_info = mips_parse_cpu ("-march", mips_arch_string);
11326 if (file_mips_isa != ISA_UNKNOWN)
11328 /* Handle -mipsN. At this point, file_mips_isa contains the
11329 ISA level specified by -mipsN, while arch_info->isa contains
11330 the -march selection (if any). */
11331 if (arch_info != 0)
11333 /* -march takes precedence over -mipsN, since it is more descriptive.
11334 There's no harm in specifying both as long as the ISA levels
11336 if (file_mips_isa != arch_info->isa)
11337 as_bad (_("-%s conflicts with the other architecture options, which imply -%s"),
11338 mips_cpu_info_from_isa (file_mips_isa)->name,
11339 mips_cpu_info_from_isa (arch_info->isa)->name);
11342 arch_info = mips_cpu_info_from_isa (file_mips_isa);
11345 if (arch_info == 0)
11346 arch_info = mips_parse_cpu ("default CPU", MIPS_CPU_STRING_DEFAULT);
11348 if (ABI_NEEDS_64BIT_REGS (mips_abi) && !ISA_HAS_64BIT_REGS (arch_info->isa))
11349 as_bad ("-march=%s is not compatible with the selected ABI",
11352 mips_set_architecture (arch_info);
11354 /* Optimize for file_mips_arch, unless -mtune selects a different processor. */
11355 if (mips_tune_string != 0)
11356 tune_info = mips_parse_cpu ("-mtune", mips_tune_string);
11358 if (tune_info == 0)
11359 mips_set_tune (arch_info);
11361 mips_set_tune (tune_info);
11363 if (file_mips_gp32 >= 0)
11365 /* The user specified the size of the integer registers. Make sure
11366 it agrees with the ABI and ISA. */
11367 if (file_mips_gp32 == 0 && !ISA_HAS_64BIT_REGS (mips_opts.isa))
11368 as_bad (_("-mgp64 used with a 32-bit processor"));
11369 else if (file_mips_gp32 == 1 && ABI_NEEDS_64BIT_REGS (mips_abi))
11370 as_bad (_("-mgp32 used with a 64-bit ABI"));
11371 else if (file_mips_gp32 == 0 && ABI_NEEDS_32BIT_REGS (mips_abi))
11372 as_bad (_("-mgp64 used with a 32-bit ABI"));
11376 /* Infer the integer register size from the ABI and processor.
11377 Restrict ourselves to 32-bit registers if that's all the
11378 processor has, or if the ABI cannot handle 64-bit registers. */
11379 file_mips_gp32 = (ABI_NEEDS_32BIT_REGS (mips_abi)
11380 || !ISA_HAS_64BIT_REGS (mips_opts.isa));
11383 /* ??? GAS treats single-float processors as though they had 64-bit
11384 float registers (although it complains when double-precision
11385 instructions are used). As things stand, saying they have 32-bit
11386 registers would lead to spurious "register must be even" messages.
11387 So here we assume float registers are always the same size as
11388 integer ones, unless the user says otherwise. */
11389 if (file_mips_fp32 < 0)
11390 file_mips_fp32 = file_mips_gp32;
11392 /* End of GCC-shared inference code. */
11394 /* This flag is set when we have a 64-bit capable CPU but use only
11395 32-bit wide registers. Note that EABI does not use it. */
11396 if (ISA_HAS_64BIT_REGS (mips_opts.isa)
11397 && ((mips_abi == NO_ABI && file_mips_gp32 == 1)
11398 || mips_abi == O32_ABI))
11399 mips_32bitmode = 1;
11401 if (mips_opts.isa == ISA_MIPS1 && mips_trap)
11402 as_bad (_("trap exception not supported at ISA 1"));
11404 /* If the selected architecture includes support for ASEs, enable
11405 generation of code for them. */
11406 if (mips_opts.mips16 == -1)
11407 mips_opts.mips16 = (CPU_HAS_MIPS16 (file_mips_arch)) ? 1 : 0;
11408 if (mips_opts.ase_mips3d == -1)
11409 mips_opts.ase_mips3d = (CPU_HAS_MIPS3D (file_mips_arch)) ? 1 : 0;
11410 if (mips_opts.ase_mdmx == -1)
11411 mips_opts.ase_mdmx = (CPU_HAS_MDMX (file_mips_arch)) ? 1 : 0;
11412 if (mips_opts.ase_dsp == -1)
11413 mips_opts.ase_dsp = (CPU_HAS_DSP (file_mips_arch)) ? 1 : 0;
11414 if (mips_opts.ase_mt == -1)
11415 mips_opts.ase_mt = (CPU_HAS_MT (file_mips_arch)) ? 1 : 0;
11417 file_mips_isa = mips_opts.isa;
11418 file_ase_mips16 = mips_opts.mips16;
11419 file_ase_mips3d = mips_opts.ase_mips3d;
11420 file_ase_mdmx = mips_opts.ase_mdmx;
11421 file_ase_smartmips = mips_opts.ase_smartmips;
11422 file_ase_dsp = mips_opts.ase_dsp;
11423 file_ase_mt = mips_opts.ase_mt;
11424 mips_opts.gp32 = file_mips_gp32;
11425 mips_opts.fp32 = file_mips_fp32;
11427 if (mips_flag_mdebug < 0)
11429 #ifdef OBJ_MAYBE_ECOFF
11430 if (OUTPUT_FLAVOR == bfd_target_ecoff_flavour)
11431 mips_flag_mdebug = 1;
11433 #endif /* OBJ_MAYBE_ECOFF */
11434 mips_flag_mdebug = 0;
11439 mips_init_after_args (void)
11441 /* initialize opcodes */
11442 bfd_mips_num_opcodes = bfd_mips_num_builtin_opcodes;
11443 mips_opcodes = (struct mips_opcode *) mips_builtin_opcodes;
11447 md_pcrel_from (fixS *fixP)
11449 valueT addr = fixP->fx_where + fixP->fx_frag->fr_address;
11450 switch (fixP->fx_r_type)
11452 case BFD_RELOC_16_PCREL_S2:
11453 case BFD_RELOC_MIPS_JMP:
11454 /* Return the address of the delay slot. */
11461 /* This is called before the symbol table is processed. In order to
11462 work with gcc when using mips-tfile, we must keep all local labels.
11463 However, in other cases, we want to discard them. If we were
11464 called with -g, but we didn't see any debugging information, it may
11465 mean that gcc is smuggling debugging information through to
11466 mips-tfile, in which case we must generate all local labels. */
11469 mips_frob_file_before_adjust (void)
11471 #ifndef NO_ECOFF_DEBUGGING
11472 if (ECOFF_DEBUGGING
11474 && ! ecoff_debugging_seen)
11475 flag_keep_locals = 1;
11479 /* Sort any unmatched HI16 and GOT16 relocs so that they immediately precede
11480 the corresponding LO16 reloc. This is called before md_apply_fix and
11481 tc_gen_reloc. Unmatched relocs can only be generated by use of explicit
11482 relocation operators.
11484 For our purposes, a %lo() expression matches a %got() or %hi()
11487 (a) it refers to the same symbol; and
11488 (b) the offset applied in the %lo() expression is no lower than
11489 the offset applied in the %got() or %hi().
11491 (b) allows us to cope with code like:
11494 lh $4,%lo(foo+2)($4)
11496 ...which is legal on RELA targets, and has a well-defined behaviour
11497 if the user knows that adding 2 to "foo" will not induce a carry to
11500 When several %lo()s match a particular %got() or %hi(), we use the
11501 following rules to distinguish them:
11503 (1) %lo()s with smaller offsets are a better match than %lo()s with
11506 (2) %lo()s with no matching %got() or %hi() are better than those
11507 that already have a matching %got() or %hi().
11509 (3) later %lo()s are better than earlier %lo()s.
11511 These rules are applied in order.
11513 (1) means, among other things, that %lo()s with identical offsets are
11514 chosen if they exist.
11516 (2) means that we won't associate several high-part relocations with
11517 the same low-part relocation unless there's no alternative. Having
11518 several high parts for the same low part is a GNU extension; this rule
11519 allows careful users to avoid it.
11521 (3) is purely cosmetic. mips_hi_fixup_list is is in reverse order,
11522 with the last high-part relocation being at the front of the list.
11523 It therefore makes sense to choose the last matching low-part
11524 relocation, all other things being equal. It's also easier
11525 to code that way. */
11528 mips_frob_file (void)
11530 struct mips_hi_fixup *l;
11532 for (l = mips_hi_fixup_list; l != NULL; l = l->next)
11534 segment_info_type *seginfo;
11535 bfd_boolean matched_lo_p;
11536 fixS **hi_pos, **lo_pos, **pos;
11538 assert (reloc_needs_lo_p (l->fixp->fx_r_type));
11540 /* If a GOT16 relocation turns out to be against a global symbol,
11541 there isn't supposed to be a matching LO. */
11542 if (l->fixp->fx_r_type == BFD_RELOC_MIPS_GOT16
11543 && !pic_need_relax (l->fixp->fx_addsy, l->seg))
11546 /* Check quickly whether the next fixup happens to be a matching %lo. */
11547 if (fixup_has_matching_lo_p (l->fixp))
11550 seginfo = seg_info (l->seg);
11552 /* Set HI_POS to the position of this relocation in the chain.
11553 Set LO_POS to the position of the chosen low-part relocation.
11554 MATCHED_LO_P is true on entry to the loop if *POS is a low-part
11555 relocation that matches an immediately-preceding high-part
11559 matched_lo_p = FALSE;
11560 for (pos = &seginfo->fix_root; *pos != NULL; pos = &(*pos)->fx_next)
11562 if (*pos == l->fixp)
11565 if (((*pos)->fx_r_type == BFD_RELOC_LO16
11566 || (*pos)->fx_r_type == BFD_RELOC_MIPS16_LO16)
11567 && (*pos)->fx_addsy == l->fixp->fx_addsy
11568 && (*pos)->fx_offset >= l->fixp->fx_offset
11570 || (*pos)->fx_offset < (*lo_pos)->fx_offset
11572 && (*pos)->fx_offset == (*lo_pos)->fx_offset)))
11575 matched_lo_p = (reloc_needs_lo_p ((*pos)->fx_r_type)
11576 && fixup_has_matching_lo_p (*pos));
11579 /* If we found a match, remove the high-part relocation from its
11580 current position and insert it before the low-part relocation.
11581 Make the offsets match so that fixup_has_matching_lo_p()
11584 We don't warn about unmatched high-part relocations since some
11585 versions of gcc have been known to emit dead "lui ...%hi(...)"
11587 if (lo_pos != NULL)
11589 l->fixp->fx_offset = (*lo_pos)->fx_offset;
11590 if (l->fixp->fx_next != *lo_pos)
11592 *hi_pos = l->fixp->fx_next;
11593 l->fixp->fx_next = *lo_pos;
11600 /* We may have combined relocations without symbols in the N32/N64 ABI.
11601 We have to prevent gas from dropping them. */
11604 mips_force_relocation (fixS *fixp)
11606 if (generic_force_reloc (fixp))
11610 && S_GET_SEGMENT (fixp->fx_addsy) == bfd_abs_section_ptr
11611 && (fixp->fx_r_type == BFD_RELOC_MIPS_SUB
11612 || fixp->fx_r_type == BFD_RELOC_HI16_S
11613 || fixp->fx_r_type == BFD_RELOC_LO16))
11619 /* Apply a fixup to the object file. */
11622 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
11626 reloc_howto_type *howto;
11628 /* We ignore generic BFD relocations we don't know about. */
11629 howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
11633 assert (fixP->fx_size == 4
11634 || fixP->fx_r_type == BFD_RELOC_16
11635 || fixP->fx_r_type == BFD_RELOC_64
11636 || fixP->fx_r_type == BFD_RELOC_CTOR
11637 || fixP->fx_r_type == BFD_RELOC_MIPS_SUB
11638 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
11639 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY);
11641 buf = (bfd_byte *) (fixP->fx_frag->fr_literal + fixP->fx_where);
11643 assert (! fixP->fx_pcrel || fixP->fx_r_type == BFD_RELOC_16_PCREL_S2);
11645 /* Don't treat parts of a composite relocation as done. There are two
11648 (1) The second and third parts will be against 0 (RSS_UNDEF) but
11649 should nevertheless be emitted if the first part is.
11651 (2) In normal usage, composite relocations are never assembly-time
11652 constants. The easiest way of dealing with the pathological
11653 exceptions is to generate a relocation against STN_UNDEF and
11654 leave everything up to the linker. */
11655 if (fixP->fx_addsy == NULL && ! fixP->fx_pcrel && fixP->fx_tcbit == 0)
11658 switch (fixP->fx_r_type)
11660 case BFD_RELOC_MIPS_TLS_GD:
11661 case BFD_RELOC_MIPS_TLS_LDM:
11662 case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
11663 case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
11664 case BFD_RELOC_MIPS_TLS_GOTTPREL:
11665 case BFD_RELOC_MIPS_TLS_TPREL_HI16:
11666 case BFD_RELOC_MIPS_TLS_TPREL_LO16:
11667 S_SET_THREAD_LOCAL (fixP->fx_addsy);
11670 case BFD_RELOC_MIPS_JMP:
11671 case BFD_RELOC_MIPS_SHIFT5:
11672 case BFD_RELOC_MIPS_SHIFT6:
11673 case BFD_RELOC_MIPS_GOT_DISP:
11674 case BFD_RELOC_MIPS_GOT_PAGE:
11675 case BFD_RELOC_MIPS_GOT_OFST:
11676 case BFD_RELOC_MIPS_SUB:
11677 case BFD_RELOC_MIPS_INSERT_A:
11678 case BFD_RELOC_MIPS_INSERT_B:
11679 case BFD_RELOC_MIPS_DELETE:
11680 case BFD_RELOC_MIPS_HIGHEST:
11681 case BFD_RELOC_MIPS_HIGHER:
11682 case BFD_RELOC_MIPS_SCN_DISP:
11683 case BFD_RELOC_MIPS_REL16:
11684 case BFD_RELOC_MIPS_RELGOT:
11685 case BFD_RELOC_MIPS_JALR:
11686 case BFD_RELOC_HI16:
11687 case BFD_RELOC_HI16_S:
11688 case BFD_RELOC_GPREL16:
11689 case BFD_RELOC_MIPS_LITERAL:
11690 case BFD_RELOC_MIPS_CALL16:
11691 case BFD_RELOC_MIPS_GOT16:
11692 case BFD_RELOC_GPREL32:
11693 case BFD_RELOC_MIPS_GOT_HI16:
11694 case BFD_RELOC_MIPS_GOT_LO16:
11695 case BFD_RELOC_MIPS_CALL_HI16:
11696 case BFD_RELOC_MIPS_CALL_LO16:
11697 case BFD_RELOC_MIPS16_GPREL:
11698 case BFD_RELOC_MIPS16_HI16:
11699 case BFD_RELOC_MIPS16_HI16_S:
11700 /* Nothing needed to do. The value comes from the reloc entry */
11703 case BFD_RELOC_MIPS16_JMP:
11704 /* We currently always generate a reloc against a symbol, which
11705 means that we don't want an addend even if the symbol is
11711 /* This is handled like BFD_RELOC_32, but we output a sign
11712 extended value if we are only 32 bits. */
11715 if (8 <= sizeof (valueT))
11716 md_number_to_chars ((char *) buf, *valP, 8);
11721 if ((*valP & 0x80000000) != 0)
11725 md_number_to_chars ((char *)(buf + (target_big_endian ? 4 : 0)),
11727 md_number_to_chars ((char *)(buf + (target_big_endian ? 0 : 4)),
11733 case BFD_RELOC_RVA:
11735 /* If we are deleting this reloc entry, we must fill in the
11736 value now. This can happen if we have a .word which is not
11737 resolved when it appears but is later defined. */
11739 md_number_to_chars ((char *) buf, *valP, 4);
11743 /* If we are deleting this reloc entry, we must fill in the
11746 md_number_to_chars ((char *) buf, *valP, 2);
11749 case BFD_RELOC_LO16:
11750 case BFD_RELOC_MIPS16_LO16:
11751 /* FIXME: Now that embedded-PIC is gone, some of this code/comment
11752 may be safe to remove, but if so it's not obvious. */
11753 /* When handling an embedded PIC switch statement, we can wind
11754 up deleting a LO16 reloc. See the 'o' case in mips_ip. */
11757 if (*valP + 0x8000 > 0xffff)
11758 as_bad_where (fixP->fx_file, fixP->fx_line,
11759 _("relocation overflow"));
11760 if (target_big_endian)
11762 md_number_to_chars ((char *) buf, *valP, 2);
11766 case BFD_RELOC_16_PCREL_S2:
11767 if ((*valP & 0x3) != 0)
11768 as_bad_where (fixP->fx_file, fixP->fx_line,
11769 _("Branch to misaligned address (%lx)"), (long) *valP);
11772 * We need to save the bits in the instruction since fixup_segment()
11773 * might be deleting the relocation entry (i.e., a branch within
11774 * the current segment).
11776 if (! fixP->fx_done)
11779 /* update old instruction data */
11780 if (target_big_endian)
11781 insn = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
11783 insn = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
11785 if (*valP + 0x20000 <= 0x3ffff)
11787 insn |= (*valP >> 2) & 0xffff;
11788 md_number_to_chars ((char *) buf, insn, 4);
11790 else if (mips_pic == NO_PIC
11792 && fixP->fx_frag->fr_address >= text_section->vma
11793 && (fixP->fx_frag->fr_address
11794 < text_section->vma + bfd_get_section_size (text_section))
11795 && ((insn & 0xffff0000) == 0x10000000 /* beq $0,$0 */
11796 || (insn & 0xffff0000) == 0x04010000 /* bgez $0 */
11797 || (insn & 0xffff0000) == 0x04110000)) /* bgezal $0 */
11799 /* The branch offset is too large. If this is an
11800 unconditional branch, and we are not generating PIC code,
11801 we can convert it to an absolute jump instruction. */
11802 if ((insn & 0xffff0000) == 0x04110000) /* bgezal $0 */
11803 insn = 0x0c000000; /* jal */
11805 insn = 0x08000000; /* j */
11806 fixP->fx_r_type = BFD_RELOC_MIPS_JMP;
11808 fixP->fx_addsy = section_symbol (text_section);
11809 *valP += md_pcrel_from (fixP);
11810 md_number_to_chars ((char *) buf, insn, 4);
11814 /* If we got here, we have branch-relaxation disabled,
11815 and there's nothing we can do to fix this instruction
11816 without turning it into a longer sequence. */
11817 as_bad_where (fixP->fx_file, fixP->fx_line,
11818 _("Branch out of range"));
11822 case BFD_RELOC_VTABLE_INHERIT:
11825 && !S_IS_DEFINED (fixP->fx_addsy)
11826 && !S_IS_WEAK (fixP->fx_addsy))
11827 S_SET_WEAK (fixP->fx_addsy);
11830 case BFD_RELOC_VTABLE_ENTRY:
11838 /* Remember value for tc_gen_reloc. */
11839 fixP->fx_addnumber = *valP;
11849 name = input_line_pointer;
11850 c = get_symbol_end ();
11851 p = (symbolS *) symbol_find_or_make (name);
11852 *input_line_pointer = c;
11856 /* Align the current frag to a given power of two. The MIPS assembler
11857 also automatically adjusts any preceding label. */
11860 mips_align (int to, int fill, symbolS *label)
11862 mips_emit_delays ();
11863 frag_align (to, fill, 0);
11864 record_alignment (now_seg, to);
11867 assert (S_GET_SEGMENT (label) == now_seg);
11868 symbol_set_frag (label, frag_now);
11869 S_SET_VALUE (label, (valueT) frag_now_fix ());
11873 /* Align to a given power of two. .align 0 turns off the automatic
11874 alignment used by the data creating pseudo-ops. */
11877 s_align (int x ATTRIBUTE_UNUSED)
11880 register long temp_fill;
11881 long max_alignment = 15;
11885 o Note that the assembler pulls down any immediately preceding label
11886 to the aligned address.
11887 o It's not documented but auto alignment is reinstated by
11888 a .align pseudo instruction.
11889 o Note also that after auto alignment is turned off the mips assembler
11890 issues an error on attempt to assemble an improperly aligned data item.
11895 temp = get_absolute_expression ();
11896 if (temp > max_alignment)
11897 as_bad (_("Alignment too large: %d. assumed."), temp = max_alignment);
11900 as_warn (_("Alignment negative: 0 assumed."));
11903 if (*input_line_pointer == ',')
11905 ++input_line_pointer;
11906 temp_fill = get_absolute_expression ();
11913 mips_align (temp, (int) temp_fill,
11914 insn_labels != NULL ? insn_labels->label : NULL);
11921 demand_empty_rest_of_line ();
11925 s_change_sec (int sec)
11930 /* The ELF backend needs to know that we are changing sections, so
11931 that .previous works correctly. We could do something like check
11932 for an obj_section_change_hook macro, but that might be confusing
11933 as it would not be appropriate to use it in the section changing
11934 functions in read.c, since obj-elf.c intercepts those. FIXME:
11935 This should be cleaner, somehow. */
11936 obj_elf_section_change_hook ();
11939 mips_emit_delays ();
11949 subseg_set (bss_section, (subsegT) get_absolute_expression ());
11950 demand_empty_rest_of_line ();
11954 seg = subseg_new (RDATA_SECTION_NAME,
11955 (subsegT) get_absolute_expression ());
11956 if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
11958 bfd_set_section_flags (stdoutput, seg, (SEC_ALLOC | SEC_LOAD
11959 | SEC_READONLY | SEC_RELOC
11961 if (strcmp (TARGET_OS, "elf") != 0)
11962 record_alignment (seg, 4);
11964 demand_empty_rest_of_line ();
11968 seg = subseg_new (".sdata", (subsegT) get_absolute_expression ());
11969 if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
11971 bfd_set_section_flags (stdoutput, seg,
11972 SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_DATA);
11973 if (strcmp (TARGET_OS, "elf") != 0)
11974 record_alignment (seg, 4);
11976 demand_empty_rest_of_line ();
11984 s_change_section (int ignore ATTRIBUTE_UNUSED)
11987 char *section_name;
11992 int section_entry_size;
11993 int section_alignment;
11995 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
11998 section_name = input_line_pointer;
11999 c = get_symbol_end ();
12001 next_c = *(input_line_pointer + 1);
12003 /* Do we have .section Name<,"flags">? */
12004 if (c != ',' || (c == ',' && next_c == '"'))
12006 /* just after name is now '\0'. */
12007 *input_line_pointer = c;
12008 input_line_pointer = section_name;
12009 obj_elf_section (ignore);
12012 input_line_pointer++;
12014 /* Do we have .section Name<,type><,flag><,entry_size><,alignment> */
12016 section_type = get_absolute_expression ();
12019 if (*input_line_pointer++ == ',')
12020 section_flag = get_absolute_expression ();
12023 if (*input_line_pointer++ == ',')
12024 section_entry_size = get_absolute_expression ();
12026 section_entry_size = 0;
12027 if (*input_line_pointer++ == ',')
12028 section_alignment = get_absolute_expression ();
12030 section_alignment = 0;
12032 section_name = xstrdup (section_name);
12034 /* When using the generic form of .section (as implemented by obj-elf.c),
12035 there's no way to set the section type to SHT_MIPS_DWARF. Users have
12036 traditionally had to fall back on the more common @progbits instead.
12038 There's nothing really harmful in this, since bfd will correct
12039 SHT_PROGBITS to SHT_MIPS_DWARF before writing out the file. But it
12040 means that, for backwards compatibility, the special_section entries
12041 for dwarf sections must use SHT_PROGBITS rather than SHT_MIPS_DWARF.
12043 Even so, we shouldn't force users of the MIPS .section syntax to
12044 incorrectly label the sections as SHT_PROGBITS. The best compromise
12045 seems to be to map SHT_MIPS_DWARF to SHT_PROGBITS before calling the
12046 generic type-checking code. */
12047 if (section_type == SHT_MIPS_DWARF)
12048 section_type = SHT_PROGBITS;
12050 obj_elf_change_section (section_name, section_type, section_flag,
12051 section_entry_size, 0, 0, 0);
12053 if (now_seg->name != section_name)
12054 free (section_name);
12055 #endif /* OBJ_ELF */
12059 mips_enable_auto_align (void)
12065 s_cons (int log_size)
12069 label = insn_labels != NULL ? insn_labels->label : NULL;
12070 mips_emit_delays ();
12071 if (log_size > 0 && auto_align)
12072 mips_align (log_size, 0, label);
12073 mips_clear_insn_labels ();
12074 cons (1 << log_size);
12078 s_float_cons (int type)
12082 label = insn_labels != NULL ? insn_labels->label : NULL;
12084 mips_emit_delays ();
12089 mips_align (3, 0, label);
12091 mips_align (2, 0, label);
12094 mips_clear_insn_labels ();
12099 /* Handle .globl. We need to override it because on Irix 5 you are
12102 where foo is an undefined symbol, to mean that foo should be
12103 considered to be the address of a function. */
12106 s_mips_globl (int x ATTRIBUTE_UNUSED)
12115 name = input_line_pointer;
12116 c = get_symbol_end ();
12117 symbolP = symbol_find_or_make (name);
12118 S_SET_EXTERNAL (symbolP);
12120 *input_line_pointer = c;
12121 SKIP_WHITESPACE ();
12123 /* On Irix 5, every global symbol that is not explicitly labelled as
12124 being a function is apparently labelled as being an object. */
12127 if (!is_end_of_line[(unsigned char) *input_line_pointer]
12128 && (*input_line_pointer != ','))
12133 secname = input_line_pointer;
12134 c = get_symbol_end ();
12135 sec = bfd_get_section_by_name (stdoutput, secname);
12137 as_bad (_("%s: no such section"), secname);
12138 *input_line_pointer = c;
12140 if (sec != NULL && (sec->flags & SEC_CODE) != 0)
12141 flag = BSF_FUNCTION;
12144 symbol_get_bfdsym (symbolP)->flags |= flag;
12146 c = *input_line_pointer;
12149 input_line_pointer++;
12150 SKIP_WHITESPACE ();
12151 if (is_end_of_line[(unsigned char) *input_line_pointer])
12157 demand_empty_rest_of_line ();
12161 s_option (int x ATTRIBUTE_UNUSED)
12166 opt = input_line_pointer;
12167 c = get_symbol_end ();
12171 /* FIXME: What does this mean? */
12173 else if (strncmp (opt, "pic", 3) == 0)
12177 i = atoi (opt + 3);
12182 mips_pic = SVR4_PIC;
12183 mips_abicalls = TRUE;
12186 as_bad (_(".option pic%d not supported"), i);
12188 if (mips_pic == SVR4_PIC)
12190 if (g_switch_seen && g_switch_value != 0)
12191 as_warn (_("-G may not be used with SVR4 PIC code"));
12192 g_switch_value = 0;
12193 bfd_set_gp_size (stdoutput, 0);
12197 as_warn (_("Unrecognized option \"%s\""), opt);
12199 *input_line_pointer = c;
12200 demand_empty_rest_of_line ();
12203 /* This structure is used to hold a stack of .set values. */
12205 struct mips_option_stack
12207 struct mips_option_stack *next;
12208 struct mips_set_options options;
12211 static struct mips_option_stack *mips_opts_stack;
12213 /* Handle the .set pseudo-op. */
12216 s_mipsset (int x ATTRIBUTE_UNUSED)
12218 char *name = input_line_pointer, ch;
12220 while (!is_end_of_line[(unsigned char) *input_line_pointer])
12221 ++input_line_pointer;
12222 ch = *input_line_pointer;
12223 *input_line_pointer = '\0';
12225 if (strcmp (name, "reorder") == 0)
12227 if (mips_opts.noreorder)
12230 else if (strcmp (name, "noreorder") == 0)
12232 if (!mips_opts.noreorder)
12233 start_noreorder ();
12235 else if (strcmp (name, "at") == 0)
12237 mips_opts.noat = 0;
12239 else if (strcmp (name, "noat") == 0)
12241 mips_opts.noat = 1;
12243 else if (strcmp (name, "macro") == 0)
12245 mips_opts.warn_about_macros = 0;
12247 else if (strcmp (name, "nomacro") == 0)
12249 if (mips_opts.noreorder == 0)
12250 as_bad (_("`noreorder' must be set before `nomacro'"));
12251 mips_opts.warn_about_macros = 1;
12253 else if (strcmp (name, "move") == 0 || strcmp (name, "novolatile") == 0)
12255 mips_opts.nomove = 0;
12257 else if (strcmp (name, "nomove") == 0 || strcmp (name, "volatile") == 0)
12259 mips_opts.nomove = 1;
12261 else if (strcmp (name, "bopt") == 0)
12263 mips_opts.nobopt = 0;
12265 else if (strcmp (name, "nobopt") == 0)
12267 mips_opts.nobopt = 1;
12269 else if (strcmp (name, "mips16") == 0
12270 || strcmp (name, "MIPS-16") == 0)
12271 mips_opts.mips16 = 1;
12272 else if (strcmp (name, "nomips16") == 0
12273 || strcmp (name, "noMIPS-16") == 0)
12274 mips_opts.mips16 = 0;
12275 else if (strcmp (name, "smartmips") == 0)
12277 if (!ISA_SUPPORT_SMARTMIPS)
12278 as_warn ("%s ISA does not support SmartMIPS ASE",
12279 mips_cpu_info_from_isa (mips_opts.isa)->name);
12280 mips_opts.ase_smartmips = 1;
12282 else if (strcmp (name, "nosmartmips") == 0)
12283 mips_opts.ase_smartmips = 0;
12284 else if (strcmp (name, "mips3d") == 0)
12285 mips_opts.ase_mips3d = 1;
12286 else if (strcmp (name, "nomips3d") == 0)
12287 mips_opts.ase_mips3d = 0;
12288 else if (strcmp (name, "mdmx") == 0)
12289 mips_opts.ase_mdmx = 1;
12290 else if (strcmp (name, "nomdmx") == 0)
12291 mips_opts.ase_mdmx = 0;
12292 else if (strcmp (name, "dsp") == 0)
12293 mips_opts.ase_dsp = 1;
12294 else if (strcmp (name, "nodsp") == 0)
12295 mips_opts.ase_dsp = 0;
12296 else if (strcmp (name, "mt") == 0)
12297 mips_opts.ase_mt = 1;
12298 else if (strcmp (name, "nomt") == 0)
12299 mips_opts.ase_mt = 0;
12300 else if (strncmp (name, "mips", 4) == 0 || strncmp (name, "arch=", 5) == 0)
12304 /* Permit the user to change the ISA and architecture on the fly.
12305 Needless to say, misuse can cause serious problems. */
12306 if (strcmp (name, "mips0") == 0 || strcmp (name, "arch=default") == 0)
12309 mips_opts.isa = file_mips_isa;
12310 mips_opts.arch = file_mips_arch;
12312 else if (strncmp (name, "arch=", 5) == 0)
12314 const struct mips_cpu_info *p;
12316 p = mips_parse_cpu("internal use", name + 5);
12318 as_bad (_("unknown architecture %s"), name + 5);
12321 mips_opts.arch = p->cpu;
12322 mips_opts.isa = p->isa;
12325 else if (strncmp (name, "mips", 4) == 0)
12327 const struct mips_cpu_info *p;
12329 p = mips_parse_cpu("internal use", name);
12331 as_bad (_("unknown ISA level %s"), name + 4);
12334 mips_opts.arch = p->cpu;
12335 mips_opts.isa = p->isa;
12339 as_bad (_("unknown ISA or architecture %s"), name);
12341 switch (mips_opts.isa)
12349 mips_opts.gp32 = 1;
12350 mips_opts.fp32 = 1;
12357 mips_opts.gp32 = 0;
12358 mips_opts.fp32 = 0;
12361 as_bad (_("unknown ISA level %s"), name + 4);
12366 mips_opts.gp32 = file_mips_gp32;
12367 mips_opts.fp32 = file_mips_fp32;
12370 else if (strcmp (name, "autoextend") == 0)
12371 mips_opts.noautoextend = 0;
12372 else if (strcmp (name, "noautoextend") == 0)
12373 mips_opts.noautoextend = 1;
12374 else if (strcmp (name, "push") == 0)
12376 struct mips_option_stack *s;
12378 s = (struct mips_option_stack *) xmalloc (sizeof *s);
12379 s->next = mips_opts_stack;
12380 s->options = mips_opts;
12381 mips_opts_stack = s;
12383 else if (strcmp (name, "pop") == 0)
12385 struct mips_option_stack *s;
12387 s = mips_opts_stack;
12389 as_bad (_(".set pop with no .set push"));
12392 /* If we're changing the reorder mode we need to handle
12393 delay slots correctly. */
12394 if (s->options.noreorder && ! mips_opts.noreorder)
12395 start_noreorder ();
12396 else if (! s->options.noreorder && mips_opts.noreorder)
12399 mips_opts = s->options;
12400 mips_opts_stack = s->next;
12404 else if (strcmp (name, "sym32") == 0)
12405 mips_opts.sym32 = TRUE;
12406 else if (strcmp (name, "nosym32") == 0)
12407 mips_opts.sym32 = FALSE;
12410 as_warn (_("Tried to set unrecognized symbol: %s\n"), name);
12412 *input_line_pointer = ch;
12413 demand_empty_rest_of_line ();
12416 /* Handle the .abicalls pseudo-op. I believe this is equivalent to
12417 .option pic2. It means to generate SVR4 PIC calls. */
12420 s_abicalls (int ignore ATTRIBUTE_UNUSED)
12422 mips_pic = SVR4_PIC;
12423 mips_abicalls = TRUE;
12425 if (g_switch_seen && g_switch_value != 0)
12426 as_warn (_("-G may not be used with SVR4 PIC code"));
12427 g_switch_value = 0;
12429 bfd_set_gp_size (stdoutput, 0);
12430 demand_empty_rest_of_line ();
12433 /* Handle the .cpload pseudo-op. This is used when generating SVR4
12434 PIC code. It sets the $gp register for the function based on the
12435 function address, which is in the register named in the argument.
12436 This uses a relocation against _gp_disp, which is handled specially
12437 by the linker. The result is:
12438 lui $gp,%hi(_gp_disp)
12439 addiu $gp,$gp,%lo(_gp_disp)
12440 addu $gp,$gp,.cpload argument
12441 The .cpload argument is normally $25 == $t9.
12443 The -mno-shared option changes this to:
12444 lui $gp,%hi(__gnu_local_gp)
12445 addiu $gp,$gp,%lo(__gnu_local_gp)
12446 and the argument is ignored. This saves an instruction, but the
12447 resulting code is not position independent; it uses an absolute
12448 address for __gnu_local_gp. Thus code assembled with -mno-shared
12449 can go into an ordinary executable, but not into a shared library. */
12452 s_cpload (int ignore ATTRIBUTE_UNUSED)
12458 /* If we are not generating SVR4 PIC code, or if this is NewABI code,
12459 .cpload is ignored. */
12460 if (mips_pic != SVR4_PIC || HAVE_NEWABI)
12466 /* .cpload should be in a .set noreorder section. */
12467 if (mips_opts.noreorder == 0)
12468 as_warn (_(".cpload not in noreorder section"));
12470 reg = tc_get_register (0);
12472 /* If we need to produce a 64-bit address, we are better off using
12473 the default instruction sequence. */
12474 in_shared = mips_in_shared || HAVE_64BIT_SYMBOLS;
12476 ex.X_op = O_symbol;
12477 ex.X_add_symbol = symbol_find_or_make (in_shared ? "_gp_disp" :
12479 ex.X_op_symbol = NULL;
12480 ex.X_add_number = 0;
12482 /* In ELF, this symbol is implicitly an STT_OBJECT symbol. */
12483 symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
12486 macro_build_lui (&ex, mips_gp_register);
12487 macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
12488 mips_gp_register, BFD_RELOC_LO16);
12490 macro_build (NULL, "addu", "d,v,t", mips_gp_register,
12491 mips_gp_register, reg);
12494 demand_empty_rest_of_line ();
12497 /* Handle the .cpsetup pseudo-op defined for NewABI PIC code. The syntax is:
12498 .cpsetup $reg1, offset|$reg2, label
12500 If offset is given, this results in:
12501 sd $gp, offset($sp)
12502 lui $gp, %hi(%neg(%gp_rel(label)))
12503 addiu $gp, $gp, %lo(%neg(%gp_rel(label)))
12504 daddu $gp, $gp, $reg1
12506 If $reg2 is given, this results in:
12507 daddu $reg2, $gp, $0
12508 lui $gp, %hi(%neg(%gp_rel(label)))
12509 addiu $gp, $gp, %lo(%neg(%gp_rel(label)))
12510 daddu $gp, $gp, $reg1
12511 $reg1 is normally $25 == $t9.
12513 The -mno-shared option replaces the last three instructions with
12515 addiu $gp,$gp,%lo(_gp)
12519 s_cpsetup (int ignore ATTRIBUTE_UNUSED)
12521 expressionS ex_off;
12522 expressionS ex_sym;
12525 /* If we are not generating SVR4 PIC code, .cpsetup is ignored.
12526 We also need NewABI support. */
12527 if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
12533 reg1 = tc_get_register (0);
12534 SKIP_WHITESPACE ();
12535 if (*input_line_pointer != ',')
12537 as_bad (_("missing argument separator ',' for .cpsetup"));
12541 ++input_line_pointer;
12542 SKIP_WHITESPACE ();
12543 if (*input_line_pointer == '$')
12545 mips_cpreturn_register = tc_get_register (0);
12546 mips_cpreturn_offset = -1;
12550 mips_cpreturn_offset = get_absolute_expression ();
12551 mips_cpreturn_register = -1;
12553 SKIP_WHITESPACE ();
12554 if (*input_line_pointer != ',')
12556 as_bad (_("missing argument separator ',' for .cpsetup"));
12560 ++input_line_pointer;
12561 SKIP_WHITESPACE ();
12562 expression (&ex_sym);
12565 if (mips_cpreturn_register == -1)
12567 ex_off.X_op = O_constant;
12568 ex_off.X_add_symbol = NULL;
12569 ex_off.X_op_symbol = NULL;
12570 ex_off.X_add_number = mips_cpreturn_offset;
12572 macro_build (&ex_off, "sd", "t,o(b)", mips_gp_register,
12573 BFD_RELOC_LO16, SP);
12576 macro_build (NULL, "daddu", "d,v,t", mips_cpreturn_register,
12577 mips_gp_register, 0);
12579 if (mips_in_shared || HAVE_64BIT_SYMBOLS)
12581 macro_build (&ex_sym, "lui", "t,u", mips_gp_register,
12582 -1, BFD_RELOC_GPREL16, BFD_RELOC_MIPS_SUB,
12585 macro_build (&ex_sym, "addiu", "t,r,j", mips_gp_register,
12586 mips_gp_register, -1, BFD_RELOC_GPREL16,
12587 BFD_RELOC_MIPS_SUB, BFD_RELOC_LO16);
12589 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", mips_gp_register,
12590 mips_gp_register, reg1);
12596 ex.X_op = O_symbol;
12597 ex.X_add_symbol = symbol_find_or_make ("__gnu_local_gp");
12598 ex.X_op_symbol = NULL;
12599 ex.X_add_number = 0;
12601 /* In ELF, this symbol is implicitly an STT_OBJECT symbol. */
12602 symbol_get_bfdsym (ex.X_add_symbol)->flags |= BSF_OBJECT;
12604 macro_build_lui (&ex, mips_gp_register);
12605 macro_build (&ex, "addiu", "t,r,j", mips_gp_register,
12606 mips_gp_register, BFD_RELOC_LO16);
12611 demand_empty_rest_of_line ();
12615 s_cplocal (int ignore ATTRIBUTE_UNUSED)
12617 /* If we are not generating SVR4 PIC code, or if this is not NewABI code,
12618 .cplocal is ignored. */
12619 if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
12625 mips_gp_register = tc_get_register (0);
12626 demand_empty_rest_of_line ();
12629 /* Handle the .cprestore pseudo-op. This stores $gp into a given
12630 offset from $sp. The offset is remembered, and after making a PIC
12631 call $gp is restored from that location. */
12634 s_cprestore (int ignore ATTRIBUTE_UNUSED)
12638 /* If we are not generating SVR4 PIC code, or if this is NewABI code,
12639 .cprestore is ignored. */
12640 if (mips_pic != SVR4_PIC || HAVE_NEWABI)
12646 mips_cprestore_offset = get_absolute_expression ();
12647 mips_cprestore_valid = 1;
12649 ex.X_op = O_constant;
12650 ex.X_add_symbol = NULL;
12651 ex.X_op_symbol = NULL;
12652 ex.X_add_number = mips_cprestore_offset;
12655 macro_build_ldst_constoffset (&ex, ADDRESS_STORE_INSN, mips_gp_register,
12656 SP, HAVE_64BIT_ADDRESSES);
12659 demand_empty_rest_of_line ();
12662 /* Handle the .cpreturn pseudo-op defined for NewABI PIC code. If an offset
12663 was given in the preceding .cpsetup, it results in:
12664 ld $gp, offset($sp)
12666 If a register $reg2 was given there, it results in:
12667 daddu $gp, $reg2, $0
12670 s_cpreturn (int ignore ATTRIBUTE_UNUSED)
12674 /* If we are not generating SVR4 PIC code, .cpreturn is ignored.
12675 We also need NewABI support. */
12676 if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
12683 if (mips_cpreturn_register == -1)
12685 ex.X_op = O_constant;
12686 ex.X_add_symbol = NULL;
12687 ex.X_op_symbol = NULL;
12688 ex.X_add_number = mips_cpreturn_offset;
12690 macro_build (&ex, "ld", "t,o(b)", mips_gp_register, BFD_RELOC_LO16, SP);
12693 macro_build (NULL, "daddu", "d,v,t", mips_gp_register,
12694 mips_cpreturn_register, 0);
12697 demand_empty_rest_of_line ();
12700 /* Handle the .gpvalue pseudo-op. This is used when generating NewABI PIC
12701 code. It sets the offset to use in gp_rel relocations. */
12704 s_gpvalue (int ignore ATTRIBUTE_UNUSED)
12706 /* If we are not generating SVR4 PIC code, .gpvalue is ignored.
12707 We also need NewABI support. */
12708 if (mips_pic != SVR4_PIC || ! HAVE_NEWABI)
12714 mips_gprel_offset = get_absolute_expression ();
12716 demand_empty_rest_of_line ();
12719 /* Handle the .gpword pseudo-op. This is used when generating PIC
12720 code. It generates a 32 bit GP relative reloc. */
12723 s_gpword (int ignore ATTRIBUTE_UNUSED)
12729 /* When not generating PIC code, this is treated as .word. */
12730 if (mips_pic != SVR4_PIC)
12736 label = insn_labels != NULL ? insn_labels->label : NULL;
12737 mips_emit_delays ();
12739 mips_align (2, 0, label);
12740 mips_clear_insn_labels ();
12744 if (ex.X_op != O_symbol || ex.X_add_number != 0)
12746 as_bad (_("Unsupported use of .gpword"));
12747 ignore_rest_of_line ();
12751 md_number_to_chars (p, 0, 4);
12752 fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
12753 BFD_RELOC_GPREL32);
12755 demand_empty_rest_of_line ();
12759 s_gpdword (int ignore ATTRIBUTE_UNUSED)
12765 /* When not generating PIC code, this is treated as .dword. */
12766 if (mips_pic != SVR4_PIC)
12772 label = insn_labels != NULL ? insn_labels->label : NULL;
12773 mips_emit_delays ();
12775 mips_align (3, 0, label);
12776 mips_clear_insn_labels ();
12780 if (ex.X_op != O_symbol || ex.X_add_number != 0)
12782 as_bad (_("Unsupported use of .gpdword"));
12783 ignore_rest_of_line ();
12787 md_number_to_chars (p, 0, 8);
12788 fix_new_exp (frag_now, p - frag_now->fr_literal, 4, &ex, FALSE,
12789 BFD_RELOC_GPREL32)->fx_tcbit = 1;
12791 /* GPREL32 composed with 64 gives a 64-bit GP offset. */
12792 fix_new (frag_now, p - frag_now->fr_literal, 8, NULL, 0,
12793 FALSE, BFD_RELOC_64)->fx_tcbit = 1;
12795 demand_empty_rest_of_line ();
12798 /* Handle the .cpadd pseudo-op. This is used when dealing with switch
12799 tables in SVR4 PIC code. */
12802 s_cpadd (int ignore ATTRIBUTE_UNUSED)
12806 /* This is ignored when not generating SVR4 PIC code. */
12807 if (mips_pic != SVR4_PIC)
12813 /* Add $gp to the register named as an argument. */
12815 reg = tc_get_register (0);
12816 macro_build (NULL, ADDRESS_ADD_INSN, "d,v,t", reg, reg, mips_gp_register);
12819 demand_empty_rest_of_line ();
12822 /* Handle the .insn pseudo-op. This marks instruction labels in
12823 mips16 mode. This permits the linker to handle them specially,
12824 such as generating jalx instructions when needed. We also make
12825 them odd for the duration of the assembly, in order to generate the
12826 right sort of code. We will make them even in the adjust_symtab
12827 routine, while leaving them marked. This is convenient for the
12828 debugger and the disassembler. The linker knows to make them odd
12832 s_insn (int ignore ATTRIBUTE_UNUSED)
12834 mips16_mark_labels ();
12836 demand_empty_rest_of_line ();
12839 /* Handle a .stabn directive. We need these in order to mark a label
12840 as being a mips16 text label correctly. Sometimes the compiler
12841 will emit a label, followed by a .stabn, and then switch sections.
12842 If the label and .stabn are in mips16 mode, then the label is
12843 really a mips16 text label. */
12846 s_mips_stab (int type)
12849 mips16_mark_labels ();
12854 /* Handle the .weakext pseudo-op as defined in Kane and Heinrich.
12858 s_mips_weakext (int ignore ATTRIBUTE_UNUSED)
12865 name = input_line_pointer;
12866 c = get_symbol_end ();
12867 symbolP = symbol_find_or_make (name);
12868 S_SET_WEAK (symbolP);
12869 *input_line_pointer = c;
12871 SKIP_WHITESPACE ();
12873 if (! is_end_of_line[(unsigned char) *input_line_pointer])
12875 if (S_IS_DEFINED (symbolP))
12877 as_bad ("ignoring attempt to redefine symbol %s",
12878 S_GET_NAME (symbolP));
12879 ignore_rest_of_line ();
12883 if (*input_line_pointer == ',')
12885 ++input_line_pointer;
12886 SKIP_WHITESPACE ();
12890 if (exp.X_op != O_symbol)
12892 as_bad ("bad .weakext directive");
12893 ignore_rest_of_line ();
12896 symbol_set_value_expression (symbolP, &exp);
12899 demand_empty_rest_of_line ();
12902 /* Parse a register string into a number. Called from the ECOFF code
12903 to parse .frame. The argument is non-zero if this is the frame
12904 register, so that we can record it in mips_frame_reg. */
12907 tc_get_register (int frame)
12911 SKIP_WHITESPACE ();
12912 if (! reg_lookup (&input_line_pointer, RWARN | RTYPE_NUM | RTYPE_GP, ®))
12916 mips_frame_reg = reg != 0 ? reg : SP;
12917 mips_frame_reg_valid = 1;
12918 mips_cprestore_valid = 0;
12924 md_section_align (asection *seg, valueT addr)
12926 int align = bfd_get_section_alignment (stdoutput, seg);
12929 /* We don't need to align ELF sections to the full alignment.
12930 However, Irix 5 may prefer that we align them at least to a 16
12931 byte boundary. We don't bother to align the sections if we are
12932 targeted for an embedded system. */
12933 if (strcmp (TARGET_OS, "elf") == 0)
12939 return ((addr + (1 << align) - 1) & (-1 << align));
12942 /* Utility routine, called from above as well. If called while the
12943 input file is still being read, it's only an approximation. (For
12944 example, a symbol may later become defined which appeared to be
12945 undefined earlier.) */
12948 nopic_need_relax (symbolS *sym, int before_relaxing)
12953 if (g_switch_value > 0)
12955 const char *symname;
12958 /* Find out whether this symbol can be referenced off the $gp
12959 register. It can be if it is smaller than the -G size or if
12960 it is in the .sdata or .sbss section. Certain symbols can
12961 not be referenced off the $gp, although it appears as though
12963 symname = S_GET_NAME (sym);
12964 if (symname != (const char *) NULL
12965 && (strcmp (symname, "eprol") == 0
12966 || strcmp (symname, "etext") == 0
12967 || strcmp (symname, "_gp") == 0
12968 || strcmp (symname, "edata") == 0
12969 || strcmp (symname, "_fbss") == 0
12970 || strcmp (symname, "_fdata") == 0
12971 || strcmp (symname, "_ftext") == 0
12972 || strcmp (symname, "end") == 0
12973 || strcmp (symname, "_gp_disp") == 0))
12975 else if ((! S_IS_DEFINED (sym) || S_IS_COMMON (sym))
12977 #ifndef NO_ECOFF_DEBUGGING
12978 || (symbol_get_obj (sym)->ecoff_extern_size != 0
12979 && (symbol_get_obj (sym)->ecoff_extern_size
12980 <= g_switch_value))
12982 /* We must defer this decision until after the whole
12983 file has been read, since there might be a .extern
12984 after the first use of this symbol. */
12985 || (before_relaxing
12986 #ifndef NO_ECOFF_DEBUGGING
12987 && symbol_get_obj (sym)->ecoff_extern_size == 0
12989 && S_GET_VALUE (sym) == 0)
12990 || (S_GET_VALUE (sym) != 0
12991 && S_GET_VALUE (sym) <= g_switch_value)))
12995 const char *segname;
12997 segname = segment_name (S_GET_SEGMENT (sym));
12998 assert (strcmp (segname, ".lit8") != 0
12999 && strcmp (segname, ".lit4") != 0);
13000 change = (strcmp (segname, ".sdata") != 0
13001 && strcmp (segname, ".sbss") != 0
13002 && strncmp (segname, ".sdata.", 7) != 0
13003 && strncmp (segname, ".gnu.linkonce.s.", 16) != 0);
13008 /* We are not optimizing for the $gp register. */
13013 /* Return true if the given symbol should be considered local for SVR4 PIC. */
13016 pic_need_relax (symbolS *sym, asection *segtype)
13019 bfd_boolean linkonce;
13021 /* Handle the case of a symbol equated to another symbol. */
13022 while (symbol_equated_reloc_p (sym))
13026 /* It's possible to get a loop here in a badly written
13028 n = symbol_get_value_expression (sym)->X_add_symbol;
13034 symsec = S_GET_SEGMENT (sym);
13036 /* duplicate the test for LINK_ONCE sections as in adjust_reloc_syms */
13038 if (symsec != segtype && ! S_IS_LOCAL (sym))
13040 if ((bfd_get_section_flags (stdoutput, symsec) & SEC_LINK_ONCE)
13044 /* The GNU toolchain uses an extension for ELF: a section
13045 beginning with the magic string .gnu.linkonce is a linkonce
13047 if (strncmp (segment_name (symsec), ".gnu.linkonce",
13048 sizeof ".gnu.linkonce" - 1) == 0)
13052 /* This must duplicate the test in adjust_reloc_syms. */
13053 return (symsec != &bfd_und_section
13054 && symsec != &bfd_abs_section
13055 && ! bfd_is_com_section (symsec)
13058 /* A global or weak symbol is treated as external. */
13059 && (OUTPUT_FLAVOR != bfd_target_elf_flavour
13060 || (! S_IS_WEAK (sym) && ! S_IS_EXTERNAL (sym)))
13066 /* Given a mips16 variant frag FRAGP, return non-zero if it needs an
13067 extended opcode. SEC is the section the frag is in. */
13070 mips16_extended_frag (fragS *fragp, asection *sec, long stretch)
13073 register const struct mips16_immed_operand *op;
13075 int mintiny, maxtiny;
13079 if (RELAX_MIPS16_USER_SMALL (fragp->fr_subtype))
13081 if (RELAX_MIPS16_USER_EXT (fragp->fr_subtype))
13084 type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
13085 op = mips16_immed_operands;
13086 while (op->type != type)
13089 assert (op < mips16_immed_operands + MIPS16_NUM_IMMED);
13094 if (type == '<' || type == '>' || type == '[' || type == ']')
13097 maxtiny = 1 << op->nbits;
13102 maxtiny = (1 << op->nbits) - 1;
13107 mintiny = - (1 << (op->nbits - 1));
13108 maxtiny = (1 << (op->nbits - 1)) - 1;
13111 sym_frag = symbol_get_frag (fragp->fr_symbol);
13112 val = S_GET_VALUE (fragp->fr_symbol);
13113 symsec = S_GET_SEGMENT (fragp->fr_symbol);
13119 /* We won't have the section when we are called from
13120 mips_relax_frag. However, we will always have been called
13121 from md_estimate_size_before_relax first. If this is a
13122 branch to a different section, we mark it as such. If SEC is
13123 NULL, and the frag is not marked, then it must be a branch to
13124 the same section. */
13127 if (RELAX_MIPS16_LONG_BRANCH (fragp->fr_subtype))
13132 /* Must have been called from md_estimate_size_before_relax. */
13135 fragp->fr_subtype =
13136 RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
13138 /* FIXME: We should support this, and let the linker
13139 catch branches and loads that are out of range. */
13140 as_bad_where (fragp->fr_file, fragp->fr_line,
13141 _("unsupported PC relative reference to different section"));
13145 if (fragp != sym_frag && sym_frag->fr_address == 0)
13146 /* Assume non-extended on the first relaxation pass.
13147 The address we have calculated will be bogus if this is
13148 a forward branch to another frag, as the forward frag
13149 will have fr_address == 0. */
13153 /* In this case, we know for sure that the symbol fragment is in
13154 the same section. If the relax_marker of the symbol fragment
13155 differs from the relax_marker of this fragment, we have not
13156 yet adjusted the symbol fragment fr_address. We want to add
13157 in STRETCH in order to get a better estimate of the address.
13158 This particularly matters because of the shift bits. */
13160 && sym_frag->relax_marker != fragp->relax_marker)
13164 /* Adjust stretch for any alignment frag. Note that if have
13165 been expanding the earlier code, the symbol may be
13166 defined in what appears to be an earlier frag. FIXME:
13167 This doesn't handle the fr_subtype field, which specifies
13168 a maximum number of bytes to skip when doing an
13170 for (f = fragp; f != NULL && f != sym_frag; f = f->fr_next)
13172 if (f->fr_type == rs_align || f->fr_type == rs_align_code)
13175 stretch = - ((- stretch)
13176 & ~ ((1 << (int) f->fr_offset) - 1));
13178 stretch &= ~ ((1 << (int) f->fr_offset) - 1);
13187 addr = fragp->fr_address + fragp->fr_fix;
13189 /* The base address rules are complicated. The base address of
13190 a branch is the following instruction. The base address of a
13191 PC relative load or add is the instruction itself, but if it
13192 is in a delay slot (in which case it can not be extended) use
13193 the address of the instruction whose delay slot it is in. */
13194 if (type == 'p' || type == 'q')
13198 /* If we are currently assuming that this frag should be
13199 extended, then, the current address is two bytes
13201 if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
13204 /* Ignore the low bit in the target, since it will be set
13205 for a text label. */
13206 if ((val & 1) != 0)
13209 else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
13211 else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
13214 val -= addr & ~ ((1 << op->shift) - 1);
13216 /* Branch offsets have an implicit 0 in the lowest bit. */
13217 if (type == 'p' || type == 'q')
13220 /* If any of the shifted bits are set, we must use an extended
13221 opcode. If the address depends on the size of this
13222 instruction, this can lead to a loop, so we arrange to always
13223 use an extended opcode. We only check this when we are in
13224 the main relaxation loop, when SEC is NULL. */
13225 if ((val & ((1 << op->shift) - 1)) != 0 && sec == NULL)
13227 fragp->fr_subtype =
13228 RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
13232 /* If we are about to mark a frag as extended because the value
13233 is precisely maxtiny + 1, then there is a chance of an
13234 infinite loop as in the following code:
13239 In this case when the la is extended, foo is 0x3fc bytes
13240 away, so the la can be shrunk, but then foo is 0x400 away, so
13241 the la must be extended. To avoid this loop, we mark the
13242 frag as extended if it was small, and is about to become
13243 extended with a value of maxtiny + 1. */
13244 if (val == ((maxtiny + 1) << op->shift)
13245 && ! RELAX_MIPS16_EXTENDED (fragp->fr_subtype)
13248 fragp->fr_subtype =
13249 RELAX_MIPS16_MARK_LONG_BRANCH (fragp->fr_subtype);
13253 else if (symsec != absolute_section && sec != NULL)
13254 as_bad_where (fragp->fr_file, fragp->fr_line, _("unsupported relocation"));
13256 if ((val & ((1 << op->shift) - 1)) != 0
13257 || val < (mintiny << op->shift)
13258 || val > (maxtiny << op->shift))
13264 /* Compute the length of a branch sequence, and adjust the
13265 RELAX_BRANCH_TOOFAR bit accordingly. If FRAGP is NULL, the
13266 worst-case length is computed, with UPDATE being used to indicate
13267 whether an unconditional (-1), branch-likely (+1) or regular (0)
13268 branch is to be computed. */
13270 relaxed_branch_length (fragS *fragp, asection *sec, int update)
13272 bfd_boolean toofar;
13276 && S_IS_DEFINED (fragp->fr_symbol)
13277 && sec == S_GET_SEGMENT (fragp->fr_symbol))
13282 val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset;
13284 addr = fragp->fr_address + fragp->fr_fix + 4;
13288 toofar = val < - (0x8000 << 2) || val >= (0x8000 << 2);
13291 /* If the symbol is not defined or it's in a different segment,
13292 assume the user knows what's going on and emit a short
13298 if (fragp && update && toofar != RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
13300 = RELAX_BRANCH_ENCODE (RELAX_BRANCH_UNCOND (fragp->fr_subtype),
13301 RELAX_BRANCH_LIKELY (fragp->fr_subtype),
13302 RELAX_BRANCH_LINK (fragp->fr_subtype),
13308 if (fragp ? RELAX_BRANCH_LIKELY (fragp->fr_subtype) : (update > 0))
13311 if (mips_pic != NO_PIC)
13313 /* Additional space for PIC loading of target address. */
13315 if (mips_opts.isa == ISA_MIPS1)
13316 /* Additional space for $at-stabilizing nop. */
13320 /* If branch is conditional. */
13321 if (fragp ? !RELAX_BRANCH_UNCOND (fragp->fr_subtype) : (update >= 0))
13328 /* Estimate the size of a frag before relaxing. Unless this is the
13329 mips16, we are not really relaxing here, and the final size is
13330 encoded in the subtype information. For the mips16, we have to
13331 decide whether we are using an extended opcode or not. */
13334 md_estimate_size_before_relax (fragS *fragp, asection *segtype)
13338 if (RELAX_BRANCH_P (fragp->fr_subtype))
13341 fragp->fr_var = relaxed_branch_length (fragp, segtype, FALSE);
13343 return fragp->fr_var;
13346 if (RELAX_MIPS16_P (fragp->fr_subtype))
13347 /* We don't want to modify the EXTENDED bit here; it might get us
13348 into infinite loops. We change it only in mips_relax_frag(). */
13349 return (RELAX_MIPS16_EXTENDED (fragp->fr_subtype) ? 4 : 2);
13351 if (mips_pic == NO_PIC)
13352 change = nopic_need_relax (fragp->fr_symbol, 0);
13353 else if (mips_pic == SVR4_PIC)
13354 change = pic_need_relax (fragp->fr_symbol, segtype);
13355 else if (mips_pic == VXWORKS_PIC)
13356 /* For vxworks, GOT16 relocations never have a corresponding LO16. */
13363 fragp->fr_subtype |= RELAX_USE_SECOND;
13364 return -RELAX_FIRST (fragp->fr_subtype);
13367 return -RELAX_SECOND (fragp->fr_subtype);
13370 /* This is called to see whether a reloc against a defined symbol
13371 should be converted into a reloc against a section. */
13374 mips_fix_adjustable (fixS *fixp)
13376 /* Don't adjust MIPS16 jump relocations, so we don't have to worry
13377 about the format of the offset in the .o file. */
13378 if (fixp->fx_r_type == BFD_RELOC_MIPS16_JMP)
13381 if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
13382 || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
13385 if (fixp->fx_addsy == NULL)
13388 /* If symbol SYM is in a mergeable section, relocations of the form
13389 SYM + 0 can usually be made section-relative. The mergeable data
13390 is then identified by the section offset rather than by the symbol.
13392 However, if we're generating REL LO16 relocations, the offset is split
13393 between the LO16 and parterning high part relocation. The linker will
13394 need to recalculate the complete offset in order to correctly identify
13397 The linker has traditionally not looked for the parterning high part
13398 relocation, and has thus allowed orphaned R_MIPS_LO16 relocations to be
13399 placed anywhere. Rather than break backwards compatibility by changing
13400 this, it seems better not to force the issue, and instead keep the
13401 original symbol. This will work with either linker behavior. */
13402 if ((fixp->fx_r_type == BFD_RELOC_LO16
13403 || fixp->fx_r_type == BFD_RELOC_MIPS16_LO16
13404 || reloc_needs_lo_p (fixp->fx_r_type))
13405 && HAVE_IN_PLACE_ADDENDS
13406 && (S_GET_SEGMENT (fixp->fx_addsy)->flags & SEC_MERGE) != 0)
13410 /* Don't adjust relocations against mips16 symbols, so that the linker
13411 can find them if it needs to set up a stub. */
13412 if (OUTPUT_FLAVOR == bfd_target_elf_flavour
13413 && S_GET_OTHER (fixp->fx_addsy) == STO_MIPS16
13414 && fixp->fx_subsy == NULL)
13421 /* Translate internal representation of relocation info to BFD target
13425 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
13427 static arelent *retval[4];
13429 bfd_reloc_code_real_type code;
13431 memset (retval, 0, sizeof(retval));
13432 reloc = retval[0] = (arelent *) xcalloc (1, sizeof (arelent));
13433 reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
13434 *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
13435 reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
13437 if (fixp->fx_pcrel)
13439 assert (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2);
13441 /* At this point, fx_addnumber is "symbol offset - pcrel address".
13442 Relocations want only the symbol offset. */
13443 reloc->addend = fixp->fx_addnumber + reloc->address;
13444 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
13446 /* A gruesome hack which is a result of the gruesome gas
13447 reloc handling. What's worse, for COFF (as opposed to
13448 ECOFF), we might need yet another copy of reloc->address.
13449 See bfd_install_relocation. */
13450 reloc->addend += reloc->address;
13454 reloc->addend = fixp->fx_addnumber;
13456 /* Since the old MIPS ELF ABI uses Rel instead of Rela, encode the vtable
13457 entry to be used in the relocation's section offset. */
13458 if (! HAVE_NEWABI && fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
13460 reloc->address = reloc->addend;
13464 code = fixp->fx_r_type;
13466 reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
13467 if (reloc->howto == NULL)
13469 as_bad_where (fixp->fx_file, fixp->fx_line,
13470 _("Can not represent %s relocation in this object file format"),
13471 bfd_get_reloc_code_name (code));
13478 /* Relax a machine dependent frag. This returns the amount by which
13479 the current size of the frag should change. */
13482 mips_relax_frag (asection *sec, fragS *fragp, long stretch)
13484 if (RELAX_BRANCH_P (fragp->fr_subtype))
13486 offsetT old_var = fragp->fr_var;
13488 fragp->fr_var = relaxed_branch_length (fragp, sec, TRUE);
13490 return fragp->fr_var - old_var;
13493 if (! RELAX_MIPS16_P (fragp->fr_subtype))
13496 if (mips16_extended_frag (fragp, NULL, stretch))
13498 if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
13500 fragp->fr_subtype = RELAX_MIPS16_MARK_EXTENDED (fragp->fr_subtype);
13505 if (! RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
13507 fragp->fr_subtype = RELAX_MIPS16_CLEAR_EXTENDED (fragp->fr_subtype);
13514 /* Convert a machine dependent frag. */
13517 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
13519 if (RELAX_BRANCH_P (fragp->fr_subtype))
13522 unsigned long insn;
13526 buf = (bfd_byte *)fragp->fr_literal + fragp->fr_fix;
13528 if (target_big_endian)
13529 insn = bfd_getb32 (buf);
13531 insn = bfd_getl32 (buf);
13533 if (!RELAX_BRANCH_TOOFAR (fragp->fr_subtype))
13535 /* We generate a fixup instead of applying it right now
13536 because, if there are linker relaxations, we're going to
13537 need the relocations. */
13538 exp.X_op = O_symbol;
13539 exp.X_add_symbol = fragp->fr_symbol;
13540 exp.X_add_number = fragp->fr_offset;
13542 fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
13543 4, &exp, 1, BFD_RELOC_16_PCREL_S2);
13544 fixp->fx_file = fragp->fr_file;
13545 fixp->fx_line = fragp->fr_line;
13547 md_number_to_chars ((char *) buf, insn, 4);
13554 as_warn_where (fragp->fr_file, fragp->fr_line,
13555 _("relaxed out-of-range branch into a jump"));
13557 if (RELAX_BRANCH_UNCOND (fragp->fr_subtype))
13560 if (!RELAX_BRANCH_LIKELY (fragp->fr_subtype))
13562 /* Reverse the branch. */
13563 switch ((insn >> 28) & 0xf)
13566 /* bc[0-3][tf]l? and bc1any[24][ft] instructions can
13567 have the condition reversed by tweaking a single
13568 bit, and their opcodes all have 0x4???????. */
13569 assert ((insn & 0xf1000000) == 0x41000000);
13570 insn ^= 0x00010000;
13574 /* bltz 0x04000000 bgez 0x04010000
13575 bltzal 0x04100000 bgezal 0x04110000 */
13576 assert ((insn & 0xfc0e0000) == 0x04000000);
13577 insn ^= 0x00010000;
13581 /* beq 0x10000000 bne 0x14000000
13582 blez 0x18000000 bgtz 0x1c000000 */
13583 insn ^= 0x04000000;
13591 if (RELAX_BRANCH_LINK (fragp->fr_subtype))
13593 /* Clear the and-link bit. */
13594 assert ((insn & 0xfc1c0000) == 0x04100000);
13596 /* bltzal 0x04100000 bgezal 0x04110000
13597 bltzall 0x04120000 bgezall 0x04130000 */
13598 insn &= ~0x00100000;
13601 /* Branch over the branch (if the branch was likely) or the
13602 full jump (not likely case). Compute the offset from the
13603 current instruction to branch to. */
13604 if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
13608 /* How many bytes in instructions we've already emitted? */
13609 i = buf - (bfd_byte *)fragp->fr_literal - fragp->fr_fix;
13610 /* How many bytes in instructions from here to the end? */
13611 i = fragp->fr_var - i;
13613 /* Convert to instruction count. */
13615 /* Branch counts from the next instruction. */
13618 /* Branch over the jump. */
13619 md_number_to_chars ((char *) buf, insn, 4);
13623 md_number_to_chars ((char *) buf, 0, 4);
13626 if (RELAX_BRANCH_LIKELY (fragp->fr_subtype))
13628 /* beql $0, $0, 2f */
13630 /* Compute the PC offset from the current instruction to
13631 the end of the variable frag. */
13632 /* How many bytes in instructions we've already emitted? */
13633 i = buf - (bfd_byte *)fragp->fr_literal - fragp->fr_fix;
13634 /* How many bytes in instructions from here to the end? */
13635 i = fragp->fr_var - i;
13636 /* Convert to instruction count. */
13638 /* Don't decrement i, because we want to branch over the
13642 md_number_to_chars ((char *) buf, insn, 4);
13645 md_number_to_chars ((char *) buf, 0, 4);
13650 if (mips_pic == NO_PIC)
13653 insn = (RELAX_BRANCH_LINK (fragp->fr_subtype)
13654 ? 0x0c000000 : 0x08000000);
13655 exp.X_op = O_symbol;
13656 exp.X_add_symbol = fragp->fr_symbol;
13657 exp.X_add_number = fragp->fr_offset;
13659 fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
13660 4, &exp, 0, BFD_RELOC_MIPS_JMP);
13661 fixp->fx_file = fragp->fr_file;
13662 fixp->fx_line = fragp->fr_line;
13664 md_number_to_chars ((char *) buf, insn, 4);
13669 /* lw/ld $at, <sym>($gp) R_MIPS_GOT16 */
13670 insn = HAVE_64BIT_ADDRESSES ? 0xdf810000 : 0x8f810000;
13671 exp.X_op = O_symbol;
13672 exp.X_add_symbol = fragp->fr_symbol;
13673 exp.X_add_number = fragp->fr_offset;
13675 if (fragp->fr_offset)
13677 exp.X_add_symbol = make_expr_symbol (&exp);
13678 exp.X_add_number = 0;
13681 fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
13682 4, &exp, 0, BFD_RELOC_MIPS_GOT16);
13683 fixp->fx_file = fragp->fr_file;
13684 fixp->fx_line = fragp->fr_line;
13686 md_number_to_chars ((char *) buf, insn, 4);
13689 if (mips_opts.isa == ISA_MIPS1)
13692 md_number_to_chars ((char *) buf, 0, 4);
13696 /* d/addiu $at, $at, <sym> R_MIPS_LO16 */
13697 insn = HAVE_64BIT_ADDRESSES ? 0x64210000 : 0x24210000;
13699 fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
13700 4, &exp, 0, BFD_RELOC_LO16);
13701 fixp->fx_file = fragp->fr_file;
13702 fixp->fx_line = fragp->fr_line;
13704 md_number_to_chars ((char *) buf, insn, 4);
13708 if (RELAX_BRANCH_LINK (fragp->fr_subtype))
13713 md_number_to_chars ((char *) buf, insn, 4);
13718 assert (buf == (bfd_byte *)fragp->fr_literal
13719 + fragp->fr_fix + fragp->fr_var);
13721 fragp->fr_fix += fragp->fr_var;
13726 if (RELAX_MIPS16_P (fragp->fr_subtype))
13729 register const struct mips16_immed_operand *op;
13730 bfd_boolean small, ext;
13733 unsigned long insn;
13734 bfd_boolean use_extend;
13735 unsigned short extend;
13737 type = RELAX_MIPS16_TYPE (fragp->fr_subtype);
13738 op = mips16_immed_operands;
13739 while (op->type != type)
13742 if (RELAX_MIPS16_EXTENDED (fragp->fr_subtype))
13753 resolve_symbol_value (fragp->fr_symbol);
13754 val = S_GET_VALUE (fragp->fr_symbol);
13759 addr = fragp->fr_address + fragp->fr_fix;
13761 /* The rules for the base address of a PC relative reloc are
13762 complicated; see mips16_extended_frag. */
13763 if (type == 'p' || type == 'q')
13768 /* Ignore the low bit in the target, since it will be
13769 set for a text label. */
13770 if ((val & 1) != 0)
13773 else if (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype))
13775 else if (RELAX_MIPS16_DSLOT (fragp->fr_subtype))
13778 addr &= ~ (addressT) ((1 << op->shift) - 1);
13781 /* Make sure the section winds up with the alignment we have
13784 record_alignment (asec, op->shift);
13788 && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype)
13789 || RELAX_MIPS16_DSLOT (fragp->fr_subtype)))
13790 as_warn_where (fragp->fr_file, fragp->fr_line,
13791 _("extended instruction in delay slot"));
13793 buf = (bfd_byte *) (fragp->fr_literal + fragp->fr_fix);
13795 if (target_big_endian)
13796 insn = bfd_getb16 (buf);
13798 insn = bfd_getl16 (buf);
13800 mips16_immed (fragp->fr_file, fragp->fr_line, type, val,
13801 RELAX_MIPS16_USER_EXT (fragp->fr_subtype),
13802 small, ext, &insn, &use_extend, &extend);
13806 md_number_to_chars ((char *) buf, 0xf000 | extend, 2);
13807 fragp->fr_fix += 2;
13811 md_number_to_chars ((char *) buf, insn, 2);
13812 fragp->fr_fix += 2;
13820 first = RELAX_FIRST (fragp->fr_subtype);
13821 second = RELAX_SECOND (fragp->fr_subtype);
13822 fixp = (fixS *) fragp->fr_opcode;
13824 /* Possibly emit a warning if we've chosen the longer option. */
13825 if (((fragp->fr_subtype & RELAX_USE_SECOND) != 0)
13826 == ((fragp->fr_subtype & RELAX_SECOND_LONGER) != 0))
13828 const char *msg = macro_warning (fragp->fr_subtype);
13830 as_warn_where (fragp->fr_file, fragp->fr_line, msg);
13833 /* Go through all the fixups for the first sequence. Disable them
13834 (by marking them as done) if we're going to use the second
13835 sequence instead. */
13837 && fixp->fx_frag == fragp
13838 && fixp->fx_where < fragp->fr_fix - second)
13840 if (fragp->fr_subtype & RELAX_USE_SECOND)
13842 fixp = fixp->fx_next;
13845 /* Go through the fixups for the second sequence. Disable them if
13846 we're going to use the first sequence, otherwise adjust their
13847 addresses to account for the relaxation. */
13848 while (fixp && fixp->fx_frag == fragp)
13850 if (fragp->fr_subtype & RELAX_USE_SECOND)
13851 fixp->fx_where -= first;
13854 fixp = fixp->fx_next;
13857 /* Now modify the frag contents. */
13858 if (fragp->fr_subtype & RELAX_USE_SECOND)
13862 start = fragp->fr_literal + fragp->fr_fix - first - second;
13863 memmove (start, start + first, second);
13864 fragp->fr_fix -= first;
13867 fragp->fr_fix -= second;
13873 /* This function is called after the relocs have been generated.
13874 We've been storing mips16 text labels as odd. Here we convert them
13875 back to even for the convenience of the debugger. */
13878 mips_frob_file_after_relocs (void)
13881 unsigned int count, i;
13883 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
13886 syms = bfd_get_outsymbols (stdoutput);
13887 count = bfd_get_symcount (stdoutput);
13888 for (i = 0; i < count; i++, syms++)
13890 if (elf_symbol (*syms)->internal_elf_sym.st_other == STO_MIPS16
13891 && ((*syms)->value & 1) != 0)
13893 (*syms)->value &= ~1;
13894 /* If the symbol has an odd size, it was probably computed
13895 incorrectly, so adjust that as well. */
13896 if ((elf_symbol (*syms)->internal_elf_sym.st_size & 1) != 0)
13897 ++elf_symbol (*syms)->internal_elf_sym.st_size;
13904 /* This function is called whenever a label is defined. It is used
13905 when handling branch delays; if a branch has a label, we assume we
13906 can not move it. */
13909 mips_define_label (symbolS *sym)
13911 struct insn_label_list *l;
13913 if (free_insn_labels == NULL)
13914 l = (struct insn_label_list *) xmalloc (sizeof *l);
13917 l = free_insn_labels;
13918 free_insn_labels = l->next;
13922 l->next = insn_labels;
13926 dwarf2_emit_label (sym);
13930 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13932 /* Some special processing for a MIPS ELF file. */
13935 mips_elf_final_processing (void)
13937 /* Write out the register information. */
13938 if (mips_abi != N64_ABI)
13942 s.ri_gprmask = mips_gprmask;
13943 s.ri_cprmask[0] = mips_cprmask[0];
13944 s.ri_cprmask[1] = mips_cprmask[1];
13945 s.ri_cprmask[2] = mips_cprmask[2];
13946 s.ri_cprmask[3] = mips_cprmask[3];
13947 /* The gp_value field is set by the MIPS ELF backend. */
13949 bfd_mips_elf32_swap_reginfo_out (stdoutput, &s,
13950 ((Elf32_External_RegInfo *)
13951 mips_regmask_frag));
13955 Elf64_Internal_RegInfo s;
13957 s.ri_gprmask = mips_gprmask;
13959 s.ri_cprmask[0] = mips_cprmask[0];
13960 s.ri_cprmask[1] = mips_cprmask[1];
13961 s.ri_cprmask[2] = mips_cprmask[2];
13962 s.ri_cprmask[3] = mips_cprmask[3];
13963 /* The gp_value field is set by the MIPS ELF backend. */
13965 bfd_mips_elf64_swap_reginfo_out (stdoutput, &s,
13966 ((Elf64_External_RegInfo *)
13967 mips_regmask_frag));
13970 /* Set the MIPS ELF flag bits. FIXME: There should probably be some
13971 sort of BFD interface for this. */
13972 if (mips_any_noreorder)
13973 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_NOREORDER;
13974 if (mips_pic != NO_PIC)
13976 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_PIC;
13977 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
13980 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_CPIC;
13982 /* Set MIPS ELF flags for ASEs. */
13983 /* We may need to define a new flag for DSP ASE, and set this flag when
13984 file_ase_dsp is true. */
13985 /* We may need to define a new flag for MT ASE, and set this flag when
13986 file_ase_mt is true. */
13987 if (file_ase_mips16)
13988 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_M16;
13989 #if 0 /* XXX FIXME */
13990 if (file_ase_mips3d)
13991 elf_elfheader (stdoutput)->e_flags |= ???;
13994 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MDMX;
13996 /* Set the MIPS ELF ABI flags. */
13997 if (mips_abi == O32_ABI && USE_E_MIPS_ABI_O32)
13998 elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O32;
13999 else if (mips_abi == O64_ABI)
14000 elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O64;
14001 else if (mips_abi == EABI_ABI)
14003 if (!file_mips_gp32)
14004 elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI64;
14006 elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI32;
14008 else if (mips_abi == N32_ABI)
14009 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ABI2;
14011 /* Nothing to do for N64_ABI. */
14013 if (mips_32bitmode)
14014 elf_elfheader (stdoutput)->e_flags |= EF_MIPS_32BITMODE;
14017 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */
14019 typedef struct proc {
14021 symbolS *func_end_sym;
14022 unsigned long reg_mask;
14023 unsigned long reg_offset;
14024 unsigned long fpreg_mask;
14025 unsigned long fpreg_offset;
14026 unsigned long frame_offset;
14027 unsigned long frame_reg;
14028 unsigned long pc_reg;
14031 static procS cur_proc;
14032 static procS *cur_proc_ptr;
14033 static int numprocs;
14035 /* Fill in an rs_align_code fragment. */
14038 mips_handle_align (fragS *fragp)
14040 if (fragp->fr_type != rs_align_code)
14043 if (mips_opts.mips16)
14045 static const unsigned char be_nop[] = { 0x65, 0x00 };
14046 static const unsigned char le_nop[] = { 0x00, 0x65 };
14051 bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
14052 p = fragp->fr_literal + fragp->fr_fix;
14060 memcpy (p, (target_big_endian ? be_nop : le_nop), 2);
14064 /* For mips32, a nop is a zero, which we trivially get by doing nothing. */
14068 md_obj_begin (void)
14075 /* check for premature end, nesting errors, etc */
14077 as_warn (_("missing .end at end of assembly"));
14086 if (*input_line_pointer == '-')
14088 ++input_line_pointer;
14091 if (!ISDIGIT (*input_line_pointer))
14092 as_bad (_("expected simple number"));
14093 if (input_line_pointer[0] == '0')
14095 if (input_line_pointer[1] == 'x')
14097 input_line_pointer += 2;
14098 while (ISXDIGIT (*input_line_pointer))
14101 val |= hex_value (*input_line_pointer++);
14103 return negative ? -val : val;
14107 ++input_line_pointer;
14108 while (ISDIGIT (*input_line_pointer))
14111 val |= *input_line_pointer++ - '0';
14113 return negative ? -val : val;
14116 if (!ISDIGIT (*input_line_pointer))
14118 printf (_(" *input_line_pointer == '%c' 0x%02x\n"),
14119 *input_line_pointer, *input_line_pointer);
14120 as_warn (_("invalid number"));
14123 while (ISDIGIT (*input_line_pointer))
14126 val += *input_line_pointer++ - '0';
14128 return negative ? -val : val;
14131 /* The .file directive; just like the usual .file directive, but there
14132 is an initial number which is the ECOFF file index. In the non-ECOFF
14133 case .file implies DWARF-2. */
14136 s_mips_file (int x ATTRIBUTE_UNUSED)
14138 static int first_file_directive = 0;
14140 if (ECOFF_DEBUGGING)
14149 filename = dwarf2_directive_file (0);
14151 /* Versions of GCC up to 3.1 start files with a ".file"
14152 directive even for stabs output. Make sure that this
14153 ".file" is handled. Note that you need a version of GCC
14154 after 3.1 in order to support DWARF-2 on MIPS. */
14155 if (filename != NULL && ! first_file_directive)
14157 (void) new_logical_line (filename, -1);
14158 s_app_file_string (filename, 0);
14160 first_file_directive = 1;
14164 /* The .loc directive, implying DWARF-2. */
14167 s_mips_loc (int x ATTRIBUTE_UNUSED)
14169 if (!ECOFF_DEBUGGING)
14170 dwarf2_directive_loc (0);
14173 /* The .end directive. */
14176 s_mips_end (int x ATTRIBUTE_UNUSED)
14180 /* Following functions need their own .frame and .cprestore directives. */
14181 mips_frame_reg_valid = 0;
14182 mips_cprestore_valid = 0;
14184 if (!is_end_of_line[(unsigned char) *input_line_pointer])
14187 demand_empty_rest_of_line ();
14192 if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
14193 as_warn (_(".end not in text section"));
14197 as_warn (_(".end directive without a preceding .ent directive."));
14198 demand_empty_rest_of_line ();
14204 assert (S_GET_NAME (p));
14205 if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->func_sym)))
14206 as_warn (_(".end symbol does not match .ent symbol."));
14208 if (debug_type == DEBUG_STABS)
14209 stabs_generate_asm_endfunc (S_GET_NAME (p),
14213 as_warn (_(".end directive missing or unknown symbol"));
14216 /* Create an expression to calculate the size of the function. */
14217 if (p && cur_proc_ptr)
14219 OBJ_SYMFIELD_TYPE *obj = symbol_get_obj (p);
14220 expressionS *exp = xmalloc (sizeof (expressionS));
14223 exp->X_op = O_subtract;
14224 exp->X_add_symbol = symbol_temp_new_now ();
14225 exp->X_op_symbol = p;
14226 exp->X_add_number = 0;
14228 cur_proc_ptr->func_end_sym = exp->X_add_symbol;
14231 /* Generate a .pdr section. */
14232 if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING
14235 segT saved_seg = now_seg;
14236 subsegT saved_subseg = now_subseg;
14241 dot = frag_now_fix ();
14243 #ifdef md_flush_pending_output
14244 md_flush_pending_output ();
14248 subseg_set (pdr_seg, 0);
14250 /* Write the symbol. */
14251 exp.X_op = O_symbol;
14252 exp.X_add_symbol = p;
14253 exp.X_add_number = 0;
14254 emit_expr (&exp, 4);
14256 fragp = frag_more (7 * 4);
14258 md_number_to_chars (fragp, cur_proc_ptr->reg_mask, 4);
14259 md_number_to_chars (fragp + 4, cur_proc_ptr->reg_offset, 4);
14260 md_number_to_chars (fragp + 8, cur_proc_ptr->fpreg_mask, 4);
14261 md_number_to_chars (fragp + 12, cur_proc_ptr->fpreg_offset, 4);
14262 md_number_to_chars (fragp + 16, cur_proc_ptr->frame_offset, 4);
14263 md_number_to_chars (fragp + 20, cur_proc_ptr->frame_reg, 4);
14264 md_number_to_chars (fragp + 24, cur_proc_ptr->pc_reg, 4);
14266 subseg_set (saved_seg, saved_subseg);
14268 #endif /* OBJ_ELF */
14270 cur_proc_ptr = NULL;
14273 /* The .aent and .ent directives. */
14276 s_mips_ent (int aent)
14280 symbolP = get_symbol ();
14281 if (*input_line_pointer == ',')
14282 ++input_line_pointer;
14283 SKIP_WHITESPACE ();
14284 if (ISDIGIT (*input_line_pointer)
14285 || *input_line_pointer == '-')
14288 if ((bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) == 0)
14289 as_warn (_(".ent or .aent not in text section."));
14291 if (!aent && cur_proc_ptr)
14292 as_warn (_("missing .end"));
14296 /* This function needs its own .frame and .cprestore directives. */
14297 mips_frame_reg_valid = 0;
14298 mips_cprestore_valid = 0;
14300 cur_proc_ptr = &cur_proc;
14301 memset (cur_proc_ptr, '\0', sizeof (procS));
14303 cur_proc_ptr->func_sym = symbolP;
14305 symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
14309 if (debug_type == DEBUG_STABS)
14310 stabs_generate_asm_func (S_GET_NAME (symbolP),
14311 S_GET_NAME (symbolP));
14314 demand_empty_rest_of_line ();
14317 /* The .frame directive. If the mdebug section is present (IRIX 5 native)
14318 then ecoff.c (ecoff_directive_frame) is used. For embedded targets,
14319 s_mips_frame is used so that we can set the PDR information correctly.
14320 We can't use the ecoff routines because they make reference to the ecoff
14321 symbol table (in the mdebug section). */
14324 s_mips_frame (int ignore ATTRIBUTE_UNUSED)
14327 if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
14331 if (cur_proc_ptr == (procS *) NULL)
14333 as_warn (_(".frame outside of .ent"));
14334 demand_empty_rest_of_line ();
14338 cur_proc_ptr->frame_reg = tc_get_register (1);
14340 SKIP_WHITESPACE ();
14341 if (*input_line_pointer++ != ','
14342 || get_absolute_expression_and_terminator (&val) != ',')
14344 as_warn (_("Bad .frame directive"));
14345 --input_line_pointer;
14346 demand_empty_rest_of_line ();
14350 cur_proc_ptr->frame_offset = val;
14351 cur_proc_ptr->pc_reg = tc_get_register (0);
14353 demand_empty_rest_of_line ();
14356 #endif /* OBJ_ELF */
14360 /* The .fmask and .mask directives. If the mdebug section is present
14361 (IRIX 5 native) then ecoff.c (ecoff_directive_mask) is used. For
14362 embedded targets, s_mips_mask is used so that we can set the PDR
14363 information correctly. We can't use the ecoff routines because they
14364 make reference to the ecoff symbol table (in the mdebug section). */
14367 s_mips_mask (int reg_type)
14370 if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
14374 if (cur_proc_ptr == (procS *) NULL)
14376 as_warn (_(".mask/.fmask outside of .ent"));
14377 demand_empty_rest_of_line ();
14381 if (get_absolute_expression_and_terminator (&mask) != ',')
14383 as_warn (_("Bad .mask/.fmask directive"));
14384 --input_line_pointer;
14385 demand_empty_rest_of_line ();
14389 off = get_absolute_expression ();
14391 if (reg_type == 'F')
14393 cur_proc_ptr->fpreg_mask = mask;
14394 cur_proc_ptr->fpreg_offset = off;
14398 cur_proc_ptr->reg_mask = mask;
14399 cur_proc_ptr->reg_offset = off;
14402 demand_empty_rest_of_line ();
14405 #endif /* OBJ_ELF */
14406 s_ignore (reg_type);
14409 /* A table describing all the processors gas knows about. Names are
14410 matched in the order listed.
14412 To ease comparison, please keep this table in the same order as
14413 gcc's mips_cpu_info_table[]. */
14414 static const struct mips_cpu_info mips_cpu_info_table[] =
14416 /* Entries for generic ISAs */
14417 { "mips1", 1, ISA_MIPS1, CPU_R3000 },
14418 { "mips2", 1, ISA_MIPS2, CPU_R6000 },
14419 { "mips3", 1, ISA_MIPS3, CPU_R4000 },
14420 { "mips4", 1, ISA_MIPS4, CPU_R8000 },
14421 { "mips5", 1, ISA_MIPS5, CPU_MIPS5 },
14422 { "mips32", 1, ISA_MIPS32, CPU_MIPS32 },
14423 { "mips32r2", 1, ISA_MIPS32R2, CPU_MIPS32R2 },
14424 { "mips64", 1, ISA_MIPS64, CPU_MIPS64 },
14425 { "mips64r2", 1, ISA_MIPS64R2, CPU_MIPS64R2 },
14428 { "r3000", 0, ISA_MIPS1, CPU_R3000 },
14429 { "r2000", 0, ISA_MIPS1, CPU_R3000 },
14430 { "r3900", 0, ISA_MIPS1, CPU_R3900 },
14433 { "r6000", 0, ISA_MIPS2, CPU_R6000 },
14436 { "r4000", 0, ISA_MIPS3, CPU_R4000 },
14437 { "r4010", 0, ISA_MIPS2, CPU_R4010 },
14438 { "vr4100", 0, ISA_MIPS3, CPU_VR4100 },
14439 { "vr4111", 0, ISA_MIPS3, CPU_R4111 },
14440 { "vr4120", 0, ISA_MIPS3, CPU_VR4120 },
14441 { "vr4130", 0, ISA_MIPS3, CPU_VR4120 },
14442 { "vr4181", 0, ISA_MIPS3, CPU_R4111 },
14443 { "vr4300", 0, ISA_MIPS3, CPU_R4300 },
14444 { "r4400", 0, ISA_MIPS3, CPU_R4400 },
14445 { "r4600", 0, ISA_MIPS3, CPU_R4600 },
14446 { "orion", 0, ISA_MIPS3, CPU_R4600 },
14447 { "r4650", 0, ISA_MIPS3, CPU_R4650 },
14450 { "r8000", 0, ISA_MIPS4, CPU_R8000 },
14451 { "r10000", 0, ISA_MIPS4, CPU_R10000 },
14452 { "r12000", 0, ISA_MIPS4, CPU_R12000 },
14453 { "vr5000", 0, ISA_MIPS4, CPU_R5000 },
14454 { "vr5400", 0, ISA_MIPS4, CPU_VR5400 },
14455 { "vr5500", 0, ISA_MIPS4, CPU_VR5500 },
14456 { "rm5200", 0, ISA_MIPS4, CPU_R5000 },
14457 { "rm5230", 0, ISA_MIPS4, CPU_R5000 },
14458 { "rm5231", 0, ISA_MIPS4, CPU_R5000 },
14459 { "rm5261", 0, ISA_MIPS4, CPU_R5000 },
14460 { "rm5721", 0, ISA_MIPS4, CPU_R5000 },
14461 { "rm7000", 0, ISA_MIPS4, CPU_RM7000 },
14462 { "rm9000", 0, ISA_MIPS4, CPU_RM9000 },
14465 { "4kc", 0, ISA_MIPS32, CPU_MIPS32 },
14466 { "4km", 0, ISA_MIPS32, CPU_MIPS32 },
14467 { "4kp", 0, ISA_MIPS32, CPU_MIPS32 },
14469 /* MIPS32 Release 2 */
14470 { "m4k", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
14471 { "24k", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
14472 { "24kc", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
14473 { "24kf", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
14474 { "24kx", 0, ISA_MIPS32R2, CPU_MIPS32R2 },
14477 { "5kc", 0, ISA_MIPS64, CPU_MIPS64 },
14478 { "5kf", 0, ISA_MIPS64, CPU_MIPS64 },
14479 { "20kc", 0, ISA_MIPS64, CPU_MIPS64 },
14481 /* Broadcom SB-1 CPU core */
14482 { "sb1", 0, ISA_MIPS64, CPU_SB1 },
14489 /* Return true if GIVEN is the same as CANONICAL, or if it is CANONICAL
14490 with a final "000" replaced by "k". Ignore case.
14492 Note: this function is shared between GCC and GAS. */
14495 mips_strict_matching_cpu_name_p (const char *canonical, const char *given)
14497 while (*given != 0 && TOLOWER (*given) == TOLOWER (*canonical))
14498 given++, canonical++;
14500 return ((*given == 0 && *canonical == 0)
14501 || (strcmp (canonical, "000") == 0 && strcasecmp (given, "k") == 0));
14505 /* Return true if GIVEN matches CANONICAL, where GIVEN is a user-supplied
14506 CPU name. We've traditionally allowed a lot of variation here.
14508 Note: this function is shared between GCC and GAS. */
14511 mips_matching_cpu_name_p (const char *canonical, const char *given)
14513 /* First see if the name matches exactly, or with a final "000"
14514 turned into "k". */
14515 if (mips_strict_matching_cpu_name_p (canonical, given))
14518 /* If not, try comparing based on numerical designation alone.
14519 See if GIVEN is an unadorned number, or 'r' followed by a number. */
14520 if (TOLOWER (*given) == 'r')
14522 if (!ISDIGIT (*given))
14525 /* Skip over some well-known prefixes in the canonical name,
14526 hoping to find a number there too. */
14527 if (TOLOWER (canonical[0]) == 'v' && TOLOWER (canonical[1]) == 'r')
14529 else if (TOLOWER (canonical[0]) == 'r' && TOLOWER (canonical[1]) == 'm')
14531 else if (TOLOWER (canonical[0]) == 'r')
14534 return mips_strict_matching_cpu_name_p (canonical, given);
14538 /* Parse an option that takes the name of a processor as its argument.
14539 OPTION is the name of the option and CPU_STRING is the argument.
14540 Return the corresponding processor enumeration if the CPU_STRING is
14541 recognized, otherwise report an error and return null.
14543 A similar function exists in GCC. */
14545 static const struct mips_cpu_info *
14546 mips_parse_cpu (const char *option, const char *cpu_string)
14548 const struct mips_cpu_info *p;
14550 /* 'from-abi' selects the most compatible architecture for the given
14551 ABI: MIPS I for 32-bit ABIs and MIPS III for 64-bit ABIs. For the
14552 EABIs, we have to decide whether we're using the 32-bit or 64-bit
14553 version. Look first at the -mgp options, if given, otherwise base
14554 the choice on MIPS_DEFAULT_64BIT.
14556 Treat NO_ABI like the EABIs. One reason to do this is that the
14557 plain 'mips' and 'mips64' configs have 'from-abi' as their default
14558 architecture. This code picks MIPS I for 'mips' and MIPS III for
14559 'mips64', just as we did in the days before 'from-abi'. */
14560 if (strcasecmp (cpu_string, "from-abi") == 0)
14562 if (ABI_NEEDS_32BIT_REGS (mips_abi))
14563 return mips_cpu_info_from_isa (ISA_MIPS1);
14565 if (ABI_NEEDS_64BIT_REGS (mips_abi))
14566 return mips_cpu_info_from_isa (ISA_MIPS3);
14568 if (file_mips_gp32 >= 0)
14569 return mips_cpu_info_from_isa (file_mips_gp32 ? ISA_MIPS1 : ISA_MIPS3);
14571 return mips_cpu_info_from_isa (MIPS_DEFAULT_64BIT
14576 /* 'default' has traditionally been a no-op. Probably not very useful. */
14577 if (strcasecmp (cpu_string, "default") == 0)
14580 for (p = mips_cpu_info_table; p->name != 0; p++)
14581 if (mips_matching_cpu_name_p (p->name, cpu_string))
14584 as_bad ("Bad value (%s) for %s", cpu_string, option);
14588 /* Return the canonical processor information for ISA (a member of the
14589 ISA_MIPS* enumeration). */
14591 static const struct mips_cpu_info *
14592 mips_cpu_info_from_isa (int isa)
14596 for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
14597 if (mips_cpu_info_table[i].is_isa
14598 && isa == mips_cpu_info_table[i].isa)
14599 return (&mips_cpu_info_table[i]);
14604 static const struct mips_cpu_info *
14605 mips_cpu_info_from_arch (int arch)
14609 for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
14610 if (arch == mips_cpu_info_table[i].cpu)
14611 return (&mips_cpu_info_table[i]);
14617 show (FILE *stream, const char *string, int *col_p, int *first_p)
14621 fprintf (stream, "%24s", "");
14626 fprintf (stream, ", ");
14630 if (*col_p + strlen (string) > 72)
14632 fprintf (stream, "\n%24s", "");
14636 fprintf (stream, "%s", string);
14637 *col_p += strlen (string);
14643 md_show_usage (FILE *stream)
14648 fprintf (stream, _("\
14650 -EB generate big endian output\n\
14651 -EL generate little endian output\n\
14652 -g, -g2 do not remove unneeded NOPs or swap branches\n\
14653 -G NUM allow referencing objects up to NUM bytes\n\
14654 implicitly with the gp register [default 8]\n"));
14655 fprintf (stream, _("\
14656 -mips1 generate MIPS ISA I instructions\n\
14657 -mips2 generate MIPS ISA II instructions\n\
14658 -mips3 generate MIPS ISA III instructions\n\
14659 -mips4 generate MIPS ISA IV instructions\n\
14660 -mips5 generate MIPS ISA V instructions\n\
14661 -mips32 generate MIPS32 ISA instructions\n\
14662 -mips32r2 generate MIPS32 release 2 ISA instructions\n\
14663 -mips64 generate MIPS64 ISA instructions\n\
14664 -mips64r2 generate MIPS64 release 2 ISA instructions\n\
14665 -march=CPU/-mtune=CPU generate code/schedule for CPU, where CPU is one of:\n"));
14669 for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
14670 show (stream, mips_cpu_info_table[i].name, &column, &first);
14671 show (stream, "from-abi", &column, &first);
14672 fputc ('\n', stream);
14674 fprintf (stream, _("\
14675 -mCPU equivalent to -march=CPU -mtune=CPU. Deprecated.\n\
14676 -no-mCPU don't generate code specific to CPU.\n\
14677 For -mCPU and -no-mCPU, CPU must be one of:\n"));
14681 show (stream, "3900", &column, &first);
14682 show (stream, "4010", &column, &first);
14683 show (stream, "4100", &column, &first);
14684 show (stream, "4650", &column, &first);
14685 fputc ('\n', stream);
14687 fprintf (stream, _("\
14688 -mips16 generate mips16 instructions\n\
14689 -no-mips16 do not generate mips16 instructions\n"));
14690 fprintf (stream, _("\
14691 -msmartmips generate smartmips instructions\n\
14692 -mno-smartmips do not generate smartmips instructions\n"));
14693 fprintf (stream, _("\
14694 -mdsp generate DSP instructions\n\
14695 -mno-dsp do not generate DSP instructions\n"));
14696 fprintf (stream, _("\
14697 -mmt generate MT instructions\n\
14698 -mno-mt do not generate MT instructions\n"));
14699 fprintf (stream, _("\
14700 -mfix-vr4120 work around certain VR4120 errata\n\
14701 -mfix-vr4130 work around VR4130 mflo/mfhi errata\n\
14702 -mgp32 use 32-bit GPRs, regardless of the chosen ISA\n\
14703 -mfp32 use 32-bit FPRs, regardless of the chosen ISA\n\
14704 -mno-shared optimize output for executables\n\
14705 -msym32 assume all symbols have 32-bit values\n\
14706 -O0 remove unneeded NOPs, do not swap branches\n\
14707 -O remove unneeded NOPs and swap branches\n\
14708 --[no-]construct-floats [dis]allow floating point values to be constructed\n\
14709 --trap, --no-break trap exception on div by 0 and mult overflow\n\
14710 --break, --no-trap break exception on div by 0 and mult overflow\n"));
14712 fprintf (stream, _("\
14713 -KPIC, -call_shared generate SVR4 position independent code\n\
14714 -non_shared do not generate position independent code\n\
14715 -xgot assume a 32 bit GOT\n\
14716 -mpdr, -mno-pdr enable/disable creation of .pdr sections\n\
14717 -mshared, -mno-shared disable/enable .cpload optimization for\n\
14719 -mabi=ABI create ABI conformant object file for:\n"));
14723 show (stream, "32", &column, &first);
14724 show (stream, "o64", &column, &first);
14725 show (stream, "n32", &column, &first);
14726 show (stream, "64", &column, &first);
14727 show (stream, "eabi", &column, &first);
14729 fputc ('\n', stream);
14731 fprintf (stream, _("\
14732 -32 create o32 ABI object file (default)\n\
14733 -n32 create n32 ABI object file\n\
14734 -64 create 64 ABI object file\n"));
14739 mips_dwarf2_format (void)
14741 if (mips_abi == N64_ABI)
14744 return dwarf2_format_64bit_irix;
14746 return dwarf2_format_64bit;
14750 return dwarf2_format_32bit;
14754 mips_dwarf2_addr_size (void)
14756 if (mips_abi == N64_ABI)
14762 /* Standard calling conventions leave the CFA at SP on entry. */
14764 mips_cfi_frame_initial_instructions (void)
14766 cfi_add_CFA_def_cfa_register (SP);
14770 tc_mips_regname_to_dw2regnum (char *regname)
14772 unsigned int regnum = -1;
14775 if (reg_lookup (®name, RTYPE_GP | RTYPE_NUM, ®))