summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-03-13 00:47:29 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-03-13 00:47:29 +0000
commit18fc344290d7241fd47a9eaba21cde777e7bae9e (patch)
tree409a8b16654e5e6a79aeab3e3d682291fbf1db8f
parentb86672059ed9a5c10d60e15406a50e6ca214269d (diff)
downloadbcm5719-llvm-18fc344290d7241fd47a9eaba21cde777e7bae9e.tar.gz
bcm5719-llvm-18fc344290d7241fd47a9eaba21cde777e7bae9e.zip
MC/X86: Add temporary hack to match shrl $1,%eax correctly, to support testing
other functionality on 403.gcc compiled at -O0. llvm-svn: 98405
-rw-r--r--llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp9
-rw-r--r--llvm/test/MC/AsmParser/X86/x86_32-new-encoder.s3
2 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 84d7bb7a6f3..dde86fbbe44 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -542,6 +542,15 @@ ParseInstruction(const StringRef &Name, SMLoc NameLoc,
}
}
+ // FIXME: Hack to handle recognizing s{hr,ar,hl}? $1.
+ if ((Name.startswith("shr") || Name.startswith("sar") ||
+ Name.startswith("shl")) &&
+ Operands.size() == 3 &&
+ static_cast<X86Operand*>(Operands[1])->isImm() &&
+ isa<MCConstantExpr>(static_cast<X86Operand*>(Operands[1])->getImm()) &&
+ cast<MCConstantExpr>(static_cast<X86Operand*>(Operands[1])->getImm())->getValue() == 1)
+ Operands.erase(Operands.begin() + 1);
+
return false;
}
diff --git a/llvm/test/MC/AsmParser/X86/x86_32-new-encoder.s b/llvm/test/MC/AsmParser/X86/x86_32-new-encoder.s
index d4e3be4bd28..c00007fd168 100644
--- a/llvm/test/MC/AsmParser/X86/x86_32-new-encoder.s
+++ b/llvm/test/MC/AsmParser/X86/x86_32-new-encoder.s
@@ -47,3 +47,6 @@ rdtscp
// CHECK: addw %ax, %ax # encoding: [0x66,0x01,0xc0]
addw %ax, %ax
+
+// CHECK: shrl %eax # encoding: [0xd1,0xe8]
+ shrl $1, %eax
OpenPOWER on IntegriCloud