From 3fd0e6a86430bf060c7eb391c1378394c4a2c574 Mon Sep 17 00:00:00 2001 From: agicsaki Date: Mon, 3 Aug 2015 20:14:29 -0700 Subject: [PATCH] Added repe_cmpsq instruction to x86_64 assembler Change-Id: I9085694fd3313581b2775a8267ccda58fec19a1a --- compiler/utils/x86_64/assembler_x86_64.cc | 8 ++++++++ compiler/utils/x86_64/assembler_x86_64.h | 1 + compiler/utils/x86_64/assembler_x86_64_test.cc | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc index 327c3e9be..22e7b9b12 100644 --- a/compiler/utils/x86_64/assembler_x86_64.cc +++ b/compiler/utils/x86_64/assembler_x86_64.cc @@ -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(value); diff --git a/compiler/utils/x86_64/assembler_x86_64.h b/compiler/utils/x86_64/assembler_x86_64.h index dbc0c08f2..b8e5fb6e1 100644 --- a/compiler/utils/x86_64/assembler_x86_64.h +++ b/compiler/utils/x86_64/assembler_x86_64.h @@ -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. diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc index 74f47fff3..296487e79 100644 --- a/compiler/utils/x86_64/assembler_x86_64_test.cc +++ b/compiler/utils/x86_64/assembler_x86_64_test.cc @@ -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 -- 2.11.0