From 72aba71d00dd0c420a6ff196066e9378339d46d8 Mon Sep 17 00:00:00 2001 From: Lena Djokic Date: Mon, 30 Oct 2017 15:47:20 +0100 Subject: MIPS: Add asub_s/u.df These instructions are needed for implementing Sum-of-Abs-Differences visitor. Test: mma test-art-host-gtest Change-Id: Ie708f30a450b0558215f59f21bb49b68c852f247 --- compiler/utils/mips/assembler_mips.cc | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'compiler/utils/mips/assembler_mips.cc') diff --git a/compiler/utils/mips/assembler_mips.cc b/compiler/utils/mips/assembler_mips.cc index 9545ca6869..eb75f8b67c 100644 --- a/compiler/utils/mips/assembler_mips.cc +++ b/compiler/utils/mips/assembler_mips.cc @@ -3181,6 +3181,70 @@ void MipsAssembler::MsubvD(VectorRegister wd, VectorRegister ws, VectorRegister static_cast(wt)); } +void MipsAssembler::Asub_sB(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x4, 0x0, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + +void MipsAssembler::Asub_sH(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x4, 0x1, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + +void MipsAssembler::Asub_sW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x4, 0x2, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + +void MipsAssembler::Asub_sD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x4, 0x3, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + +void MipsAssembler::Asub_uB(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x5, 0x0, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + +void MipsAssembler::Asub_uH(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x5, 0x1, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + +void MipsAssembler::Asub_uW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x5, 0x2, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + +void MipsAssembler::Asub_uD(VectorRegister wd, VectorRegister ws, VectorRegister wt) { + CHECK(HasMsa()); + DsFsmInstrFff(EmitMsa3R(0x5, 0x3, wt, ws, wd, 0x11), + static_cast(wd), + static_cast(ws), + static_cast(wt)); +} + void MipsAssembler::FmaddW(VectorRegister wd, VectorRegister ws, VectorRegister wt) { CHECK(HasMsa()); DsFsmInstrFff(EmitMsa3R(0x2, 0x0, wt, ws, wd, 0x1b), -- cgit v1.2.3-59-g8ed1b