From 3837011236058617292bee831708449e5100c08c Mon Sep 17 00:00:00 2001 From: Goran Jakovljevic Date: Wed, 10 May 2017 14:30:28 +0200 Subject: MIPS64: Add ilvr.df MSA instructions These instructions are needed for compressed string support in ART Vectorizer. Test: mma test-art-host-gtest Change-Id: I269473bb8bcce5aba72201380bb71860e5498d73 --- compiler/utils/mips64/assembler_mips64.cc | 20 ++++++++++++++++++++ compiler/utils/mips64/assembler_mips64.h | 5 +++++ compiler/utils/mips64/assembler_mips64_test.cc | 20 ++++++++++++++++++++ 3 files changed, 45 insertions(+) (limited to 'compiler') diff --git a/compiler/utils/mips64/assembler_mips64.cc b/compiler/utils/mips64/assembler_mips64.cc index f4afb33034..7972931c31 100644 --- a/compiler/utils/mips64/assembler_mips64.cc +++ b/compiler/utils/mips64/assembler_mips64.cc @@ -1775,6 +1775,26 @@ void Mips64Assembler::StD(VectorRegister wd, GpuRegister rs, int offset) { EmitMsaMI10((offset >> TIMES_8) & kMsaS10Mask, rs, wd, 0x9, 0x3); } +void Mips64Assembler::IlvrB(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x5, 0x0, wt, ws, wd, 0x14); +} + +void Mips64Assembler::IlvrH(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x5, 0x1, wt, ws, wd, 0x14); +} + +void Mips64Assembler::IlvrW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x5, 0x2, wt, ws, wd, 0x14); +} + +void Mips64Assembler::IlvrD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + EmitMsa3R(0x5, 0x3, wt, ws, wd, 0x14); +} + void Mips64Assembler::LoadConst32(GpuRegister rd, int32_t value) { TemplateLoadConst32(this, rd, value); } diff --git a/compiler/utils/mips64/assembler_mips64.h b/compiler/utils/mips64/assembler_mips64.h index 6ac336178b..e824791892 100644 --- a/compiler/utils/mips64/assembler_mips64.h +++ b/compiler/utils/mips64/assembler_mips64.h @@ -767,6 +767,11 @@ class Mips64Assembler FINAL : public Assembler, public JNIMacroAssembler