[mips] [IAS] Restore STI.FeatureBits in .set pop.
authorToma Tabacu <toma.tabacu@imgtec.com>
Fri, 5 Jun 2015 11:48:54 +0000 (11:48 +0000)
committerToma Tabacu <toma.tabacu@imgtec.com>
Fri, 5 Jun 2015 11:48:54 +0000 (11:48 +0000)
commitb349e0f1f18a550ec91cc14f14d094896616742a
tree016e5c0c6d678d3b5ae143995ced25d06c6efa27
parent47dfcb7745766fee1aaa135a212b3e1f39d81e96
[mips] [IAS] Restore STI.FeatureBits in .set pop.

Summary:
Only restoring AvailableFeatures is not enough and will lead to buggy behaviour.
For example, if we have a feature enabled and we ".set pop", the next time we try
to ".set" that feature nothing will happen because the "!(STI.getFeatureBits()[Feature])"
check will be false, because we didn't restore STI.FeatureBits.

In order to fix this, we need to make MipsAssemblerOptions remember the STI.FeatureBits
instead of the AvailableFeatures and then regenerate AvailableFeatures each time we ".set pop".
This is because, AFAIK, there is no way to convert from AvailableFeatures back to STI.FeatureBits,
but the reverse is possible by using ComputeAvailableFeatures(STI.FeatureBits).

I also moved the updating of AssemblerOptions inside the "if" statement in
setFeatureBits() and clearFeatureBits(), as there is no reason to update if
nothing changes.

Reviewers: dsanders, mkuper

Reviewed By: dsanders

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239144 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/MC/MCSubtargetInfo.h
lib/Target/Mips/AsmParser/MipsAsmParser.cpp
test/MC/Mips/set-push-pop-directives-bad.s
test/MC/Mips/set-push-pop-directives.s