OSDN Git Service

Added repe_cmpsq instruction to x86_64 assembler
authoragicsaki <agicsaki@google.com>
Tue, 4 Aug 2015 03:14:29 +0000 (20:14 -0700)
committeragicsaki <agicsaki@google.com>
Tue, 4 Aug 2015 03:14:29 +0000 (20:14 -0700)
Change-Id: I9085694fd3313581b2775a8267ccda58fec19a1a

compiler/utils/x86_64/assembler_x86_64.cc
compiler/utils/x86_64/assembler_x86_64.h
compiler/utils/x86_64/assembler_x86_64_test.cc

index 327c3e9..22e7b9b 100644 (file)
@@ -2108,6 +2108,14 @@ void X86_64Assembler::repe_cmpsl() {
 }
 
 
+void X86_64Assembler::repe_cmpsq() {
+  AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+  EmitUint8(0xF3);
+  EmitRex64();
+  EmitUint8(0xA7);
+}
+
+
 void X86_64Assembler::LoadDoubleConstant(XmmRegister dst, double value) {
   // TODO: Need to have a code constants table.
   int64_t constant = bit_cast<int64_t, double>(value);
index dbc0c08..b8e5fb6 100644 (file)
@@ -609,6 +609,7 @@ class X86_64Assembler FINAL : public Assembler {
   void repne_scasw();
   void repe_cmpsw();
   void repe_cmpsl();
+  void repe_cmpsq();
 
   //
   // Macros for High-level operations.
index 74f47ff..296487e 100644 (file)
@@ -1315,4 +1315,10 @@ TEST_F(AssemblerX86_64Test, Repecmpsl) {
   DriverStr(expected, "Repecmpsl");
 }
 
+TEST_F(AssemblerX86_64Test, Repecmpsq) {
+  GetAssembler()->repe_cmpsq();
+  const char* expected = "repe cmpsq\n";
+  DriverStr(expected, "Repecmpsq");
+}
+
 }  // namespace art