This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 2/2] Tests for O32 FPXX ABI and related features


The intent of the new tests implemented here is to cover most scenarios
involving GNU attributes and the O32 FPXX ABI.

Some minor changes to existing expected output have been necessary due to the
introduction of an extra program header. Where possible tests have been adjusted
to avoid the new program header by forcing them to use the double-precision FP
ABI.

There is quite a lot of duplication in the source files as run_list_test can't
cope with source and list file having different names.

Regards,
Matthew

2014-04-04  Matthew Fortune  <matthew.fortune@imgtec.com>

gas/testsuite/

    * gas/mips/attr-gnu-4-0-insn-double.d: New.
    * gas/mips/attr-gnu-4-0-insn-mfp64.d: New.
    * gas/mips/attr-gnu-4-0-insn-mfpxx.d: New.
    * gas/mips/attr-gnu-4-0-insn-msingle-float.d: New.
    * gas/mips/attr-gnu-4-0-insn-msoft-float.l: New.
    * gas/mips/attr-gnu-4-0-insn-msoft-float.s: New.
    * gas/mips/attr-gnu-4-0-insn.d: New.
    * gas/mips/attr-gnu-4-0-insn.s: New.
    * gas/mips/attr-gnu-4-0-msoft-float.d: New.
    * gas/mips/attr-gnu-4-0.d: New.
    * gas/mips/attr-gnu-4-0.s: New.
    * gas/mips/attr-gnu-4-1-double.d: New.
    * gas/mips/attr-gnu-4-1-mfp32.l: New.
    * gas/mips/attr-gnu-4-1-mfp32.s: New.
    * gas/mips/attr-gnu-4-1-mfp64.l: New.
    * gas/mips/attr-gnu-4-1-mfp64.s: New.
    * gas/mips/attr-gnu-4-1-mfpxx.l: New.
    * gas/mips/attr-gnu-4-1-mfpxx.s: New.
    * gas/mips/attr-gnu-4-1-msingle-float.l: New.
    * gas/mips/attr-gnu-4-1-msingle-float.s: New.
    * gas/mips/attr-gnu-4-1-msoft-float.l: New.
    * gas/mips/attr-gnu-4-1-msoft-float.s: New.
    * gas/mips/attr-gnu-4-1.s: New.
    * gas/mips/attr-gnu-4-2-mfp32.l: New.
    * gas/mips/attr-gnu-4-2-mfp32.s: New.
    * gas/mips/attr-gnu-4-2-mfp64.l: New.
    * gas/mips/attr-gnu-4-2-mfp64.s: New.
    * gas/mips/attr-gnu-4-2-mfpxx.l: New.
    * gas/mips/attr-gnu-4-2-mfpxx.s: New.
    * gas/mips/attr-gnu-4-2-msingle-float.d: New.
    * gas/mips/attr-gnu-4-2-msingle-float.s: New.
    * gas/mips/attr-gnu-4-2-msoft-float.l: New.
    * gas/mips/attr-gnu-4-2-msoft-float.s: New.
    * gas/mips/attr-gnu-4-2.s: New.
    * gas/mips/attr-gnu-4-3-mfp32.l: New.
    * gas/mips/attr-gnu-4-3-mfp32.s: New.
    * gas/mips/attr-gnu-4-3-mfp64.l: New.
    * gas/mips/attr-gnu-4-3-mfp64.s: New.
    * gas/mips/attr-gnu-4-3-mfpx64.s: New.
    * gas/mips/attr-gnu-4-3-mfpxx.l: New.
    * gas/mips/attr-gnu-4-3-mfpxx.s: New.
    * gas/mips/attr-gnu-4-3-msingle-float.l: New.
    * gas/mips/attr-gnu-4-3-msingle-float.s: New.
    * gas/mips/attr-gnu-4-3-msoft-float.d: New.
    * gas/mips/attr-gnu-4-3-msoft-float.s: New.
    * gas/mips/attr-gnu-4-3.s: New.
    * gas/mips/attr-gnu-4-4-mfp32.l: New.
    * gas/mips/attr-gnu-4-4-mfp32.s: New.
    * gas/mips/attr-gnu-4-4-mfp64.l: New.
    * gas/mips/attr-gnu-4-4-mfp64.s: New.
    * gas/mips/attr-gnu-4-4-mfpxx.l: New.
    * gas/mips/attr-gnu-4-4-mfpxx.s: New.
    * gas/mips/attr-gnu-4-4-msingle-float.l: New.
    * gas/mips/attr-gnu-4-4-msingle-float.s: New.
    * gas/mips/attr-gnu-4-4-msoft-float.l: New.
    * gas/mips/attr-gnu-4-4-msoft-float.s: New.
    * gas/mips/attr-gnu-4-4.s: New.
    * gas/mips/attr-gnu-4-5-mfp32.l: New.
    * gas/mips/attr-gnu-4-5-mfp32.s: New.
    * gas/mips/attr-gnu-4-5-mfp64-64.l: New.
    * gas/mips/attr-gnu-4-5-mfp64-64.s: New.
    * gas/mips/attr-gnu-4-5-mfp64.l: New.
    * gas/mips/attr-gnu-4-5-mfp64.s: New.
    * gas/mips/attr-gnu-4-5-mfpxx.d: New.
    * gas/mips/attr-gnu-4-5-msingle-float.l: New.
    * gas/mips/attr-gnu-4-5-msingle-float.s: New.
    * gas/mips/attr-gnu-4-5-msoft-float.l: New.
    * gas/mips/attr-gnu-4-5-msoft-float.s: New.
    * gas/mips/attr-gnu-4-5.s: New.
    * gas/mips/attr-gnu-4-6-mfp32.l: New.
    * gas/mips/attr-gnu-4-6-mfp32.s: New.
    * gas/mips/attr-gnu-4-6-mfp64-64.l: New.
    * gas/mips/attr-gnu-4-6-mfp64-64.s: New.
    * gas/mips/attr-gnu-4-6-mfp64.d: New.
    * gas/mips/attr-gnu-4-6-mfpxx.l: New.
    * gas/mips/attr-gnu-4-6-mfpxx.s: New.
    * gas/mips/attr-gnu-4-6-msingle-float.l: New.
    * gas/mips/attr-gnu-4-6-msingle-float.s: New.
    * gas/mips/attr-gnu-4-6-msoft-float.l: New.
    * gas/mips/attr-gnu-4-6-msoft-float.s: New.
    * gas/mips/attr-gnu-4-6.s: New.
    * gas/mips/attr-gnu-abi-fp-5-mfpxx.d: New.
    * gas/mips/attr-gnu-abi-fp-5.s: New.
    * gas/mips/attr-gnu-abi-msa-1.d: New.
    * gas/mips/attr-gnu-abi-msa-1.s: New.
    * gas/mips/li-d.d: New.
    * gas/mips/li-d.s: New.
    * gas/mips/module-check-warn.l: New.
    * gas/mips/module-check-warn.s: New.
    * gas/mips/module-check.d: New.
    * gas/mips/module-check.s: New.
    * gas/mips/module-insn-mfp32.d: New.
    * gas/mips/module-insn-mfp32.s: New.
    * gas/mips/module-insn-mfp64.d: New.
    * gas/mips/module-insn-mfp64.s: New.
    * gas/mips/module-insn-mfpxx.d: New.
    * gas/mips/module-insn-mfpxx.s: New.
    * gas/mips/module-insn-msingle-float.d: New.
    * gas/mips/module-insn-msingle-float.s: New.
    * gas/mips/module-mfp32.d: New.
    * gas/mips/module-mfp32.s: New.
    * gas/mips/module-mfp64.d: New.
    * gas/mips/module-mfp64.s: New.
    * gas/mips/module-mfpxx.d: New.
    * gas/mips/module-mfpxx.s: New.
    * gas/mips/module-msingle-float.d: New.
    * gas/mips/module-msingle-float.s: New.
    * gas/mips/module-msoft-float.d: New.
    * gas/mips/module-msoft-float.s: New.
    * gas/mips/module-set-mfp32.d: New.
    * gas/mips/module-set-mfp32.s: New.
    * gas/mips/module-set-mfp64.d: New.
    * gas/mips/module-set-mfp64.s: New.
    * gas/mips/module-set-mfpxx.d: New.
    * gas/mips/module-set-mfpxx.s: New.
    * gas/mips/module-set-warn-mfp32.l: New.
    * gas/mips/module-set-warn-mfp32.s: New.
    * gas/mips/module-set-warn-mfp64.l: New.
    * gas/mips/module-set-warn-mfp64.s: New.
    * gas/mips/mips-gp32-fp64.l: Adjust expected output.
    * gas/mips/mips-gp64-fp32-pic.l: Likewise.
    * gas/mips/mips-gp64-fp32.l: Likewise.
    * gas/mips/mips.exp: Add new tests.

ld/testsuite/

    * ld-mips-elf/attr-gnu-4-06.d: New.
    * ld-mips-elf/attr-gnu-4-07.d: New.
    * ld-mips-elf/attr-gnu-4-11-ph.d: New.
    * ld-mips-elf/attr-gnu-4-11-ph2.d: New.
    * ld-mips-elf/attr-gnu-4-15-ph.d: New.
    * ld-mips-elf/attr-gnu-4-16-ph.d: New.
    * ld-mips-elf/attr-gnu-4-16.d: New.
    * ld-mips-elf/attr-gnu-4-17.d: New.
    * ld-mips-elf/attr-gnu-4-26.d: New.
    * ld-mips-elf/attr-gnu-4-27.d: New.
    * ld-mips-elf/attr-gnu-4-36.d: New.
    * ld-mips-elf/attr-gnu-4-37.d: New.
    * ld-mips-elf/attr-gnu-4-46.d: New.
    * ld-mips-elf/attr-gnu-4-47.d: New.
    * ld-mips-elf/attr-gnu-4-51-ph.d: New.
    * ld-mips-elf/attr-gnu-4-52.d: New.
    * ld-mips-elf/attr-gnu-4-53.d: New.
    * ld-mips-elf/attr-gnu-4-54.d: New.
    * ld-mips-elf/attr-gnu-4-55-ph.d: New.
    * ld-mips-elf/attr-gnu-4-55-ph2.d: New.
    * ld-mips-elf/attr-gnu-4-55.d: New.
    * ld-mips-elf/attr-gnu-4-56-ph.d: New.
    * ld-mips-elf/attr-gnu-4-56.d: New.
    * ld-mips-elf/attr-gnu-4-57.d: New.
    * ld-mips-elf/attr-gnu-4-6.s: New.
    * ld-mips-elf/attr-gnu-4-60.d: New.
    * ld-mips-elf/attr-gnu-4-61.d: New.
    * ld-mips-elf/attr-gnu-4-62.d: New.
    * ld-mips-elf/attr-gnu-4-63.d: New.
    * ld-mips-elf/attr-gnu-4-64.d: New.
    * ld-mips-elf/attr-gnu-4-65-ph.d: New.
    * ld-mips-elf/attr-gnu-4-65.d: New.
    * ld-mips-elf/attr-gnu-4-66-ph.d: New.
    * ld-mips-elf/attr-gnu-4-66-ph2.d: New.
    * ld-mips-elf/attr-gnu-4-66.d: New.
    * ld-mips-elf/attr-gnu-4-67.d: New.
    * ld-mips-elf/attr-gnu-4-7.s: New.
    * ld-mips-elf/attr-gnu-4-71.d: New.

    * ld-mips-elf/attr-gnu-4-03.d: Adjust expected output.
    * ld-mips-elf/attr-gnu-4-04.d: Likewise.
    * ld-mips-elf/attr-gnu-4-05.d: Likewise.
    * ld-mips-elf/attr-gnu-4-1.s: Likewise.
    * ld-mips-elf/attr-gnu-4-14.d: Likewise.
    * ld-mips-elf/attr-gnu-4-15.d: Likewise.
    * ld-mips-elf/attr-gnu-4-2.s: Likewise.
    * ld-mips-elf/attr-gnu-4-24.d: Likewise.
    * ld-mips-elf/attr-gnu-4-25.d: Likewise.
    * ld-mips-elf/attr-gnu-4-3.s: Likewise.
    * ld-mips-elf/attr-gnu-4-34.d: Likewise.
    * ld-mips-elf/attr-gnu-4-35.d: Likewise.
    * ld-mips-elf/attr-gnu-4-40.d: Likewise.
    * ld-mips-elf/attr-gnu-4-41.d: Likewise.
    * ld-mips-elf/attr-gnu-4-42.d: Likewise.
    * ld-mips-elf/attr-gnu-4-43.d: Likewise.
    * ld-mips-elf/attr-gnu-4-44.d: Likewise.
    * ld-mips-elf/attr-gnu-4-45.d: Likewise.
    * ld-mips-elf/attr-gnu-4-5.s: Likewise.
    * ld-mips-elf/attr-gnu-4-51.d: Likewise.
    * ld-mips-elf/attr-gnu-4-50.d: Likewise.

    * ld-mips-elf/multi-got-no-shared-1.s: Add .gnu_attribute 4,1 to avoid
    adding PT_MIPS_FPMODE, PF_MIPS_FPXX program header.
    * ld-mips-elf/pic-and-nonpic-3a.s: Likewise.
    * ld-mips-elf/pic-and-nonpic-3b.s: Likewise.
    * ld-mips-elf/pic-and-nonpic-4b.s: Likewise.
    * ld-mips-elf/pic-and-nonpic-5b.s: Likewise.
    * ld-mips-elf/pic-and-nonpic-6-o32a.s: Likewise.
    * ld-mips-elf/rel32.s: Likewise.
    * ld-mips-elf/tls-multi-got-1-1.s: Likewise.
    * ld-mips-elf/tls-multi-got-1-2.s: Likewise.
    * ld-mips-elf/tlsbin-o32.s: Likewise.
    * ld-mips-elf/tlsdyn-o32.s: Likewise.
    * ld-mips-elf/tlslib-o32.s: Likewise.

    * ld-mips-elf/mips16-pic-1.gd: Adjust expected output for gnu_attribute.
    * ld-mips-elf/mips16-pic-2.gd: Likewise.
    * ld-mips-elf/mips16-pic-3.gd: Likewise.
    * ld-mips-elf/mips16-pic-4a.gd: Likewise.
    * ld-mips-elf/pic-and-nonpic-3a.gd: Likewise.
    * ld-mips-elf/pic-and-nonpic-3b.gd: Likewise.
    * ld-mips-elf/pic-and-nonpic-5b.gd: Likewise.

    * ld-elf/nobits-1.d: XFAIL for mips due to extra program header.
    * ld-elf/note-1.d: Likewise.
    * ld-elf/orphan-region.d: Likewise.

    * ld-mips-elf/tls-multi-got-1.r: Adjust expected output to account for
    extra program header.

    * ld-mips-elf/mips-elf.exp: Add new tests.
