aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2013-07-14gas/Richard Sandiford8-465/+779
* config/tc-mips.c (mips_prefer_vec_regno, mips_parse_register): New functions, split out from... (reg_lookup): ...here. Remove itbl support. (reglist_lookup): Delete. (mips_operand_token_type): New enum. (mips_operand_token): New structure. (mips_operand_tokens): New variable. (mips_add_token, mips_parse_base_start, mips_parse_argument_token) (mips_parse_arguments): New functions. (md_begin): Initialize mips_operand_tokens. (mips_arg_info): Add a token field. Remove optional_reg field. (match_char, match_expression): New functions. (match_const_int): Use match_expression. Remove "s" argument and return a boolean result. Remove O_register handling. (match_regno, match_reg, match_reg_range): New functions. (match_int_operand, match_mapped_int_operand, match_msb_operand) (match_reg_operand, match_reg_pair_operand, match_perf_reg_operand) (match_addiusp_operand, match_clo_clz_dest_operand) (match_lwm_swm_list_operand, match_entry_exit_operand) (match_save_restore_list_operand, match_mdmx_imm_reg_operand) (match_tied_reg_operand): Remove "s" argument and return a boolean result. Match tokens rather than text. Update calls to match_const_int. Rely on match_regno to call check_regno. (match_pcrel_operand, match_pc_operand): Replace "s" argument with "arg" argument. Return a boolean result. (parse_float_constant): Replace with... (match_float_constant): ...this new function. (match_operand): Remove "s" argument and return a boolean result. Update calls to subfunctions. (mips_ip, mips16_ip): Call mips_parse_arguments. Use match routines rather than string-parsing routines. Update handling of optional registers for token scheme. gas/testsuite/ * gas/mips/vr5400-ill.s, gas/mips/vr5400-ill.l: Add some more cases. * gas/mips/micromips-ill.s, gas/mips/micromips-ill.l: New test. * gas/mips/mips.exp: Run it.
2013-07-14gas/Richard Sandiford2-163/+176
* config/tc-mips.c (parse_float_constant): Split out from... (mips_ip): ...here.
2013-07-14gas/Richard Sandiford2-25/+5
* config/tc-mips.c (INSERT_BITS, INSERT_OPERAND, MIPS16_INSERT_OPERAND): Delete.
2013-07-14gas/Richard Sandiford2-541/+373
* config/tc-mips.c (mips32_to_16_reg_map): Delete. (match_entry_exit_operand): New function. (match_save_restore_list_operand): Likewise. (match_operand): Use them. (check_absolute_expr): Delete. (mips16_ip): Rewrite main parsing loop to use mips_operands.
2013-07-14gas/Richard Sandiford11-2435/+330
* config/tc-mips.c: Enable functions commented out in previous patch. (SKIP_SPACE_TABS): Move further up file. (mips32_to_micromips_reg_b_map, mips32_to_micromips_reg_c_map) (mips32_to_micromips_reg_d_map, mips32_to_micromips_reg_e_map) (ips32_to_micromips_reg_f_map, mips32_to_micromips_reg_g_map) (mips32_to_micromips_reg_l_map, mips32_to_micromips_reg_m_map) (mips32_to_micromips_reg_q_map, mips32_to_micromips_reg_n_map) (micromips_imm_b_map, micromips_imm_c_map): Delete. (mips_lookup_reg_pair): Delete. (macro): Use report_bad_range and report_bad_field. (mips_immed, expr_const_in_range): Delete. (mips_ip): Rewrite main parsing loop to use new functions. gas/testsuite/ * gas/mips/at-2.l: Remove duplicated $at warnings. * gas/mips/ext-ill.l, gas/mips/lui-1.l, gas/mips/mips32r2-ill.l, gas/mips/mips32r2-ill-nofp.l, gas/mips/mips32r2-ill-fp64.l, gas/mips/mips64r2-ill.l, gas/mips/octeon-ill.l: Update error messages. Expect negative numbers to be printed as such, rather than as large unsigned positive numbers.
2013-07-14gas/Richard Sandiford2-40/+855
* config/tc-mips.c (mips_oddfpreg_ok): Move further up file. Change return type to bfd_boolean. (report_bad_range, report_bad_field): New functions. (mips_arg_info): New structure. (match_const_int, convert_reg_type, check_regno, match_int_operand) (match_mapped_int_operand, match_msb_operand, match_reg_operand) (match_reg_pair_operand, match_pcrel_operand, match_perf_reg_operand) (match_addiusp_operand, match_clo_clz_dest_operand) (match_lwm_swm_list_operand, match_mdmx_imm_reg_operand) (match_pc_operand, match_tied_reg_operand, match_operand) (check_completed_insn): New functions, commented out for now.
2013-07-14gas/Richard Sandiford2-237/+52
* config/tc-mips.c (insn_insert_operand): New function. (macro_build, mips16_macro_build): Put null character check in the for loop and convert continues to breaks. Use operand structures to handle constant operands.
2013-07-14include/opcode/Richard Sandiford5-460/+342
* mips.h (mips_operand_type): Add OP_ENTRY_EXIT_LIST and OP_SAVE_RESTORE_LIST. (decode_mips16_operand): Declare. opcodes/ * mips16-opc.c: Include mips-formats.h. (reg_0_map, reg_29_map, reg_31_map, reg_m16_map, reg32r_map): New static arrays. (decode_mips16_operand): New function. * mips-dis.c (mips16_to_32_reg_map, mips16_reg_names): Delete. (print_insn_arg): Handle OP_ENTRY_EXIT list. Abort for OP_SAVE_RESTORE_LIST. (print_mips16_insn_arg): Change interface. Use mips_operand structures. Delete GET_OP_S. Move GET_OP definition to... (print_insn_mips16): ...here. Call init_print_arg_state. Update the call to print_mips16_insn_arg.
2013-07-14include/opcode/Richard Sandiford9-1434/+1134
* mips.h (mips_operand_type, mips_reg_operand_type): New enums. (mips_operand, mips_int_operand, mips_mapped_int_operand) (mips_msb_operand, mips_reg_operand, mips_reg_pair_operand) (mips_pcrel_operand): New structures. (mips_insert_operand, mips_extract_operand, mips_signed_operand) (mips_decode_int_operand, mips_decode_pcrel_operand): New functions. (decode_mips_operand, decode_micromips_operand): Declare. opcodes/ * mips-formats.h: New file. * mips-opc.c: Include mips-formats.h. (reg_0_map): New static array. (decode_mips_operand): New function. * micromips-opc.c: Remove <stdio.h> include. Include mips-formats.h. (reg_0_map, reg_28_map, reg_29_map, reg_31_map, reg_m16_map) (reg_mn_map, reg_q_map, reg_h_map1, reg_h_map2, int_b_map) (int_c_map): New static arrays. (decode_micromips_operand): New function. * mips-dis.c (micromips_to_32_reg_b_map, micromips_to_32_reg_c_map) (micromips_to_32_reg_d_map, micromips_to_32_reg_e_map) (micromips_to_32_reg_f_map, micromips_to_32_reg_g_map) (micromips_to_32_reg_h_map1, micromips_to_32_reg_h_map2) (micromips_to_32_reg_l_map, micromips_to_32_reg_m_map) (micromips_to_32_reg_n_map, micromips_to_32_reg_q_map) (micromips_imm_b_map, micromips_imm_c_map): Delete. (print_reg): New function. (mips_print_arg_state): New structure. (init_print_arg_state, print_insn_arg): New functions. (print_insn_args): Change interface and use mips_operand structures. Delete GET_OP_S. Move GET_OP definition to... (print_insn_mips): ...here. Update the call to print_insn_args. (print_insn_micromips): Use print_insn_args. gas/ * config/tc-mips.c (validate_mips_insn): Move further up file. Add insn_bits and decode_operand arguments. Use the mips_operand fields to work out which bits an operand occupies. Detect double definitions. (validate_micromips_insn): Move further up file. Call into validate_mips_insn.
2013-07-14gas/Richard Sandiford2-10/+4
* config/tc-mips.c (mips16_macro_build): Remove 'Y' case.
2013-07-14gas/Richard Sandiford2-28/+21
* config/tc-mips.c (macro_build): Take an int for "C", "k", "\\" and "~". (macro): Update accordingly.
2013-07-14gas/Richard Sandiford2-74/+83
* config/tc-mips.c (imm_expr, imm2_expr, offset_expr): Tweak commentary. (imm_reloc): Delete. (md_assemble): Remove imm_reloc handling. (mips_ip): Update commentary. Use offset_expr and offset_reloc rather than imm_expr and imm_reloc for 'i', 'j' and 'u'. Use a temporary array rather than imm_reloc when parsing constant expressions. Remove imm_reloc initialization. (mips16_ip): Update commentary. Use offset_expr and offset_reloc for the relaxable field. Use a relax_char variable to track the type of this field. Remove imm_reloc initialization.
2013-07-14include/opcode/Richard Sandiford6-14/+39
* mips.h: Document MIPS16 "I" opcode. opcodes/ * mips16-opc.c (mips16_opcodes): Use "I" for immediate operands in macros. gas/ * config/tc-mips.c (mips16_ip): Handle "I".
2013-07-14opcodes/Richard Sandiford2-3/+8
* mips-opc.c (mips_builtin_opcodes): Use "S,T" rather than "V,T" for ADDA.S, MULA.S and SUBA.S.
2013-07-14daily updateAlan Modra1-1/+1
2013-07-13daily updateAlan Modra1-1/+1
2013-07-12bfd/Roland McGrath2-1/+25
* reloc.c: Add BFD_RELOC_390_PC12DBL, BFD_RELOC_390_PLT12DBL, BFD_RELOC_390_PC24DBL, BFD_RELOC_390_PLT24DBL (should have been added here with 2013-07-05 elf32-s390.c change). * bfd-in2.h: Regenerate (no-op). * libbfd.h: Regenerate (no-op).
2013-07-12 include/elf/Maciej W. Rozycki37-2/+326
* mips.h (EF_MIPS_NAN2008): New macro. bfd/ * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Handle EF_MIPS_NAN2008. (_bfd_mips_elf_print_private_bfd_data): Likewise. binutils/ * readelf.c (get_machine_flags): Handle EF_MIPS_NAN2008. gas/ * config/tc-mips.c (mips_flag_nan2008): New variable. (options): Add OPTION_NAN enum value. (md_longopts): Handle it. (md_parse_option): Likewise. (s_nan): New function. (mips_elf_final_processing): Handle EF_MIPS_NAN2008. (md_show_usage): Add -mnan. * doc/as.texinfo (Overview): Add -mnan. * doc/c-mips.texi (MIPS Opts): Document -mnan. (MIPS NaN Encodings): New node. Document .nan directive. (MIPS-Dependent): List the new node. gas/testsuite/ * gas/mips/nan-2008-1.d: New test. * gas/mips/nan-2008-2.d: New test. * gas/mips/nan-2008-3.d: New test. * gas/mips/nan-2008-4.d: New test. * gas/mips/nan-legacy-1.d: New test. * gas/mips/nan-legacy-2.d: New test. * gas/mips/nan-legacy-3.d: New test. * gas/mips/nan-legacy-4.d: New test. * gas/mips/nan-legacy-5.d: New test. * gas/mips/nan-error-1.l: New list test. * gas/mips/nan-error-2.l: New list test. * gas/mips/nan-2008-override.s: New test source. * gas/mips/nan-2008.s: New test source. * gas/mips/nan-legacy-override.s: New test source. * gas/mips/nan-legacy.s: New test source. * gas/mips/nan-error-1.s: New test source. * gas/mips/nan-error-2.s: New test source. * gas/mips/mips.exp: Run the new tests. ld/testsuite/ * ld-mips-elf/nan-2008.d: New test. * ld-mips-elf/nan-legacy.d: New test. * ld-mips-elf/nan-mixed-1.d: New test. * ld-mips-elf/nan-mixed-2.d: New test. * ld-mips-elf/nan-2008.s: New test source. * ld-mips-elf/nan-legacy.s: New test source.
2013-07-12daily updateAlan Modra1-1/+1
2013-07-11gold/Cary Coutant2-1/+6
* powerpc.cc (Target_powerpc::write_branch_lookup_table): Use correct BRLT entry size.
2013-07-11Reuse print_hex_chars function.Andrew Burgess2-11/+7
http://sourceware.org/ml/gdb-patches/2013-07/msg00234.html * infcmd.c (default_print_one_register_info): Reuse code in print_hex_chars.
2013-07-11daily updateAlan Modra1-1/+1
2013-07-102013-07-10 Jack Howarth <howarth@bromo.med.uc.edu>Mike Stump3-0/+20
PR target/57792 * configure.ac: Use --with-sysroot=\"`xcrun --show-sdk-path`\" on darwin13 and later. * configure: Regenerated.
2013-07-10 * Makefile.in (GDB_WARN_CFLAGS_NO_DEFS, ADA_EXP_C): New macros.Tom Tromey2-0/+18
(ada-exp.o): New target.
2013-07-10include/coff/Tristan Gingold5-6/+245
2013-07-10 Tristan Gingold <gingold@adacore.com> * rs6000.h (external_core_dumpx): New structure. (external_ld_info32): Ditto. binutils/ 2013-07-10 Tristan Gingold <gingold@adacore.com> * od-xcoff.c (OPT_LDINFO): Define. (options): Add ldinfo. (xcoff_help): Mention ldinfo. (xcoff_dump): Rename to ... (xcoff_dump_obj): ... this. Add a break. (dump_dumpx_core): New function. (xcoff_dump_core): Likewise. (xcoff_dump): Likewise. * doc/binutils.texi (objdump): Mention ldinfo.
2013-07-10http://sourceware.org/ml/gdb-patches/2013-07/msg00065.htmlSergio Durigan Junior2-1/+8
Doug Evans committed the change above, but forgot to update one of the callers of get_raw_print_options, at mt-tdep.c. This commit fixes this. 2013-07-10 Sergio Durigan Junior <sergiodj@redhat.com> * mt-tdep.c (mt_registers_info): Call get_no_prettyformat_print_options instead of get_raw_print_options (regression by last patch from Doug Evans).
2013-07-10[testsuite/Ada] Add testing of access to packed arrays.Joel Brobecker2-0/+17
This patch adds some tests that evidence a regression fixed by the following patch from Pedro Alves: [PATCH] ada-lang.c:coerce_unspec_val_to_type: Preserve laziness http://www.sourceware.org/ml/gdb-patches/2013-07/msg00178.html gdb/testsuite/ChangeLog: * gdb.ada/arrayptr/foo.adb: Add some code defining an access to a packed array. * gdb.ada/arrayptr.exp: Add a few tests using that new access to packed array.
2013-07-10ada-lang.c:coerce_unspec_val_to_type: Preserve laziness.Joel Brobecker4-2/+22
ada-lang.c:coerce_unspec_val_to_type does: if (value_lazy (val) || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))) result = allocate_value_lazy (type); else { result = allocate_value (type); memcpy (value_contents_raw (result), value_contents (val), TYPE_LENGTH (type)); } set_value_component_location (result, val); set_value_bitsize (result, value_bitsize (val)); set_value_bitpos (result, value_bitpos (val)); set_value_address (result, value_address (val)); set_value_optimized_out (result, value_optimized_out (val)); Notice that before value_optimized_out was made to auto-fetch lazy values, VAL would end up still lazy if it was lazy on entry. It's not really a problem here if VAL is lazy, and VAL->optimized_out is 0, because RESULT is also left lazy. IOW, this just wants to copy the VAL->optimized_out flag to RESULT->optimized_out, nothing else. As a side-effect of the change in value_optimized_out, the following testcase now regresses. Consider: type Small is range -64 .. 63; for Small'Size use 7; type Arr is array (1..10) of Small; pragma Pack (Arr); type Arr_Ptr is access Arr; An_Arr_Ptr : Arr_Ptr := new Arr'(10, 20, 30, 40, 50, 60, 62, 63, -23, 42); Trying to print one element of An_Arr_Ptr yields: (gdb) p an_arr_ptr(3) Cannot access memory at address 0x0 The patch adds the value_optimized_out_const function for that, allowing us to avoid trying to fetch a value at a dummy address. (I found this out by grepping for set_value_optimized_out and trying to convert the uses I found to instead allocate the value with allocate_optimized_out_value.) Tested on x86_64 Fedora 17. gdb/ 2013-07-09 Pedro Alves <palves@redhat.com> * ada-lang.c (coerce_unspec_val_to_type): Use value_optimized_out_const. * value.c (value_optimized_out_const): New function. * value.h (value_optimized_out_const): New declaration.
2013-07-10Fix FAIL: gdb.ada/small_reg_param.exp: continue to call_meJoel Brobecker2-1/+6
If enough information is provided by the compiler, the debugger now prints the entry value of various parameters: (gdb) continue Continuing. Breakpoint 2, pck.call_me (w=w@entry=50) at [...] 20 Last_Word := W; This patch adjusts the expected output to allow an optional "w@entry=" in the parameter value. gdb/testsuite/ChangeLog: * gdb.ada/small_reg_param.exp: Accept optional entry value for parameter "w".
2013-07-10Remove trailing space in gdb.ada/small_reg_param.expJoel Brobecker2-1/+5
gdb/testsuite/ChangeLog: * gdb.ada/small_reg_param.exp: Remove trailing space.
2013-07-10daily updateAlan Modra1-1/+1
2013-07-09gas/testsuite/Richard Sandiford5-0/+101
* gas/mips/la-reloc.s, gas/mips/la-reloc.d, gas/mips/dla-reloc.s, gas/mips/dla-reloc.d: Add files missing from earlier commit.
2013-07-09 * defs.h (enum val_prettyformat): Renamed from val_prettyprint.Doug Evans19-74/+98
Enum values rename as well. All uses updated. * valprint.h (value_print_options): Rename member pretty to pretty format. Rename member prettyprint_arrays to prettyformat_arrays. Rename member prettyprint_structs to prettyformat_structs. All uses updated. (get_no_prettyformat_print_options): Renamed from get_raw_print_options. * valprint.c (get_no_prettyformat_print_options): Renamed from get_raw_print_options. All callers updated. (show_prettyformat_structs): Renamed from show_prettyprint_structs. All callers updated. (show_prettyformat_arrays): Renamed from show_prettyprint_arrays. All callers updated. (_initialize_valprint): Improve help text for "set print pretty" and "set print arrays". testsuite/ * gdb.base/default.exp: Update expected output of "show print array" and "show print pretty".
2013-07-09merge from gccDJ Delorie3-23/+29
2013-07-09Revert recent changes to value_bits_valid.Andrew Burgess2-4/+11
http://sourceware.org/ml/gdb-patches/2013-07/msg00243.html * value.c (value_bits_valid): Revert previous change, and change by Pedro on 2013-07-04, due to regressions in gdb.dwarf2/implptr.exp and gdb.dwarf2/pieces.exp.
2013-07-092013-07-09 Tristan Gingold <gingold@adacore.com>Tristan Gingold2-141/+26
* vms-alpha.c (struct vms_private_data_struct): Remove flag_hash_long_names and flag_show_after_trunc. (hash_string): Remove. (_bfd_vms_length_hash_symbol): Remove. (alpha_vms_write_exec): Remove call to _bfd_vms_length_hash_symbol. (_bfd_vms_write_egsd): Likewise. Rewrite condition. (_bfd_vms_write_ehdr): Remove code that set removed flags. (_bfd_vms_write_etir): Remove call to _bfd_vms_length_hash_symbol. (vms_bfd_is_local_label_name): Remove trace call.
2013-07-092013-07-09 Tristan Gingold <gingold@adacore.com>Tristan Gingold2-1/+6
* makefile.vms (OBJS): Add dwarfnames.obj
2013-07-09binutils/Tristan Gingold4-2/+31
2013-07-09 Tristan Gingold <gingold@adacore.com> * configure.com: Add new defines to match changes in configure. gas/ 2013-07-09 Tristan Gingold <gingold@adacore.com> * configure.com: Define HAVE_SYS_TYPES_H and HAVE_UNISTD_H
2013-07-092013-07-09 Tristan Gingold <gingold@adacore.com>Tristan Gingold4-69/+35
* hosts/alphavms.h: Include config.h and ansidecl.h, remove useless macros. * configure.com: Adjust to match changes in configure. * makefile.vms (OBJS): Update list.
2013-07-09daily updateAlan Modra1-1/+1
2013-07-08 * scripttempl/elf.sc: Handle function names and otherJeff Law2-1/+6
text after .text.unlikely too.
2013-07-08Replace Xmmword with Qword on cvttps2piH.J. Lu7-3/+19
gas/testsuite/ PR gas/13572 * gas/i386/simd.s: Add a test for cvttps2pi. * gas/i386/simd-intel.d: Updated. * gas/i386/simd.d: Likewise. opcodes/ PR gas/13572 * i386-opc.tbl: Replace Xmmword with Qword on cvttps2pi. * i386-tbl.h: Regenerated.
2013-07-082013-07-08 Tristan Gingold <gingold@adacore.com>Tristan Gingold2-0/+8
* ia64.h (STB_VMS_WEAK, STB_VMS_SYSTEM): Add.
2013-07-082013-07-08 Tristan Gingold <gingold@adacore.com>Tristan Gingold2-6/+11
* scripttempl/ia64vms.sc: Add support of per data and per function sections.
2013-07-082013-07-08 Andreas Arnez <arnez@linux.vnet.ibm.com>Ulrich Weigand2-0/+13
* gdb.threads/wp-replication.exp: Stop counting available hardware watchpoints after NR_THREADS iterations.
2013-07-08Add $gdb_prompt to test regexp.Andrew Burgess2-1/+5
http://sourceware.org/ml/gdb-patches/2013-07/msg00173.html * gdb.python/py-explore.exp: Add $gdb_prompt to test regexp.
2013-07-08Fix bug in value_bits_valid.Andrew Burgess2-5/+11
http://sourceware.org/ml/gdb-patches/2013-07/msg00174.html * value.c (value_bits_valid): If the value is not lval_computed or has no check validity handler then the answer is the optimized_out flag, otherwise defer to the handler.
2013-07-08gas/Richard Sandiford7-5/+66
* config/tc-mips.c (mips_ip): Unconditionally parse an expression for 'A' and assume that the constant has been elided if the result is an O_register. gas/testsuite/ * gas/mips/la.s, gas/mips/la.d, gas/mips/la-svr4pic.d, gas/mips/la-xgot.d: Add tests for bracketed addresses.
2013-07-08daily updateAlan Modra1-1/+1
2013-07-07include/opcode/Richard Sandiford31-3920/+3520
* mips.h (M_ACLR_OB, M_ASET_OB, M_CACHE_OB, M_CACHEE_OB, M_L_DOB) (M_LB_A, M_LBE_OB, M_LBU_A, M_LBUE_OB, M_LD_A, M_LD_OB, M_LDC2_OB) (M_LDL_OB, M_LDM_OB, M_LDP_OB, M_LDR_OB, M_LH_A, M_LHE_OB, M_LHU_A) (M_LHUE_OB, M_LL_OB, M_LLD_OB, M_LLE_OB, M_LS_A, M_LW_A, M_LWE_OB) (M_LWC0_A, M_LWC1_A, M_LWC2_A, M_LWC2_OB, M_LWC3_A, M_LWL_A, M_LWL_OB) (M_LWLE_OB, M_LWM_OB, M_LWP_OB, M_LWR_A, M_LWR_OB, M_LWRE_OB, M_LWU_OB) (M_PREF_OB, M_PREFE_OB, M_S_DOB, M_SAA_OB, M_SAAD_OB, M_SC_OB) (M_SCD_OB, M_SCE_OB, M_SD_A, M_SD_OB, M_SDC2_OB, M_SDL_OB, M_SDM_OB) (M_SDP_OB, M_SDR_OB, M_SB_A, M_SBE_OB, M_SH_A, M_SHE_OB, M_SW_A) (M_SWE_OB, M_SWC0_A, M_SWC1_A, M_SWC2_A, M_SWC2_OB, M_SWC3_A, M_SWL_A) (M_SWL_OB, M_SWLE_OB, M_SWM_OB, M_SWP_OB, M_SWR_A, M_SWR_OB, M_SWRE_OB) (M_ULD, M_ULH, M_ULHU, M_ULW, M_USH, M_USW, M_USD): Delete. (M_ULD_A, M_ULH_A, M_ULHU_A, M_ULW_A, M_USH_A, M_USW_A, M_USD_A): Rename to... (M_ULD_AB, M_ULH_AB, M_ULHU_AB, M_ULW_AB, M_USH_AB, M_USW_AB) (M_USD_AB): ...these. opcodes/ * mips-opc.c (mips_builtin_opcodes): Remove o(b) macros. Move LD and SD A(B) macros up. * micromips-opc.c (micromips_opcodes): Likewise. gas/ * config/tc-mips.c (gprel16_reloc_p): New function. (macro_read_relocs): Assume BFD_RELOC_LO16 if all relocs are BFD_RELOC_UNUSED. (offset_high_part, small_offset_p): New functions. (nacro): Use them. Remove *_OB and *_DOB cases. For single- register load and store macros, handle the 16-bit offset case first. If a 16-bit offset is not suitable for the instruction we're generating, load it into the temporary register using ADDRESS_ADDI_INSN. Make the M_LI_DD code fall through into the M_L_DAB code once the address has been constructed. For double load and store macros, again handle the 16-bit offset case first. If the second register cannot be accessed from the same high part as the first, load it into AT using ADDRESS_ADDI_INSN. Fix the handling of LD in cases where the first register is the same as the base. Also handle the case where the offset is not 16 bits and the second register cannot be accessed from the same high part as the first. For unaligned loads and stores, fuse the offbits == 12 and old "ab" handling. Apply this handling whenever the second offset needs a different high part from the first. Construct the offset using ADDRESS_ADDI_INSN where possible, for offbits == 16 as well as offbits == 12. Use offset_reloc when constructing the individual loads and stores. (mips_ip): Set up imm_expr, imm2_expr, offset_expr, imm_reloc and offset_reloc before matching against a particular opcode. Handle elided 'A' constants. Allow 'A' constants to use relocation operators. gas/testsuite/ * gas/mips/ldstla-32.d: Avoid "lui at,0x0" sequences for truncated constants. * gas/mips/ldstla-32-shared.d: Likewise. * gas/mips/mcu.d: Use ADDIU in preference to LI+ADDU when adding 16-bit constants to the base. * gas/mips/micromips@mcu.d: Likewise. * gas/mips/micromips@cache.d: Likewise. * gas/mips/micromips@pref.d: Likewise. * gas/mips/micromips.d, gas/mips/micromips-insn32.d, gas/mips/micromips-noinsn32.d, gas/mips/micromips-trap.d: Likewise. Allow the full 16-bit offset range to be used for SB, LB and LBU in USH and ULH sequences. Fix the expected output for LD and SD when the two LW and SW offsets need different high parts. * gas/mips/eva.s: Test PREFE with relocation operators. * gas/mips/eva.d: Use ADDIU in preference to LI+ADDU for 16-bit constants. Update after eva.s change. * gas/mips/micromips@eva.d: Likewise. * gas/mips/ld-reloc.s, gas/mips/ld-reloc.d, gas/mips/l_d-reloc.s, gas/mips/l_d-reloc.d, gas/mips/ulw-reloc.s, gas/mips/ulw-reloc.d, gas/mips/micromips@ulw-reloc.d, gas/mips/ulh-reloc.s, gas/mips/ulh-reloc.d: New tests. * gas/mips/mips.exp: Run them.