[mips][mips64r6] ll, sc, lld, and scd are re-encoded on MIPS32r6/MIPS64r6.
authorDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 16 Jun 2014 13:13:03 +0000 (13:13 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 16 Jun 2014 13:13:03 +0000 (13:13 +0000)
commit6a803f61621ebcca6f9e1f4244af912cd7fb1540
tree98008aba18d9a9901ffdaa5bf9c0f2276d278f93
parent0469dbd43fca9215f14a6b17e3b8f59795feb4a6
[mips][mips64r6] ll, sc, lld, and scd are re-encoded on MIPS32r6/MIPS64r6.

Summary:
The linked-load, store-conditional operations have been re-encoded such
that have a 9-bit offset instead of the 16-bit offset they have prior to
MIPS32r6/MIPS64r6.

While implementing this, I noticed that the atomic load/store pseudos always
emit a sign extension using sll and sra. I have improved this to use seb/seh
when they are available (MIPS32r2/MIPS64r2 and above).

Depends on D4118

Reviewers: jkolek, zoran.jovanovic, vmedic

Reviewed By: vmedic

Differential Revision: http://reviews.llvm.org/D4119

llvm-svn: 211018
23 files changed:
llvm/lib/Target/Mips/Disassembler/MipsDisassembler.cpp
llvm/lib/Target/Mips/MCTargetDesc/MipsNaClELFStreamer.cpp
llvm/lib/Target/Mips/Mips32r6InstrFormats.td
llvm/lib/Target/Mips/Mips32r6InstrInfo.td
llvm/lib/Target/Mips/Mips64InstrInfo.td
llvm/lib/Target/Mips/Mips64r6InstrInfo.td
llvm/lib/Target/Mips/MipsISelLowering.cpp
llvm/lib/Target/Mips/MipsISelLowering.h
llvm/lib/Target/Mips/MipsInstrInfo.td
llvm/lib/Target/Mips/MipsSubtarget.h
llvm/test/CodeGen/Mips/atomic.ll
llvm/test/MC/Disassembler/Mips/mips32r6.txt
llvm/test/MC/Disassembler/Mips/mips64r6.txt
llvm/test/MC/Mips/mips2/valid.s
llvm/test/MC/Mips/mips3/valid.s
llvm/test/MC/Mips/mips32/valid.s
llvm/test/MC/Mips/mips32r2/valid.s
llvm/test/MC/Mips/mips32r6/valid.s
llvm/test/MC/Mips/mips4/valid.s
llvm/test/MC/Mips/mips5/valid.s
llvm/test/MC/Mips/mips64/valid.s
llvm/test/MC/Mips/mips64r2/valid.s
llvm/test/MC/Mips/mips64r6/valid.s