---
 gas/testsuite/gas/mips/attr-gnu-4-0-insn-double.d  |  8 ++
 gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfp64.d   |  9 ++
 gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfpxx.d   |  9 ++
 .../gas/mips/attr-gnu-4-0-insn-msingle-float.d     |  9 ++
 .../gas/mips/attr-gnu-4-0-insn-msoft-float.l       |  2 +
 .../gas/mips/attr-gnu-4-0-insn-msoft-float.s       |  3 +
 gas/testsuite/gas/mips/attr-gnu-4-0-insn.d         |  7 ++
 gas/testsuite/gas/mips/attr-gnu-4-0-insn.s         |  3 +
 gas/testsuite/gas/mips/attr-gnu-4-0-msoft-float.d  |  9 ++
 gas/testsuite/gas/mips/attr-gnu-4-0.d              |  4 +
 gas/testsuite/gas/mips/attr-gnu-4-0.s              |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-1-double.d       |  8 ++
 gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.l        |  3 +
 gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.s        |  1 +
 .../gas/mips/attr-gnu-4-1-msingle-float.l          |  2 +
 .../gas/mips/attr-gnu-4-1-msingle-float.s          |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.l  |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.s  |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-1.s              |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.s        |  1 +
 .../gas/mips/attr-gnu-4-2-msingle-float.d          |  9 ++
 .../gas/mips/attr-gnu-4-2-msingle-float.s          |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.l  |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.s  |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-2.s              |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-3-mfpx64.s       |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.s        |  1 +
 .../gas/mips/attr-gnu-4-3-msingle-float.l          |  2 +
 .../gas/mips/attr-gnu-4-3-msingle-float.s          |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.d  |  9 ++
 gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.s  |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-3.s              |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.s        |  1 +
 .../gas/mips/attr-gnu-4-4-msingle-float.l          |  2 +
 .../gas/mips/attr-gnu-4-4-msingle-float.s          |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.l  |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.s  |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-4.s              |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.l     |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.s     |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-5-mfpxx.d        |  9 ++
 .../gas/mips/attr-gnu-4-5-msingle-float.l          |  2 +
 .../gas/mips/attr-gnu-4-5-msingle-float.s          |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l  |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s  |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-5.s              |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.s        |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.l     |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.s     |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-6-mfp64.d        |  9 ++
 gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.l        |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.s        |  1 +
 .../gas/mips/attr-gnu-4-6-msingle-float.l          |  2 +
 .../gas/mips/attr-gnu-4-6-msingle-float.s          |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l  |  2 +
 gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.s  |  1 +
 gas/testsuite/gas/mips/attr-gnu-4-6.s              |  1 +
 gas/testsuite/gas/mips/attr-gnu-abi-fp-5-mfpxx.d   |  8 ++
 gas/testsuite/gas/mips/attr-gnu-abi-fp-5.s         |  1 +
 gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d        |  7 ++
 gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s        |  1 +
 gas/testsuite/gas/mips/li-d.d                      | 31 +++++++
 gas/testsuite/gas/mips/li-d.s                      | 24 ++++++
 gas/testsuite/gas/mips/mips-gp32-fp64.l            |  4 +-
 gas/testsuite/gas/mips/mips-gp64-fp32-pic.l        |  4 +-
 gas/testsuite/gas/mips/mips-gp64-fp32.l            |  4 +-
 gas/testsuite/gas/mips/mips.exp                    | 98 +++++++++++++++++++++-
 gas/testsuite/gas/mips/module-check-warn.l         |  5 ++
 gas/testsuite/gas/mips/module-check-warn.s         |  3 +
 gas/testsuite/gas/mips/module-check.d              |  7 ++
 gas/testsuite/gas/mips/module-check.s              |  4 +
 gas/testsuite/gas/mips/module-insn-mfp32.d         |  7 ++
 gas/testsuite/gas/mips/module-insn-mfp32.s         |  4 +
 gas/testsuite/gas/mips/module-insn-mfp64.d         |  7 ++
 gas/testsuite/gas/mips/module-insn-mfp64.s         |  4 +
 gas/testsuite/gas/mips/module-insn-mfpxx.d         |  7 ++
 gas/testsuite/gas/mips/module-insn-mfpxx.s         |  4 +
 gas/testsuite/gas/mips/module-insn-msingle-float.d |  7 ++
 gas/testsuite/gas/mips/module-insn-msingle-float.s |  4 +
 gas/testsuite/gas/mips/module-mfp32.d              |  4 +
 gas/testsuite/gas/mips/module-mfp32.s              |  3 +
 gas/testsuite/gas/mips/module-mfp64.d              |  4 +
 gas/testsuite/gas/mips/module-mfp64.s              |  3 +
 gas/testsuite/gas/mips/module-mfpxx.d              |  4 +
 gas/testsuite/gas/mips/module-mfpxx.s              |  3 +
 gas/testsuite/gas/mips/module-msingle-float.d      |  4 +
 gas/testsuite/gas/mips/module-msingle-float.s      |  3 +
 gas/testsuite/gas/mips/module-msoft-float.d        |  7 ++
 gas/testsuite/gas/mips/module-msoft-float.s        |  3 +
 gas/testsuite/gas/mips/module-set-mfp32.d          |  7 ++
 gas/testsuite/gas/mips/module-set-mfp32.s          | 12 +++
 gas/testsuite/gas/mips/module-set-mfp64.d          |  7 ++
 gas/testsuite/gas/mips/module-set-mfp64.s          | 11 +++
 gas/testsuite/gas/mips/module-set-mfpxx.d          |  7 ++
 gas/testsuite/gas/mips/module-set-mfpxx.s          | 14 ++++
 gas/testsuite/gas/mips/module-set-warn-mfp32.l     |  7 ++
 gas/testsuite/gas/mips/module-set-warn-mfp32.s     | 18 ++++
 gas/testsuite/gas/mips/module-set-warn-mfp64.l     |  7 ++
 gas/testsuite/gas/mips/module-set-warn-mfp64.s     | 18 ++++
 ld/testsuite/ld-elf/nobits-1.d                     |  4 +-
 ld/testsuite/ld-elf/note-1.d                       |  4 +-
 ld/testsuite/ld-elf/orphan-region.d                |  4 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-03.d           |  1 +
 ld/testsuite/ld-mips-elf/attr-gnu-4-04.d           | 10 +--
 ld/testsuite/ld-mips-elf/attr-gnu-4-05.d           |  8 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-06.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-07.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph.d        | 20 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph2.d       | 16 ++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-14.d           |  6 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-15-ph.d        | 20 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-15.d           |  7 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-16-ph.d        | 23 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-16.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-17.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-2.s            |  1 +
 ld/testsuite/ld-mips-elf/attr-gnu-4-24.d           |  6 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-25.d           |  8 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-26.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-27.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-3.s            |  1 +
 ld/testsuite/ld-mips-elf/attr-gnu-4-34.d           |  6 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-35.d           |  8 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-36.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-37.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-40.d           | 10 +--
 ld/testsuite/ld-mips-elf/attr-gnu-4-41.d           |  6 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-42.d           |  6 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-43.d           |  6 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-44.d           |  6 +-
 ld/testsuite/ld-mips-elf/attr-gnu-4-45.d           | 12 +--
 ld/testsuite/ld-mips-elf/attr-gnu-4-46.d           | 12 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-47.d           | 12 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-5.s            |  2 +
 ld/testsuite/ld-mips-elf/attr-gnu-4-50.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-51-ph.d        | 20 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-51.d           | 12 ++-
 ld/testsuite/ld-mips-elf/attr-gnu-4-52.d           |  5 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-53.d           |  5 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-54.d           |  7 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph.d        | 23 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph2.d       | 18 ++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-55.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-56-ph.d        | 23 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-56.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-57.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-6.s            |  4 +
 ld/testsuite/ld-mips-elf/attr-gnu-4-60.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-61.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-62.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-63.d           |  5 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-64.d           |  7 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-65-ph.d        | 23 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-65.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph.d        | 23 +++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph2.d       | 18 ++++
 ld/testsuite/ld-mips-elf/attr-gnu-4-66.d           |  9 ++
 ld/testsuite/ld-mips-elf/attr-gnu-4-67.d           | 10 +++
 ld/testsuite/ld-mips-elf/attr-gnu-4-7.s            |  1 +
 ld/testsuite/ld-mips-elf/attr-gnu-4-71.d           |  5 ++
 ld/testsuite/ld-mips-elf/mips-elf.exp              | 48 ++++-------
 ld/testsuite/ld-mips-elf/mips16-pic-1.gd           |  4 +
 ld/testsuite/ld-mips-elf/mips16-pic-2.gd           |  4 +
 ld/testsuite/ld-mips-elf/mips16-pic-3.gd           |  4 +
 ld/testsuite/ld-mips-elf/mips16-pic-4a.gd          |  4 +
 ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s   |  1 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd      |  4 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s       |  1 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd      |  4 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s       |  1 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s       |  1 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd      |  4 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s       |  1 +
 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s   |  1 +
 ld/testsuite/ld-mips-elf/rel32.s                   |  1 +
 ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s       |  1 +
 ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s       |  1 +
 ld/testsuite/ld-mips-elf/tls-multi-got-1.r         |  2 +-
 ld/testsuite/ld-mips-elf/tlsbin-o32.s              |  1 +
 ld/testsuite/ld-mips-elf/tlsdyn-o32.s              |  1 +
 ld/testsuite/ld-mips-elf/tlslib-o32.s              |  1 +
 205 files changed, 1177 insertions(+), 102 deletions(-)
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn-double.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfp64.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfpxx.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn-msingle-float.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-insn.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0-msoft-float.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-0.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-double.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-1.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-2.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-mfpx64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-3.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-4.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-mfpxx.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-5.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-mfp64.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-4-6.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-fp-5-mfpxx.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-fp-5.s
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s
 create mode 100644 gas/testsuite/gas/mips/li-d.d
 create mode 100644 gas/testsuite/gas/mips/li-d.s
 create mode 100644 gas/testsuite/gas/mips/module-check-warn.l
 create mode 100644 gas/testsuite/gas/mips/module-check-warn.s
 create mode 100644 gas/testsuite/gas/mips/module-check.d
 create mode 100644 gas/testsuite/gas/mips/module-check.s
 create mode 100644 gas/testsuite/gas/mips/module-insn-mfp32.d
 create mode 100644 gas/testsuite/gas/mips/module-insn-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/module-insn-mfp64.d
 create mode 100644 gas/testsuite/gas/mips/module-insn-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/module-insn-mfpxx.d
 create mode 100644 gas/testsuite/gas/mips/module-insn-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/module-insn-msingle-float.d
 create mode 100644 gas/testsuite/gas/mips/module-insn-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/module-mfp32.d
 create mode 100644 gas/testsuite/gas/mips/module-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/module-mfp64.d
 create mode 100644 gas/testsuite/gas/mips/module-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/module-mfpxx.d
 create mode 100644 gas/testsuite/gas/mips/module-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/module-msingle-float.d
 create mode 100644 gas/testsuite/gas/mips/module-msingle-float.s
 create mode 100644 gas/testsuite/gas/mips/module-msoft-float.d
 create mode 100644 gas/testsuite/gas/mips/module-msoft-float.s
 create mode 100644 gas/testsuite/gas/mips/module-set-mfp32.d
 create mode 100644 gas/testsuite/gas/mips/module-set-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/module-set-mfp64.d
 create mode 100644 gas/testsuite/gas/mips/module-set-mfp64.s
 create mode 100644 gas/testsuite/gas/mips/module-set-mfpxx.d
 create mode 100644 gas/testsuite/gas/mips/module-set-mfpxx.s
 create mode 100644 gas/testsuite/gas/mips/module-set-warn-mfp32.l
 create mode 100644 gas/testsuite/gas/mips/module-set-warn-mfp32.s
 create mode 100644 gas/testsuite/gas/mips/module-set-warn-mfp64.l
 create mode 100644 gas/testsuite/gas/mips/module-set-warn-mfp64.s
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-06.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-07.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph2.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-15-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-16-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-16.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-17.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-26.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-27.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-36.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-37.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-46.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-47.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-50.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-51-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-52.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-53.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-54.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph2.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-55.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-56-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-56.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-57.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-6.s
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-60.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-61.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-62.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-63.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-64.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-65-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-65.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph2.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-66.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-67.d
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-7.s
 create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-71.d

diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn-double.d b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-double.d
new file mode 100644
index 0000000..939bd87
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-double.d
@@ -0,0 +1,8 @@
+#PROG: readelf
+#source: attr-gnu-4-0-insn.s
+#readelf: -A
+#name: MIPS gnu_attribute 4,0 insn (double-precision)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfp64.d b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfp64.d
new file mode 100644
index 0000000..1d7a4d0
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfp64.d
@@ -0,0 +1,9 @@
+#as: -mfp64 -32
+#source: attr-gnu-4-0-insn.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,0 insn (-mfp64)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfpxx.d b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfpxx.d
new file mode 100644
index 0000000..9414336
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-mfpxx.d
@@ -0,0 +1,9 @@
+#as: -mfpxx -32
+#source: attr-gnu-4-0-insn.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,0 insn (-mfpxx)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msingle-float.d b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msingle-float.d
new file mode 100644
index 0000000..0360f75
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msingle-float.d
@@ -0,0 +1,9 @@
+#as: -msingle-float
+#source: attr-gnu-4-0-insn.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,0 insn (-msingle-float)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.l
new file mode 100644
index 0000000..d3f253a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*:3: Error: opcode not supported on this processor: .* `add.s \$f1,\$f1,\$f1'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.s
new file mode 100644
index 0000000..6f8a6af
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn-msoft-float.s
@@ -0,0 +1,3 @@
+.gnu_attribute 4,0
+.text
+add.s $f1, $f1, $f1
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn.d b/gas/testsuite/gas/mips/attr-gnu-4-0-insn.d
new file mode 100644
index 0000000..ab5e5f4
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn.d
@@ -0,0 +1,7 @@
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,0 insn
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-insn.s b/gas/testsuite/gas/mips/attr-gnu-4-0-insn.s
new file mode 100644
index 0000000..25687f7
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-insn.s
@@ -0,0 +1,3 @@
+.gnu_attribute 4,0
+.text
+add.s $f0, $f0, $f0
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0-msoft-float.d b/gas/testsuite/gas/mips/attr-gnu-4-0-msoft-float.d
new file mode 100644
index 0000000..0106982
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0-msoft-float.d
@@ -0,0 +1,9 @@
+#as: -msoft-float
+#PROG: readelf
+#source: attr-gnu-4-0.s 
+#readelf: -A
+#name: MIPS gnu_attribute 4,0 (-msoft-float)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0.d b/gas/testsuite/gas/mips/attr-gnu-4-0.d
new file mode 100644
index 0000000..9b5a8fa
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0.d
@@ -0,0 +1,4 @@
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,0
+
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-0.s b/gas/testsuite/gas/mips/attr-gnu-4-0.s
new file mode 100644
index 0000000..a143746
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-0.s
@@ -0,0 +1 @@
+.gnu_attribute 4,0
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-double.d b/gas/testsuite/gas/mips/attr-gnu-4-1-double.d
new file mode 100644
index 0000000..6e82f39
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-double.d
@@ -0,0 +1,8 @@
+#source: attr-gnu-4-1.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,1 (double precision)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.l b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.l
new file mode 100644
index 0000000..8bdab4d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*: Warning: `fp32' used with a 64-bit ABI
+.*: Warning: Incorrect .gnu_attribute 4,1 found when module is `fp32'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.s b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp32.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.l b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.l
new file mode 100644
index 0000000..b634b9a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,1 found when module is `fp64'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.s b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-mfp64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.l b/gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.l
new file mode 100644
index 0000000..a59830f
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,1 found when module is `fpxx'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.s b/gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-mfpxx.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.l
new file mode 100644
index 0000000..12352bc
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,1 found when module is `single-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.s b/gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-msingle-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.l
new file mode 100644
index 0000000..c7ff65e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,1 found when module is `soft-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1-msoft-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-1.s b/gas/testsuite/gas/mips/attr-gnu-4-1.s
new file mode 100644
index 0000000..e985a56
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-1.s
@@ -0,0 +1 @@
+.gnu_attribute 4,1
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.l b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.l
new file mode 100644
index 0000000..a2426ca
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,2 found when module is not `single-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.s b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp32.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.l b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.l
new file mode 100644
index 0000000..a2426ca
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,2 found when module is not `single-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.s b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-mfp64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.l b/gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.l
new file mode 100644
index 0000000..a2426ca
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,2 found when module is not `single-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.s b/gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-mfpxx.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.d b/gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.d
new file mode 100644
index 0000000..d702fcc
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.d
@@ -0,0 +1,9 @@
+#as: -msingle-float
+#source: attr-gnu-4-2.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,2 (-msingle-float)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.s b/gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-msingle-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.l
new file mode 100644
index 0000000..a2426ca
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,2 found when module is not `single-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2-msoft-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-2.s b/gas/testsuite/gas/mips/attr-gnu-4-2.s
new file mode 100644
index 0000000..54ebf4e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-2.s
@@ -0,0 +1 @@
+.gnu_attribute 4,2
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.l b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.l
new file mode 100644
index 0000000..5d9cf6c
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,3 found when module is not `soft-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.s b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp32.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.l b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.l
new file mode 100644
index 0000000..5d9cf6c
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,3 found when module is not `soft-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.s b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-mfp64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-mfpx64.s b/gas/testsuite/gas/mips/attr-gnu-4-3-mfpx64.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-mfpx64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.l b/gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.l
new file mode 100644
index 0000000..5d9cf6c
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,3 found when module is not `soft-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.s b/gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-mfpxx.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.l
new file mode 100644
index 0000000..5d9cf6c
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,3 found when module is not `soft-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.s b/gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-msingle-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.d b/gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.d
new file mode 100644
index 0000000..ca67340
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.d
@@ -0,0 +1,9 @@
+#as: -msoft-float
+#source: attr-gnu-4-3.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,3 (-msoft-float)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3-msoft-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-3.s b/gas/testsuite/gas/mips/attr-gnu-4-3.s
new file mode 100644
index 0000000..32e5f5d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-3.s
@@ -0,0 +1 @@
+.gnu_attribute 4,3
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.l b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.l
new file mode 100644
index 0000000..79a0402
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,4 found. ABI not supported
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.s b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp32.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.l b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.l
new file mode 100644
index 0000000..79a0402
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,4 found. ABI not supported
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.s b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-mfp64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.l b/gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.l
new file mode 100644
index 0000000..79a0402
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,4 found. ABI not supported
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.s b/gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-mfpxx.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.l
new file mode 100644
index 0000000..79a0402
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,4 found. ABI not supported
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.s b/gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-msingle-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.l
new file mode 100644
index 0000000..79a0402
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,4 found. ABI not supported
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4-msoft-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-4.s b/gas/testsuite/gas/mips/attr-gnu-4-4.s
new file mode 100644
index 0000000..3ff129a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-4.s
@@ -0,0 +1 @@
+.gnu_attribute 4,4
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.l b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.l
new file mode 100644
index 0000000..af05984
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,5 found when module is `fp32'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.s b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp32.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.l b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.l
new file mode 100644
index 0000000..314027e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,5 found when module is `!-mabi=32'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.s b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64-64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.l b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.l
new file mode 100644
index 0000000..8fe94ee
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,5 found when module is `fp64'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.s b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-mfp64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-mfpxx.d b/gas/testsuite/gas/mips/attr-gnu-4-5-mfpxx.d
new file mode 100644
index 0000000..abf9a48
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-mfpxx.d
@@ -0,0 +1,9 @@
+#as: -mfpxx
+#source: attr-gnu-4-5.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,5 (-mfpxx)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.l
new file mode 100644
index 0000000..545fcaf
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,5 found when module is `single-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.s b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l
new file mode 100644
index 0000000..3db255c
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,5 found when module is `soft-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5.s b/gas/testsuite/gas/mips/attr-gnu-4-5.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.l b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.l
new file mode 100644
index 0000000..f094f98
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,6 found when module is `fp32'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.s b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.s
new file mode 100644
index 0000000..96ace49
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp32.s
@@ -0,0 +1 @@
+.gnu_attribute 4,6
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.l b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.l
new file mode 100644
index 0000000..4077177
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,6 found when module is `!-mabi=32'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.s b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.s
new file mode 100644
index 0000000..96ace49
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64-64.s
@@ -0,0 +1 @@
+.gnu_attribute 4,6
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64.d b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64.d
new file mode 100644
index 0000000..67c8338
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-mfp64.d
@@ -0,0 +1,9 @@
+#as: -mfp64
+#source: attr-gnu-4-6.s
+#PROG: readelf
+#readelf: -A
+#name: MIPS gnu_attribute 4,6 (-mfp64)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.l b/gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.l
new file mode 100644
index 0000000..e497194
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,6 found when module is `fpxx'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.s b/gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.s
new file mode 100644
index 0000000..96ace49
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-mfpxx.s
@@ -0,0 +1 @@
+.gnu_attribute 4,6
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l
new file mode 100644
index 0000000..6474d25
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,6 found when module is `single-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.s b/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.s
new file mode 100644
index 0000000..96ace49
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,6
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l
new file mode 100644
index 0000000..2d892bb
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: Incorrect .gnu_attribute 4,6 found when module is `soft-float'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.s
new file mode 100644
index 0000000..96ace49
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,6
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6.s b/gas/testsuite/gas/mips/attr-gnu-4-6.s
new file mode 100644
index 0000000..96ace49
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6.s
@@ -0,0 +1 @@
+.gnu_attribute 4,6
diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-fp-5-mfpxx.d b/gas/testsuite/gas/mips/attr-gnu-abi-fp-5-mfpxx.d
new file mode 100644
index 0000000..7275784
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-fp-5-mfpxx.d
@@ -0,0 +1,8 @@
+#as: -march=mips32r2 -mfpxx -32
+#source: attr-gnu-abi-fp-5.s
+#readelf: -A
+#name: MIPS gnu_attribute Tag_GNU_MIPS_ABI_FP,5 (-mfpxx)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-fp-5.s b/gas/testsuite/gas/mips/attr-gnu-abi-fp-5.s
new file mode 100644
index 0000000..8d86130
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-fp-5.s
@@ -0,0 +1 @@
+.gnu_attribute Tag_GNU_MIPS_ABI_FP,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d
new file mode 100644
index 0000000..4720029
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d
@@ -0,0 +1,7 @@
+#source: attr-gnu-abi-msa-1.s
+#readelf: -A
+#name: MIPS gnu_attribute Tag_GNU_MIPS_ABI_MSA,1
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_MSA: 128-bit MSA
diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s
new file mode 100644
index 0000000..f22883e
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s
@@ -0,0 +1 @@
+.gnu_attribute Tag_GNU_MIPS_ABI_MSA,1
diff --git a/gas/testsuite/gas/mips/li-d.d b/gas/testsuite/gas/mips/li-d.d
new file mode 100644
index 0000000..db5a7c9
--- /dev/null
+++ b/gas/testsuite/gas/mips/li-d.d
@@ -0,0 +1,31 @@
+#objdump: -d --prefix-addresses
+#as: -mips64r2
+#name: MIPS li.d
+#source: li-d.s
+
+# Test the li.d macro.
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> li	v0,0
+[0-9a-f]+ <[^>]*> move	v1,zero
+[0-9a-f]+ <[^>]*> li	at,0
+[0-9a-f]+ <[^>]*> mtc1	at,\$f1
+[0-9a-f]+ <[^>]*> mtc1	zero,\$f0
+[0-9a-f]+ <[^>]*> li	at,0
+[0-9a-f]+ <[^>]*> mtc1	at,\$f1
+[0-9a-f]+ <[^>]*> mtc1	zero,\$f0
+[0-9a-f]+ <[^>]*> ldc1	\$f0,0\(gp\)
+[0-9a-f]+ <[^>]*> li	at,0
+[0-9a-f]+ <[^>]*> mthc1	at,\$f0
+[0-9a-f]+ <[^>]*> mtc1	zero,\$f0
+[0-9a-f]+ <[^>]*> li	at,0
+[0-9a-f]+ <[^>]*> mthc1	at,\$f0
+[0-9a-f]+ <[^>]*> mtc1	zero,\$f0
+[0-9a-f]+ <[^>]*> li	at,0
+[0-9a-f]+ <[^>]*> mthc1	at,\$f0
+[0-9a-f]+ <[^>]*> mtc1	zero,\$f0
+[0-9a-f]+ <[^>]*> li	at,0
+[0-9a-f]+ <[^>]*> dmtc1	at,\$f0
+	\.\.\.
diff --git a/gas/testsuite/gas/mips/li-d.s b/gas/testsuite/gas/mips/li-d.s
new file mode 100644
index 0000000..8578097
--- /dev/null
+++ b/gas/testsuite/gas/mips/li-d.s
@@ -0,0 +1,24 @@
+# Source file used to test the li macro.
+
+foo:
+	.set mips1
+	.set fp=32
+	li.d $2, 0
+	li.d $f0, 0
+	.set mips2
+	li.d $f0, 0
+	.set fp=xx
+	li.d $f0, 0
+	.set mips32r2
+	.set fp=32
+	li.d $f0, 0
+	.set fp=xx
+	li.d $f0, 0
+	.set fp=64
+	li.d $f0, 0
+	.set mips3
+	li.d $f0, 0
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+	.align  2
+	.space  8
diff --git a/gas/testsuite/gas/mips/mips-gp32-fp64.l b/gas/testsuite/gas/mips/mips-gp32-fp64.l
index de3f3b0..3b36535 100644
--- a/gas/testsuite/gas/mips/mips-gp32-fp64.l
+++ b/gas/testsuite/gas/mips/mips-gp32-fp64.l
@@ -1,2 +1,2 @@
-Assembler messages:
-Warning: -mfp64 used with a 32-bit ABI
+.*Assembler messages:
+.*: Warning: `fp64' used with a 32-bit ABI
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp32-pic.l b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.l
index 2d37303..1eb9c3c 100644
--- a/gas/testsuite/gas/mips/mips-gp64-fp32-pic.l
+++ b/gas/testsuite/gas/mips/mips-gp64-fp32-pic.l
@@ -1,2 +1,2 @@
-Assembler messages:
-Warning: -mfp32 used with a 64-bit ABI
+.*: Assembler messages:
+.*:16: Warning: `fp32' used with a 64-bit ABI
diff --git a/gas/testsuite/gas/mips/mips-gp64-fp32.l b/gas/testsuite/gas/mips/mips-gp64-fp32.l
index e72f085..052ccd8 100644
--- a/gas/testsuite/gas/mips/mips-gp64-fp32.l
+++ b/gas/testsuite/gas/mips/mips-gp64-fp32.l
@@ -1,5 +1,5 @@
-Assembler messages:
-Warning: -mfp32 used with a 64-bit ABI
+.*: Assembler messages:
+.*:14: Warning: `fp32' used with a 64-bit ABI
 .*:92: Warning: macro instruction expanded into multiple instructions in a branch delay slot
 .*:96: Warning: macro instruction expanded into multiple instructions in a branch delay slot
 .*:100: Warning: macro instruction expanded into multiple instructions in a branch delay slot
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 628f482..a4e0ff8 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -426,7 +426,7 @@ mips_arch_create mips64r2 64	mips64	{ mips32r2 ror } \
 mips_arch_create mips16	32	{}	{} \
 			{ -march=mips1 -mips16 } { -mmips:16 }
 mips_arch_create micromips 64	mips64r2 {} \
