MFC r261162:

Pull in r195679 from upstream llvm trunk:

  Don't use nopl in cpus that don't support it.

  Patch by Mikulas Patocka. I added the test. I checked that for cpu names that
  gas knows about, it also doesn't generate nopl.

  The modified cpus:
  i686 - there are i686-class CPUs that don't have nopl: Via c3, Transmeta
	 Crusoe, Microsoft VirtualBox - see
	 https://bbs.archlinux.org/viewtopic.php?pid=775414
  k6, k6-2, k6-3, winchip-c6, winchip2 - these are 586-class CPUs
  via c3 c3-2 - see https://bugs.archlinux.org/task/19733 as a proof that
	 Via c3 and c3-Nehemiah don't have nopl

PR:		bin/185777
This commit is contained in:
dim 2014-01-28 08:07:19 +00:00
parent ddff0f179e
commit 782dc633da

View File

@ -308,8 +308,12 @@ bool X86AsmBackend::writeNopData(uint64_t Count, MCObjectWriter *OW) const {
// This CPU doesnt support long nops. If needed add more. // This CPU doesnt support long nops. If needed add more.
// FIXME: Can we get this from the subtarget somehow? // FIXME: Can we get this from the subtarget somehow?
// FIXME: We could generated something better than plain 0x90.
if (CPU == "generic" || CPU == "i386" || CPU == "i486" || CPU == "i586" || if (CPU == "generic" || CPU == "i386" || CPU == "i486" || CPU == "i586" ||
CPU == "pentium" || CPU == "pentium-mmx" || CPU == "geode") { CPU == "pentium" || CPU == "pentium-mmx" || CPU == "i686" ||
CPU == "k6" || CPU == "k6-2" || CPU == "k6-3" || CPU == "geode" ||
CPU == "winchip-c6" || CPU == "winchip2" || CPU == "c3" ||
CPU == "c3-2") {
for (uint64_t i = 0; i < Count; ++i) for (uint64_t i = 0; i < Count; ++i)
OW->Write8(0x90); OW->Write8(0x90);
return true; return true;