Mips assembler: .set reorder support
authorJack Carter <jack.carter@imgtec.com>
Thu, 25 Apr 2013 23:31:35 +0000 (23:31 +0000)
committerJack Carter <jack.carter@imgtec.com>
Thu, 25 Apr 2013 23:31:35 +0000 (23:31 +0000)
commit97265a48895a2cda7f04e47bfe935c4fdd71f8ae
tree10ee6dbec49767b76962179da183607488d8f85e
parent0fc7137f2f8a99cb749024c51e3247f4b24e1ee0
Mips assembler: .set reorder support

Mips have delayslots for certain instructions
like jumps and branches. These are instructions
that follow the branch or jump and are executed
before the jump or branch is completed.

Early Mips compilers could not cope with delayslots
and left them up to the assembler. The assembler would
fill the delayslots with the appropriate instruction,
usually just a nop to allow correct runtime behavior.

The default behavior for this is set with .set reorder.
To tell the assembler that you don't want it to mess with
the delayslot one used .set noreorder.

For backwards compatibility we need to support
.set reorder and have it be the default behavior in the
assembler.

Our support for it is to insert a NOP directly after an
instruction with a delayslot when in .set reorder mode.

Contributer: Vladimir Medic

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180584 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/Mips/AsmParser/MipsAsmParser.cpp
test/MC/Mips/mips_directives.s