-			{ -march=mips64 -mmicromips } {}
+			{ -march=mips64r2 -mmicromips } {}
 mips_arch_create r3000 	32	mips1	{} \
 			{ -march=r3000 -mtune=r3000 } { -mmips:3000 }
 mips_arch_create r3900 	32	mips1	{ gpr_ilocks } \
@@ -771,9 +771,11 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test "relax-swap1-mips2"
     run_dump_test "relax-swap2"
     run_dump_test_arches "relax-swap3"	[mips_arch_list_all]
-    run_list_test_arches "relax-bc1any" "-mips3d -relax-branch" \
-					[mips_arch_list_matching mips64 \
-					    !micromips]
+    if { !$addr32 } {
+      run_list_test_arches "relax-bc1any" "-mips3d -relax-branch" \
+					  [mips_arch_list_matching mips64 \
+					      !micromips]
+    }
     run_list_test_arches "relax-bposge" "-mdsp -relax-branch" \
 					[mips_arch_list_matching mips64r2 \
 					    !micromips]
@@ -1178,4 +1180,92 @@ if { [istarget mips*-*-vxworks*] } {
 	run_dump_test "pcrel-4-n32"
 	run_dump_test "pcrel-4-64"
     }
+
+    run_dump_test_arches "attr-gnu-4-0" "-32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-0" "-64" [mips_arch_list_matching mips3]
+    run_dump_test_arches "attr-gnu-4-0" "-mfp32 -32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-0" "-mfpxx -32" [mips_arch_list_matching mips2 !r5900 !sb1]
+    run_dump_test_arches "attr-gnu-4-0" "-mfp64 -32" [mips_arch_list_matching mips32r2]
+    run_dump_test_arches "attr-gnu-4-0" "-mfp64 -64" [mips_arch_list_matching mips3]
+    run_dump_test_arches "attr-gnu-4-0" "-msingle-float -32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-0" "-msingle-float -64" [mips_arch_list_matching mips3]
+    run_dump_test_arches "attr-gnu-4-0-msoft-float" "-32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-0-msoft-float" "-64" [mips_arch_list_matching mips3]
+    run_dump_test_arches "attr-gnu-4-0-insn" "-32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-0-insn" "-64" [mips_arch_list_matching mips3]
+    run_dump_test_arches "attr-gnu-4-0-insn-double" "-32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-0-insn-double" "-64" [mips_arch_list_matching mips3]
+    run_dump_test_arches "attr-gnu-4-0-insn-mfpxx" [mips_arch_list_matching mips2 !r5900 !sb1]
+    run_dump_test_arches "attr-gnu-4-0-insn-mfp64" [mips_arch_list_matching mips32r2]
+    run_dump_test_arches "attr-gnu-4-0-insn-msingle-float" "-32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-0-insn-msingle-float" "-64" [mips_arch_list_matching mips3]
+    run_list_test_arches "attr-gnu-4-0-insn-msoft-float" "-32 -msoft-float" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-0-insn-msoft-float" "-64 -msoft-float" [mips_arch_list_matching mips3]
+
+    run_list_test_arches "attr-gnu-4-1-mfpxx" "-32 -mfpxx" [mips_arch_list_matching mips2 !r5900 !sb1]
+    run_list_test_arches "attr-gnu-4-1-mfp64" "-32 -mfp64" [mips_arch_list_matching mips32r2]
+    run_list_test_arches "attr-gnu-4-1-mfp32" "-64 -mfp32" [mips_arch_list_matching mips3]
+    run_list_test_arches "attr-gnu-4-1-msingle-float" "-32 -msingle-float" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-1-msoft-float" "-32 -msoft-float" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-1-double" "-32 -mfp32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-1-double" "-64 -mfp64" [mips_arch_list_matching mips3]
+
+    run_list_test_arches "attr-gnu-4-2-mfp32" "-32 -mfp32" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-2-mfpxx" "-32 -mfpxx" [mips_arch_list_matching mips2 !r5900 !sb1]
+    run_list_test_arches "attr-gnu-4-2-mfp64" "-32 -mfp64" [mips_arch_list_matching mips32r2]
+    run_list_test_arches "attr-gnu-4-2-mfp64" "-64 -mfp64" [mips_arch_list_matching mips3]
+    run_list_test_arches "attr-gnu-4-2-msoft-float" "-32 -msoft-float" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-2-msingle-float" "-32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-2-msingle-float" "-64" [mips_arch_list_matching mips3]
+
+    run_list_test_arches "attr-gnu-4-3-mfp32" "-32 -mfp32" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-3-mfpxx" "-32 -mfpxx" [mips_arch_list_matching mips2 !r5900 !sb1]
+    run_list_test_arches "attr-gnu-4-3-mfp64" "-32 -mfp64" [mips_arch_list_matching mips32r2]
+    run_list_test_arches "attr-gnu-4-3-mfp64" "-64 -mfp64" [mips_arch_list_matching mips3]
+    run_list_test_arches "attr-gnu-4-3-msingle-float" "-32 -msingle-float" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-3-msoft-float" "-32" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-3-msoft-float" "-64" [mips_arch_list_matching mips3]
+
+    run_list_test_arches "attr-gnu-4-4-mfp32" "-32 -mfp32" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-4-mfpxx" "-32 -mfpxx" [mips_arch_list_matching mips2 !r5900 !sb1]
+    run_list_test_arches "attr-gnu-4-4-mfp64" "-32 -mfp64" [mips_arch_list_matching mips32r2]
+    run_list_test_arches "attr-gnu-4-4-mfp64" "-64 -mfp64" [mips_arch_list_matching mips3]
+    run_list_test_arches "attr-gnu-4-4-msingle-float" "-32 -msingle-float" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-4-msoft-float" "-32 -msoft-float" [mips_arch_list_matching mips1]
+
+    run_list_test_arches "attr-gnu-4-5-mfp32" "-32 -mfp32" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-5-mfp64" "-32 -mfp64" [mips_arch_list_matching mips32r2]
+    run_list_test_arches "attr-gnu-4-5-mfp64-64" "-64 -mfp64" [mips_arch_list_matching mips3]
+    run_list_test_arches "attr-gnu-4-5-msingle-float" "-32 -msingle-float" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-5-msoft-float" "-32 -msoft-float" [mips_arch_list_matching mips1]
+    run_dump_test_arches "attr-gnu-4-5-mfpxx" "-32" [mips_arch_list_matching mips2 !r5900 !sb1]
+
+    run_list_test_arches "attr-gnu-4-6-mfp32" "-32 -mfp32" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-6-mfp64-64" "-64 -mfp64" [mips_arch_list_matching mips3]
+    run_list_test_arches "attr-gnu-4-6-msingle-float" "-32 -msingle-float" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-6-msoft-float" "-32 -msoft-float" [mips_arch_list_matching mips1]
+    run_list_test_arches "attr-gnu-4-6-mfpxx" "-32 -mfpxx" [mips_arch_list_matching mips2 !r5900 !sb1]
+    run_dump_test_arches "attr-gnu-4-6-mfp64" "-32" [mips_arch_list_matching mips32r2]
+
+    run_dump_test "attr-gnu-abi-fp-5-mfpxx"
+    run_dump_test "attr-gnu-abi-msa-1"
+
+    foreach testopt [list -mfp32 -mfpxx -mfp64 -msingle-float -msoft-float] {
+      foreach cmdopt [list -mfp32 -mfpxx -mfp64 -msingle-float -msoft-float] {
+        run_dump_test "module${testopt}" [list [list as $cmdopt] [list name ($cmdopt)]]
+        if { ![string equal $testopt "-msoft-float"] } {
+          run_dump_test "module-insn${testopt}" [list [list as $cmdopt] [list name ($cmdopt)]]
+        }
+      }
+    }
+
+    run_dump_test "module-set-mfpxx"
+    run_dump_test "module-set-mfp32"
+    run_dump_test "module-set-mfp64"
+    run_dump_test "module-check"
+    run_list_test "module-check-warn" "-32"
+    run_list_test "module-set-warn-mfp32" "-mips32r2 -32"
+    run_list_test "module-set-warn-mfp64" "-mips32r2 -32"
+
+    run_dump_test "li-d"
 }
