implement support for 'clr' alias. This is part of rdar://8416805,
authorChris Lattner <sabre@nondot.org>
Mon, 27 Sep 2010 04:23:03 +0000 (04:23 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 27 Sep 2010 04:23:03 +0000 (04:23 +0000)
but balrog was wanting it on irc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114809 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmParser.cpp
test/MC/AsmParser/X86/x86_instructions.s

index 01ccc50adf92302be5e885da479d4fddd7f21454..18fb173e1c1a178b99637ca4923f70aa53f765c9 100644 (file)
@@ -1052,6 +1052,17 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
     Operands[0] = X86Operand::CreateToken("fstps", NameLoc);
   }
   
+  
+  // "clr <reg>" -> "xor <reg>, <reg>".
+  if ((Name == "clrb" || Name == "clrw" || Name == "clrl" || Name == "clrq" ||
+       Name == "clr") && Operands.size() == 2 &&
+      static_cast<X86Operand*>(Operands[1])->isReg()) {
+    unsigned RegNo = static_cast<X86Operand*>(Operands[1])->getReg();
+    Operands.push_back(X86Operand::CreateReg(RegNo, NameLoc, NameLoc));
+    delete Operands[0];
+    Operands[0] = X86Operand::CreateToken("xor", NameLoc);
+  }
+  
   return false;
 }
 
index b72374db46f41bde9e68b3e243312d1bc2091158..9725e9dcbfda915c23b6d33715bebb46c5947e4d 100644 (file)
@@ -360,4 +360,18 @@ mov %rdx, %cr15
 faddp %st, %st(1)
 fmulp %st, %st(2)
 
+// rdar://8416805
+// CHECK: xorb %al, %al
+// CHECK: encoding: [0x30,0xc0]
+// CHECK: xorw %di, %di
+// CHECK: encoding: [0x66,0x31,0xff]
+// CHECK: xorl %esi, %esi
+// CHECK: encoding: [0x31,0xf6]
+// CHECK: xorq %rsi, %rsi
+// CHECK: encoding: [0x48,0x31,0xf6]
+clrb    %al
+clr    %di
+clr    %esi
+clr    %rsi
+