aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-10-30 18:13:10 +0000
committerChris Lattner <sabre@nondot.org>2010-10-30 18:13:10 +0000
commit1a1ecc9f3c2684249bd765d1299302d629aaf4fe (patch)
tree17d4a42e0031ca30e45114298a055ca2dc053c86
parent8b260a76445762f109cc8cf6577435c4cc59e3aa (diff)
fix an encoding mismatch where "sal %eax, 1" was not using the short encoding
for shl. Caught by inspection. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117820 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/AsmParser/X86AsmParser.cpp2
-rw-r--r--test/MC/X86/x86-32.s5
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 8a7cdc788a..e92441682c 100644
--- a/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -783,7 +783,7 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
// FIXME: Hack to handle recognize s{hr,ar,hl} $1, <op>. Canonicalize to
// "shift <op>".
if ((Name.startswith("shr") || Name.startswith("sar") ||
- Name.startswith("shl")) &&
+ Name.startswith("shl") || Name.startswith("sal")) &&
Operands.size() == 3) {
X86Operand *Op1 = static_cast<X86Operand*>(Operands[1]);
if (Op1->isImm() && isa<MCConstantExpr>(Op1->getImm()) &&
diff --git a/test/MC/X86/x86-32.s b/test/MC/X86/x86-32.s
index 7407767f7a..41876333a6 100644
--- a/test/MC/X86/x86-32.s
+++ b/test/MC/X86/x86-32.s
@@ -57,6 +57,11 @@ rdtscp
// CHECK: shrl %eax # encoding: [0xd1,0xe8]
shrl $1, %eax
+// CHECK: shll %eax # encoding: [0xd1,0xe0]
+ sall $1, %eax
+// CHECK: shll %eax # encoding: [0xd1,0xe0]
+ sal $1, %eax
+
// moffset forms of moves, rdar://7947184
movb 0, %al // CHECK: movb 0, %al # encoding: [0xa0,A,A,A,A]
movw 0, %ax // CHECK: movw 0, %ax # encoding: [0x66,0xa1,A,A,A,A]