diff --git a/gas/testsuite/gas/mips/module-check-warn.l b/gas/testsuite/gas/mips/module-check-warn.l
new file mode 100644
index 0000000..108d834
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-check-warn.l
@@ -0,0 +1,5 @@
+.*: Assembler messages:
+.*:3: Error: `fp64' used with a 32-bit fpu
+.*:3: Warning: float register should be even, was 1
+.*:3: Warning: float register should be even, was 1
+.*:3: Warning: float register should be even, was 1
diff --git a/gas/testsuite/gas/mips/module-check-warn.s b/gas/testsuite/gas/mips/module-check-warn.s
new file mode 100644
index 0000000..ee5c3f0
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-check-warn.s
@@ -0,0 +1,3 @@
+.module mips1
+.module fp=64
+add.s $f1,$f1,$f1
diff --git a/gas/testsuite/gas/mips/module-check.d b/gas/testsuite/gas/mips/module-check.d
new file mode 100644
index 0000000..1b1152e
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-check.d
@@ -0,0 +1,7 @@
+#as: -march=mips32r2 -32
+#readelf: -A
+#name: MIPS module check
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/gas/testsuite/gas/mips/module-check.s b/gas/testsuite/gas/mips/module-check.s
new file mode 100644
index 0000000..09dec20
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-check.s
@@ -0,0 +1,4 @@
+.module mips1
+.module fp=64
+.module mips32r2
+add.s $f1,$f1,$f1
diff --git a/gas/testsuite/gas/mips/module-insn-mfp32.d b/gas/testsuite/gas/mips/module-insn-mfp32.d
new file mode 100644
index 0000000..96e3fdd
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-mfp32.d
@@ -0,0 +1,7 @@
+#as: -32
+#readelf: -A
+#name: MIPS module fp=32 insn
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/gas/testsuite/gas/mips/module-insn-mfp32.s b/gas/testsuite/gas/mips/module-insn-mfp32.s
new file mode 100644
index 0000000..89091f4
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-mfp32.s
@@ -0,0 +1,4 @@
+.module fp=32
+.module doublefloat
+.module hardfloat
+add.s $f0,$f0,$f0
diff --git a/gas/testsuite/gas/mips/module-insn-mfp64.d b/gas/testsuite/gas/mips/module-insn-mfp64.d
new file mode 100644
index 0000000..eb4e89c
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-mfp64.d
@@ -0,0 +1,7 @@
+#as: -march=mips32r2 -32
+#readelf: -A
+#name: MIPS module fp=64 insn
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/gas/testsuite/gas/mips/module-insn-mfp64.s b/gas/testsuite/gas/mips/module-insn-mfp64.s
new file mode 100644
index 0000000..b1ec844
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-mfp64.s
@@ -0,0 +1,4 @@
+.module fp=64
+.module doublefloat
+.module hardfloat
+add.s $f1,$f1,$f1
diff --git a/gas/testsuite/gas/mips/module-insn-mfpxx.d b/gas/testsuite/gas/mips/module-insn-mfpxx.d
new file mode 100644
index 0000000..c1f10a2
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-mfpxx.d
@@ -0,0 +1,7 @@
+#as: -march=mips32r2 -32
+#readelf: -A
+#name: MIPS module fp=xx insn
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/gas/testsuite/gas/mips/module-insn-mfpxx.s b/gas/testsuite/gas/mips/module-insn-mfpxx.s
new file mode 100644
index 0000000..f7f2d24
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-mfpxx.s
@@ -0,0 +1,4 @@
+.module fp=xx
+.module doublefloat
+.module hardfloat
+add.s $f0,$f0,$f0
diff --git a/gas/testsuite/gas/mips/module-insn-msingle-float.d b/gas/testsuite/gas/mips/module-insn-msingle-float.d
new file mode 100644
index 0000000..f2efd6f
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-msingle-float.d
@@ -0,0 +1,7 @@
+#as: -32
+#readelf: -A
+#name: MIPS module singlefloat insn
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/gas/testsuite/gas/mips/module-insn-msingle-float.s b/gas/testsuite/gas/mips/module-insn-msingle-float.s
new file mode 100644
index 0000000..6a8f1f9
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-insn-msingle-float.s
@@ -0,0 +1,4 @@
+.module fp=32
+.module singlefloat
+.module hardfloat
+add.s $f0,$f0,$f0
diff --git a/gas/testsuite/gas/mips/module-mfp32.d b/gas/testsuite/gas/mips/module-mfp32.d
new file mode 100644
index 0000000..86fc5e1
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-mfp32.d
@@ -0,0 +1,4 @@
+#as: -32
+#readelf: -A
+#name: MIPS module fp=32
+
diff --git a/gas/testsuite/gas/mips/module-mfp32.s b/gas/testsuite/gas/mips/module-mfp32.s
new file mode 100644
index 0000000..8f247b4
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-mfp32.s
@@ -0,0 +1,3 @@
+.module fp=32
+.module doublefloat
+.module hardfloat
diff --git a/gas/testsuite/gas/mips/module-mfp64.d b/gas/testsuite/gas/mips/module-mfp64.d
new file mode 100644
index 0000000..7dc9a85
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-mfp64.d
@@ -0,0 +1,4 @@
+#as: -mips32r2 -32
+#readelf: -A
+#name: MIPS module fp=64
+
diff --git a/gas/testsuite/gas/mips/module-mfp64.s b/gas/testsuite/gas/mips/module-mfp64.s
new file mode 100644
index 0000000..7e4ca39
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-mfp64.s
@@ -0,0 +1,3 @@
+.module fp=64
+.module doublefloat
+.module hardfloat
diff --git a/gas/testsuite/gas/mips/module-mfpxx.d b/gas/testsuite/gas/mips/module-mfpxx.d
new file mode 100644
index 0000000..138ba75
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-mfpxx.d
@@ -0,0 +1,4 @@
+#as: -mips32r2 -32
+#readelf: -A
+#name: MIPS module fp=xx
+
diff --git a/gas/testsuite/gas/mips/module-mfpxx.s b/gas/testsuite/gas/mips/module-mfpxx.s
new file mode 100644
index 0000000..8dd2a4c
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-mfpxx.s
@@ -0,0 +1,3 @@
+.module fp=xx
+.module doublefloat
+.module hardfloat
diff --git a/gas/testsuite/gas/mips/module-msingle-float.d b/gas/testsuite/gas/mips/module-msingle-float.d
new file mode 100644
index 0000000..11f072c
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-msingle-float.d
@@ -0,0 +1,4 @@
+#as: -32
+#readelf: -A
+#name: MIPS module singlefloat
+
diff --git a/gas/testsuite/gas/mips/module-msingle-float.s b/gas/testsuite/gas/mips/module-msingle-float.s
new file mode 100644
index 0000000..082cccf
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-msingle-float.s
@@ -0,0 +1,3 @@
+.module fp=32
+.module singlefloat
+.module hardfloat
diff --git a/gas/testsuite/gas/mips/module-msoft-float.d b/gas/testsuite/gas/mips/module-msoft-float.d
new file mode 100644
index 0000000..6597678
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-msoft-float.d
@@ -0,0 +1,7 @@
+#as: -32
+#readelf: -A
+#name: MIPS module softfloat
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/gas/testsuite/gas/mips/module-msoft-float.s b/gas/testsuite/gas/mips/module-msoft-float.s
new file mode 100644
index 0000000..4de4be7
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-msoft-float.s
@@ -0,0 +1,3 @@
+.module fp=32
+.module doublefloat
+.module softfloat
diff --git a/gas/testsuite/gas/mips/module-set-mfp32.d b/gas/testsuite/gas/mips/module-set-mfp32.d
new file mode 100644
index 0000000..db2eefd
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-mfp32.d
@@ -0,0 +1,7 @@
+#as: -march=mips32r2 -32
+#readelf: -A
+#name: MIPS module fp=32 set
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/gas/testsuite/gas/mips/module-set-mfp32.s b/gas/testsuite/gas/mips/module-set-mfp32.s
new file mode 100644
index 0000000..e065e55
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-mfp32.s
@@ -0,0 +1,12 @@
+.module fp=32
+.module doublefloat
+.module hardfloat
+add.s $f1,$f1,$f1
+.set push
+.set fp=xx
+add.s $f1,$f1,$f1
+.set pop
+.set push
+.set fp=64
+.set pop
+.set fp=64
diff --git a/gas/testsuite/gas/mips/module-set-mfp64.d b/gas/testsuite/gas/mips/module-set-mfp64.d
new file mode 100644
index 0000000..b51d449
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-mfp64.d
@@ -0,0 +1,7 @@
+#as: -march=mips32r2 -32
+#readelf: -A
+#name: MIPS module fp=64 set
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/gas/testsuite/gas/mips/module-set-mfp64.s b/gas/testsuite/gas/mips/module-set-mfp64.s
new file mode 100644
index 0000000..52eecfa
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-mfp64.s
@@ -0,0 +1,11 @@
+.module fp=64
+.module doublefloat
+.module hardfloat
+add.s $f1,$f1,$f1
+.set push
+.set fp=xx
+add.s $f1,$f1,$f1
+.set pop
+.set push
+.set fp=32
+.set pop
diff --git a/gas/testsuite/gas/mips/module-set-mfpxx.d b/gas/testsuite/gas/mips/module-set-mfpxx.d
new file mode 100644
index 0000000..38892f6
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-mfpxx.d
@@ -0,0 +1,7 @@
+#as: -march=mips32r2 -32
+#readelf: -A
+#name: MIPS module fp=xx set
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/gas/testsuite/gas/mips/module-set-mfpxx.s b/gas/testsuite/gas/mips/module-set-mfpxx.s
new file mode 100644
index 0000000..5350bfb
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-mfpxx.s
@@ -0,0 +1,14 @@
+.module fp=xx
+.module doublefloat
+.module hardfloat
+
+add.s $f1,$f1,$f1
+.set push
+.set fp=32
+add.s $f1,$f1,$f1
+.set pop
+
+.set push
+.set fp=64
+add.s $f1,$f1,$f1
+.set pop
diff --git a/gas/testsuite/gas/mips/module-set-warn-mfp32.l b/gas/testsuite/gas/mips/module-set-warn-mfp32.l
new file mode 100644
index 0000000..6849a78
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-warn-mfp32.l
@@ -0,0 +1,7 @@
+.*: Assembler messages:
+.*:11: Warning: Dangerous use of FP registers in fp64 when module is fp32
+.*:11: Warning: Dangerous use of FP registers in fp64 when module is fp32
+.*:11: Warning: Dangerous use of FP registers in fp64 when module is fp32
+.*:16: Warning: Dangerous use of FP registers in fp64 when module is fp32
+.*:16: Warning: Dangerous use of FP registers in fp64 when module is fp32
+.*:16: Warning: Dangerous use of FP registers in fp64 when module is fp32
diff --git a/gas/testsuite/gas/mips/module-set-warn-mfp32.s b/gas/testsuite/gas/mips/module-set-warn-mfp32.s
new file mode 100644
index 0000000..ae6c064
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-warn-mfp32.s
@@ -0,0 +1,18 @@
+.module fp=32
+.module doublefloat
+.module hardfloat
+add.s $f1,$f1,$f1
+.set push
+.set fp=xx
+add.s $f1,$f1,$f1
+.set pop
+.set push
+.set fp=64
+add.s $f1,$f1,$f1
+.set push
+.set fp=xx
+add.s $f1,$f1,$f1
+.set pop
+add.s $f1,$f1,$f1
+.set pop
+add.s $f1,$f1,$f1
diff --git a/gas/testsuite/gas/mips/module-set-warn-mfp64.l b/gas/testsuite/gas/mips/module-set-warn-mfp64.l
new file mode 100644
index 0000000..145c4fd
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-warn-mfp64.l
@@ -0,0 +1,7 @@
+.*: Assembler messages:
+.*:11: Warning: Dangerous use of FP registers in fp32 when module is fp64
+.*:11: Warning: Dangerous use of FP registers in fp32 when module is fp64
+.*:11: Warning: Dangerous use of FP registers in fp32 when module is fp64
+.*:16: Warning: Dangerous use of FP registers in fp32 when module is fp64
+.*:16: Warning: Dangerous use of FP registers in fp32 when module is fp64
+.*:16: Warning: Dangerous use of FP registers in fp32 when module is fp64
diff --git a/gas/testsuite/gas/mips/module-set-warn-mfp64.s b/gas/testsuite/gas/mips/module-set-warn-mfp64.s
new file mode 100644
index 0000000..2d35c86
--- /dev/null
+++ b/gas/testsuite/gas/mips/module-set-warn-mfp64.s
@@ -0,0 +1,18 @@
+.module fp=64
+.module doublefloat
+.module hardfloat
+add.s $f1,$f1,$f1
+.set push
+.set fp=xx
+add.s $f1,$f1,$f1
+.set pop
+.set push
+.set fp=32
+add.s $f1,$f1,$f1
+.set push
+.set fp=xx
+add.s $f1,$f1,$f1
+.set pop
+add.s $f1,$f1,$f1
+.set pop
+add.s $f1,$f1,$f1
diff --git a/ld/testsuite/ld-elf/nobits-1.d b/ld/testsuite/ld-elf/nobits-1.d
index 89f0e10..97a6ca2 100644
--- a/ld/testsuite/ld-elf/nobits-1.d
+++ b/ld/testsuite/ld-elf/nobits-1.d
@@ -1,7 +1,7 @@
 #ld: -Tnobits-1.t
 #readelf: -l --wide
-#xfail: hppa64-*-*
-# hppa64 adds PHDR
+#xfail: hppa64-*-* mips-*-*
+# mips and hppa64 add PHDR
 
 #...
  Section to Segment mapping:
diff --git a/ld/testsuite/ld-elf/note-1.d b/ld/testsuite/ld-elf/note-1.d
index 345a2bb..1cd2059 100644
--- a/ld/testsuite/ld-elf/note-1.d
+++ b/ld/testsuite/ld-elf/note-1.d
@@ -1,7 +1,7 @@
 #ld: -Tnote-1.t
 #readelf: -l --wide
-#xfail: hppa64-*-*
-# hppa64 adds PHDR
+#xfail: hppa64-*-* mips-*-*
+# mips and hppa64 add PHDR
 
 #...
  Section to Segment mapping:
diff --git a/ld/testsuite/ld-elf/orphan-region.d b/ld/testsuite/ld-elf/orphan-region.d
index bf65356..ef8a86b 100644
--- a/ld/testsuite/ld-elf/orphan-region.d
+++ b/ld/testsuite/ld-elf/orphan-region.d
@@ -3,9 +3,9 @@
 #readelf: -S -l --wide
 #xfail: arc-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-elf i860-*-* i960-*-*
 #xfail: iq*-*-* mn10200-*-* moxie-*-* msp*-*-* mt-*-* or32-*-* pj*-*-*
-#xfail: spu-*-* hppa*64*-*-* *-*-nacl*
+#xfail: spu-*-* hppa*64*-*-* *-*-nacl* mips-*-*
 # if not using elf32.em, you don't get fancy orphan handling
-# spu twiddles LOAD range, hppa64 adds PHDR, nacl splits to two segments
+# spu twiddles LOAD range, mips and hppa64 add PHDR, nacl splits to two segments
 
 #...
   \[[ 0-9]+\] \.text[ \t]+PROGBITS[ \t]+0*40000000[ \t]+.*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d
index e571e13..73386f6 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-03.d
@@ -1,4 +1,5 @@
 #source: attr-gnu-4-0.s
+#as: -msoft-float
 #source: attr-gnu-4-3.s
 #ld: -r
 #readelf: -A
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d
index f8dee5c..628daee 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-04.d
@@ -1,9 +1,5 @@
 #source: attr-gnu-4-0.s
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #ld: -r
-#readelf: -A
-#target: mips*-*-*
-
-Attribute Section: gnu
-File Attributes
-  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
+#error: \A[^\n]*: [^\n]* linking -mfp64 module with previous -mfp32 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d
index 6856df0..7270193 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-05.d
@@ -1,9 +1,9 @@
-#source: attr-gnu-4-0.s
-#source: attr-gnu-4-5.s
-#ld: -r
+#source: attr-gnu-4-0.s -32 -EB
+#source: attr-gnu-4-5.s -32 -EB
+#ld: -r -melf32btsmip
 #readelf: -A
 #target: mips*-*-*
 
 Attribute Section: gnu
 File Attributes
-  Tag_GNU_MIPS_ABI_FP: \?\?\? \(5\)
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-06.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-06.d
new file mode 100644
index 0000000..87d258e
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-06.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-0.s -32 -EB
+#source: attr-gnu-4-6.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-07.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-07.d
new file mode 100644
index 0000000..0d6c22e
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-07.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-0.s
+#source: attr-gnu-4-7.s -W
+#ld: -r
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: \?\?\? \(7\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph.d
new file mode 100644
index 0000000..1b93f36
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph.d
@@ -0,0 +1,20 @@
+#source: attr-gnu-4-1.s -mips32r2 -32 -EB
+#source: attr-gnu-4-1.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x400090
+There are 2 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000074 0x00400074 0x00400074 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x0008c 0x0008c R   0x10000
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph2.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph2.d
new file mode 100644
index 0000000..3eb5feb
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-11-ph2.d
@@ -0,0 +1,16 @@
+#source: attr-gnu-4-1.s -mips32r2 -32 -EB
+#source: attr-gnu-4-1.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#objdump: -p
+#target: mips*-*-*
+
+[^:]*:     file format elf32-tradbigmips
+
+Program Header:
+0x70000000 off    0x00000074 vaddr 0x00400074 paddr 0x00400074 align 2\*\*2
+         filesz 0x00000018 memsz 0x00000018 flags r--
+    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2\*\*16
+         filesz 0x0000008c memsz 0x0000008c flags r--
+private flags = 70001000: \[abi=O32\] \[mips32r2\] \[not 32bitmode\]
+
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
index bde387b..f562613 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-14.d
@@ -1,5 +1,7 @@
 #source: attr-gnu-4-1.s
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #ld: -r
-#warning: Warning: .* uses -mdouble-float \(set by .*\), .* uses -mips32r2 -mfp64
+#error: \A[^\n]*: Warning: .* uses -mdouble-float \(set by .*\), .* uses -mips32r2 -mfp64 \(12 callee-saved\)\n
+#error:   [^\n]*: [^\n]* linking -mfp64 module with previous -mfp32 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
 #target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-15-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-15-ph.d
new file mode 100644
index 0000000..9c104fd
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-15-ph.d
@@ -0,0 +1,20 @@
+#source: attr-gnu-4-1.s -mips32r2 -32 -EB
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x400090
+There are 2 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000074 0x00400074 0x00400074 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x0008c 0x0008c R   0x10000
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d
index b19645f..df40614 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-15.d
@@ -1,8 +1,7 @@
-#source: attr-gnu-4-1.s
-#source: attr-gnu-4-5.s
-#ld: -r
+#source: attr-gnu-4-1.s -32 -EB
+#source: attr-gnu-4-5.s -32 -EB
+#ld: -r -melf32btsmip
 #readelf: -A
-#warning: Warning: .* uses -mdouble-float \(set by .*\), .* uses unknown floating point ABI 5
 #target: mips*-*-*
 
 Attribute Section: gnu
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-16-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-16-ph.d
new file mode 100644
index 0000000..6e8165b
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-16-ph.d
@@ -0,0 +1,23 @@
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x4000b0
+There are 3 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000094 0x00400094 0x00400094 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x000ac 0x000ac R   0x10000
+  FPMODE         0x000000 0x00000000 0x00000000 0x00000 0x00000     0x4
+      \[O32 FP64 ABI\]
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
+   02     
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-16.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-16.d
new file mode 100644
index 0000000..1d38585
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-16.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s -32 -EB
+#source: attr-gnu-4-6.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses -mdouble-float \(set by .*\), .* uses -mips32r2 -mfp64
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-17.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-17.d
new file mode 100644
index 0000000..1e0c540
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-17.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-1.s
+#source: attr-gnu-4-7.s -W
+#ld: -r
+#readelf: -A
+#warning: Warning: .* uses -mdouble-float \(set by .*\), .* uses unknown floating point ABI 7
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s
index 54ebf4e..4021bed 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-2.s
@@ -1 +1,2 @@
+.module singlefloat
 .gnu_attribute 4,2
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d
index c31bb64..a44827a 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-24.d
@@ -1,5 +1,7 @@
 #source: attr-gnu-4-2.s
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #ld: -r
-#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses -mips32r2 -mfp64
+#error: \A[^\n]*: Warning: .* uses -msingle-float \(set by .*\), .* uses -mips32r2 -mfp64 \(12 callee-saved\)\n
+#error:   [^\n]*: [^\n]* linking -mfp64 module with previous -mfp32 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
 #target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d
index b5456ab..2a9fe51 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-25.d
@@ -1,8 +1,8 @@
-#source: attr-gnu-4-2.s
-#source: attr-gnu-4-5.s
-#ld: -r
+#source: attr-gnu-4-2.s -32 -EB
+#source: attr-gnu-4-5.s -32 -EB
+#ld: -r -melf32btsmip
 #readelf: -A
-#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses unknown floating point ABI 5
+#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses -mfpxx
 #target: mips*-*-*
 
 Attribute Section: gnu
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-26.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-26.d
new file mode 100644
index 0000000..599fc03
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-26.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s -32 -EB
+#source: attr-gnu-4-6.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses -mips32r2 -mfp64
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-27.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-27.d
new file mode 100644
index 0000000..22985c3
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-27.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-2.s
+#source: attr-gnu-4-7.s -W
+#ld: -r
+#readelf: -A
+#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses unknown floating point ABI 7
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s
index 32e5f5d..0ba0b80 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-3.s
@@ -1 +1,2 @@
+.module softfloat
 .gnu_attribute 4,3
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d
index be24523..a86b53f 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-34.d
@@ -1,5 +1,7 @@
 #source: attr-gnu-4-3.s
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #ld: -r
-#warning: Warning: .* uses -msoft-float \(set by .*\), .* uses -mhard-float
+#error: \A[^\n]*: Warning: .* uses -msoft-float \(set by .*\), .* uses -mhard-float\n
+#error:   [^\n]*: [^\n]* linking -mfp64 module with previous -mfp32 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
 #target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d
index bcb1e02..bcb0494 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-35.d
@@ -1,8 +1,8 @@
-#source: attr-gnu-4-3.s
-#source: attr-gnu-4-5.s
-#ld: -r
+#source: attr-gnu-4-3.s -32 -EB
+#source: attr-gnu-4-5.s -32 -EB
+#ld: -r -melf32btsmip
 #readelf: -A
-#warning: Warning: .* uses -msoft-float \(set by .*\), .* uses unknown floating point ABI 5
+#warning: Warning: .* uses -msoft-float \(set by .*\), .* uses -mhard-float
 #target: mips*-*-*
 
 Attribute Section: gnu
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-36.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-36.d
new file mode 100644
index 0000000..3ebd5d6
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-36.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s -32 -EB
+#source: attr-gnu-4-6.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses -msoft-float \(set by .*\), .* uses -mhard-float
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-37.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-37.d
new file mode 100644
index 0000000..166690f
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-37.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-3.s
+#source: attr-gnu-4-7.s -W
+#ld: -r
+#readelf: -A
+#warning: Warning: .* uses -msoft-float \(set by .*\), .* uses unknown floating point ABI 7
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Soft float
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d
index 27d4571..6aa22b9 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-40.d
@@ -1,9 +1,5 @@
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #source: attr-gnu-4-0.s
 #ld: -r
-#readelf: -A
-#target: mips*-*-*
-
-Attribute Section: gnu
-File Attributes
-  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
+#error: \A[^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
index b652983..eb18ff3 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-41.d
@@ -1,5 +1,7 @@
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #source: attr-gnu-4-1.s
 #ld: -r
-#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses -mdouble-float
+#error: \A[^\n]*: Warning: .* uses -mips32r2 -mfp64 \(12 callee-saved\) \(set by .*\), .* uses -mdouble-float\n
+#error:   [^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
 #target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d
index a1b79ea..775e24a 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-42.d
@@ -1,5 +1,7 @@
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #source: attr-gnu-4-2.s
 #ld: -r
-#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses -msingle-float
+#error: \A[^\n]*: Warning: .* uses -mips32r2 -mfp64 \(12 callee-saved\) \(set by .*\), .* uses -msingle-float\n
+#error:   [^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
 #target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d
index 23f40c6..aa5c446 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-43.d
@@ -1,5 +1,7 @@
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
 #source: attr-gnu-4-3.s
 #ld: -r
-#warning: Warning: .* uses -mhard-float \(set by .*\), .* uses -msoft-float
+#error: \A[^\n]*: Warning: .* uses -mhard-float \(set by .*\), .* uses -msoft-float\n
+#error:   [^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
 #target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d
index 68b03a0..dec7302 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-44.d
@@ -1,9 +1,9 @@
-#source: attr-gnu-4-4.s
-#source: attr-gnu-4-4.s
+#source: attr-gnu-4-4.s -W
+#source: attr-gnu-4-4.s -W
 #ld: -r
 #readelf: -A
 #target: mips*-*-*
 
 Attribute Section: gnu
 File Attributes
-  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU 12 callee-saved\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d
index 0d1b079..5edd0f8 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-45.d
@@ -1,10 +1,12 @@
-#source: attr-gnu-4-4.s
-#source: attr-gnu-4-5.s
-#ld: -r
+#source: attr-gnu-4-4.s -W -32 -EB
+#source: attr-gnu-4-5.s -32 -EB
+#ld: -r -melf32btsmip
 #readelf: -A
-#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses unknown floating point ABI 5
+#error: \A[^\n]*: Warning: .* uses -mips32r2 -mfp64 \(12 callee-saved\) \(set by .*\), .* uses -mfpxx\n
+#error:   [^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
 #target: mips*-*-*
 
 Attribute Section: gnu
 File Attributes
-  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU 12 callee-saved\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-46.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-46.d
new file mode 100644
index 0000000..2d9ee52
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-46.d
@@ -0,0 +1,12 @@
+#source: attr-gnu-4-4.s -W -32 -EB
+#source: attr-gnu-4-6.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#error: \A[^\n]*: Warning: .* uses -mips32r2 -mfp64 \(12 callee-saved\) \(set by .*\), .* uses -mips32r2 -mfp64\n
+#error:   [^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU 12 callee-saved\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-47.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-47.d
new file mode 100644
index 0000000..11f9755
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-47.d
@@ -0,0 +1,12 @@
+#source: attr-gnu-4-4.s -W
+#source: attr-gnu-4-7.s -W
+#ld: -r
+#readelf: -A
+#error: \A[^\n]*: Warning: .* uses -mips32r2 -mfp64 \(12 callee-saved\) \(set by .*\), .* uses unknown floating point ABI 7\n
+#error:   [^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU 12 callee-saved\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s
index b21ec3b..06f6c6f 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-5.s
@@ -1 +1,3 @@
+.module mips32r2
+.module fp=xx
 .gnu_attribute 4,5
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-50.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-50.d
new file mode 100644
index 0000000..74dd865
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-50.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-0.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-51-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-51-ph.d
new file mode 100644
index 0000000..9830556
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-51-ph.d
@@ -0,0 +1,20 @@
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB
+#source: attr-gnu-4-1.s -mips32r2 -32 -EB
+#ld: -melf32btsmip 
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x400090
+There are 2 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000074 0x00400074 0x00400074 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x0008c 0x0008c R   0x10000
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d
index e183d54..47919a5 100644
--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-51.d
@@ -1,5 +1,9 @@
-#source: attr-gnu-4-5.s
-#source: attr-gnu-4-1.s
-#ld: -r
-#warning: Warning: .* uses unknown floating point ABI 5 \(set by .*\), .* uses -mdouble-float
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-1.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
 #target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-52.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-52.d
new file mode 100644
index 0000000..55d662d
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-52.d
@@ -0,0 +1,5 @@
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-2.s -32 -EB
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -mfpxx \(set by .*\), .* uses -msingle-float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-53.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-53.d
new file mode 100644
index 0000000..927ebaf
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-53.d
@@ -0,0 +1,5 @@
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-3.s -32 -EB
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -mhard-float \(set by .*\), .* uses -msoft-float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-54.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-54.d
new file mode 100644
index 0000000..e4ff1de
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-54.d
@@ -0,0 +1,7 @@
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-4.s -W -32 -EB
+#ld: -r -melf32btsmip
+#error: \A[^\n]*: Warning: .* uses -mfpxx \(set by .*\), .* uses -mips32r2 -mfp64 \(12 callee-saved\)\n
+#error:   [^\n]*: [^\n]* linking -mfp64 module with previous -mfp32 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph.d
new file mode 100644
index 0000000..f0235b2
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph.d
@@ -0,0 +1,23 @@
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x4000b0
+There are 3 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000094 0x00400094 0x00400094 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x000ac 0x000ac R   0x10000
+  FPMODE         0x000000 0x00000000 0x00000000 0x00000 0x00000     0x4
+      \[O32 FPXX ABI\]
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
+   02     
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph2.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph2.d
new file mode 100644
index 0000000..ca40416
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-55-ph2.d
@@ -0,0 +1,18 @@
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB -32 -EB
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB -32 -EB
+#ld: -melf32btsmip -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#objdump: -p
+#target: mips*-*-*
+
+[^:]*:     file format elf32-tradbigmips
+
+Program Header:
+0x70000000 off    0x00000094 vaddr 0x00400094 paddr 0x00400094 align 2\*\*2
+         filesz 0x00000018 memsz 0x00000018 flags r--
+    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2\*\*16
+         filesz 0x000000ac memsz 0x000000ac flags r--
+0x70000003 off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2\*\*2
+         filesz 0x00000000 memsz 0x00000000 flags --- 10000000
+private flags = 70001000: \[abi=O32\] \[mips32r2\] \[not 32bitmode\] \[FPXX\]
+
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-55.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-55.d
new file mode 100644
index 0000000..adc27b4
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-55.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-5.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-56-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-56-ph.d
new file mode 100644
index 0000000..243438e
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-56-ph.d
@@ -0,0 +1,23 @@
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x4000b0
+There are 3 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000094 0x00400094 0x00400094 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x000ac 0x000ac R   0x10000
+  FPMODE         0x000000 0x00000000 0x00000000 0x00000 0x00000     0x4
+      \[O32 FP64 ABI\]
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
+   02     
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-56.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-56.d
new file mode 100644
index 0000000..d3ff3fd
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-56.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-6.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-57.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-57.d
new file mode 100644
index 0000000..0e19c4c
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-57.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-5.s -32 -EB
+#source: attr-gnu-4-7.s -W -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses -mfpxx \(set by .*\), .* uses unknown floating point ABI 7
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(Any FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-6.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-6.s
new file mode 100644
index 0000000..adcff8a
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-6.s
@@ -0,0 +1,4 @@
+.module mips32r2
+.module gp=32
+.module fp=64
+.gnu_attribute 4,6
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-60.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-60.d
new file mode 100644
index 0000000..e7aa582
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-60.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-0.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-61.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-61.d
new file mode 100644
index 0000000..7105007
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-61.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-1.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses -mdouble-float
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-62.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-62.d
new file mode 100644
index 0000000..76d4f1d
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-62.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-2.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses -msingle-float
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-63.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-63.d
new file mode 100644
index 0000000..5d743f8
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-63.d
@@ -0,0 +1,5 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-3.s -32 -EB
+#ld: -r -melf32btsmip
+#warning: Warning: .* uses -mhard-float \(set by .*\), .* uses -msoft-float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-64.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-64.d
new file mode 100644
index 0000000..6a37c6a
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-64.d
@@ -0,0 +1,7 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-4.s -W -32 -EB
+#ld: -r -melf32btsmip
+#error: \A[^\n]*: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses -mips32r2 -mfp64 \(12 callee-saved\)\n
+#error:   [^\n]*: [^\n]* linking -mfp64 module with previous -mfp32 modules\n
+#error:   [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-65-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-65-ph.d
new file mode 100644
index 0000000..5e02587
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-65-ph.d
@@ -0,0 +1,23 @@
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#source: attr-gnu-4-5.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x4000b0
+There are 3 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000094 0x00400094 0x00400094 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x000ac 0x000ac R   0x10000
+  FPMODE         0x000000 0x00000000 0x00000000 0x00000 0x00000     0x4
+      \[O32 FP64 ABI\]
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
+   02     
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-65.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-65.d
new file mode 100644
index 0000000..1a101aa
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-65.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-5.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph.d
new file mode 100644
index 0000000..6e8165b
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph.d
@@ -0,0 +1,23 @@
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#readelf: -l
+#target: mips*-*-*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x4000b0
+There are 3 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  REGINFO        0x000094 0x00400094 0x00400094 0x00018 0x00018 R   0x4
+  LOAD           0x000000 0x00400000 0x00400000 0x000ac 0x000ac R   0x10000
+  FPMODE         0x000000 0x00000000 0x00000000 0x00000 0x00000     0x4
+      \[O32 FP64 ABI\]
+
+ Section to Segment mapping:
+  Segment Sections...
+   00     .reginfo 
+   01     .reginfo 
+   02     
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph2.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph2.d
new file mode 100644
index 0000000..9be2b09
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-66-ph2.d
@@ -0,0 +1,18 @@
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#source: attr-gnu-4-6.s -mips32r2 -32 -EB
+#ld: -melf32btsmip
+#warning: warning: cannot find entry symbol __start; defaulting to .*
+#objdump: -p
+#target: mips*-*-*
+
+[^:]*:     file format elf32-tradbigmips
+
+Program Header:
+0x70000000 off    0x00000094 vaddr 0x00400094 paddr 0x00400094 align 2\*\*2
+         filesz 0x00000018 memsz 0x00000018 flags r--
+    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2\*\*16
+         filesz 0x000000ac memsz 0x000000ac flags r--
+0x70000003 off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2\*\*2
+         filesz 0x00000000 memsz 0x00000000 flags --- 20000000
+private flags = 70001000: \[abi=O32\] \[mips32r2\] \[not 32bitmode\] \[FP64\]
+
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-66.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-66.d
new file mode 100644
index 0000000..7dc8638
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-66.d
@@ -0,0 +1,9 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-6.s -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-67.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-67.d
new file mode 100644
index 0000000..eb98891
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-67.d
@@ -0,0 +1,10 @@
+#source: attr-gnu-4-6.s -32 -EB
+#source: attr-gnu-4-7.s -W -32 -EB
+#ld: -r -melf32btsmip
+#readelf: -A
+#warning: Warning: .* uses -mips32r2 -mfp64 \(set by .*\), .* uses unknown floating point ABI 7
+#target: mips*-*-*
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(MIPS32r2 64-bit FPU\)
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-7.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-7.s
new file mode 100644
index 0000000..0ab9aea
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-7.s
@@ -0,0 +1 @@
+.gnu_attribute 4,7
diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-71.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-71.d
new file mode 100644
index 0000000..044157e
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-71.d
@@ -0,0 +1,5 @@
+#source: attr-gnu-4-7.s -W
+#source: attr-gnu-4-1.s
+#ld: -r
+#warning: Warning: .* uses unknown floating point ABI 7 \(set by .*\), .* uses -mdouble-float
+#target: mips*-*-*
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index a2632b2..eb1a229 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -634,37 +634,23 @@ run_ld_link_tests $mips16_intermix_test
 
 run_dump_test "mips16-local-stubs-1"
 
-run_dump_test "attr-gnu-4-00"
-run_dump_test "attr-gnu-4-01"
-run_dump_test "attr-gnu-4-02"
-run_dump_test "attr-gnu-4-03"
-run_dump_test "attr-gnu-4-04"
-run_dump_test "attr-gnu-4-05"
-run_dump_test "attr-gnu-4-10"
-run_dump_test "attr-gnu-4-11"
-run_dump_test "attr-gnu-4-12"
-run_dump_test "attr-gnu-4-13"
-run_dump_test "attr-gnu-4-14"
-run_dump_test "attr-gnu-4-15"
-run_dump_test "attr-gnu-4-20"
-run_dump_test "attr-gnu-4-21"
-run_dump_test "attr-gnu-4-22"
-run_dump_test "attr-gnu-4-23"
-run_dump_test "attr-gnu-4-24"
-run_dump_test "attr-gnu-4-25"
-run_dump_test "attr-gnu-4-30"
-run_dump_test "attr-gnu-4-31"
-run_dump_test "attr-gnu-4-32"
-run_dump_test "attr-gnu-4-33"
-run_dump_test "attr-gnu-4-34"
-run_dump_test "attr-gnu-4-35"
-run_dump_test "attr-gnu-4-40"
-run_dump_test "attr-gnu-4-41"
-run_dump_test "attr-gnu-4-42"
-run_dump_test "attr-gnu-4-43"
-run_dump_test "attr-gnu-4-44"
-run_dump_test "attr-gnu-4-45"
-run_dump_test "attr-gnu-4-51"
+foreach firstfpabi [list 0 1 2 3 4 5 6] {
+  foreach secondfpabi [list 0 1 2 3 4 5 6 7] {
+    run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}"
+  }
+}
+run_dump_test "attr-gnu-4-71"
+
+run_dump_test "attr-gnu-4-11-ph"
+run_dump_test "attr-gnu-4-11-ph2"
+run_dump_test "attr-gnu-4-55-ph"
+run_dump_test "attr-gnu-4-55-ph2"
+run_dump_test "attr-gnu-4-66-ph"
+run_dump_test "attr-gnu-4-66-ph2"
+run_dump_test "attr-gnu-4-15-ph"
+run_dump_test "attr-gnu-4-51-ph"
+run_dump_test "attr-gnu-4-56-ph"
+run_dump_test "attr-gnu-4-65-ph"
 
 run_dump_test "nan-legacy"
 run_dump_test "nan-2008"
diff --git a/ld/testsuite/ld-mips-elf/mips16-pic-1.gd b/ld/testsuite/ld-mips-elf/mips16-pic-1.gd
index b8d8b34..a2c6682 100644
--- a/ld/testsuite/ld-mips-elf/mips16-pic-1.gd
+++ b/ld/testsuite/ld-mips-elf/mips16-pic-1.gd
@@ -1,4 +1,8 @@
 
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+
 Primary GOT:
  Canonical gp value: 00057ff0
 
diff --git a/ld/testsuite/ld-mips-elf/mips16-pic-2.gd b/ld/testsuite/ld-mips-elf/mips16-pic-2.gd
index c291bc8..ec97a85 100644
--- a/ld/testsuite/ld-mips-elf/mips16-pic-2.gd
+++ b/ld/testsuite/ld-mips-elf/mips16-pic-2.gd
@@ -1,4 +1,8 @@
 
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+
 Primary GOT:
  Canonical gp value: 00057ff0
 
diff --git a/ld/testsuite/ld-mips-elf/mips16-pic-3.gd b/ld/testsuite/ld-mips-elf/mips16-pic-3.gd
index 9297fe6..449119c 100644
--- a/ld/testsuite/ld-mips-elf/mips16-pic-3.gd
+++ b/ld/testsuite/ld-mips-elf/mips16-pic-3.gd
@@ -1,4 +1,8 @@
 
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+
 Primary GOT:
  Canonical gp value: 00057ff0
 
diff --git a/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd b/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd
index 1ab835e..552cad3 100644
--- a/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd
+++ b/ld/testsuite/ld-mips-elf/mips16-pic-4a.gd
@@ -1,4 +1,8 @@
 
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+
 Primary GOT:
  Canonical gp value: 00057ff0
 
diff --git a/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s b/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s
index a2eee84..a95bad0 100644
--- a/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s
+++ b/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s
@@ -1,3 +1,4 @@
+	.gnu_attribute 4,1
 	.macro  one_sym count
 	.globl  sym_1_\count
 sym_1_\count:
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd
index aa9579b..b0f7b1e 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd
@@ -1,4 +1,8 @@
 
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+
 Primary GOT:
  Canonical gp value: 000183f0
 
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s
index 385e7fd..33bd3c6 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s
@@ -1,4 +1,5 @@
 	.abicalls
+	.gnu_attribute 4,1
 	.set	noreorder
 	.set	nomips16
 	.global	foo
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd
index 6d3d677..e96e87f 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd
@@ -1,4 +1,8 @@
 
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+
 Primary GOT:
  Canonical gp value: 000a7ff0
 
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s
index 571c774..8401254 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s
@@ -1,4 +1,5 @@
 	.abicalls
+	.gnu_attribute 4,1
 	.option	pic0
 	.global	__start
 	.ent	__start
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s b/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s
index 7e25bf4..7c03692 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s
@@ -1,4 +1,5 @@
 	.abicalls
+	.gnu_attribute 4,1
 	.option	pic0
 	.global	__start
 	.ent	__start
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd b/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd
index 6919a69..6d46b4f 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd
@@ -1,4 +1,8 @@
 
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+
 Primary GOT:
  Canonical gp value: 000a7ff0
 
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s b/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s
index 73b518f..0d8a860 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s
@@ -1,4 +1,5 @@
 	.abicalls
+	.gnu_attribute 4,1
 	.global	ext
 	.ent	ext
 ext:
diff --git a/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s b/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s
index a4c0075..98e681e 100644
--- a/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s
+++ b/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s
@@ -1,4 +1,5 @@
 	.abicalls
+	.gnu_attribute 4,1
 	.global	extf1
 	.ent	extf1
 extf1:
diff --git a/ld/testsuite/ld-mips-elf/rel32.s b/ld/testsuite/ld-mips-elf/rel32.s
index dad4670..2a1bf71 100644
--- a/ld/testsuite/ld-mips-elf/rel32.s
+++ b/ld/testsuite/ld-mips-elf/rel32.s
@@ -1,3 +1,4 @@
+	.gnu_attribute 4,1
 	.space 16
 .Lfoo:
 	.word .Lfoo
diff --git a/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s b/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s
index 60f6717..8b7ef16 100644
--- a/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s
+++ b/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s
@@ -1,3 +1,4 @@
+.gnu_attribute 4,1
 .macro	one_sym	count
 .globl	sym_1_\count
 sym_1_\count:
diff --git a/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s b/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s
index 6b04b98..8e182cf 100644
--- a/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s
+++ b/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s
@@ -1,3 +1,4 @@
+.gnu_attribute 4,1
 .macro	one_sym	count
 .globl	sym_2_\count
 sym_2_\count:
diff --git a/ld/testsuite/ld-mips-elf/tls-multi-got-1.r b/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
index aea3d2de..45bd791 100644
--- a/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
+++ b/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
@@ -15,7 +15,7 @@ Dynamic section at offset .* contains 18 entries:
  0x70000006 \(MIPS_BASE_ADDRESS\)          0x0
  0x7000000a \(MIPS_LOCAL_GOTNO\)           2
  0x70000011 \(MIPS_SYMTABNO\)              20011
- 0x70000012 \(MIPS_UNREFEXTNO\)            10
+ 0x70000012 \(MIPS_UNREFEXTNO\)            11
  0x70000013 \(MIPS_GOTSYM\)                0xb
  0x0000001e \(FLAGS\)                      STATIC_TLS
  0x00000000 \(NULL\)                       0x0
diff --git a/ld/testsuite/ld-mips-elf/tlsbin-o32.s b/ld/testsuite/ld-mips-elf/tlsbin-o32.s
index 8ff9831..8599005 100644
--- a/ld/testsuite/ld-mips-elf/tlsbin-o32.s
+++ b/ld/testsuite/ld-mips-elf/tlsbin-o32.s
@@ -1,4 +1,5 @@
 	.file	1 "tlsbin-o32.s"
+	.gnu_attribute 4,1
 	.abicalls
 	.text
 	.align	2
diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32.s b/ld/testsuite/ld-mips-elf/tlsdyn-o32.s
index 2924221..fedd5c5 100644
--- a/ld/testsuite/ld-mips-elf/tlsdyn-o32.s
+++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32.s
@@ -1,4 +1,5 @@
 	.file	1 "tlsbin-o32.s"
+	.gnu_attribute 4,1
 	.abicalls
 	.text
 	.align	2
diff --git a/ld/testsuite/ld-mips-elf/tlslib-o32.s b/ld/testsuite/ld-mips-elf/tlslib-o32.s
index c15829f..0a5f016 100644
--- a/ld/testsuite/ld-mips-elf/tlslib-o32.s
+++ b/ld/testsuite/ld-mips-elf/tlslib-o32.s
@@ -1,4 +1,5 @@
 	.file	1 "tlslib-o32.s"
+	.gnu_attribute 4,1
 	.abicalls
 	.text
 	.align	2
-- 
1.7.12.3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]