1b78f13911bfe6eda303e91ef215c87a165aae8aeAlexandre Rames// Copyright 2015, VIXL authors 288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// All rights reserved. 388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// 488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Redistribution and use in source and binary forms, with or without 588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// modification, are permitted provided that the following conditions are met: 688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// 788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// * Redistributions of source code must retain the above copyright notice, 888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// this list of conditions and the following disclaimer. 988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// * Redistributions in binary form must reproduce the above copyright 1088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// notice, this list of conditions and the following disclaimer in the 1188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// documentation and/or other materials provided with the distribution. 1288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// * Neither the name of ARM Limited nor the names of its contributors may 1388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// be used to endorse or promote products derived from this software 1488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// without specific prior written permission. 1588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// 1688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND 1788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// POSSIBILITY OF SUCH DAMAGE. 2788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 28d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#ifndef VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_ 29d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#define VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_ 3088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 318d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames#include "code-generation-scopes-vixl.h" 328d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames#include "macro-assembler-interface.h" 3388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#include "utils-vixl.h" 348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames 35d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/instructions-aarch32.h" 36d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch32/assembler-aarch32.h" 37989663e3cb7be8ac458d71f8e8d99afd29b13a39Pierre Langlois#include "aarch32/operands-aarch32.h" 3888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 3988c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisnamespace vixl { 4088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisnamespace aarch32 { 4188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 42e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramleyclass UseScratchRegisterScope; 4388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 44934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliardenum FlagsUpdate { LeaveFlags = 0, SetFlags = 1, DontCare = 2 }; 45934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard 4688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// LiteralPool class, defined as a container for literals 4788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisclass LiteralPool { 4888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 4988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois typedef std::list<RawLiteral*>::iterator RawLiteralListIterator; 5088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 5188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 5288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois LiteralPool() : size_(0) {} 5388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ~LiteralPool() { 5488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(literals_.empty() && (size_ == 0)); 5588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois for (RawLiteralListIterator literal_it = keep_until_delete_.begin(); 5688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal_it != keep_until_delete_.end(); 5788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal_it++) { 5888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois delete *literal_it; 5988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 6088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois keep_until_delete_.clear(); 6188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 6288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 6388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned GetSize() const { return size_; } 6488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 6588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Add a literal to the literal container. 6651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void AddLiteral(RawLiteral* literal) { 67000f93f0af01f9a3f250ad8fb8cd7a42e7b31c99Baptiste Afsa // Manually placed literals can't be added to a literal pool. 68000f93f0af01f9a3f250ad8fb8cd7a42e7b31c99Baptiste Afsa VIXL_ASSERT(!literal->IsManuallyPlaced()); 691ddc52b438c2f07872e6e715c6b86e8d3b772795Vincent Belliard VIXL_ASSERT(!literal->IsBound()); 7051d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard if (literal->GetPositionInPool() == Label::kMaxOffset) { 7151d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard uint32_t position = GetSize(); 7251d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard literal->SetPositionInPool(position); 7351d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard literals_.push_back(literal); 7451d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard size_ += literal->GetAlignedSize(); 7551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 7688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 7788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 7888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // First literal to be emitted. 7988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RawLiteralListIterator GetFirst() { return literals_.begin(); } 8088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 8188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Mark the end of the literal container. 8288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RawLiteralListIterator GetEnd() { return literals_.end(); } 8388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 8488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Remove all the literals from the container. 8588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // If the literal's memory management has been delegated to the container 8688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // it will be delete'd. 8788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Clear() { 8888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois for (RawLiteralListIterator literal_it = GetFirst(); literal_it != GetEnd(); 8988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal_it++) { 9088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RawLiteral* literal = *literal_it; 9188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois switch (literal->GetDeletionPolicy()) { 9288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois case RawLiteral::kDeletedOnPlacementByPool: 9388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois delete literal; 9488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois break; 9588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois case RawLiteral::kDeletedOnPoolDestruction: 9688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois keep_until_delete_.push_back(literal); 9788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois break; 9888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois case RawLiteral::kManuallyDeleted: 9988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois break; 10088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 10188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 10288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literals_.clear(); 10388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois size_ = 0; 10488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 10588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 10688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 10788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Size (in bytes and including alignments) of the literal pool. 10888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned size_; 10988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 11088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Literal container. 11188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois std::list<RawLiteral*> literals_; 11288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Already bound Literal container the app requested this pool to keep. 11388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois std::list<RawLiteral*> keep_until_delete_; 11488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}; 11588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames 11788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// Macro assembler for aarch32 instruction set. 1188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Ramesclass MacroAssembler : public Assembler, public MacroAssemblerInterface { 11988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 12088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois enum EmitOption { kBranchRequired, kNoBranchRequired }; 12188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1224c5d65bf4d3a5fcc6ccb5cd19fed81e2b735789bPierre Langlois virtual internal::AssemblerBase* AsAssemblerBase() VIXL_OVERRIDE { 1234c5d65bf4d3a5fcc6ccb5cd19fed81e2b735789bPierre Langlois return this; 1244c5d65bf4d3a5fcc6ccb5cd19fed81e2b735789bPierre Langlois } 1258885c17bce593f82cf90c086da242e52943c50efVincent Belliard 126fb37b5d8438252728469290fa35a779817faea00Pierre Langlois virtual bool ArePoolsBlocked() const VIXL_OVERRIDE { 127fb37b5d8438252728469290fa35a779817faea00Pierre Langlois return IsLiteralPoolBlocked() && IsVeneerPoolBlocked(); 1288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames } 1298d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames 1308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames private: 1318d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames class MacroEmissionCheckScope : public EmissionCheckScope { 1328885c17bce593f82cf90c086da242e52943c50efVincent Belliard public: 1338d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames explicit MacroEmissionCheckScope(MacroAssemblerInterface* masm) 1348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames : EmissionCheckScope(masm, kTypicalMacroInstructionMaxSize) {} 1358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames 1368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames private: 1378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames static const size_t kTypicalMacroInstructionMaxSize = 1388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames 8 * kMaxInstructionSizeInBytes; 1398885c17bce593f82cf90c086da242e52943c50efVincent Belliard }; 1408885c17bce593f82cf90c086da242e52943c50efVincent Belliard 14188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class MacroAssemblerContext { 14288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 14388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MacroAssemblerContext() : count_(0) {} 14488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ~MacroAssemblerContext() {} 14588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned GetRecursiveCount() const { return count_; } 14621d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell void Up(const char* loc) { 14721d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell location_stack_[count_] = loc; 14888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois count_++; 14921d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell if (count_ >= kMaxRecursion) { 15021d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell printf( 15121d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell "Recursion limit reached; unable to resolve macro assembler " 15221d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell "call.\n"); 15321d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell printf("Macro assembler context stack:\n"); 15421d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell for (unsigned i = 0; i < kMaxRecursion; i++) { 15521d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell printf("%10s %s\n", (i == 0) ? "oldest -> " : "", location_stack_[i]); 15621d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell } 15721d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell VIXL_ABORT(); 15821d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell } 15988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 16088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Down() { 16188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT((count_ > 0) && (count_ < kMaxRecursion)); 16288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois count_--; 16388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 16488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 16588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 16688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned count_; 1674f002a865b625dc388e9175bfdda285812e17f2bGeorgia Kouveli static const uint32_t kMaxRecursion = 6; 16821d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell const char* location_stack_[kMaxRecursion]; 16988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 17088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 17176887c1820d5a7c957135c94e7cd57e39084ba8dVincent Belliard // This scope is used at each Delegate entry to avoid infinite recursion of 17276887c1820d5a7c957135c94e7cd57e39084ba8dVincent Belliard // Delegate calls. The limit is defined by 17376887c1820d5a7c957135c94e7cd57e39084ba8dVincent Belliard // MacroAssemblerContext::kMaxRecursion. 17488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class ContextScope { 17588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 17621d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell explicit ContextScope(MacroAssembler* const masm, const char* loc) 17721d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell : masm_(masm) { 17888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(masm_->AllowMacroInstructions()); 17921d8d8d551fc50cb15fc137f00a154ea65eb2b81Martyn Capewell masm_->GetContext()->Up(loc); 18088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 18188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ~ContextScope() { masm_->GetContext()->Down(); } 18288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 18388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 18488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MacroAssembler* const masm_; 18588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 18688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 18788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MacroAssemblerContext* GetContext() { return &context_; } 18888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 18988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class ITScope { 19088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 19188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope(MacroAssembler* masm, Condition* cond, bool can_use_it = false) 19288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois : masm_(masm), cond_(*cond), can_use_it_(can_use_it) { 19310dae1a549308bddc1931f29754d6a4459f70c9bJacob Bramley if (!cond_.Is(al) && masm->IsUsingT32()) { 19488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois if (can_use_it_) { 19588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // IT is not deprecated (that implies a 16 bit T32 instruction). 19688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // We generate an IT instruction and a conditional instruction. 19788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois masm->it(cond_); 19888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } else { 19988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // The usage of IT is deprecated for the instruction. 20088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // We generate a conditional branch and an unconditional instruction. 201aaac397e490f27ca3011e8ba2cb61f4f455c1a4dJacob Bramley // TODO: Use a scope utility with a size check. To do that, we'd need 202aaac397e490f27ca3011e8ba2cb61f4f455c1a4dJacob Bramley // one with Open() and Close() implemented. 203e31fda5ecc961cdb78a0a5311d692ae4b15e5933Georgia Kouveli masm_->EnsureEmitFor(kMaxT32MacroInstructionSizeInBytes); 20488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Generate the branch. 20588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois masm_->b(cond_.Negate(), Narrow, &label_); 20688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Tell the macro-assembler to generate unconditional instructions. 20788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois *cond = al; 20888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 20988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 21088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#ifdef VIXL_DEBUG 21188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois initial_cursor_offset_ = masm->GetCursorOffset(); 212fd09817b8770a5e3a64a6fe4fefe85cc29805cd7Alexandre Rames#else 213fd09817b8770a5e3a64a6fe4fefe85cc29805cd7Alexandre Rames USE(initial_cursor_offset_); 21488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#endif 21588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 21688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ~ITScope() { 217356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley if (label_.IsReferenced()) { 218356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley // We only use the label for conditional T32 instructions for which we 219356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley // cannot use IT. 220356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley VIXL_ASSERT(!cond_.Is(al)); 221356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley VIXL_ASSERT(masm_->IsUsingT32()); 222356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley VIXL_ASSERT(!can_use_it_); 22388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ <= 22488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois kMaxT32MacroInstructionSizeInBytes); 225e42218c6ca969b7d4032da978fb05f06641df100Vincent Belliard masm_->BindHelper(&label_); 226356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley } else if (masm_->IsUsingT32() && !cond_.Is(al)) { 227356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley // If we've generated a conditional T32 instruction but haven't used the 228356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley // label, we must have used IT. Check that we did not generate a 229356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley // deprecated sequence. 230356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley VIXL_ASSERT(can_use_it_); 231356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley VIXL_ASSERT(masm_->GetCursorOffset() - initial_cursor_offset_ <= 232356323a3dbec6b302b7882ed8cf46e9457217d01Jacob Bramley k16BitT32InstructionSizeInBytes); 23388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 23488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 23588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 23688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 23788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MacroAssembler* masm_; 23888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond_; 23988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Label label_; 24088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it_; 24188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uint32_t initial_cursor_offset_; 24288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 24388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 24488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois template <Assembler::InstructionCondDtDL asmfn> 24588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class EmitLiteralCondDtDL { 24688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 247be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondDtDL(DataType dt, DRegister rt) : dt_(dt), rt_(rt) {} 248be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli void emit(MacroAssembler* const masm, 249be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli Condition cond, 250be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli RawLiteral* const literal) { 251be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli (masm->*asmfn)(cond, dt_, rt_, literal); 25288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 25388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 25488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 25588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt_; 25688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rt_; 25788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 25888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 25988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois template <Assembler::InstructionCondDtSL asmfn> 26088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class EmitLiteralCondDtSL { 26188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 262be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondDtSL(DataType dt, SRegister rt) : dt_(dt), rt_(rt) {} 263be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli void emit(MacroAssembler* const masm, 264be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli Condition cond, 265be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli RawLiteral* const literal) { 266be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli (masm->*asmfn)(cond, dt_, rt_, literal); 26788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 26888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 26988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 27088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt_; 27188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rt_; 27288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 27388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 27488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois template <Assembler::InstructionCondRL asmfn> 27588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class EmitLiteralCondRL { 27688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 277be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli explicit EmitLiteralCondRL(Register rt) : rt_(rt) {} 278be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli void emit(MacroAssembler* const masm, 279be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli Condition cond, 280be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli RawLiteral* const literal) { 281be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli (masm->*asmfn)(cond, rt_, literal); 28288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 28388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 28488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 28588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt_; 28688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 28788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 28888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois template <Assembler::InstructionCondRRL asmfn> 28988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class EmitLiteralCondRRL { 29088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 291be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRRL(Register rt, Register rt2) : rt_(rt), rt2_(rt2) {} 292be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli void emit(MacroAssembler* const masm, 293be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli Condition cond, 294be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli RawLiteral* const literal) { 295be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli (masm->*asmfn)(cond, rt_, rt2_, literal); 29688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 29788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 29888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 29988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt_, rt2_; 30088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 30188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 30288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois class LiteralPoolManager { 30388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 3048d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames explicit LiteralPoolManager(MacroAssembler* const masm) 3058d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames : masm_(masm), monitor_(0) { 30688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ResetCheckpoint(); 30788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 30888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 30988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void ResetCheckpoint() { checkpoint_ = Label::kMaxOffset; } 31088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 31188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois LiteralPool* GetLiteralPool() { return &literal_pool_; } 31288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Label::Offset GetCheckpoint() const { 31388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Make room for a branch over the pools. 31488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois return checkpoint_ - kMaxInstructionSizeInBytes; 31588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 31688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois size_t GetLiteralPoolSize() const { return literal_pool_.GetSize(); } 31788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 31888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Checks if the insertion of the literal will put the forward reference 31988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // too far in the literal pool. 320bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // This function is called after generating an instruction with a literal. 321bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // We want to know if the literal can be reached by the instruction. 322bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // If not, we will unwind the instruction, generate the pool (without the 323bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // last literal) and generate the instruction again. 324bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // "literal" is the literal we want to insert into the pool. 325bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // "from" is the location where the instruction which uses the literal has 326bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // been generated. 327cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli bool WasInsertedTooFar(RawLiteral* literal) const { 328cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // Last accessible location for the instruction we just generated, which 329cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // uses the literal. 330cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli Label::ForwardReference& reference = literal->GetBackForwardRef(); 331cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli Label::Offset new_checkpoint = AlignDown(reference.GetCheckpoint(), 4); 332cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli 333cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // TODO: We should not need to get the min of new_checkpoint and the 334cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // existing checkpoint. The existing checkpoint should already have 335cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // been checked when reserving space for this load literal instruction. 336cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // The assertion below asserts that we don't need the min operation here. 337cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli Label::Offset checkpoint = 338cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli std::min(new_checkpoint, literal->GetAlignedCheckpoint(4)); 339cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli bool literal_in_pool = 340cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli (literal->GetPositionInPool() != Label::kMaxOffset); 341cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli Label::Offset position_in_pool = literal_in_pool 342cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli ? literal->GetPositionInPool() 343cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli : literal_pool_.GetSize(); 344bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // Compare the checkpoint to the location where the literal should be 345bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // added. 346bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // We add space for two instructions: one branch and one potential veneer 347bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // which may be added after the check. In this particular use case, no 348bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // veneer can be added but, this way, we are consistent with all the 349bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // literal pool checks. 350cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli int32_t from = 351cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli reference.GetLocation() + masm_->GetArchitectureStatePCOffset(); 352bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard bool too_far = 353cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli checkpoint < from + position_in_pool + 354cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli 2 * static_cast<int32_t>(kMaxInstructionSizeInBytes); 355cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // Assert if the literal is already in the pool and the existing 356cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // checkpoint triggers a rewind here, as this means the pool should 357cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // already have been emitted (perhaps we have not reserved enough space 358cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli // for the instruction we are about to rewind). 359cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli VIXL_ASSERT(!(too_far && (literal->GetCheckpoint() < new_checkpoint))); 36088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois return too_far; 36188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 36288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 36388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Set the different checkpoints where the literal pool has to be emited. 36488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void UpdateCheckpoint(RawLiteral* literal) { 36588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // The literal should have been placed somewhere in the literal pool 36688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(literal->GetPositionInPool() != Label::kMaxOffset); 36788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // TODO(all): Consider AddForwardRef as a virtual so the checkpoint is 36888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // updated when inserted. Or move checkpoint_ into Label, 36988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal->UpdateCheckpoint(); 37088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Label::Offset tmp = 37188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal->GetAlignedCheckpoint(4) - literal->GetPositionInPool(); 37288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois if (checkpoint_ > tmp) { 37388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois checkpoint_ = tmp; 37488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois masm_->ComputeCheckpoint(); 37588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 37688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 37788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 3784e6b4af20e5664c43ca1717b4fa7d6fb4cb3667cAlexandre Rames bool IsEmpty() const { return GetLiteralPoolSize() == 0; } 3794e6b4af20e5664c43ca1717b4fa7d6fb4cb3667cAlexandre Rames 3808d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames void Block() { monitor_++; } 3818d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames void Release() { 3828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames VIXL_ASSERT(IsBlocked()); 3838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames if (--monitor_ == 0) { 3848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames // Ensure the pool has not been blocked for too long. 3858d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames VIXL_ASSERT(masm_->GetCursorOffset() <= checkpoint_); 3868d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames } 3878d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames } 3888d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames bool IsBlocked() const { return monitor_ != 0; } 3898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames 39088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 39188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MacroAssembler* const masm_; 39288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois LiteralPool literal_pool_; 39388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 39488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Max offset in the code buffer where the literal needs to be 39588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // emitted. A default value of Label::kMaxOffset means that the checkpoint 39688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // is invalid. 39788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Label::Offset checkpoint_; 3988d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames // Indicates whether the emission of this pool is blocked. 3998d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames int monitor_; 40088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois }; 40188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 40288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void PerformEnsureEmit(Label::Offset target, uint32_t extra_size); 40388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 40488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois protected: 405f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois virtual void BlockPools() VIXL_OVERRIDE { 406f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois BlockLiteralPool(); 407f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois BlockVeneerPool(); 408f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois } 409f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois virtual void ReleasePools() VIXL_OVERRIDE { 410f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois ReleaseLiteralPool(); 411f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois ReleaseVeneerPool(); 412f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois } 413f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois virtual void EnsureEmitPoolsFor(size_t size) VIXL_OVERRIDE { 414f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois // TODO: Optimise this. It also checks that there is space in the buffer, 415f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois // which we do not need to do here. 416f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois VIXL_ASSERT(IsUint32(size)); 417f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois EnsureEmitFor(static_cast<uint32_t>(size)); 418f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois } 419f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois 420f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois // Tell whether any of the macro instruction can be used. When false the 421f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois // MacroAssembler will assert if a method which can emit a variable number 422f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois // of instructions is called. 423f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois virtual void SetAllowMacroInstructions(bool value) VIXL_OVERRIDE { 424f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois allow_macro_instructions_ = value; 425f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois } 426f4ba40fc419a9d484da9be1df051ad03327ce4f4Pierre Langlois 427fb37b5d8438252728469290fa35a779817faea00Pierre Langlois void BlockLiteralPool() { literal_pool_manager_.Block(); } 428fb37b5d8438252728469290fa35a779817faea00Pierre Langlois void ReleaseLiteralPool() { literal_pool_manager_.Release(); } 429fb37b5d8438252728469290fa35a779817faea00Pierre Langlois bool IsLiteralPoolBlocked() const { 430fb37b5d8438252728469290fa35a779817faea00Pierre Langlois return literal_pool_manager_.IsBlocked(); 431fb37b5d8438252728469290fa35a779817faea00Pierre Langlois } 432fb37b5d8438252728469290fa35a779817faea00Pierre Langlois void BlockVeneerPool() { veneer_pool_manager_.Block(); } 433fb37b5d8438252728469290fa35a779817faea00Pierre Langlois void ReleaseVeneerPool() { veneer_pool_manager_.Release(); } 434fb37b5d8438252728469290fa35a779817faea00Pierre Langlois bool IsVeneerPoolBlocked() const { return veneer_pool_manager_.IsBlocked(); } 435fb37b5d8438252728469290fa35a779817faea00Pierre Langlois 43688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void HandleOutOfBoundsImmediate(Condition cond, Register tmp, uint32_t imm); 437f8833fa525b25cb1d72beb4f2d033d5ad9a3eb80Vincent Belliard void PadToMinimumBranchRange(Label* label); 43888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 43988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Generate the instruction and if it's not possible revert the whole thing. 44088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // emit the literal pool and regenerate the instruction. 44188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Note: The instruction is generated via 44288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // void T::emit(MacroAssembler* const, RawLiteral* const) 44388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois template <typename T> 444be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli void GenerateInstruction(Condition cond, 445be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli T instr_callback, 446be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli RawLiteral* const literal) { 447f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois int32_t cursor = GetCursorOffset(); 44888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Emit the instruction, via the assembler 4498885c17bce593f82cf90c086da242e52943c50efVincent Belliard { 4508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 451be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli // The ITScope can change the condition and we want to be able to revert 452be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli // this. 453be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli Condition c(cond); 454be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli ITScope it_scope(this, &c); 455be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli instr_callback.emit(this, c, literal); 4568885c17bce593f82cf90c086da242e52943c50efVincent Belliard } 457d56f609907e454dd41bb8b2d98e078e69c4feafaPierre Langlois if (!literal->IsManuallyPlaced() && !literal->IsBound() && 458fb37b5d8438252728469290fa35a779817faea00Pierre Langlois !IsLiteralPoolBlocked()) { 459cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli if (WasInsertedTooFar(literal)) { 46051d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard // The instruction's data is too far: revert the emission 461919e3fe28a5024c53ede42922092bbc32e89dcb8Alexandre Rames GetBuffer()->Rewind(cursor); 46251d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard literal->InvalidateLastForwardReference(RawLiteral::kNoUpdateNecessary); 46351d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard EmitLiteralPool(kBranchRequired); 4648d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 465be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli ITScope it_scope(this, &cond); 466be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli instr_callback.emit(this, cond, literal); 46751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 46850e45c514c11300c91b370c251235a9a77bdaf5fGeorgia Kouveli // The literal pool above might have included the literal - in which 46950e45c514c11300c91b370c251235a9a77bdaf5fGeorgia Kouveli // case it will now be bound. 47050e45c514c11300c91b370c251235a9a77bdaf5fGeorgia Kouveli if (!literal->IsBound()) { 47150e45c514c11300c91b370c251235a9a77bdaf5fGeorgia Kouveli literal_pool_manager_.GetLiteralPool()->AddLiteral(literal); 47250e45c514c11300c91b370c251235a9a77bdaf5fGeorgia Kouveli literal_pool_manager_.UpdateCheckpoint(literal); 47350e45c514c11300c91b370c251235a9a77bdaf5fGeorgia Kouveli } 47488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 47588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 47688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 47788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 4789a9331faeba996d6c85e6e2a6355ccfc22c6cab6Rodolph Perfetta explicit MacroAssembler(InstructionSet isa = kDefaultISA) 47910dae1a549308bddc1931f29754d6a4459f70c9bJacob Bramley : Assembler(isa), 48010dae1a549308bddc1931f29754d6a4459f70c9bJacob Bramley available_(r12), 481e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley current_scratch_scope_(NULL), 48288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois checkpoint_(Label::kMaxOffset), 48388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal_pool_manager_(this), 4841e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois veneer_pool_manager_(this), 485a4cbc576a003da934ab58b293d9023d9b6f3077bVincent Belliard generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) { 48688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#ifdef VIXL_DEBUG 48788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SetAllowMacroInstructions(true); 488fd09817b8770a5e3a64a6fe4fefe85cc29805cd7Alexandre Rames#else 489fd09817b8770a5e3a64a6fe4fefe85cc29805cd7Alexandre Rames USE(literal_pool_manager_); 490fd09817b8770a5e3a64a6fe4fefe85cc29805cd7Alexandre Rames USE(allow_macro_instructions_); 49188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#endif 49288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ComputeCheckpoint(); 49388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 4949a9331faeba996d6c85e6e2a6355ccfc22c6cab6Rodolph Perfetta explicit MacroAssembler(size_t size, InstructionSet isa = kDefaultISA) 49510dae1a549308bddc1931f29754d6a4459f70c9bJacob Bramley : Assembler(size, isa), 49688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois available_(r12), 497e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley current_scratch_scope_(NULL), 49888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois checkpoint_(Label::kMaxOffset), 49988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal_pool_manager_(this), 5001e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois veneer_pool_manager_(this), 501a4cbc576a003da934ab58b293d9023d9b6f3077bVincent Belliard generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) { 50288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#ifdef VIXL_DEBUG 50388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SetAllowMacroInstructions(true); 50488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#endif 50588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ComputeCheckpoint(); 50688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 5079a9331faeba996d6c85e6e2a6355ccfc22c6cab6Rodolph Perfetta MacroAssembler(byte* buffer, size_t size, InstructionSet isa = kDefaultISA) 50810dae1a549308bddc1931f29754d6a4459f70c9bJacob Bramley : Assembler(buffer, size, isa), 50988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois available_(r12), 510e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley current_scratch_scope_(NULL), 51188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois checkpoint_(Label::kMaxOffset), 51288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal_pool_manager_(this), 5131e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois veneer_pool_manager_(this), 514a4cbc576a003da934ab58b293d9023d9b6f3077bVincent Belliard generate_simulator_code_(VIXL_AARCH32_GENERATE_SIMULATOR_CODE) { 51588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#ifdef VIXL_DEBUG 51688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SetAllowMacroInstructions(true); 51788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois#endif 51888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ComputeCheckpoint(); 51988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 52088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 5211e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois bool GenerateSimulatorCode() const { return generate_simulator_code_; } 5221e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois 5234c5d65bf4d3a5fcc6ccb5cd19fed81e2b735789bPierre Langlois virtual bool AllowMacroInstructions() const VIXL_OVERRIDE { 5248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames return allow_macro_instructions_; 5258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames } 52688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 52788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void FinalizeCode() { 52888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois EmitLiteralPool(kNoBranchRequired); 52988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Assembler::FinalizeCode(); 53088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 53188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 53288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList* GetScratchRegisterList() { return &available_; } 53388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VRegisterList* GetScratchVRegisterList() { return &available_vfp_; } 53488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 535e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley // Get or set the current (most-deeply-nested) UseScratchRegisterScope. 536e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley void SetCurrentScratchRegisterScope(UseScratchRegisterScope* scope) { 537e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley current_scratch_scope_ = scope; 538e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley } 539e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley UseScratchRegisterScope* GetCurrentScratchRegisterScope() { 540e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley return current_scratch_scope_; 541e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley } 542e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley 543f8c2284645ce651f99ba410a512279102851076eJacob Bramley // Given an address calculation (Register + immediate), generate code to 544f8c2284645ce651f99ba410a512279102851076eJacob Bramley // partially compute the address. The returned MemOperand will perform any 545f8c2284645ce651f99ba410a512279102851076eJacob Bramley // remaining computation in a subsequent load or store instruction. 546f8c2284645ce651f99ba410a512279102851076eJacob Bramley // 5479c112d81bf7bc65d6bea5a1d889ef3db7609771dJacob Bramley // The offset provided should be the offset that would be used in a load or 5489c112d81bf7bc65d6bea5a1d889ef3db7609771dJacob Bramley // store instruction (if it had sufficient range). This only matters where 5499c112d81bf7bc65d6bea5a1d889ef3db7609771dJacob Bramley // base.Is(pc), since load and store instructions align the pc before 5509c112d81bf7bc65d6bea5a1d889ef3db7609771dJacob Bramley // dereferencing it. 5519c112d81bf7bc65d6bea5a1d889ef3db7609771dJacob Bramley // 552f8c2284645ce651f99ba410a512279102851076eJacob Bramley // TODO: Improve the handling of negative offsets. They are not implemented 553f8c2284645ce651f99ba410a512279102851076eJacob Bramley // precisely for now because they only have a marginal benefit for the 554f8c2284645ce651f99ba410a512279102851076eJacob Bramley // existing uses (in delegates). 555f8c2284645ce651f99ba410a512279102851076eJacob Bramley MemOperand MemOperandComputationHelper(Condition cond, 556f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register scratch, 557f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register base, 558f8c2284645ce651f99ba410a512279102851076eJacob Bramley uint32_t offset, 559f8c2284645ce651f99ba410a512279102851076eJacob Bramley uint32_t extra_offset_mask = 0); 560f8c2284645ce651f99ba410a512279102851076eJacob Bramley 561f8c2284645ce651f99ba410a512279102851076eJacob Bramley MemOperand MemOperandComputationHelper(Register scratch, 562f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register base, 563f8c2284645ce651f99ba410a512279102851076eJacob Bramley uint32_t offset, 564f8c2284645ce651f99ba410a512279102851076eJacob Bramley uint32_t extra_offset_mask = 0) { 565f8c2284645ce651f99ba410a512279102851076eJacob Bramley return MemOperandComputationHelper(al, 566f8c2284645ce651f99ba410a512279102851076eJacob Bramley scratch, 567f8c2284645ce651f99ba410a512279102851076eJacob Bramley base, 568f8c2284645ce651f99ba410a512279102851076eJacob Bramley offset, 569f8c2284645ce651f99ba410a512279102851076eJacob Bramley extra_offset_mask); 570f8c2284645ce651f99ba410a512279102851076eJacob Bramley } 571f8c2284645ce651f99ba410a512279102851076eJacob Bramley MemOperand MemOperandComputationHelper(Condition cond, 572f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register scratch, 573f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label* label, 574f8c2284645ce651f99ba410a512279102851076eJacob Bramley uint32_t extra_offset_mask = 0) { 575f8c2284645ce651f99ba410a512279102851076eJacob Bramley // Check for buffer space _before_ calculating the offset, in case we 576f8c2284645ce651f99ba410a512279102851076eJacob Bramley // generate a pool that affects the offset calculation. 57789d2f7702f0dc1751574bd5f9d35b5182fc65facJacob Bramley CodeBufferCheckScope scope(this, 4 * kMaxInstructionSizeInBytes); 578f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label::Offset offset = 579f8c2284645ce651f99ba410a512279102851076eJacob Bramley label->GetLocation() - 580f8c2284645ce651f99ba410a512279102851076eJacob Bramley AlignDown(GetCursorOffset() + GetArchitectureStatePCOffset(), 4); 581f8c2284645ce651f99ba410a512279102851076eJacob Bramley return MemOperandComputationHelper(cond, 582f8c2284645ce651f99ba410a512279102851076eJacob Bramley scratch, 583f8c2284645ce651f99ba410a512279102851076eJacob Bramley pc, 584f8c2284645ce651f99ba410a512279102851076eJacob Bramley offset, 585f8c2284645ce651f99ba410a512279102851076eJacob Bramley extra_offset_mask); 586f8c2284645ce651f99ba410a512279102851076eJacob Bramley } 587f8c2284645ce651f99ba410a512279102851076eJacob Bramley MemOperand MemOperandComputationHelper(Register scratch, 588f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label* label, 589f8c2284645ce651f99ba410a512279102851076eJacob Bramley uint32_t extra_offset_mask = 0) { 590f8c2284645ce651f99ba410a512279102851076eJacob Bramley return MemOperandComputationHelper(al, scratch, label, extra_offset_mask); 591f8c2284645ce651f99ba410a512279102851076eJacob Bramley } 592f8c2284645ce651f99ba410a512279102851076eJacob Bramley 593f8c2284645ce651f99ba410a512279102851076eJacob Bramley // Determine the appropriate mask to pass into MemOperandComputationHelper. 594f8c2284645ce651f99ba410a512279102851076eJacob Bramley uint32_t GetOffsetMask(InstructionType type, AddrMode addrmode); 595f8c2284645ce651f99ba410a512279102851076eJacob Bramley 59688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // State and type helpers. 59788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool IsModifiedImmediate(uint32_t imm) { 5985ddbc800588cde7e4d02f9fb7ca2f9e8c12522efVincent Belliard return IsUsingT32() ? ImmediateT32::IsImmediateT32(imm) 5995ddbc800588cde7e4d02f9fb7ca2f9e8c12522efVincent Belliard : ImmediateA32::IsImmediateA32(imm); 60088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 60188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 60288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bind(Label* label) { 60388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 604f8833fa525b25cb1d72beb4f2d033d5ad9a3eb80Vincent Belliard PadToMinimumBranchRange(label); 605e42218c6ca969b7d4032da978fb05f06641df100Vincent Belliard BindHelper(label); 60688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 60788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 60888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void AddBranchLabel(Label* label) { 60988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois if (label->IsBound()) return; 61088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois veneer_pool_manager_.AddLabel(label); 61188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 61288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 61388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Place(RawLiteral* literal) { 61488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 61551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard VIXL_ASSERT(literal->IsManuallyPlaced()); 616fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames // We have two calls to `GetBuffer()->Align()` below, that aligns on word 617fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames // (4 bytes) boundaries. Only one is taken into account in 618fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames // `GetAlignedSize()`. 619fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames static const size_t kMaxAlignSize = 3; 620fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames size_t size = literal->GetAlignedSize() + kMaxAlignSize; 621fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames VIXL_ASSERT(IsUint32(size)); 622fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames // TODO: We should use a scope here to check the size of data emitted. We 623fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames // currently cannot because `aarch32::CodeBufferCheckScope` currently checks 624fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames // for pools, so that could lead to an infinite loop. 625fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames EnsureEmitFor(static_cast<uint32_t>(size)); 626fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames // Literals must be emitted aligned on word (4 bytes) boundaries. 627fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames GetBuffer()->Align(); 628e42218c6ca969b7d4032da978fb05f06641df100Vincent Belliard PlaceHelper(literal); 629e42218c6ca969b7d4032da978fb05f06641df100Vincent Belliard GetBuffer()->Align(); 63088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 63188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 63288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void ComputeCheckpoint(); 63388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 634dcffac4d0a5a586d3c14971e33bd28fc848bc148Vincent Belliard int32_t GetMarginBeforeVeneerEmission() const { 635dcffac4d0a5a586d3c14971e33bd28fc848bc148Vincent Belliard return veneer_pool_manager_.GetCheckpoint() - GetCursorOffset(); 636dcffac4d0a5a586d3c14971e33bd28fc848bc148Vincent Belliard } 637dcffac4d0a5a586d3c14971e33bd28fc848bc148Vincent Belliard 638bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard Label::Offset GetTargetForLiteralEmission() const { 639bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard if (literal_pool_manager_.IsEmpty()) return Label::kMaxOffset; 640bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // We add an instruction to the size as the instruction which calls this 641bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // function may add a veneer and, without this extra instruction, could put 642bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // the literals out of range. For example, it's the case for a "B" 643bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // instruction. At the beginning of the instruction we call EnsureEmitFor 644bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // which calls this function. However, the target of the branch hasn't been 645bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // inserted yet in the veneer pool. 646bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard size_t veneer_max_size = 647bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard veneer_pool_manager_.GetMaxSize() + kMaxInstructionSizeInBytes; 648bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard VIXL_ASSERT(IsInt32(veneer_max_size)); 649bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard // We must be able to generate the veneer pool first. 650bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard Label::Offset tmp = literal_pool_manager_.GetCheckpoint() - 651bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard static_cast<Label::Offset>(veneer_max_size); 652bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard VIXL_ASSERT(tmp >= 0); 653bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard return tmp; 654bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard } 655bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard 6560eb25b040732354c6273c93df709f8d585a140deAlexandre Rames int32_t GetMarginBeforeLiteralEmission() const { 657bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard Label::Offset tmp = GetTargetForLiteralEmission(); 658bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard VIXL_ASSERT(tmp >= GetCursorOffset()); 659bd087d8fe70f7db770f37569073b8b9f77a9c372Vincent Belliard return tmp - GetCursorOffset(); 660dcffac4d0a5a586d3c14971e33bd28fc848bc148Vincent Belliard } 661dcffac4d0a5a586d3c14971e33bd28fc848bc148Vincent Belliard 6624e6b4af20e5664c43ca1717b4fa7d6fb4cb3667cAlexandre Rames bool VeneerPoolIsEmpty() const { return veneer_pool_manager_.IsEmpty(); } 6634e6b4af20e5664c43ca1717b4fa7d6fb4cb3667cAlexandre Rames bool LiteralPoolIsEmpty() const { return literal_pool_manager_.IsEmpty(); } 664dcffac4d0a5a586d3c14971e33bd28fc848bc148Vincent Belliard 665da58c695fb2720af19a5b99e4a6c359b46fc3b02Alexandre Rames void EnsureEmitFor(uint32_t size) { 666fd7a00db313b38f1b328c7fc6af1325d85bc31adAlexandre Rames Label::Offset target = GetCursorOffset() + size; 66740b7e470e71b158158ef6ce8a1a3f701857ce0e2Vincent Belliard if (target <= checkpoint_) return; 66888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois PerformEnsureEmit(target, size); 66988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 67088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 671cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli bool WasInsertedTooFar(RawLiteral* literal) { 672cf91ee6bcaabf00356516bbc2d478acbeb8bed9aGeorgia Kouveli return literal_pool_manager_.WasInsertedTooFar(literal); 67388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 67488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 675cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(Register reg) { 676cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return GetScratchRegisterList()->Includes(reg); 677cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 678cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 679adbb4a746d2d90dd2920a8e0b7cd2397e93d17b9Vincent Belliard bool AliasesAvailableScratchRegister(RegisterOrAPSR_nzcv reg) { 680adbb4a746d2d90dd2920a8e0b7cd2397e93d17b9Vincent Belliard if (reg.IsAPSR_nzcv()) return false; 681adbb4a746d2d90dd2920a8e0b7cd2397e93d17b9Vincent Belliard return GetScratchRegisterList()->Includes(reg.AsRegister()); 682adbb4a746d2d90dd2920a8e0b7cd2397e93d17b9Vincent Belliard } 683adbb4a746d2d90dd2920a8e0b7cd2397e93d17b9Vincent Belliard 684cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(VRegister reg) { 685cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return GetScratchVRegisterList()->IncludesAliasOf(reg); 686cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 687cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 688cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(const Operand& operand) { 689cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley if (operand.IsImmediate()) return false; 690cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return AliasesAvailableScratchRegister(operand.GetBaseRegister()) || 691cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley (operand.IsRegisterShiftedRegister() && 692cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley AliasesAvailableScratchRegister(operand.GetShiftRegister())); 693cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 694cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 695cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(const NeonOperand& operand) { 696cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley if (operand.IsImmediate()) return false; 697cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return AliasesAvailableScratchRegister(operand.GetRegister()); 698cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 699cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 700cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(SRegisterList list) { 701cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley for (int n = 0; n < list.GetLength(); n++) { 702cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley if (AliasesAvailableScratchRegister(list.GetSRegister(n))) return true; 703cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 704cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return false; 705cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 706cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 707cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(DRegisterList list) { 708cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley for (int n = 0; n < list.GetLength(); n++) { 709cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley if (AliasesAvailableScratchRegister(list.GetDRegister(n))) return true; 710cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 711cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return false; 712cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 713cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 714cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(NeonRegisterList list) { 715cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley for (int n = 0; n < list.GetLength(); n++) { 716cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley if (AliasesAvailableScratchRegister(list.GetDRegister(n))) return true; 717cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 718cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return false; 719cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 720cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 721cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(RegisterList list) { 722cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return GetScratchRegisterList()->Overlaps(list); 723cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 724cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 725cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley bool AliasesAvailableScratchRegister(const MemOperand& operand) { 726cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley return AliasesAvailableScratchRegister(operand.GetBaseRegister()) || 727cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley (operand.IsShiftedRegister() && 728cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley AliasesAvailableScratchRegister(operand.GetOffsetRegister())); 729cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley } 730cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley 73188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Emit the literal pool in the code buffer. 73288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Every literal is placed on a 32bit boundary 73388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // All the literals in the pool will be removed from the pool and potentially 73488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // delete'd. 7351661f51a172e7c3dcce6caca55b6fe6d10ebd416Alexandre Rames void EmitLiteralPool(LiteralPool* const literal_pool, EmitOption option); 73688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void EmitLiteralPool(EmitOption option = kBranchRequired) { 737fb37b5d8438252728469290fa35a779817faea00Pierre Langlois VIXL_ASSERT(!IsLiteralPoolBlocked()); 73888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois EmitLiteralPool(literal_pool_manager_.GetLiteralPool(), option); 73988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois literal_pool_manager_.ResetCheckpoint(); 74088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ComputeCheckpoint(); 74188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 74288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 743f5348cedd702124c90fc75e75d0195e2e485c620Pierre Langlois size_t GetLiteralPoolSize() const { 74488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois return literal_pool_manager_.GetLiteralPoolSize(); 74588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 74688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 74725e3987b3b684df88edc8069d60b483b95587be5Pierre Langlois // Adr with a literal already constructed. Add the literal to the pool if it 74825e3987b3b684df88edc8069d60b483b95587be5Pierre Langlois // is not already done. 74925e3987b3b684df88edc8069d60b483b95587be5Pierre Langlois void Adr(Condition cond, Register rd, RawLiteral* literal) { 750be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 751be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 752be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 753be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRL<&Assembler::adr> emit_helper(rd); 754be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 75525e3987b3b684df88edc8069d60b483b95587be5Pierre Langlois } 75625e3987b3b684df88edc8069d60b483b95587be5Pierre Langlois void Adr(Register rd, RawLiteral* literal) { Adr(al, rd, literal); } 75725e3987b3b684df88edc8069d60b483b95587be5Pierre Langlois 75851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard // Loads with literals already constructed. Add the literal to the pool 75951d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard // if it is not already done. 76051d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldr(Condition cond, Register rt, RawLiteral* literal) { 761be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 762be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 763be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 764be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRL<&Assembler::ldr> emit_helper(rt); 765be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 76651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 76751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldr(Register rt, RawLiteral* literal) { Ldr(al, rt, literal); } 76851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard 76951d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrb(Condition cond, Register rt, RawLiteral* literal) { 770be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 771be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 772be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 773be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRL<&Assembler::ldrb> emit_helper(rt); 774be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 77551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 77651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrb(Register rt, RawLiteral* literal) { Ldrb(al, rt, literal); } 77751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard 77851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrd(Condition cond, Register rt, Register rt2, RawLiteral* literal) { 779be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 780be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 781be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 782be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 783be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRRL<&Assembler::ldrd> emit_helper(rt, rt2); 784be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 78551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 78651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrd(Register rt, Register rt2, RawLiteral* literal) { 78751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard Ldrd(al, rt, rt2, literal); 78851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 78951d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard 79051d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrh(Condition cond, Register rt, RawLiteral* literal) { 791be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 792be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 793be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 794be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRL<&Assembler::ldrh> emit_helper(rt); 795be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 79651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 79751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrh(Register rt, RawLiteral* literal) { Ldrh(al, rt, literal); } 79851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard 79951d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrsb(Condition cond, Register rt, RawLiteral* literal) { 800be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 801be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 802be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 803be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRL<&Assembler::ldrsb> emit_helper(rt); 804be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 80551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 80651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrsb(Register rt, RawLiteral* literal) { Ldrsb(al, rt, literal); } 80751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard 80851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrsh(Condition cond, Register rt, RawLiteral* literal) { 809be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 810be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 811be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 812be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRL<&Assembler::ldrsh> emit_helper(rt); 813be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 81451d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 81551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Ldrsh(Register rt, RawLiteral* literal) { Ldrsh(al, rt, literal); } 81651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard 81751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(Condition cond, DataType dt, DRegister rd, RawLiteral* literal) { 818be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 819be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 820be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 821be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondDtDL<&Assembler::vldr> emit_helper(dt, rd); 822be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 82351d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 82451d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(DataType dt, DRegister rd, RawLiteral* literal) { 82551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard Vldr(al, dt, rd, literal); 82651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 82751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(Condition cond, DRegister rd, RawLiteral* literal) { 82851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard Vldr(cond, Untyped64, rd, literal); 82951d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 83051d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(DRegister rd, RawLiteral* literal) { 83151d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard Vldr(al, Untyped64, rd, literal); 83251d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 83351d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard 83451d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(Condition cond, DataType dt, SRegister rd, RawLiteral* literal) { 835be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 836be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 837be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 838be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondDtSL<&Assembler::vldr> emit_helper(dt, rd); 839be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 84051d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 84151d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(DataType dt, SRegister rd, RawLiteral* literal) { 84251d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard Vldr(al, dt, rd, literal); 84351d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 84451d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(Condition cond, SRegister rd, RawLiteral* literal) { 84551d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard Vldr(cond, Untyped32, rd, literal); 84651d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard } 84751d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(SRegister rd, RawLiteral* literal) { 84851d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard Vldr(al, Untyped32, rd, literal); 84988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 85088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 85188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Generic Ldr(register, data) 85288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldr(Condition cond, Register rt, uint32_t v) { 853be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 854be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 855be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 85688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RawLiteral* literal = 85788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois new Literal<uint32_t>(v, RawLiteral::kDeletedOnPlacementByPool); 858be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRL<&Assembler::ldr> emit_helper(rt); 859be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 86088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 86188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois template <typename T> 86288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldr(Register rt, T v) { 86388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldr(al, rt, v); 86488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 86588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 86688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Generic Ldrd(rt, rt2, data) 86788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrd(Condition cond, Register rt, Register rt2, uint64_t v) { 868be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 869be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 870be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 871be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 87288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RawLiteral* literal = 87388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois new Literal<uint64_t>(v, RawLiteral::kDeletedOnPlacementByPool); 874be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondRRL<&Assembler::ldrd> emit_helper(rt, rt2); 875be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 87688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 87788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois template <typename T> 87888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrd(Register rt, Register rt2, T v) { 87988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldrd(al, rt, rt2, v); 88088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 88188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 88251d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(Condition cond, SRegister rd, float v) { 883be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 884be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 885be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 88688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RawLiteral* literal = 88788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois new Literal<float>(v, RawLiteral::kDeletedOnPlacementByPool); 888be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondDtSL<&Assembler::vldr> emit_helper(Untyped32, rd); 889be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 89088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 89151d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(SRegister rd, float v) { Vldr(al, rd, v); } 89288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 89351d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(Condition cond, DRegister rd, double v) { 894be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 895be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(allow_macro_instructions_); 896be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli VIXL_ASSERT(OutsideITBlock()); 89788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RawLiteral* literal = 89888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois new Literal<double>(v, RawLiteral::kDeletedOnPlacementByPool); 899be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli EmitLiteralCondDtDL<&Assembler::vldr> emit_helper(Untyped64, rd); 900be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585cGeorgia Kouveli GenerateInstruction(cond, emit_helper, literal); 90188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 90251d1cccb2cbb843c41a586fbedad00ded8f0d6a0Vincent Belliard void Vldr(DRegister rd, double v) { Vldr(al, rd, v); } 90388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 90488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, DRegister rt, double v) { Vmov(cond, F64, rt, v); } 90588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DRegister rt, double v) { Vmov(al, F64, rt, v); } 90688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, SRegister rt, float v) { Vmov(cond, F32, rt, v); } 90788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(SRegister rt, float v) { Vmov(al, F32, rt, v); } 90888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 909ad91cee685f33b45841b95999ea0a0eb2c3f9708Alexandre Rames // Claim memory on the stack. 910ad91cee685f33b45841b95999ea0a0eb2c3f9708Alexandre Rames // Note that the Claim, Drop, and Peek helpers below ensure that offsets used 911ad91cee685f33b45841b95999ea0a0eb2c3f9708Alexandre Rames // are multiples of 32 bits to help maintain 32-bit SP alignment. 912ad91cee685f33b45841b95999ea0a0eb2c3f9708Alexandre Rames // We could `Align{Up,Down}(size, 4)`, but that's potentially problematic: 91388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Claim(3) 91488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Claim(1) 91588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Drop(4) 91688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // would seem correct, when in fact: 91788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Claim(3) -> sp = sp - 4 918ad91cee685f33b45841b95999ea0a0eb2c3f9708Alexandre Rames // Claim(1) -> sp = sp - 4 91988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Drop(4) -> sp = sp + 4 92088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // 92188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Claim(int32_t size) { 92288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois if (size == 0) return; 92388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // The stack must be kept 32bit aligned. 92488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT((size > 0) && ((size % 4) == 0)); 92588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sub(sp, sp, size); 92688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 92788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Release memory on the stack 92888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Drop(int32_t size) { 92988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois if (size == 0) return; 93088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // The stack must be kept 32bit aligned. 93188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT((size > 0) && ((size % 4) == 0)); 93288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Add(sp, sp, size); 93388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 93488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Peek(Register dst, int32_t offset) { 93588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT((offset >= 0) && ((offset % 4) == 0)); 93688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldr(dst, MemOperand(sp, offset)); 93788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 93888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Poke(Register src, int32_t offset) { 93988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT((offset >= 0) && ((offset % 4) == 0)); 94088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Str(src, MemOperand(sp, offset)); 94188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 94288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Printf(const char* format, 94388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois CPURegister reg1 = NoReg, 94488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois CPURegister reg2 = NoReg, 94588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois CPURegister reg3 = NoReg, 94688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois CPURegister reg4 = NoReg); 94788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Functions used by Printf for generation. 94888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void PushRegister(CPURegister reg); 94988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void PreparePrintfArgument(CPURegister reg, 95088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois int* core_count, 95188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois int* vfp_count, 95288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uint32_t* printf_type); 95388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Handlers for cases not handled by the assembler. 9549ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // ADD, MOVT, MOVW, SUB, SXTB16, TEQ, UXTB16 95588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 95688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondROp instruction, 95788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 95888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 9593fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const Operand& operand) VIXL_OVERRIDE; 9609ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // CMN, CMP, MOV, MOVS, MVN, MVNS, SXTB, SXTH, TST, UXTB, UXTH 96188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 96288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondSizeROp instruction, 96388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 96488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois EncodingSize size, 96588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 9663fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const Operand& operand) VIXL_OVERRIDE; 9679ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // ADDW, ORN, ORNS, PKHBT, PKHTB, RSC, RSCS, SUBW, SXTAB, SXTAB16, SXTAH, 9689ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // UXTAB, UXTAB16, UXTAH 96988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 97088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondRROp instruction, 97188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 97288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 97388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 9743fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const Operand& operand) VIXL_OVERRIDE; 9759ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // ADC, ADCS, ADD, ADDS, AND, ANDS, ASR, ASRS, BIC, BICS, EOR, EORS, LSL, 9769ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // LSLS, LSR, LSRS, ORR, ORRS, ROR, RORS, RSB, RSBS, SBC, SBCS, SUB, SUBS 97788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 978f8c2284645ce651f99ba410a512279102851076eJacob Bramley InstructionCondSizeRL instruction, 979f8c2284645ce651f99ba410a512279102851076eJacob Bramley Condition cond, 980f8c2284645ce651f99ba410a512279102851076eJacob Bramley EncodingSize size, 981f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register rd, 982f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label* label) VIXL_OVERRIDE; 98380b4a1f554a92b2c4d4504265d0bac545c74c69bVincent Belliard bool GenerateSplitInstruction(InstructionCondSizeRROp instruction, 98480b4a1f554a92b2c4d4504265d0bac545c74c69bVincent Belliard Condition cond, 98580b4a1f554a92b2c4d4504265d0bac545c74c69bVincent Belliard Register rd, 98680b4a1f554a92b2c4d4504265d0bac545c74c69bVincent Belliard Register rn, 98780b4a1f554a92b2c4d4504265d0bac545c74c69bVincent Belliard uint32_t imm, 98880b4a1f554a92b2c4d4504265d0bac545c74c69bVincent Belliard uint32_t mask); 989f8c2284645ce651f99ba410a512279102851076eJacob Bramley virtual void Delegate(InstructionType type, 99088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondSizeRROp instruction, 99188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 99288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois EncodingSize size, 99388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 99488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 9953fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const Operand& operand) VIXL_OVERRIDE; 9969ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // CBNZ, CBZ 99788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 99888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionRL instruction, 99988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 10003fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois Label* label) VIXL_OVERRIDE; 10019ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // VMOV 100288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 100388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondDtSSop instruction, 100488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 100588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 100688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rd, 10073fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const SOperand& operand) VIXL_OVERRIDE; 10089ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // VMOV, VMVN 100988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 101088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondDtDDop instruction, 101188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 101288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 101388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 10143fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const DOperand& operand) VIXL_OVERRIDE; 10159ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // VMOV, VMVN 101688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 101788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondDtQQop instruction, 101888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 101988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 102088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 10213fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const QOperand& operand) VIXL_OVERRIDE; 10229ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // LDR, LDRB, LDRH, LDRSB, LDRSH, STR, STRB, STRH 102388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 102488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondSizeRMop instruction, 102588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 102688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois EncodingSize size, 102788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 10283fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const MemOperand& operand) VIXL_OVERRIDE; 10299ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // LDAEXD, LDRD, LDREXD, STLEX, STLEXB, STLEXH, STRD, STREX, STREXB, STREXH 103088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 1031f8c2284645ce651f99ba410a512279102851076eJacob Bramley InstructionCondRL instruction, 1032f8c2284645ce651f99ba410a512279102851076eJacob Bramley Condition cond, 1033f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register rt, 1034f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label* label) VIXL_OVERRIDE; 1035f8c2284645ce651f99ba410a512279102851076eJacob Bramley virtual void Delegate(InstructionType type, 1036f8c2284645ce651f99ba410a512279102851076eJacob Bramley InstructionCondRRL instruction, 1037f8c2284645ce651f99ba410a512279102851076eJacob Bramley Condition cond, 1038f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register rt, 1039f8c2284645ce651f99ba410a512279102851076eJacob Bramley Register rt2, 1040f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label* label) VIXL_OVERRIDE; 1041f8c2284645ce651f99ba410a512279102851076eJacob Bramley virtual void Delegate(InstructionType type, 104288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondRRMop instruction, 104388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 104488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 104588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 10463fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const MemOperand& operand) VIXL_OVERRIDE; 10479ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // VLDR, VSTR 104888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 104988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondDtSMop instruction, 105088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 105188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 105288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rd, 10533fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const MemOperand& operand) VIXL_OVERRIDE; 10549ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // VLDR, VSTR 105588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 105688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondDtDMop instruction, 105788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 105888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 105988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 10603fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const MemOperand& operand) VIXL_OVERRIDE; 10619ae5da2ba518573576cc92e93e7a01dd34c8d1f7Vincent Belliard // MSR 106288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois virtual void Delegate(InstructionType type, 106388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois InstructionCondMsrOp instruction, 106488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, 106588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MaskedSpecialRegister spec_reg, 10663fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const Operand& operand) VIXL_OVERRIDE; 1067f8c2284645ce651f99ba410a512279102851076eJacob Bramley virtual void Delegate(InstructionType type, 1068f8c2284645ce651f99ba410a512279102851076eJacob Bramley InstructionCondDtDL instruction, 1069f8c2284645ce651f99ba410a512279102851076eJacob Bramley Condition cond, 1070f8c2284645ce651f99ba410a512279102851076eJacob Bramley DataType dt, 1071f8c2284645ce651f99ba410a512279102851076eJacob Bramley DRegister rd, 1072f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label* label) VIXL_OVERRIDE; 1073f8c2284645ce651f99ba410a512279102851076eJacob Bramley virtual void Delegate(InstructionType type, 1074f8c2284645ce651f99ba410a512279102851076eJacob Bramley InstructionCondDtSL instruction, 1075f8c2284645ce651f99ba410a512279102851076eJacob Bramley Condition cond, 1076f8c2284645ce651f99ba410a512279102851076eJacob Bramley DataType dt, 1077f8c2284645ce651f99ba410a512279102851076eJacob Bramley SRegister rd, 1078f8c2284645ce651f99ba410a512279102851076eJacob Bramley Label* label) VIXL_OVERRIDE; 107988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 108088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Start of generated code. 108188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 108288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Adc(Condition cond, Register rd, Register rn, const Operand& operand) { 1083cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1084cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1085cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 108688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 108788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 10888d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 108988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 109088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ADC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1 109188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) && 109288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 109388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 109488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois adc(cond, rd, rn, operand); 109588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 109688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Adc(Register rd, Register rn, const Operand& operand) { 109788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Adc(al, rd, rn, operand); 109888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1099934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Adc(FlagsUpdate flags, 1100934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 1101934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1102934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1103934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1104934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 1105934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 1106934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Adc(cond, rd, rn, operand); 1107934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1108934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 1109934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Adcs(cond, rd, rn, operand); 1110934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1111934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 11124443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 11134443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.Is(rd) && operand.IsPlainRegister() && 11144443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetBaseRegister().IsLow(); 11154443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 1116934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Adcs(cond, rd, rn, operand); 1117934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 1118934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Adc(cond, rd, rn, operand); 1119934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1120934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1121934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1122934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1123934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Adc(FlagsUpdate flags, 1124934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1125934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1126934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1127934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Adc(flags, al, rd, rn, operand); 1128934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 112988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 113088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Adcs(Condition cond, Register rd, Register rn, const Operand& operand) { 1131cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1132cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1133cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 113488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 113588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 11368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 113788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 113888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois adcs(cond, rd, rn, operand); 113988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 114088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Adcs(Register rd, Register rn, const Operand& operand) { 114188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Adcs(al, rd, rn, operand); 114288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 114388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 114488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Add(Condition cond, Register rd, Register rn, const Operand& operand) { 1145cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1146cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1147cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 114888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 114988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 11508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1151628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) { 1152628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames uint32_t immediate = operand.GetImmediate(); 1153628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0) { 1154628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 1155628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 1156628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 115788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 115888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ADD<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1 115988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() <= 7) && rn.IsLow() && 116088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rd.IsLow()) || 116188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ADD<c>{<q>} {<Rdn>,} <Rdn>, #<imm8> ; T2 116288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() <= 255) && 116388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rd.IsLow() && rn.Is(rd)) || 116488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ADD{<c>}{<q>} <Rd>, SP, #<imm8> ; T1 11654443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.IsImmediate() && (operand.GetImmediate() <= 1020) && 116688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ((operand.GetImmediate() & 0x3) == 0) && rd.IsLow() && rn.IsSP()) || 116788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ADD<c>{<q>} <Rd>, <Rn>, <Rm> 116888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() && 116988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow()) || 117088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ADD<c>{<q>} <Rdn>, <Rm> ; T2 117188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && !rd.IsPC() && rn.Is(rd) && 117288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois !operand.GetBaseRegister().IsSP() && 117388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois !operand.GetBaseRegister().IsPC()) || 117488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ADD{<c>}{<q>} {<Rdm>,} SP, <Rdm> ; T1 117588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && !rd.IsPC() && rn.IsSP() && 117688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().Is(rd)); 117788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 117888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois add(cond, rd, rn, operand); 117988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 118088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Add(Register rd, Register rn, const Operand& operand) { 118188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Add(al, rd, rn, operand); 118288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1183934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Add(FlagsUpdate flags, 1184934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 1185934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1186934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1187934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1188934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 1189934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 1190934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Add(cond, rd, rn, operand); 1191934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1192934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 1193934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Adds(cond, rd, rn, operand); 1194934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1195934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 11964443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = 1197934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard IsUsingT32() && cond.Is(al) && 11984443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli ((operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() && 11991091d74cee7404c902fccdc6dba81609bbbdf443Georgia Kouveli !rd.Is(rn) && operand.GetBaseRegister().IsLow()) || 1200934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (operand.IsImmediate() && 1201934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard ((rd.IsLow() && rn.IsLow() && (operand.GetImmediate() < 8)) || 1202934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (rd.IsLow() && rn.Is(rd) && (operand.GetImmediate() < 256))))); 12034443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 1204934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Adds(cond, rd, rn, operand); 1205934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 1206dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli bool changed_op_is_smaller = 1207dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli operand.IsImmediate() && (operand.GetSignedImmediate() < 0) && 1208dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli ((rd.IsLow() && rn.IsLow() && 1209dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli (operand.GetSignedImmediate() >= -7)) || 1210dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli (rd.IsLow() && rn.Is(rd) && 1211dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli (operand.GetSignedImmediate() >= -255))); 1212dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli if (changed_op_is_smaller) { 1213dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli Subs(cond, rd, rn, -operand.GetSignedImmediate()); 1214dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli } else { 1215dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli Add(cond, rd, rn, operand); 1216dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli } 1217934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1218934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1219934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1220934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1221934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Add(FlagsUpdate flags, 1222934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1223934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1224934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1225934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Add(flags, al, rd, rn, operand); 1226934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 122788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 122888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Adds(Condition cond, Register rd, Register rn, const Operand& operand) { 1229cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1230cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1231cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 123288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 123388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 12348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 123588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 123688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois adds(cond, rd, rn, operand); 123788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 123888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Adds(Register rd, Register rn, const Operand& operand) { 123988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Adds(al, rd, rn, operand); 124088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 124188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 124288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void And(Condition cond, Register rd, Register rn, const Operand& operand) { 1243cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1244cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1245cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 124688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 124788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 12488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1249a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard if (rd.Is(rn) && operand.IsPlainRegister() && 1250a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard rd.Is(operand.GetBaseRegister())) { 1251a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard return; 1252a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard } 1253e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if (cond.Is(al) && operand.IsImmediate()) { 1254628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames uint32_t immediate = operand.GetImmediate(); 1255628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0) { 1256628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames mov(rd, 0); 1257628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 1258628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 1259e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if ((immediate == 0xffffffff) && rd.Is(rn)) { 1260628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 1261628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 1262628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 126388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 126488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // AND<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1 126588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() && 126688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 126788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 126888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois and_(cond, rd, rn, operand); 126988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 127088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void And(Register rd, Register rn, const Operand& operand) { 127188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois And(al, rd, rn, operand); 127288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1273934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void And(FlagsUpdate flags, 1274934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 1275934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1276934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1277934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1278934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 1279934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 1280934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard And(cond, rd, rn, operand); 1281934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1282934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 1283934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Ands(cond, rd, rn, operand); 1284934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1285934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 1286a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard if (operand.IsPlainRegister() && rd.Is(rn) && 1287a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard rd.Is(operand.GetBaseRegister())) { 1288a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard return; 1289a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard } 12904443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 12914443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.Is(rd) && operand.IsPlainRegister() && 12924443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetBaseRegister().IsLow(); 12934443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 1294934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Ands(cond, rd, rn, operand); 1295934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 1296934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard And(cond, rd, rn, operand); 1297934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1298934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1299934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1300934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1301934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void And(FlagsUpdate flags, 1302934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1303934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1304934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1305934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard And(flags, al, rd, rn, operand); 1306934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 130788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 130888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ands(Condition cond, Register rd, Register rn, const Operand& operand) { 1309cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1310cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1311cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 131288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 131388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 13148d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 131588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 131688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ands(cond, rd, rn, operand); 131788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 131888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ands(Register rd, Register rn, const Operand& operand) { 131988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ands(al, rd, rn, operand); 132088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 132188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 132288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Asr(Condition cond, Register rd, Register rm, const Operand& operand) { 1323cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1324cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1325cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 132688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 132788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 13288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 132988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 133088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ASR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2 133188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() >= 1) && 133288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetImmediate() <= 32) && rd.IsLow() && rm.IsLow()) || 133388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ASR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1 133488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() && 133588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow()); 133688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 133788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois asr(cond, rd, rm, operand); 133888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 133988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Asr(Register rd, Register rm, const Operand& operand) { 134088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Asr(al, rd, rm, operand); 134188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1342934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Asr(FlagsUpdate flags, 1343934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 1344934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1345934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 1346934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1347934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 1348934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 1349934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Asr(cond, rd, rm, operand); 1350934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1351934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 1352934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Asrs(cond, rd, rm, operand); 1353934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1354934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 13554443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = 13564443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() && 13574443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli ((operand.IsImmediate() && (operand.GetImmediate() >= 1) && 13584443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.GetImmediate() <= 32)) || 13594443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.IsPlainRegister() && rd.Is(rm))); 13604443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 1361934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Asrs(cond, rd, rm, operand); 1362934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 1363934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Asr(cond, rd, rm, operand); 1364934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1365934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1366934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1367934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1368934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Asr(FlagsUpdate flags, 1369934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1370934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 1371934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1372934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Asr(flags, al, rd, rm, operand); 1373934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 137488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 137588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Asrs(Condition cond, Register rd, Register rm, const Operand& operand) { 1376cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1377cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1378cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 137988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 138088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 13818d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 138288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 138388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois asrs(cond, rd, rm, operand); 138488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 138588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Asrs(Register rd, Register rm, const Operand& operand) { 138688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Asrs(al, rd, rm, operand); 138788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 138888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 13894a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard void B(Condition cond, Label* label, BranchHint hint = kBranchWithoutHint) { 139088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 139188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 13928d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 13934a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard if (hint == kNear) { 13944a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard if (label->IsBound()) { 13954a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard b(cond, label); 13964a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard } else { 13974a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard b(cond, Narrow, label); 13984a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard } 13994a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard } else { 14004a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard b(cond, label); 14014a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard } 140288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois AddBranchLabel(label); 140388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 14044a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard void B(Label* label, BranchHint hint = kBranchWithoutHint) { 14054a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard B(al, label, hint); 14064a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard } 14074a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard void BPreferNear(Condition cond, Label* label) { B(cond, label, kNear); } 14084a30c5d68ebbc271d6d876d828ffa96db53d8d7cVincent Belliard void BPreferNear(Label* label) { B(al, label, kNear); } 140988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 141088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bfc(Condition cond, Register rd, uint32_t lsb, const Operand& operand) { 1411cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1412cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 141388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 141488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 14158d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 141688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 141788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bfc(cond, rd, lsb, operand); 141888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 141988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bfc(Register rd, uint32_t lsb, const Operand& operand) { 142088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Bfc(al, rd, lsb, operand); 142188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 142288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 142388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bfi(Condition cond, 142488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 142588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 142688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uint32_t lsb, 142788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Operand& operand) { 1428cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1429cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1430cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 143188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 143288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 14338d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 143488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 143588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bfi(cond, rd, rn, lsb, operand); 143688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 143788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bfi(Register rd, Register rn, uint32_t lsb, const Operand& operand) { 143888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Bfi(al, rd, rn, lsb, operand); 143988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 144088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 144188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bic(Condition cond, Register rd, Register rn, const Operand& operand) { 1442cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1443cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1444cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 144588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 144688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 14478d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1448e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if (cond.Is(al) && operand.IsImmediate()) { 1449628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames uint32_t immediate = operand.GetImmediate(); 1450e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if ((immediate == 0) && rd.Is(rn)) { 1451628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 1452628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 1453628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0xffffffff) { 1454628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames mov(rd, 0); 1455628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 1456628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 1457628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 145888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 145988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // BIC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1 146088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() && 146188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 146288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 146388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bic(cond, rd, rn, operand); 146488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 146588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bic(Register rd, Register rn, const Operand& operand) { 146688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Bic(al, rd, rn, operand); 146788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1468934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Bic(FlagsUpdate flags, 1469934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 1470934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1471934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1472934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1473934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 1474934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 1475934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Bic(cond, rd, rn, operand); 1476934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1477934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 1478934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Bics(cond, rd, rn, operand); 1479934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1480934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 14814443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 14824443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.Is(rd) && operand.IsPlainRegister() && 14834443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetBaseRegister().IsLow(); 14844443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 1485934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Bics(cond, rd, rn, operand); 1486934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 1487934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Bic(cond, rd, rn, operand); 1488934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1489934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1490934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1491934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1492934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Bic(FlagsUpdate flags, 1493934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1494934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1495934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1496934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Bic(flags, al, rd, rn, operand); 1497934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 149888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 149988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bics(Condition cond, Register rd, Register rn, const Operand& operand) { 1500cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1501cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1502cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 150388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 150488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15058d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 150688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 150788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bics(cond, rd, rn, operand); 150888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 150988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bics(Register rd, Register rn, const Operand& operand) { 151088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Bics(al, rd, rn, operand); 151188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 151288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 151388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bkpt(Condition cond, uint32_t imm) { 151488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 151588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 151788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 151888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bkpt(cond, imm); 151988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 152088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bkpt(uint32_t imm) { Bkpt(al, imm); } 152188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 152288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bl(Condition cond, Label* label) { 152388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 152488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 152688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 152788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bl(cond, label); 152888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois AddBranchLabel(label); 152988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 153088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bl(Label* label) { Bl(al, label); } 153188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 153288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Blx(Condition cond, Label* label) { 153388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 153488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 153688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 153788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois blx(cond, label); 153888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois AddBranchLabel(label); 153988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 154088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Blx(Label* label) { Blx(al, label); } 154188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 154288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Blx(Condition cond, Register rm) { 1543cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 154488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 154588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15468d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 154788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 154888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // BLX{<c>}{<q>} <Rm> ; T1 154988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois !rm.IsPC(); 155088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 155188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois blx(cond, rm); 155288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 155388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Blx(Register rm) { Blx(al, rm); } 155488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 155588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bx(Condition cond, Register rm) { 1556cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 155788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 155888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15598d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 156088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 156188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // BX{<c>}{<q>} <Rm> ; T1 156288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois !rm.IsPC(); 156388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 156488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bx(cond, rm); 156588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 156688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bx(Register rm) { Bx(al, rm); } 156788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 156888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bxj(Condition cond, Register rm) { 1569cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 157088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 157188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15728d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 157388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 157488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bxj(cond, rm); 157588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 157688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Bxj(Register rm) { Bxj(al, rm); } 157788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 157888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Cbnz(Register rn, Label* label) { 1579cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 158088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 158188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 158388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois cbnz(rn, label); 158488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois AddBranchLabel(label); 158588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 158688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 158788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Cbz(Register rn, Label* label) { 1588cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 158988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 159088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15918d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 159288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois cbz(rn, label); 159388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois AddBranchLabel(label); 159488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 159588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 159688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Clrex(Condition cond) { 159788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 159888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 15998d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 160088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 160188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois clrex(cond); 160288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 160388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Clrex() { Clrex(al); } 160488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 160588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Clz(Condition cond, Register rd, Register rm) { 1606cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1607cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 160888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 160988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 16108d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 161188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 161288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois clz(cond, rd, rm); 161388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 161488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Clz(Register rd, Register rm) { Clz(al, rd, rm); } 161588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 161688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Cmn(Condition cond, Register rn, const Operand& operand) { 1617cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1618cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 161988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 162088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 16218d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 162288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 162388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // CMN{<c>}{<q>} <Rn>, <Rm> ; T1 162488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rn.IsLow() && 162588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 162688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 162788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois cmn(cond, rn, operand); 162888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 162988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Cmn(Register rn, const Operand& operand) { Cmn(al, rn, operand); } 163088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 163188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Cmp(Condition cond, Register rn, const Operand& operand) { 1632cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1633cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 163488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 163588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 16368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 163788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 163888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // CMP{<c>}{<q>} <Rn>, #<imm8> ; T1 163988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() <= 255) && 164088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rn.IsLow()) || 164188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // CMP{<c>}{<q>} <Rn>, <Rm> ; T1 T2 164288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && !rn.IsPC() && 164388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois !operand.GetBaseRegister().IsPC()); 164488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 164588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois cmp(cond, rn, operand); 164688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 164788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Cmp(Register rn, const Operand& operand) { Cmp(al, rn, operand); } 164888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 164988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32b(Condition cond, Register rd, Register rn, Register rm) { 1650cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1651cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1652cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 165388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 165488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 16558d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 165688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 165788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois crc32b(cond, rd, rn, rm); 165888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 165988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32b(Register rd, Register rn, Register rm) { Crc32b(al, rd, rn, rm); } 166088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 166188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32cb(Condition cond, Register rd, Register rn, Register rm) { 1662cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1663cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1664cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 166588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 166688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 16678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 166888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 166988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois crc32cb(cond, rd, rn, rm); 167088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 167188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32cb(Register rd, Register rn, Register rm) { 167288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Crc32cb(al, rd, rn, rm); 167388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 167488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 167588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32ch(Condition cond, Register rd, Register rn, Register rm) { 1676cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1677cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1678cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 167988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 168088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 16818d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 168288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 168388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois crc32ch(cond, rd, rn, rm); 168488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 168588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32ch(Register rd, Register rn, Register rm) { 168688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Crc32ch(al, rd, rn, rm); 168788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 168888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 168988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32cw(Condition cond, Register rd, Register rn, Register rm) { 1690cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1691cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1692cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 169388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 169488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 16958d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 169688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 169788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois crc32cw(cond, rd, rn, rm); 169888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 169988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32cw(Register rd, Register rn, Register rm) { 170088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Crc32cw(al, rd, rn, rm); 170188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 170288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 170388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32h(Condition cond, Register rd, Register rn, Register rm) { 1704cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1705cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1706cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 170788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 170888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 17098d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 171088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 171188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois crc32h(cond, rd, rn, rm); 171288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 171388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32h(Register rd, Register rn, Register rm) { Crc32h(al, rd, rn, rm); } 171488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 171588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32w(Condition cond, Register rd, Register rn, Register rm) { 1716cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1717cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1718cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 171988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 172088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 17218d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 172288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 172388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois crc32w(cond, rd, rn, rm); 172488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 172588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Crc32w(Register rd, Register rn, Register rm) { Crc32w(al, rd, rn, rm); } 172688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 172788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Dmb(Condition cond, MemoryBarrier option) { 172888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 172988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 17308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 173188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 173288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois dmb(cond, option); 173388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 173488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Dmb(MemoryBarrier option) { Dmb(al, option); } 173588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 173688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Dsb(Condition cond, MemoryBarrier option) { 173788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 173888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 17398d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 174088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 174188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois dsb(cond, option); 174288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 174388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Dsb(MemoryBarrier option) { Dsb(al, option); } 174488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 174588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Eor(Condition cond, Register rd, Register rn, const Operand& operand) { 1746cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1747cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1748cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 174988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 175088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 17518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1752628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) { 1753628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames uint32_t immediate = operand.GetImmediate(); 1754628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0) { 1755628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 1756628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 1757628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0xffffffff) { 1758628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames mvn(rd, rn); 1759628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 1760628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 1761628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 176288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 176388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // EOR<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1 176488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() && 176588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 176688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 176788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois eor(cond, rd, rn, operand); 176888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 176988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Eor(Register rd, Register rn, const Operand& operand) { 177088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Eor(al, rd, rn, operand); 177188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1772934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Eor(FlagsUpdate flags, 1773934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 1774934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1775934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1776934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1777934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 1778934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 1779934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Eor(cond, rd, rn, operand); 1780934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1781934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 1782934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Eors(cond, rd, rn, operand); 1783934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1784934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 17854443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 17864443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.Is(rd) && operand.IsPlainRegister() && 17874443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetBaseRegister().IsLow(); 17884443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 1789934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Eors(cond, rd, rn, operand); 1790934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 1791934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Eor(cond, rd, rn, operand); 1792934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1793934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 1794934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1795934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 1796934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Eor(FlagsUpdate flags, 1797934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 1798934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 1799934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 1800934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Eor(flags, al, rd, rn, operand); 1801934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 180288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 180388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Eors(Condition cond, Register rd, Register rn, const Operand& operand) { 1804cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 1805cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1806cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 180788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 180888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 18098d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 181088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 181188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois eors(cond, rd, rn, operand); 181288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 181388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Eors(Register rd, Register rn, const Operand& operand) { 181488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Eors(al, rd, rn, operand); 181588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 181688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 181788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fldmdbx(Condition cond, 181888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 181988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 182088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1821cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1822cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 182388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 182488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 18258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 182688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 182788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois fldmdbx(cond, rn, write_back, dreglist); 182888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 182988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fldmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) { 183088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Fldmdbx(al, rn, write_back, dreglist); 183188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 183288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 183388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fldmiax(Condition cond, 183488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 183588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 183688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1837cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1838cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 183988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 184088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 18418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 184288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 184388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois fldmiax(cond, rn, write_back, dreglist); 184488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 184588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fldmiax(Register rn, WriteBack write_back, DRegisterList dreglist) { 184688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Fldmiax(al, rn, write_back, dreglist); 184788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 184888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 184988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fstmdbx(Condition cond, 185088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 185188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 185288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1853cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1854cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 185588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 185688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 18578d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 185888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 185988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois fstmdbx(cond, rn, write_back, dreglist); 186088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 186188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fstmdbx(Register rn, WriteBack write_back, DRegisterList dreglist) { 186288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Fstmdbx(al, rn, write_back, dreglist); 186388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 186488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 186588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fstmiax(Condition cond, 186688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 186788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 186888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1869cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 1870cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 187188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 187288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 18738d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 187488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 187588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois fstmiax(cond, rn, write_back, dreglist); 187688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 187788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Fstmiax(Register rn, WriteBack write_back, DRegisterList dreglist) { 187888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Fstmiax(al, rn, write_back, dreglist); 187988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 188088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 188188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Hlt(Condition cond, uint32_t imm) { 188288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 188388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 18848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 188588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 188688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois hlt(cond, imm); 188788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 188888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Hlt(uint32_t imm) { Hlt(al, imm); } 188988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 189088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Hvc(Condition cond, uint32_t imm) { 189188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 189288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 18938d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 189488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 189588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois hvc(cond, imm); 189688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 189788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Hvc(uint32_t imm) { Hvc(al, imm); } 189888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 189988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Isb(Condition cond, MemoryBarrier option) { 190088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 190188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19028d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 190388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 190488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois isb(cond, option); 190588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 190688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Isb(MemoryBarrier option) { Isb(al, option); } 190788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 190888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lda(Condition cond, Register rt, const MemOperand& operand) { 1909cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 1910cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 191188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 191288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19138d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 191488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 191588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois lda(cond, rt, operand); 191688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 191788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lda(Register rt, const MemOperand& operand) { Lda(al, rt, operand); } 191888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 191988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldab(Condition cond, Register rt, const MemOperand& operand) { 1920cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 1921cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 192288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 192388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 192588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 192688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldab(cond, rt, operand); 192788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 192888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldab(Register rt, const MemOperand& operand) { Ldab(al, rt, operand); } 192988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 193088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaex(Condition cond, Register rt, const MemOperand& operand) { 1931cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 1932cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 193388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 193488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 193688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 193788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldaex(cond, rt, operand); 193888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 193988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaex(Register rt, const MemOperand& operand) { Ldaex(al, rt, operand); } 194088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 194188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaexb(Condition cond, Register rt, const MemOperand& operand) { 1942cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 1943cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 194488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 194588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19468d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 194788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 194888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldaexb(cond, rt, operand); 194988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 195088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaexb(Register rt, const MemOperand& operand) { 195188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldaexb(al, rt, operand); 195288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 195388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 195488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaexd(Condition cond, 195588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 195688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 195788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 1958cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 1959cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 1960cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 196188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 196288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19638d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 196488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 196588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldaexd(cond, rt, rt2, operand); 196688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 196788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaexd(Register rt, Register rt2, const MemOperand& operand) { 196888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldaexd(al, rt, rt2, operand); 196988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 197088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 197188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaexh(Condition cond, Register rt, const MemOperand& operand) { 1972cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 1973cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 197488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 197588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19768d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 197788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 197888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldaexh(cond, rt, operand); 197988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 198088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldaexh(Register rt, const MemOperand& operand) { 198188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldaexh(al, rt, operand); 198288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 198388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 198488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldah(Condition cond, Register rt, const MemOperand& operand) { 1985cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 1986cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 198788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 198888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 19898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 199088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 199188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldah(cond, rt, operand); 199288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 199388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldah(Register rt, const MemOperand& operand) { Ldah(al, rt, operand); } 199488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 199588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldm(Condition cond, 199688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 199788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 199888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 1999cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2000cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 200188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 200288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 20038d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 200488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 200588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldm(cond, rn, write_back, registers); 200688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 200788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldm(Register rn, WriteBack write_back, RegisterList registers) { 200888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldm(al, rn, write_back, registers); 200988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 201088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 201188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmda(Condition cond, 201288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 201388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 201488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 2015cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2016cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 201788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 201888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 20198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 202088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 202188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldmda(cond, rn, write_back, registers); 202288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 202388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmda(Register rn, WriteBack write_back, RegisterList registers) { 202488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldmda(al, rn, write_back, registers); 202588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 202688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 202788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmdb(Condition cond, 202888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 202988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 203088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 2031cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2032cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 203388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 203488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 20358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 203688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 203788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldmdb(cond, rn, write_back, registers); 203888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 203988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmdb(Register rn, WriteBack write_back, RegisterList registers) { 204088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldmdb(al, rn, write_back, registers); 204188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 204288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 204388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmea(Condition cond, 204488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 204588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 204688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 2047cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2048cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 204988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 205088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 20518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 205288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 205388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldmea(cond, rn, write_back, registers); 205488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 205588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmea(Register rn, WriteBack write_back, RegisterList registers) { 205688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldmea(al, rn, write_back, registers); 205788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 205888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 205988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmed(Condition cond, 206088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 206188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 206288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 2063cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2064cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 206588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 206688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 20678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 206888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 206988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldmed(cond, rn, write_back, registers); 207088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 207188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmed(Register rn, WriteBack write_back, RegisterList registers) { 207288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldmed(al, rn, write_back, registers); 207388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 207488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 207588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmfa(Condition cond, 207688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 207788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 207888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 2079cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2080cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 208188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 208288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 20838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 208488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 208588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldmfa(cond, rn, write_back, registers); 208688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 208788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmfa(Register rn, WriteBack write_back, RegisterList registers) { 208888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldmfa(al, rn, write_back, registers); 208988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 209088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 209188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmfd(Condition cond, 209288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 209388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 209488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 2095cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2096cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 209788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 209888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 20998d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 210088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 210188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldmfd(cond, rn, write_back, registers); 210288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 210388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmfd(Register rn, WriteBack write_back, RegisterList registers) { 210488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldmfd(al, rn, write_back, registers); 210588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 210688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 210788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmib(Condition cond, 210888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 210988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 211088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 2111cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2112cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 211388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 211488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 21158d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 211688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 211788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldmib(cond, rn, write_back, registers); 211888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 211988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldmib(Register rn, WriteBack write_back, RegisterList registers) { 212088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldmib(al, rn, write_back, registers); 212188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 212288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 212388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldr(Condition cond, Register rt, const MemOperand& operand) { 2124cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2125cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 212688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 212788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 21288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 212988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 213088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1 213188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 213288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 213388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 124, 4) && 213488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 213588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2 213688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 213788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsSP() && 213888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 1020, 4) && 213988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 214088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 214188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rt.IsLow() && 214288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 214388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 214488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)); 214588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 214688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldr(cond, rt, operand); 214788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 214888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldr(Register rt, const MemOperand& operand) { Ldr(al, rt, operand); } 214988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 215088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 215188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrb(Condition cond, Register rt, const MemOperand& operand) { 2152cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2153cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 215488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 215588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 21568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 215788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 215888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1 215988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 216088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 216188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 31) && 216288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 216388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 216488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rt.IsLow() && 216588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 216688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 216788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)); 216888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 216988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrb(cond, rt, operand); 217088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 217188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrb(Register rt, const MemOperand& operand) { Ldrb(al, rt, operand); } 217288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 217388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 217488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrd(Condition cond, 217588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 217688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 217788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 2178cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2179cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 2180cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 218188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 218288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 21838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 218488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 218588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrd(cond, rt, rt2, operand); 218688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 218788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrd(Register rt, Register rt2, const MemOperand& operand) { 218888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldrd(al, rt, rt2, operand); 218988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 219088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 219188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 219288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrex(Condition cond, Register rt, const MemOperand& operand) { 2193cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2194cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 219588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 219688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 21978d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 219888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 219988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrex(cond, rt, operand); 220088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 220188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrex(Register rt, const MemOperand& operand) { Ldrex(al, rt, operand); } 220288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 220388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrexb(Condition cond, Register rt, const MemOperand& operand) { 2204cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2205cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 220688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 220788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 22088d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 220988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 221088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrexb(cond, rt, operand); 221188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 221288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrexb(Register rt, const MemOperand& operand) { 221388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldrexb(al, rt, operand); 221488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 221588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 221688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrexd(Condition cond, 221788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 221888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 221988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 2220cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2221cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 2222cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 222388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 222488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 22258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 222688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 222788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrexd(cond, rt, rt2, operand); 222888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 222988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrexd(Register rt, Register rt2, const MemOperand& operand) { 223088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldrexd(al, rt, rt2, operand); 223188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 223288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 223388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrexh(Condition cond, Register rt, const MemOperand& operand) { 2234cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2235cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 223688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 223788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 22388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 223988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 224088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrexh(cond, rt, operand); 224188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 224288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrexh(Register rt, const MemOperand& operand) { 224388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ldrexh(al, rt, operand); 224488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 224588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 224688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrh(Condition cond, Register rt, const MemOperand& operand) { 2247cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2248cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 224988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 225088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 22518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 225288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 225388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1 225488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 225588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 225688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 62, 2) && 225788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 225888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 225988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rt.IsLow() && 226088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 226188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 226288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)); 226388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 226488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrh(cond, rt, operand); 226588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 226688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrh(Register rt, const MemOperand& operand) { Ldrh(al, rt, operand); } 226788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 226888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 226988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrsb(Condition cond, Register rt, const MemOperand& operand) { 2270cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2271cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 227288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 227388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 22748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 227588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 227688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDRSB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 227788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rt.IsLow() && 227888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 227988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 228088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset); 228188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 228288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrsb(cond, rt, operand); 228388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 228488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrsb(Register rt, const MemOperand& operand) { Ldrsb(al, rt, operand); } 228588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 228688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 228788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrsh(Condition cond, Register rt, const MemOperand& operand) { 2288cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 2289cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 229088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 229188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 22928d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 229388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 229488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LDRSH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 229588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rt.IsLow() && 229688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 229788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 229888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset); 229988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 230088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ldrsh(cond, rt, operand); 230188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 230288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ldrsh(Register rt, const MemOperand& operand) { Ldrsh(al, rt, operand); } 230388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 230488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 230588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsl(Condition cond, Register rd, Register rm, const Operand& operand) { 2306cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2307cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 2308cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 230988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 231088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 23118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 231288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 231388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LSL<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2 231488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() >= 1) && 231588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetImmediate() <= 31) && rd.IsLow() && rm.IsLow()) || 231688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LSL<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1 231788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() && 231888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow()); 231988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 232088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois lsl(cond, rd, rm, operand); 232188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 232288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsl(Register rd, Register rm, const Operand& operand) { 232388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Lsl(al, rd, rm, operand); 232488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 2325934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Lsl(FlagsUpdate flags, 2326934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2327934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2328934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 2329934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2330934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2331934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2332934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsl(cond, rd, rm, operand); 2333934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2334934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2335934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsls(cond, rd, rm, operand); 2336934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2337934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 23384443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = 23394443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() && 23404443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli ((operand.IsImmediate() && (operand.GetImmediate() >= 1) && 23414443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.GetImmediate() < 32)) || 23424443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.IsPlainRegister() && rd.Is(rm))); 23434443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 2344934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsls(cond, rd, rm, operand); 2345934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 2346934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsl(cond, rd, rm, operand); 2347934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2348934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2349934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2350934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2351934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Lsl(FlagsUpdate flags, 2352934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2353934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 2354934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2355934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsl(flags, al, rd, rm, operand); 2356934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 235788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 235888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsls(Condition cond, Register rd, Register rm, const Operand& operand) { 2359cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2360cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 2361cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 236288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 236388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 23648d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 236588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 236688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois lsls(cond, rd, rm, operand); 236788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 236888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsls(Register rd, Register rm, const Operand& operand) { 236988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Lsls(al, rd, rm, operand); 237088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 237188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 237288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsr(Condition cond, Register rd, Register rm, const Operand& operand) { 2373cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2374cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 2375cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 237688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 237788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 23788d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 237988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 238088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LSR<c>{<q>} {<Rd>,} <Rm>, #<imm> ; T2 238188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() >= 1) && 238288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetImmediate() <= 32) && rd.IsLow() && rm.IsLow()) || 238388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // LSR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1 238488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() && 238588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow()); 238688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 238788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois lsr(cond, rd, rm, operand); 238888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 238988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsr(Register rd, Register rm, const Operand& operand) { 239088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Lsr(al, rd, rm, operand); 239188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 2392934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Lsr(FlagsUpdate flags, 2393934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2394934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2395934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 2396934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2397934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2398934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2399934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsr(cond, rd, rm, operand); 2400934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2401934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2402934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsrs(cond, rd, rm, operand); 2403934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2404934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 24054443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = 24064443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli IsUsingT32() && cond.Is(al) && rd.IsLow() && rm.IsLow() && 24074443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli ((operand.IsImmediate() && (operand.GetImmediate() >= 1) && 24084443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.GetImmediate() <= 32)) || 24094443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.IsPlainRegister() && rd.Is(rm))); 24104443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 2411934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsrs(cond, rd, rm, operand); 2412934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 2413934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsr(cond, rd, rm, operand); 2414934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2415934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2416934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2417934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2418934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Lsr(FlagsUpdate flags, 2419934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2420934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 2421934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2422934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Lsr(flags, al, rd, rm, operand); 2423934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 242488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 242588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsrs(Condition cond, Register rd, Register rm, const Operand& operand) { 2426cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2427cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 2428cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 242988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 243088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 24318d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 243288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 243388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois lsrs(cond, rd, rm, operand); 243488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 243588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Lsrs(Register rd, Register rm, const Operand& operand) { 243688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Lsrs(al, rd, rm, operand); 243788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 243888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 243988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mla(Condition cond, Register rd, Register rn, Register rm, Register ra) { 2440cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2441cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2442cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 2443cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 244488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 244588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 24468d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 244788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 244888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mla(cond, rd, rn, rm, ra); 244988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 245088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mla(Register rd, Register rn, Register rm, Register ra) { 245188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Mla(al, rd, rn, rm, ra); 245288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 2453934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mla(FlagsUpdate flags, 2454934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2455934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2456934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 2457934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 2458934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register ra) { 2459934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2460934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2461934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mla(cond, rd, rn, rm, ra); 2462934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2463934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2464934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mlas(cond, rd, rn, rm, ra); 2465934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2466934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 2467934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mla(cond, rd, rn, rm, ra); 2468934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2469934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2470934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2471934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mla( 2472934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard FlagsUpdate flags, Register rd, Register rn, Register rm, Register ra) { 2473934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mla(flags, al, rd, rn, rm, ra); 2474934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 247588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 247688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mlas( 247788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 2478cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2479cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2480cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 2481cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 248288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 248388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 24848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 248588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 248688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mlas(cond, rd, rn, rm, ra); 248788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 248888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mlas(Register rd, Register rn, Register rm, Register ra) { 248988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Mlas(al, rd, rn, rm, ra); 249088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 249188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 249288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mls(Condition cond, Register rd, Register rn, Register rm, Register ra) { 2493cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2494cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2495cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 2496cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 249788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 249888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 24998d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 250088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 250188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mls(cond, rd, rn, rm, ra); 250288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 250388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mls(Register rd, Register rn, Register rm, Register ra) { 250488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Mls(al, rd, rn, rm, ra); 250588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 250688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 250788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mov(Condition cond, Register rd, const Operand& operand) { 2508cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2509cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 251088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 251188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 25128d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 2513a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard if (operand.IsPlainRegister() && rd.Is(operand.GetBaseRegister())) { 2514a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard return; 2515a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard } 251688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 251788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MOV<c>{<q>} <Rd>, #<imm8> ; T1 251888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rd.IsLow() && 251988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetImmediate() <= 255)) || 252088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MOV{<c>}{<q>} <Rd>, <Rm> ; T1 252188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && !rd.IsPC() && 252288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois !operand.GetBaseRegister().IsPC()) || 252388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MOV<c>{<q>} <Rd>, <Rm> {, <shift> #<amount>} ; T2 252488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediateShiftedRegister() && rd.IsLow() && 252588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 252688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetShift().Is(LSL) || operand.GetShift().Is(LSR) || 252788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetShift().Is(ASR))) || 252888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MOV<c>{<q>} <Rdm>, <Rdm>, LSL <Rs> ; T1 252988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MOV<c>{<q>} <Rdm>, <Rdm>, LSR <Rs> ; T1 253088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MOV<c>{<q>} <Rdm>, <Rdm>, ASR <Rs> ; T1 253188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MOV<c>{<q>} <Rdm>, <Rdm>, ROR <Rs> ; T1 253288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsRegisterShiftedRegister() && 253388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rd.Is(operand.GetBaseRegister()) && rd.IsLow() && 253488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetShift().Is(LSL) || operand.GetShift().Is(LSR) || 253588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetShift().Is(ASR) || operand.GetShift().Is(ROR)) && 253688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetShiftRegister().IsLow()); 253788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 253888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mov(cond, rd, operand); 253988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 254088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mov(Register rd, const Operand& operand) { Mov(al, rd, operand); } 2541934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mov(FlagsUpdate flags, 2542934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2543934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2544934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2545934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2546934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2547934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mov(cond, rd, operand); 2548934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2549934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2550934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Movs(cond, rd, operand); 2551934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2552934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 2553a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard if (operand.IsPlainRegister() && rd.Is(operand.GetBaseRegister())) { 2554a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard return; 2555a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard } 25564443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = 2557934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard IsUsingT32() && cond.Is(al) && 2558934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard ((operand.IsImmediateShiftedRegister() && rd.IsLow() && 2559934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard operand.GetBaseRegister().IsLow() && 25604443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.GetShiftAmount() >= 1) && 25614443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (((operand.GetShiftAmount() <= 32) && 25624443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli ((operand.GetShift().IsLSR() || operand.GetShift().IsASR()))) || 25634443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli ((operand.GetShiftAmount() < 32) && 25644443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetShift().IsLSL()))) || 2565934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (operand.IsRegisterShiftedRegister() && rd.IsLow() && 2566934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard operand.GetBaseRegister().Is(rd) && 2567934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard operand.GetShiftRegister().IsLow() && 2568934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (operand.GetShift().IsLSL() || operand.GetShift().IsLSR() || 2569934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard operand.GetShift().IsASR() || operand.GetShift().IsROR())) || 2570934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (operand.IsImmediate() && rd.IsLow() && 2571934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (operand.GetImmediate() < 256))); 25724443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 2573934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Movs(cond, rd, operand); 2574934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 2575934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mov(cond, rd, operand); 2576934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2577934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2578934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2579934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2580934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mov(FlagsUpdate flags, Register rd, const Operand& operand) { 2581934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mov(flags, al, rd, operand); 2582934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 258388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 258488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Movs(Condition cond, Register rd, const Operand& operand) { 2585cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2586cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 258788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 258888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 25898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 259088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 259188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois movs(cond, rd, operand); 259288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 259388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Movs(Register rd, const Operand& operand) { Movs(al, rd, operand); } 259488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 259588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Movt(Condition cond, Register rd, const Operand& operand) { 2596cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2597cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 259888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 259988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 26008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 260188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 260288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois movt(cond, rd, operand); 260388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 260488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Movt(Register rd, const Operand& operand) { Movt(al, rd, operand); } 260588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 260688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mrs(Condition cond, Register rd, SpecialRegister spec_reg) { 2607cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 260888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 260988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 26108d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 261188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 261288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mrs(cond, rd, spec_reg); 261388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 261488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mrs(Register rd, SpecialRegister spec_reg) { Mrs(al, rd, spec_reg); } 261588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 261688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Msr(Condition cond, 261788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MaskedSpecialRegister spec_reg, 261888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Operand& operand) { 2619cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 262088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 262188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 26228d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 262388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 262488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois msr(cond, spec_reg, operand); 262588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 262688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Msr(MaskedSpecialRegister spec_reg, const Operand& operand) { 262788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Msr(al, spec_reg, operand); 262888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 262988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 263088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mul(Condition cond, Register rd, Register rn, Register rm) { 2631cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2632cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2633cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 263488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 263588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 26368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 263788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 263888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MUL<c>{<q>} <Rdm>, <Rn>{, <Rdm>} ; T1 263988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rd.Is(rm) && rn.IsLow() && rm.IsLow(); 264088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 264188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mul(cond, rd, rn, rm); 264288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 264388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mul(Register rd, Register rn, Register rm) { Mul(al, rd, rn, rm); } 2644934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mul(FlagsUpdate flags, 2645934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2646934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2647934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 2648934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm) { 2649934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2650934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2651934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mul(cond, rd, rn, rm); 2652934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2653934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2654934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Muls(cond, rd, rn, rm); 2655934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2656934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 26574443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 26584443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.IsLow() && rm.Is(rd); 26594443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 2660934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Muls(cond, rd, rn, rm); 2661934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 2662934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mul(cond, rd, rn, rm); 2663934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2664934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2665934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2666934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2667934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mul(FlagsUpdate flags, Register rd, Register rn, Register rm) { 2668934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mul(flags, al, rd, rn, rm); 2669934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 267088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 267188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Muls(Condition cond, Register rd, Register rn, Register rm) { 2672cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2673cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2674cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 267588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 267688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 26778d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 267888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 267988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois muls(cond, rd, rn, rm); 268088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 268188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Muls(Register rd, Register rn, Register rm) { Muls(al, rd, rn, rm); } 268288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 268388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mvn(Condition cond, Register rd, const Operand& operand) { 2684cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2685cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 268688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 268788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 26888d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 268988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 269088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // MVN<c>{<q>} <Rd>, <Rm> ; T1 269188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rd.IsLow() && 269288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 269388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 269488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mvn(cond, rd, operand); 269588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 269688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mvn(Register rd, const Operand& operand) { Mvn(al, rd, operand); } 2697934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mvn(FlagsUpdate flags, 2698934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2699934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2700934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2701934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2702934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2703934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mvn(cond, rd, operand); 2704934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2705934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2706934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mvns(cond, rd, operand); 2707934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2708934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 27094443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 27104443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.IsPlainRegister() && 27114443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetBaseRegister().IsLow(); 27124443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 2713934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mvns(cond, rd, operand); 2714934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 2715934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mvn(cond, rd, operand); 2716934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2717934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2718934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2719934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2720934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Mvn(FlagsUpdate flags, Register rd, const Operand& operand) { 2721934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Mvn(flags, al, rd, operand); 2722934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 272388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 272488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mvns(Condition cond, Register rd, const Operand& operand) { 2725cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2726cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 272788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 272888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 27298d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 273088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 273188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois mvns(cond, rd, operand); 273288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 273388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Mvns(Register rd, const Operand& operand) { Mvns(al, rd, operand); } 273488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 273588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Nop(Condition cond) { 273688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 273788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 27388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 273988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 274088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois nop(cond); 274188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 274288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Nop() { Nop(al); } 274388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 274488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orn(Condition cond, Register rd, Register rn, const Operand& operand) { 2745cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2746cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2747cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 274888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 274988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 27508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 2751e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if (cond.Is(al) && operand.IsImmediate()) { 2752628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames uint32_t immediate = operand.GetImmediate(); 2753628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0) { 2754e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard mvn(rd, 0); 2755628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 2756628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 2757e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if ((immediate == 0xffffffff) && rd.Is(rn)) { 2758628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 2759628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 2760628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 276188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 276288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois orn(cond, rd, rn, operand); 276388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 276488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orn(Register rd, Register rn, const Operand& operand) { 276588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Orn(al, rd, rn, operand); 276688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 2767934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Orn(FlagsUpdate flags, 2768934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2769934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2770934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 2771934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2772934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2773934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2774934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orn(cond, rd, rn, operand); 2775934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2776934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2777934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orns(cond, rd, rn, operand); 2778934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2779934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 2780934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orn(cond, rd, rn, operand); 2781934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2782934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2783934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2784934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Orn(FlagsUpdate flags, 2785934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2786934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 2787934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2788934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orn(flags, al, rd, rn, operand); 2789934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 279088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 279188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orns(Condition cond, Register rd, Register rn, const Operand& operand) { 2792cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2793cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2794cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 279588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 279688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 27978d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 279888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 279988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois orns(cond, rd, rn, operand); 280088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 280188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orns(Register rd, Register rn, const Operand& operand) { 280288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Orns(al, rd, rn, operand); 280388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 280488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 280588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orr(Condition cond, Register rd, Register rn, const Operand& operand) { 2806cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2807cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2808cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 280988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 281088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 28118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 2812a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard if (rd.Is(rn) && operand.IsPlainRegister() && 2813a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard rd.Is(operand.GetBaseRegister())) { 2814a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard return; 2815a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard } 2816e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if (cond.Is(al) && operand.IsImmediate()) { 2817628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames uint32_t immediate = operand.GetImmediate(); 2818e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard if ((immediate == 0) && rd.Is(rn)) { 2819628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 2820628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 2821628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0xffffffff) { 2822e2aa8941a5b41fbd9f855906b8663009eac14669Vincent Belliard mvn(rd, 0); 2823628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 2824628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 2825628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 282688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 282788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ORR<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1 282888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rd.Is(rn) && rn.IsLow() && 282988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 283088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 283188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois orr(cond, rd, rn, operand); 283288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 283388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orr(Register rd, Register rn, const Operand& operand) { 283488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Orr(al, rd, rn, operand); 283588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 2836934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Orr(FlagsUpdate flags, 2837934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 2838934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2839934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 2840934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2841934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 2842934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 2843934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orr(cond, rd, rn, operand); 2844934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2845934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 2846934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orrs(cond, rd, rn, operand); 2847934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2848934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 2849a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard if (operand.IsPlainRegister() && rd.Is(rn) && 2850a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard rd.Is(operand.GetBaseRegister())) { 2851a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard return; 2852a576eb92e2a877984e6e5c1e409e23c49c8b96a1Vincent Belliard } 28534443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 28544443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.Is(rd) && operand.IsPlainRegister() && 28554443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetBaseRegister().IsLow(); 28564443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 2857934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orrs(cond, rd, rn, operand); 2858934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 2859934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orr(cond, rd, rn, operand); 2860934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2861934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 2862934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2863934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 2864934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Orr(FlagsUpdate flags, 2865934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 2866934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 2867934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 2868934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Orr(flags, al, rd, rn, operand); 2869934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 287088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 287188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orrs(Condition cond, Register rd, Register rn, const Operand& operand) { 2872cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2873cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2874cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 287588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 287688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 28778d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 287888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 287988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois orrs(cond, rd, rn, operand); 288088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 288188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Orrs(Register rd, Register rn, const Operand& operand) { 288288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Orrs(al, rd, rn, operand); 288388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 288488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 288588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pkhbt(Condition cond, Register rd, Register rn, const Operand& operand) { 2886cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2887cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2888cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 288988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 289088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 28918d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 289288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 289388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pkhbt(cond, rd, rn, operand); 289488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 289588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pkhbt(Register rd, Register rn, const Operand& operand) { 289688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Pkhbt(al, rd, rn, operand); 289788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 289888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 289988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pkhtb(Condition cond, Register rd, Register rn, const Operand& operand) { 2900cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 2901cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 2902cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 290388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 290488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29058d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 290688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 290788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pkhtb(cond, rd, rn, operand); 290888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 290988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pkhtb(Register rd, Register rn, const Operand& operand) { 291088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Pkhtb(al, rd, rn, operand); 291188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 291288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 291388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pld(Condition cond, Label* label) { 291488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 291588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 291788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 291888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pld(cond, label); 291988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 292088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pld(Label* label) { Pld(al, label); } 292188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 292288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pld(Condition cond, const MemOperand& operand) { 2923cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 292488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 292588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29268d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 292788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 292888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pld(cond, operand); 292988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 293088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pld(const MemOperand& operand) { Pld(al, operand); } 293188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 293288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pldw(Condition cond, const MemOperand& operand) { 2933cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 293488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 293588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 293788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 293888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pldw(cond, operand); 293988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 294088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pldw(const MemOperand& operand) { Pldw(al, operand); } 294188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 294288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pli(Condition cond, const MemOperand& operand) { 2943cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 294488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 294588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29468d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 294788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 294888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pli(cond, operand); 294988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 295088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pli(const MemOperand& operand) { Pli(al, operand); } 295188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 295288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pli(Condition cond, Label* label) { 295388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 295488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29558d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 295688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 295788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pli(cond, label); 295888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 295988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pli(Label* label) { Pli(al, label); } 296088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 296188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pop(Condition cond, RegisterList registers) { 2962cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 296388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 296488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29658d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 296688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 296788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pop(cond, registers); 296888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 296988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pop(RegisterList registers) { Pop(al, registers); } 297088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 297188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pop(Condition cond, Register rt) { 2972cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 297388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 297488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29758d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 297688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 297788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois pop(cond, rt); 297888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 297988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Pop(Register rt) { Pop(al, rt); } 298088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 298188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Push(Condition cond, RegisterList registers) { 2982cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 298388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 298488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29858d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 298688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 298788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois push(cond, registers); 298888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 298988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Push(RegisterList registers) { Push(al, registers); } 299088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 299188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Push(Condition cond, Register rt) { 2992cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 299388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 299488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 29958d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 299688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 299788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois push(cond, rt); 299888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 299988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Push(Register rt) { Push(al, rt); } 300088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 300188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qadd(Condition cond, Register rd, Register rm, Register rn) { 3002cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3003cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3004cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 300588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 300688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30078d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 300888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 300988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qadd(cond, rd, rm, rn); 301088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 301188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qadd(Register rd, Register rm, Register rn) { Qadd(al, rd, rm, rn); } 301288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 301388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qadd16(Condition cond, Register rd, Register rn, Register rm) { 3014cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3015cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3016cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 301788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 301888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 302088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 302188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qadd16(cond, rd, rn, rm); 302288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 302388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qadd16(Register rd, Register rn, Register rm) { Qadd16(al, rd, rn, rm); } 302488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 302588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qadd8(Condition cond, Register rd, Register rn, Register rm) { 3026cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3027cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3028cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 302988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 303088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30318d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 303288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 303388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qadd8(cond, rd, rn, rm); 303488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 303588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qadd8(Register rd, Register rn, Register rm) { Qadd8(al, rd, rn, rm); } 303688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 303788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qasx(Condition cond, Register rd, Register rn, Register rm) { 3038cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3039cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3040cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 304188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 304288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30438d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 304488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 304588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qasx(cond, rd, rn, rm); 304688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 304788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qasx(Register rd, Register rn, Register rm) { Qasx(al, rd, rn, rm); } 304888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 304988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qdadd(Condition cond, Register rd, Register rm, Register rn) { 3050cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3051cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3052cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 305388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 305488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30558d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 305688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 305788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qdadd(cond, rd, rm, rn); 305888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 305988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qdadd(Register rd, Register rm, Register rn) { Qdadd(al, rd, rm, rn); } 306088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 306188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qdsub(Condition cond, Register rd, Register rm, Register rn) { 3062cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3063cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3064cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 306588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 306688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 306888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 306988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qdsub(cond, rd, rm, rn); 307088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 307188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qdsub(Register rd, Register rm, Register rn) { Qdsub(al, rd, rm, rn); } 307288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 307388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsax(Condition cond, Register rd, Register rn, Register rm) { 3074cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3075cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3076cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 307788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 307888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 308088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 308188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qsax(cond, rd, rn, rm); 308288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 308388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsax(Register rd, Register rn, Register rm) { Qsax(al, rd, rn, rm); } 308488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 308588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsub(Condition cond, Register rd, Register rm, Register rn) { 3086cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3087cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3088cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 308988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 309088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 30918d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 309288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 309388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qsub(cond, rd, rm, rn); 309488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 309588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsub(Register rd, Register rm, Register rn) { Qsub(al, rd, rm, rn); } 309688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 309788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsub16(Condition cond, Register rd, Register rn, Register rm) { 3098cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3099cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3100cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 310188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 310288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 31038d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 310488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 310588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qsub16(cond, rd, rn, rm); 310688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 310788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsub16(Register rd, Register rn, Register rm) { Qsub16(al, rd, rn, rm); } 310888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 310988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsub8(Condition cond, Register rd, Register rn, Register rm) { 3110cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3111cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3112cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 311388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 311488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 31158d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 311688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 311788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois qsub8(cond, rd, rn, rm); 311888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 311988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Qsub8(Register rd, Register rn, Register rm) { Qsub8(al, rd, rn, rm); } 312088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 312188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rbit(Condition cond, Register rd, Register rm) { 3122cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3123cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 312488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 312588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 31268d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 312788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 312888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rbit(cond, rd, rm); 312988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 313088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rbit(Register rd, Register rm) { Rbit(al, rd, rm); } 313188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 313288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rev(Condition cond, Register rd, Register rm) { 3133cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3134cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 313588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 313688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 31378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 313888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 313988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rev(cond, rd, rm); 314088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 314188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rev(Register rd, Register rm) { Rev(al, rd, rm); } 314288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 314388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rev16(Condition cond, Register rd, Register rm) { 3144cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3145cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 314688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 314788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 31488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 314988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 315088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rev16(cond, rd, rm); 315188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 315288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rev16(Register rd, Register rm) { Rev16(al, rd, rm); } 315388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 315488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Revsh(Condition cond, Register rd, Register rm) { 3155cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3156cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 315788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 315888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 31598d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 316088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 316188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois revsh(cond, rd, rm); 316288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 316388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Revsh(Register rd, Register rm) { Revsh(al, rd, rm); } 316488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 316588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ror(Condition cond, Register rd, Register rm, const Operand& operand) { 3166cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3167cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3168cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 316988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 317088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 31718d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 317288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 317388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // ROR<c>{<q>} {<Rdm>,} <Rdm>, <Rs> ; T1 3174e7a1690b45036db4c2730ab1c2699ca764a40a68Georgia Kouveli operand.IsPlainRegister() && rd.Is(rm) && rd.IsLow() && 3175e7a1690b45036db4c2730ab1c2699ca764a40a68Georgia Kouveli operand.GetBaseRegister().IsLow(); 317688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 317788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ror(cond, rd, rm, operand); 317888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 317988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ror(Register rd, Register rm, const Operand& operand) { 318088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ror(al, rd, rm, operand); 318188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 3182934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Ror(FlagsUpdate flags, 3183934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 3184934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3185934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 3186934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3187934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 3188934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 3189934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Ror(cond, rd, rm, operand); 3190934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3191934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 3192934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rors(cond, rd, rm, operand); 3193934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3194934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 31954443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 31964443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rm.IsLow() && operand.IsPlainRegister() && 31974443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rd.Is(rm); 31984443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 31994443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli Rors(cond, rd, rm, operand); 32004443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli } else { 32014443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli Ror(cond, rd, rm, operand); 32024443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli } 3203934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3204934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3205934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3206934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Ror(FlagsUpdate flags, 3207934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3208934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm, 3209934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3210934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Ror(flags, al, rd, rm, operand); 3211934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 321288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 321388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rors(Condition cond, Register rd, Register rm, const Operand& operand) { 3214cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3215cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3216cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 321788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 321888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 32198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 322088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 322188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rors(cond, rd, rm, operand); 322288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 322388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rors(Register rd, Register rm, const Operand& operand) { 322488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Rors(al, rd, rm, operand); 322588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 322688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 322788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rrx(Condition cond, Register rd, Register rm) { 3228cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3229cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 323088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 323188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 32328d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 323388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 323488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rrx(cond, rd, rm); 323588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 323688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rrx(Register rd, Register rm) { Rrx(al, rd, rm); } 3237934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Rrx(FlagsUpdate flags, Condition cond, Register rd, Register rm) { 3238934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 3239934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 3240934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rrx(cond, rd, rm); 3241934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3242934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 3243934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rrxs(cond, rd, rm); 3244934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3245934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 3246934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rrx(cond, rd, rm); 3247934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3248934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3249934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3250934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Rrx(FlagsUpdate flags, Register rd, Register rm) { 3251934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rrx(flags, al, rd, rm); 3252934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 325388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 325488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rrxs(Condition cond, Register rd, Register rm) { 3255cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3256cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 325788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 325888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 32598d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 326088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 326188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rrxs(cond, rd, rm); 326288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 326388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rrxs(Register rd, Register rm) { Rrxs(al, rd, rm); } 326488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 326588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rsb(Condition cond, Register rd, Register rn, const Operand& operand) { 3266cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3267cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3268cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 326988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 327088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 32718d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 327288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 327388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // RSB<c>{<q>} {<Rd>, }<Rn>, #0 ; T1 327488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsImmediate() && rd.IsLow() && rn.IsLow() && 327588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetImmediate() == 0); 327688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 327788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rsb(cond, rd, rn, operand); 327888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 327988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rsb(Register rd, Register rn, const Operand& operand) { 328088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Rsb(al, rd, rn, operand); 328188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 3282934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Rsb(FlagsUpdate flags, 3283934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 3284934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3285934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 3286934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3287934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 3288934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 3289934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsb(cond, rd, rn, operand); 3290934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3291934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 3292934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsbs(cond, rd, rn, operand); 3293934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3294934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 32954443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 32964443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.IsLow() && operand.IsImmediate() && 32974443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli (operand.GetImmediate() == 0); 32984443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 3299934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsbs(cond, rd, rn, operand); 3300934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 3301934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsb(cond, rd, rn, operand); 3302934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3303934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3304934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3305934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3306934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Rsb(FlagsUpdate flags, 3307934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3308934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 3309934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3310934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsb(flags, al, rd, rn, operand); 3311934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 331288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 331388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rsbs(Condition cond, Register rd, Register rn, const Operand& operand) { 3314cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3315cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3316cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 331788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 331888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 33198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 332088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 332188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rsbs(cond, rd, rn, operand); 332288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 332388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rsbs(Register rd, Register rn, const Operand& operand) { 332488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Rsbs(al, rd, rn, operand); 332588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 332688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 332788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rsc(Condition cond, Register rd, Register rn, const Operand& operand) { 3328cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3329cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3330cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 333188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 333288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 33338d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 333488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 333588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rsc(cond, rd, rn, operand); 333688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 333788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rsc(Register rd, Register rn, const Operand& operand) { 333888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Rsc(al, rd, rn, operand); 333988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 3340934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Rsc(FlagsUpdate flags, 3341934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 3342934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3343934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 3344934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3345934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 3346934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 3347934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsc(cond, rd, rn, operand); 3348934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3349934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 3350934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rscs(cond, rd, rn, operand); 3351934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3352934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 3353934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsc(cond, rd, rn, operand); 3354934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3355934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3356934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3357934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Rsc(FlagsUpdate flags, 3358934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3359934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 3360934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3361934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Rsc(flags, al, rd, rn, operand); 3362934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 336388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 336488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rscs(Condition cond, Register rd, Register rn, const Operand& operand) { 3365cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3366cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3367cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 336888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 336988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 33708d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 337188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 337288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rscs(cond, rd, rn, operand); 337388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 337488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Rscs(Register rd, Register rn, const Operand& operand) { 337588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Rscs(al, rd, rn, operand); 337688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 337788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 337888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sadd16(Condition cond, Register rd, Register rn, Register rm) { 3379cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3380cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3381cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 338288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 338388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 33848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 338588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 338688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sadd16(cond, rd, rn, rm); 338788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 338888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sadd16(Register rd, Register rn, Register rm) { Sadd16(al, rd, rn, rm); } 338988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 339088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sadd8(Condition cond, Register rd, Register rn, Register rm) { 3391cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3392cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3393cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 339488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 339588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 33968d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 339788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 339888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sadd8(cond, rd, rn, rm); 339988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 340088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sadd8(Register rd, Register rn, Register rm) { Sadd8(al, rd, rn, rm); } 340188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 340288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sasx(Condition cond, Register rd, Register rn, Register rm) { 3403cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3404cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3405cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 340688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 340788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 34088d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 340988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 341088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sasx(cond, rd, rn, rm); 341188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 341288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sasx(Register rd, Register rn, Register rm) { Sasx(al, rd, rn, rm); } 341388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 341488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sbc(Condition cond, Register rd, Register rn, const Operand& operand) { 3415cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3416cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3417cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 341888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 341988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 34208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 342188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 342288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // SBC<c>{<q>} {<Rdn>,} <Rdn>, <Rm> ; T1 342388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rn.IsLow() && rd.Is(rn) && 342488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 342588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 342688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sbc(cond, rd, rn, operand); 342788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 342888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sbc(Register rd, Register rn, const Operand& operand) { 342988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sbc(al, rd, rn, operand); 343088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 3431934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Sbc(FlagsUpdate flags, 3432934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 3433934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3434934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 3435934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3436934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 3437934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 3438934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Sbc(cond, rd, rn, operand); 3439934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3440934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 3441934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Sbcs(cond, rd, rn, operand); 3442934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3443934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 34444443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = IsUsingT32() && cond.Is(al) && rd.IsLow() && 34454443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli rn.Is(rd) && operand.IsPlainRegister() && 34464443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli operand.GetBaseRegister().IsLow(); 34474443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 3448934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Sbcs(cond, rd, rn, operand); 3449934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 3450934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Sbc(cond, rd, rn, operand); 3451934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3452934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 3453934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3454934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 3455934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Sbc(FlagsUpdate flags, 3456934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 3457934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 3458934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 3459934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Sbc(flags, al, rd, rn, operand); 3460934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 346188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 346288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sbcs(Condition cond, Register rd, Register rn, const Operand& operand) { 3463cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3464cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3465cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 346688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 346788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 34688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 346988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 347088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sbcs(cond, rd, rn, operand); 347188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 347288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sbcs(Register rd, Register rn, const Operand& operand) { 347388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sbcs(al, rd, rn, operand); 347488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 347588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 347688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sbfx(Condition cond, 347788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 347888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 347988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uint32_t lsb, 348088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Operand& operand) { 3481cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3482cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3483cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 348488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 348588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 34868d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 348788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 348888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sbfx(cond, rd, rn, lsb, operand); 348988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 349088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sbfx(Register rd, Register rn, uint32_t lsb, const Operand& operand) { 349188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sbfx(al, rd, rn, lsb, operand); 349288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 349388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 349488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sdiv(Condition cond, Register rd, Register rn, Register rm) { 3495cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3496cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3497cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 349888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 349988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 350188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 350288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sdiv(cond, rd, rn, rm); 350388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 350488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sdiv(Register rd, Register rn, Register rm) { Sdiv(al, rd, rn, rm); } 350588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 350688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sel(Condition cond, Register rd, Register rn, Register rm) { 3507cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3508cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3509cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 351088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 351188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35128d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 351388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 351488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sel(cond, rd, rn, rm); 351588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 351688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sel(Register rd, Register rn, Register rm) { Sel(al, rd, rn, rm); } 351788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 351888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shadd16(Condition cond, Register rd, Register rn, Register rm) { 3519cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3520cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3521cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 352288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 352388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 352588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 352688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois shadd16(cond, rd, rn, rm); 352788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 352888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shadd16(Register rd, Register rn, Register rm) { 352988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Shadd16(al, rd, rn, rm); 353088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 353188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 353288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shadd8(Condition cond, Register rd, Register rn, Register rm) { 3533cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3534cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3535cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 353688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 353788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 353988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 354088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois shadd8(cond, rd, rn, rm); 354188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 354288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shadd8(Register rd, Register rn, Register rm) { Shadd8(al, rd, rn, rm); } 354388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 354488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shasx(Condition cond, Register rd, Register rn, Register rm) { 3545cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3546cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3547cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 354888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 354988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 355188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 355288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois shasx(cond, rd, rn, rm); 355388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 355488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shasx(Register rd, Register rn, Register rm) { Shasx(al, rd, rn, rm); } 355588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 355688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shsax(Condition cond, Register rd, Register rn, Register rm) { 3557cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3558cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3559cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 356088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 356188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35628d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 356388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 356488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois shsax(cond, rd, rn, rm); 356588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 356688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shsax(Register rd, Register rn, Register rm) { Shsax(al, rd, rn, rm); } 356788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 356888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shsub16(Condition cond, Register rd, Register rn, Register rm) { 3569cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3570cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3571cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 357288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 357388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 357588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 357688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois shsub16(cond, rd, rn, rm); 357788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 357888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shsub16(Register rd, Register rn, Register rm) { 357988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Shsub16(al, rd, rn, rm); 358088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 358188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 358288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shsub8(Condition cond, Register rd, Register rn, Register rm) { 3583cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3584cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3585cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 358688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 358788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 35888d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 358988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 359088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois shsub8(cond, rd, rn, rm); 359188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 359288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Shsub8(Register rd, Register rn, Register rm) { Shsub8(al, rd, rn, rm); } 359388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 359488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlabb( 359588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3596cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3597cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3598cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3599cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 360088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 360188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 36028d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 360388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 360488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlabb(cond, rd, rn, rm, ra); 360588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 360688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlabb(Register rd, Register rn, Register rm, Register ra) { 360788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlabb(al, rd, rn, rm, ra); 360888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 360988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 361088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlabt( 361188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3612cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3613cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3614cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3615cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 361688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 361788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 36188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 361988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 362088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlabt(cond, rd, rn, rm, ra); 362188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 362288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlabt(Register rd, Register rn, Register rm, Register ra) { 362388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlabt(al, rd, rn, rm, ra); 362488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 362588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 362688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlad( 362788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3628cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3629cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3630cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3631cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 363288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 363388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 36348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 363588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 363688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlad(cond, rd, rn, rm, ra); 363788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 363888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlad(Register rd, Register rn, Register rm, Register ra) { 363988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlad(al, rd, rn, rm, ra); 364088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 364188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 364288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smladx( 364388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3644cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3645cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3646cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3647cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 364888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 364988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 36508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 365188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 365288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smladx(cond, rd, rn, rm, ra); 365388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 365488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smladx(Register rd, Register rn, Register rm, Register ra) { 365588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smladx(al, rd, rn, rm, ra); 365688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 365788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 365888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlal( 365988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3660cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3661cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3662cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3663cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 366488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 366588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 36668d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 366788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 366888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlal(cond, rdlo, rdhi, rn, rm); 366988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 367088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlal(Register rdlo, Register rdhi, Register rn, Register rm) { 367188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlal(al, rdlo, rdhi, rn, rm); 367288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 367388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 367488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlalbb( 367588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3676cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3677cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3678cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3679cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 368088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 368188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 36828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 368388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 368488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlalbb(cond, rdlo, rdhi, rn, rm); 368588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 368688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlalbb(Register rdlo, Register rdhi, Register rn, Register rm) { 368788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlalbb(al, rdlo, rdhi, rn, rm); 368888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 368988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 369088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlalbt( 369188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3692cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3693cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3694cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3695cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 369688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 369788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 36988d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 369988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 370088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlalbt(cond, rdlo, rdhi, rn, rm); 370188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 370288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlalbt(Register rdlo, Register rdhi, Register rn, Register rm) { 370388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlalbt(al, rdlo, rdhi, rn, rm); 370488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 370588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 370688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlald( 370788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3708cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3709cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3710cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3711cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 371288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 371388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 37148d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 371588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 371688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlald(cond, rdlo, rdhi, rn, rm); 371788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 371888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlald(Register rdlo, Register rdhi, Register rn, Register rm) { 371988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlald(al, rdlo, rdhi, rn, rm); 372088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 372188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 372288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlaldx( 372388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3724cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3725cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3726cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3727cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 372888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 372988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 37308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 373188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 373288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlaldx(cond, rdlo, rdhi, rn, rm); 373388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 373488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlaldx(Register rdlo, Register rdhi, Register rn, Register rm) { 373588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlaldx(al, rdlo, rdhi, rn, rm); 373688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 373788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 373888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlals( 373988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3740cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3741cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3742cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3743cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 374488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 374588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 37468d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 374788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 374888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlals(cond, rdlo, rdhi, rn, rm); 374988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 375088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlals(Register rdlo, Register rdhi, Register rn, Register rm) { 375188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlals(al, rdlo, rdhi, rn, rm); 375288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 375388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 375488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlaltb( 375588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3756cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3757cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3758cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3759cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 376088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 376188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 37628d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 376388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 376488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlaltb(cond, rdlo, rdhi, rn, rm); 376588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 376688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlaltb(Register rdlo, Register rdhi, Register rn, Register rm) { 376788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlaltb(al, rdlo, rdhi, rn, rm); 376888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 376988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 377088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlaltt( 377188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3772cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3773cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3774cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3775cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 377688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 377788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 37788d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 377988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 378088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlaltt(cond, rdlo, rdhi, rn, rm); 378188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 378288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlaltt(Register rdlo, Register rdhi, Register rn, Register rm) { 378388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlaltt(al, rdlo, rdhi, rn, rm); 378488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 378588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 378688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlatb( 378788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3788cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3789cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3790cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3791cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 379288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 379388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 37948d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 379588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 379688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlatb(cond, rd, rn, rm, ra); 379788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 379888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlatb(Register rd, Register rn, Register rm, Register ra) { 379988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlatb(al, rd, rn, rm, ra); 380088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 380188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 380288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlatt( 380388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3804cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3805cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3806cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3807cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 380888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 380988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 38108d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 381188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 381288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlatt(cond, rd, rn, rm, ra); 381388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 381488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlatt(Register rd, Register rn, Register rm, Register ra) { 381588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlatt(al, rd, rn, rm, ra); 381688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 381788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 381888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlawb( 381988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3820cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3821cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3822cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3823cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 382488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 382588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 38268d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 382788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 382888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlawb(cond, rd, rn, rm, ra); 382988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 383088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlawb(Register rd, Register rn, Register rm, Register ra) { 383188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlawb(al, rd, rn, rm, ra); 383288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 383388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 383488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlawt( 383588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3836cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3837cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3838cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3839cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 384088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 384188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 38428d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 384388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 384488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlawt(cond, rd, rn, rm, ra); 384588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 384688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlawt(Register rd, Register rn, Register rm, Register ra) { 384788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlawt(al, rd, rn, rm, ra); 384888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 384988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 385088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsd( 385188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3852cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3853cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3854cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3855cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 385688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 385788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 38588d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 385988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 386088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlsd(cond, rd, rn, rm, ra); 386188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 386288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsd(Register rd, Register rn, Register rm, Register ra) { 386388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlsd(al, rd, rn, rm, ra); 386488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 386588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 386688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsdx( 386788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3868cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3869cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3870cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3871cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 387288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 387388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 38748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 387588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 387688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlsdx(cond, rd, rn, rm, ra); 387788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 387888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsdx(Register rd, Register rn, Register rm, Register ra) { 387988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlsdx(al, rd, rn, rm, ra); 388088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 388188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 388288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsld( 388388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3884cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3885cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3886cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3887cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 388888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 388988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 38908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 389188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 389288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlsld(cond, rdlo, rdhi, rn, rm); 389388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 389488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsld(Register rdlo, Register rdhi, Register rn, Register rm) { 389588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlsld(al, rdlo, rdhi, rn, rm); 389688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 389788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 389888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsldx( 389988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 3900cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 3901cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 3902cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3903cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 390488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 390588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 39068d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 390788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 390888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smlsldx(cond, rdlo, rdhi, rn, rm); 390988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 391088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smlsldx(Register rdlo, Register rdhi, Register rn, Register rm) { 391188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smlsldx(al, rdlo, rdhi, rn, rm); 391288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 391388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 391488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmla( 391588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3916cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3917cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3918cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3919cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 392088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 392188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 39228d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 392388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 392488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smmla(cond, rd, rn, rm, ra); 392588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 392688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmla(Register rd, Register rn, Register rm, Register ra) { 392788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smmla(al, rd, rn, rm, ra); 392888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 392988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 393088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmlar( 393188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3932cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3933cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3934cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3935cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 393688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 393788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 39388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 393988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 394088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smmlar(cond, rd, rn, rm, ra); 394188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 394288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmlar(Register rd, Register rn, Register rm, Register ra) { 394388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smmlar(al, rd, rn, rm, ra); 394488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 394588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 394688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmls( 394788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3948cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3949cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3950cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3951cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 395288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 395388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 39548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 395588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 395688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smmls(cond, rd, rn, rm, ra); 395788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 395888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmls(Register rd, Register rn, Register rm, Register ra) { 395988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smmls(al, rd, rn, rm, ra); 396088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 396188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 396288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmlsr( 396388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 3964cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3965cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3966cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 3967cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 396888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 396988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 39708d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 397188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 397288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smmlsr(cond, rd, rn, rm, ra); 397388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 397488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmlsr(Register rd, Register rn, Register rm, Register ra) { 397588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smmlsr(al, rd, rn, rm, ra); 397688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 397788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 397888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmul(Condition cond, Register rd, Register rn, Register rm) { 3979cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3980cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3981cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 398288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 398388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 39848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 398588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 398688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smmul(cond, rd, rn, rm); 398788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 398888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmul(Register rd, Register rn, Register rm) { Smmul(al, rd, rn, rm); } 398988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 399088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmulr(Condition cond, Register rd, Register rn, Register rm) { 3991cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 3992cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 3993cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 399488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 399588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 39968d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 399788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 399888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smmulr(cond, rd, rn, rm); 399988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 400088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smmulr(Register rd, Register rn, Register rm) { Smmulr(al, rd, rn, rm); } 400188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 400288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smuad(Condition cond, Register rd, Register rn, Register rm) { 4003cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4004cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4005cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 400688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 400788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 40088d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 400988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 401088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smuad(cond, rd, rn, rm); 401188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 401288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smuad(Register rd, Register rn, Register rm) { Smuad(al, rd, rn, rm); } 401388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 401488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smuadx(Condition cond, Register rd, Register rn, Register rm) { 4015cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4016cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4017cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 401888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 401988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 40208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 402188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 402288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smuadx(cond, rd, rn, rm); 402388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 402488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smuadx(Register rd, Register rn, Register rm) { Smuadx(al, rd, rn, rm); } 402588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 402688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulbb(Condition cond, Register rd, Register rn, Register rm) { 4027cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4028cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4029cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 403088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 403188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 40328d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 403388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 403488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smulbb(cond, rd, rn, rm); 403588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 403688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulbb(Register rd, Register rn, Register rm) { Smulbb(al, rd, rn, rm); } 403788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 403888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulbt(Condition cond, Register rd, Register rn, Register rm) { 4039cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4040cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4041cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 404288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 404388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 40448d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 404588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 404688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smulbt(cond, rd, rn, rm); 404788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 404888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulbt(Register rd, Register rn, Register rm) { Smulbt(al, rd, rn, rm); } 404988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 405088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smull( 405188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 4052cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 4053cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 4054cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4055cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 405688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 405788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 40588d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 405988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 406088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smull(cond, rdlo, rdhi, rn, rm); 406188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 406288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smull(Register rdlo, Register rdhi, Register rn, Register rm) { 406388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smull(al, rdlo, rdhi, rn, rm); 406488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 4065934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Smull(FlagsUpdate flags, 4066934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 4067934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdlo, 4068934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdhi, 4069934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 4070934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm) { 4071934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 4072934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 4073934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Smull(cond, rdlo, rdhi, rn, rm); 4074934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 4075934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 4076934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Smulls(cond, rdlo, rdhi, rn, rm); 4077934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 4078934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 4079934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Smull(cond, rdlo, rdhi, rn, rm); 4080934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 4081934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 4082934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 4083934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Smull(FlagsUpdate flags, 4084934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdlo, 4085934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdhi, 4086934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 4087934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm) { 4088934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Smull(flags, al, rdlo, rdhi, rn, rm); 4089934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 409088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 409188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulls( 409288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 4093cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 4094cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 4095cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4096cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 409788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 409888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 40998d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 410088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 410188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smulls(cond, rdlo, rdhi, rn, rm); 410288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 410388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulls(Register rdlo, Register rdhi, Register rn, Register rm) { 410488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Smulls(al, rdlo, rdhi, rn, rm); 410588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 410688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 410788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smultb(Condition cond, Register rd, Register rn, Register rm) { 4108cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4109cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4110cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 411188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 411288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41138d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 411488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 411588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smultb(cond, rd, rn, rm); 411688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 411788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smultb(Register rd, Register rn, Register rm) { Smultb(al, rd, rn, rm); } 411888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 411988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smultt(Condition cond, Register rd, Register rn, Register rm) { 4120cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4121cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4122cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 412388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 412488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 412688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 412788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smultt(cond, rd, rn, rm); 412888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 412988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smultt(Register rd, Register rn, Register rm) { Smultt(al, rd, rn, rm); } 413088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 413188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulwb(Condition cond, Register rd, Register rn, Register rm) { 4132cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4133cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4134cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 413588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 413688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 413888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 413988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smulwb(cond, rd, rn, rm); 414088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 414188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulwb(Register rd, Register rn, Register rm) { Smulwb(al, rd, rn, rm); } 414288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 414388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulwt(Condition cond, Register rd, Register rn, Register rm) { 4144cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4145cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4146cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 414788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 414888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41498d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 415088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 415188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smulwt(cond, rd, rn, rm); 415288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 415388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smulwt(Register rd, Register rn, Register rm) { Smulwt(al, rd, rn, rm); } 415488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 415588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smusd(Condition cond, Register rd, Register rn, Register rm) { 4156cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4157cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4158cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 415988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 416088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41618d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 416288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 416388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smusd(cond, rd, rn, rm); 416488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 416588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smusd(Register rd, Register rn, Register rm) { Smusd(al, rd, rn, rm); } 416688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 416788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smusdx(Condition cond, Register rd, Register rn, Register rm) { 4168cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4169cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4170cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 417188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 417288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41738d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 417488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 417588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois smusdx(cond, rd, rn, rm); 417688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 417788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Smusdx(Register rd, Register rn, Register rm) { Smusdx(al, rd, rn, rm); } 417888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 417988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssat(Condition cond, Register rd, uint32_t imm, const Operand& operand) { 4180cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4181cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 418288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 418388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 418588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 418688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ssat(cond, rd, imm, operand); 418788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 418888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssat(Register rd, uint32_t imm, const Operand& operand) { 418988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ssat(al, rd, imm, operand); 419088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 419188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 419288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssat16(Condition cond, Register rd, uint32_t imm, Register rn) { 4193cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4194cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 419588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 419688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 41978d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 419888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 419988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ssat16(cond, rd, imm, rn); 420088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 420188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssat16(Register rd, uint32_t imm, Register rn) { 420288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ssat16(al, rd, imm, rn); 420388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 420488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 420588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssax(Condition cond, Register rd, Register rn, Register rm) { 4206cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4207cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4208cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 420988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 421088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 42118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 421288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 421388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ssax(cond, rd, rn, rm); 421488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 421588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssax(Register rd, Register rn, Register rm) { Ssax(al, rd, rn, rm); } 421688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 421788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssub16(Condition cond, Register rd, Register rn, Register rm) { 4218cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4219cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4220cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 422188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 422288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 42238d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 422488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 422588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ssub16(cond, rd, rn, rm); 422688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 422788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssub16(Register rd, Register rn, Register rm) { Ssub16(al, rd, rn, rm); } 422888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 422988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssub8(Condition cond, Register rd, Register rn, Register rm) { 4230cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4231cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4232cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 423388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 423488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 42358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 423688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 423788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ssub8(cond, rd, rn, rm); 423888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 423988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ssub8(Register rd, Register rn, Register rm) { Ssub8(al, rd, rn, rm); } 424088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 424188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stl(Condition cond, Register rt, const MemOperand& operand) { 4242cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4243cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 424488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 424588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 42468d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 424788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 424888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stl(cond, rt, operand); 424988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 425088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stl(Register rt, const MemOperand& operand) { Stl(al, rt, operand); } 425188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 425288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlb(Condition cond, Register rt, const MemOperand& operand) { 4253cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4254cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 425588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 425688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 42578d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 425888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 425988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stlb(cond, rt, operand); 426088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 426188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlb(Register rt, const MemOperand& operand) { Stlb(al, rt, operand); } 426288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 426388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlex(Condition cond, 426488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 426588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 426688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4267cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4268cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4269cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 427088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 427188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 42728d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 427388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 427488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stlex(cond, rd, rt, operand); 427588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 427688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlex(Register rd, Register rt, const MemOperand& operand) { 427788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stlex(al, rd, rt, operand); 427888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 427988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 428088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlexb(Condition cond, 428188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 428288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 428388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4284cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4285cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4286cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 428788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 428888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 42898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 429088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 429188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stlexb(cond, rd, rt, operand); 429288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 429388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlexb(Register rd, Register rt, const MemOperand& operand) { 429488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stlexb(al, rd, rt, operand); 429588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 429688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 429788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlexd(Condition cond, 429888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 429988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 430088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 430188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4302cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4303cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4304cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 4305cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 430688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 430788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 43088d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 430988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 431088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stlexd(cond, rd, rt, rt2, operand); 431188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 431288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlexd(Register rd, 431388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 431488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 431588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 431688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stlexd(al, rd, rt, rt2, operand); 431788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 431888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 431988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlexh(Condition cond, 432088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 432188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 432288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4323cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4324cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4325cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 432688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 432788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 43288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 432988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 433088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stlexh(cond, rd, rt, operand); 433188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 433288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlexh(Register rd, Register rt, const MemOperand& operand) { 433388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stlexh(al, rd, rt, operand); 433488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 433588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 433688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlh(Condition cond, Register rt, const MemOperand& operand) { 4337cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4338cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 433988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 434088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 43418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 434288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 434388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stlh(cond, rt, operand); 434488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 434588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stlh(Register rt, const MemOperand& operand) { Stlh(al, rt, operand); } 434688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 434788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stm(Condition cond, 434888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 434988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 435088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4351cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4352cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 435388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 435488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 43558d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 435688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 435788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stm(cond, rn, write_back, registers); 435888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 435988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stm(Register rn, WriteBack write_back, RegisterList registers) { 436088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stm(al, rn, write_back, registers); 436188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 436288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 436388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmda(Condition cond, 436488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 436588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 436688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4367cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4368cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 436988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 437088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 43718d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 437288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 437388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stmda(cond, rn, write_back, registers); 437488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 437588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmda(Register rn, WriteBack write_back, RegisterList registers) { 437688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stmda(al, rn, write_back, registers); 437788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 437888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 437988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmdb(Condition cond, 438088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 438188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 438288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4383cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4384cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 438588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 438688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 43878d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 438888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 438988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stmdb(cond, rn, write_back, registers); 439088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 439188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmdb(Register rn, WriteBack write_back, RegisterList registers) { 439288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stmdb(al, rn, write_back, registers); 439388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 439488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 439588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmea(Condition cond, 439688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 439788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 439888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4399cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4400cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 440188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 440288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 44038d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 440488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 440588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stmea(cond, rn, write_back, registers); 440688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 440788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmea(Register rn, WriteBack write_back, RegisterList registers) { 440888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stmea(al, rn, write_back, registers); 440988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 441088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 441188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmed(Condition cond, 441288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 441388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 441488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4415cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4416cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 441788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 441888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 44198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 442088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 442188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stmed(cond, rn, write_back, registers); 442288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 442388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmed(Register rn, WriteBack write_back, RegisterList registers) { 442488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stmed(al, rn, write_back, registers); 442588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 442688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 442788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmfa(Condition cond, 442888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 442988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 443088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4431cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4432cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 443388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 443488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 44358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 443688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 443788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stmfa(cond, rn, write_back, registers); 443888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 443988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmfa(Register rn, WriteBack write_back, RegisterList registers) { 444088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stmfa(al, rn, write_back, registers); 444188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 444288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 444388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmfd(Condition cond, 444488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 444588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 444688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4447cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4448cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 444988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 445088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 44518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 445288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 445388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stmfd(cond, rn, write_back, registers); 445488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 445588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmfd(Register rn, WriteBack write_back, RegisterList registers) { 445688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stmfd(al, rn, write_back, registers); 445788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 445888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 445988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmib(Condition cond, 446088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 446188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 446288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList registers) { 4463cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4464cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(registers)); 446588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 446688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 44678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 446888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 446988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois stmib(cond, rn, write_back, registers); 447088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 447188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Stmib(Register rn, WriteBack write_back, RegisterList registers) { 447288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Stmib(al, rn, write_back, registers); 447388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 447488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 447588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Str(Condition cond, Register rt, const MemOperand& operand) { 4476cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4477cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 447888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 447988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 44808d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 448188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 448288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // STR{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1 448388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 448488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 448588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 124, 4) && 448688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 448788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // STR{<c>}{<q>} <Rt>, [SP{, #{+}<imm>}] ; T2 448888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 448988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsSP() && 449088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 1020, 4) && 449188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 449288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // STR{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 449388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rt.IsLow() && 449488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 449588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 449688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)); 449788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 449888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois str(cond, rt, operand); 449988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 450088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Str(Register rt, const MemOperand& operand) { Str(al, rt, operand); } 450188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 450288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strb(Condition cond, Register rt, const MemOperand& operand) { 4503cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4504cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 450588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 450688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 45078d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 450888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 450988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // STRB{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1 451088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 451188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 451288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 31) && 451388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 451488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // STRB{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 451588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rt.IsLow() && 451688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 451788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 451888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)); 451988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 452088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois strb(cond, rt, operand); 452188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 452288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strb(Register rt, const MemOperand& operand) { Strb(al, rt, operand); } 452388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 452488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strd(Condition cond, 452588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 452688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 452788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4528cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4529cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 4530cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 453188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 453288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 45338d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 453488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 453588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois strd(cond, rt, rt2, operand); 453688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 453788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strd(Register rt, Register rt2, const MemOperand& operand) { 453888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Strd(al, rt, rt2, operand); 453988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 454088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 454188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strex(Condition cond, 454288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 454388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 454488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4545cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4546cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4547cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 454888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 454988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 45508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 455188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 455288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois strex(cond, rd, rt, operand); 455388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 455488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strex(Register rd, Register rt, const MemOperand& operand) { 455588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Strex(al, rd, rt, operand); 455688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 455788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 455888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strexb(Condition cond, 455988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 456088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 456188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4562cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4563cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4564cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 456588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 456688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 45678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 456888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 456988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois strexb(cond, rd, rt, operand); 457088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 457188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strexb(Register rd, Register rt, const MemOperand& operand) { 457288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Strexb(al, rd, rt, operand); 457388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 457488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 457588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strexd(Condition cond, 457688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 457788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 457888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 457988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4580cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4581cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4582cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 4583cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 458488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 458588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 45868d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 458788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 458888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois strexd(cond, rd, rt, rt2, operand); 458988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 459088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strexd(Register rd, 459188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 459288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt2, 459388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 459488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Strexd(al, rd, rt, rt2, operand); 459588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 459688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 459788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strexh(Condition cond, 459888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 459988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rt, 460088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 4601cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4602cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4603cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 460488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 460588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 46068d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 460788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 460888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois strexh(cond, rd, rt, operand); 460988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 461088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strexh(Register rd, Register rt, const MemOperand& operand) { 461188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Strexh(al, rd, rt, operand); 461288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 461388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 461488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strh(Condition cond, Register rt, const MemOperand& operand) { 4615cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 4616cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 461788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 461888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 46198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 462088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 462188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // STRH{<c>}{<q>} <Rt>, [<Rn> {, #{+}<imm>}] ; T1 462288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && rt.IsLow() && 462388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 462488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsOffsetImmediateWithinRange(0, 62, 2) && 462588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)) || 462688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // STRH{<c>}{<q>} <Rt>, [<Rn>, {+}<Rm>] ; T1 462788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rt.IsLow() && 462888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow() && 462988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetOffsetRegister().IsLow() && operand.GetSign().IsPlus() && 463088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.GetAddrMode() == Offset)); 463188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 463288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois strh(cond, rt, operand); 463388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 463488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Strh(Register rt, const MemOperand& operand) { Strh(al, rt, operand); } 463588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 463688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sub(Condition cond, Register rd, Register rn, const Operand& operand) { 4637cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4638cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4639cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 464088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 464188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 46428d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 4643628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (cond.Is(al) && rd.Is(rn) && operand.IsImmediate()) { 4644628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames uint32_t immediate = operand.GetImmediate(); 4645628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames if (immediate == 0) { 4646628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames return; 4647628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 4648628c5263f1ff96c793173770b85b93ebf8bf8d44Alexandre Rames } 464988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 465088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // SUB<c>{<q>} <Rd>, <Rn>, #<imm3> ; T1 465188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() <= 7) && rn.IsLow() && 465288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rd.IsLow()) || 465388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // SUB<c>{<q>} {<Rdn>,} <Rdn>, #<imm8> ; T2 465488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsImmediate() && (operand.GetImmediate() <= 255) && 465588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois rd.IsLow() && rn.Is(rd)) || 465688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // SUB<c>{<q>} <Rd>, <Rn>, <Rm> 465788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() && 465888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow()); 465988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 466088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sub(cond, rd, rn, operand); 466188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 466288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sub(Register rd, Register rn, const Operand& operand) { 466388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sub(al, rd, rn, operand); 466488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 4665934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Sub(FlagsUpdate flags, 4666934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 4667934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 4668934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 4669934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 4670934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 4671934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 4672934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Sub(cond, rd, rn, operand); 4673934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 4674934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 4675934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Subs(cond, rd, rn, operand); 4676934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 4677934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 46784443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli bool setflags_is_smaller = 4679934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard IsUsingT32() && cond.Is(al) && 4680934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard ((operand.IsPlainRegister() && rd.IsLow() && rn.IsLow() && 4681934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard operand.GetBaseRegister().IsLow()) || 4682934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (operand.IsImmediate() && 4683934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard ((rd.IsLow() && rn.IsLow() && (operand.GetImmediate() < 8)) || 4684934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard (rd.IsLow() && rn.Is(rd) && (operand.GetImmediate() < 256))))); 46854443cf950cac7b0cf8e82196e60c26f4b2799a97Georgia Kouveli if (setflags_is_smaller) { 4686934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Subs(cond, rd, rn, operand); 4687934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } else { 4688dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli bool changed_op_is_smaller = 4689dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli operand.IsImmediate() && (operand.GetSignedImmediate() < 0) && 4690dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli ((rd.IsLow() && rn.IsLow() && 4691dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli (operand.GetSignedImmediate() >= -7)) || 4692dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli (rd.IsLow() && rn.Is(rd) && 4693dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli (operand.GetSignedImmediate() >= -255))); 4694dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli if (changed_op_is_smaller) { 4695dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli Adds(cond, rd, rn, -operand.GetSignedImmediate()); 4696dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli } else { 4697dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli Sub(cond, rd, rn, operand); 4698dd8e491930b4eb5928f0dec2441c69a471724ce5Georgia Kouveli } 4699934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 4700934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 4701934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 4702934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 4703934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Sub(FlagsUpdate flags, 4704934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rd, 4705934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 4706934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard const Operand& operand) { 4707934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Sub(flags, al, rd, rn, operand); 4708934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 470988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 471088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Subs(Condition cond, Register rd, Register rn, const Operand& operand) { 4711cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4712cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4713cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 471488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 471588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 47168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 471788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 471888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois subs(cond, rd, rn, operand); 471988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 472088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Subs(Register rd, Register rn, const Operand& operand) { 472188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Subs(al, rd, rn, operand); 472288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 472388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 472488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Svc(Condition cond, uint32_t imm) { 472588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 472688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 47278d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 472888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 472988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois svc(cond, imm); 473088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 473188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Svc(uint32_t imm) { Svc(al, imm); } 473288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 473388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtab(Condition cond, Register rd, Register rn, const Operand& operand) { 4734cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4735cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4736cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 473788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 473888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 47398d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 474088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 474188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sxtab(cond, rd, rn, operand); 474288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 474388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtab(Register rd, Register rn, const Operand& operand) { 474488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sxtab(al, rd, rn, operand); 474588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 474688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 474788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtab16(Condition cond, 474888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 474988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 475088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Operand& operand) { 4751cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4752cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4753cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 475488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 475588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 47568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 475788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 475888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sxtab16(cond, rd, rn, operand); 475988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 476088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtab16(Register rd, Register rn, const Operand& operand) { 476188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sxtab16(al, rd, rn, operand); 476288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 476388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 476488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtah(Condition cond, Register rd, Register rn, const Operand& operand) { 4765cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4766cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4767cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 476888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 476988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 47708d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 477188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 477288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sxtah(cond, rd, rn, operand); 477388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 477488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtah(Register rd, Register rn, const Operand& operand) { 477588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Sxtah(al, rd, rn, operand); 477688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 477788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 477888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtb(Condition cond, Register rd, const Operand& operand) { 4779cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4780cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 478188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 478288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 47838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 478488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 478588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sxtb(cond, rd, operand); 478688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 478788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtb(Register rd, const Operand& operand) { Sxtb(al, rd, operand); } 478888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 478988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtb16(Condition cond, Register rd, const Operand& operand) { 4790cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4791cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 479288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 479388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 47948d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 479588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 479688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sxtb16(cond, rd, operand); 479788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 479888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxtb16(Register rd, const Operand& operand) { Sxtb16(al, rd, operand); } 479988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 480088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxth(Condition cond, Register rd, const Operand& operand) { 4801cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4802cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 480388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 480488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48058d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 480688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 480788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois sxth(cond, rd, operand); 480888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 480988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Sxth(Register rd, const Operand& operand) { Sxth(al, rd, operand); } 481088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 481188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Teq(Condition cond, Register rn, const Operand& operand) { 4812cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4813cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 481488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 481588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 481788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 481888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois teq(cond, rn, operand); 481988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 482088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Teq(Register rn, const Operand& operand) { Teq(al, rn, operand); } 482188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 482288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Tst(Condition cond, Register rn, const Operand& operand) { 4823cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4824cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 482588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 482688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48278d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 482888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool can_use_it = 482988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // TST{<c>}{<q>} <Rn>, <Rm> ; T1 483088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.IsPlainRegister() && rn.IsLow() && 483188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois operand.GetBaseRegister().IsLow(); 483288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond, can_use_it); 483388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois tst(cond, rn, operand); 483488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 483588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Tst(Register rn, const Operand& operand) { Tst(al, rn, operand); } 483688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 483788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uadd16(Condition cond, Register rd, Register rn, Register rm) { 4838cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4839cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4840cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 484188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 484288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48438d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 484488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 484588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uadd16(cond, rd, rn, rm); 484688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 484788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uadd16(Register rd, Register rn, Register rm) { Uadd16(al, rd, rn, rm); } 484888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 484988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uadd8(Condition cond, Register rd, Register rn, Register rm) { 4850cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4851cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4852cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 485388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 485488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48558d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 485688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 485788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uadd8(cond, rd, rn, rm); 485888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 485988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uadd8(Register rd, Register rn, Register rm) { Uadd8(al, rd, rn, rm); } 486088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 486188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uasx(Condition cond, Register rd, Register rn, Register rm) { 4862cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4863cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4864cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 486588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 486688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 486888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 486988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uasx(cond, rd, rn, rm); 487088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 487188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uasx(Register rd, Register rn, Register rm) { Uasx(al, rd, rn, rm); } 487288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 487388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ubfx(Condition cond, 487488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 487588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 487688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uint32_t lsb, 487788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Operand& operand) { 4878cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4879cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4880cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 488188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 488288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 488488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 488588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ubfx(cond, rd, rn, lsb, operand); 488688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 488788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Ubfx(Register rd, Register rn, uint32_t lsb, const Operand& operand) { 488888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Ubfx(al, rd, rn, lsb, operand); 488988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 489088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 489188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Udf(Condition cond, uint32_t imm) { 489288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 489388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 48948d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 489588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 489688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois udf(cond, imm); 489788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 489888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Udf(uint32_t imm) { Udf(al, imm); } 489988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 490088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Udiv(Condition cond, Register rd, Register rn, Register rm) { 4901cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4902cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4903cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 490488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 490588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49068d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 490788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 490888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois udiv(cond, rd, rn, rm); 490988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 491088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Udiv(Register rd, Register rn, Register rm) { Udiv(al, rd, rn, rm); } 491188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 491288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhadd16(Condition cond, Register rd, Register rn, Register rm) { 4913cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4914cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4915cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 491688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 491788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 491988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 492088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uhadd16(cond, rd, rn, rm); 492188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 492288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhadd16(Register rd, Register rn, Register rm) { 492388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Uhadd16(al, rd, rn, rm); 492488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 492588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 492688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhadd8(Condition cond, Register rd, Register rn, Register rm) { 4927cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4928cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4929cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 493088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 493188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49328d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 493388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 493488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uhadd8(cond, rd, rn, rm); 493588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 493688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhadd8(Register rd, Register rn, Register rm) { Uhadd8(al, rd, rn, rm); } 493788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 493888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhasx(Condition cond, Register rd, Register rn, Register rm) { 4939cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4940cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4941cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 494288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 494388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49448d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 494588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 494688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uhasx(cond, rd, rn, rm); 494788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 494888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhasx(Register rd, Register rn, Register rm) { Uhasx(al, rd, rn, rm); } 494988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 495088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhsax(Condition cond, Register rd, Register rn, Register rm) { 4951cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4952cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4953cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 495488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 495588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 495788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 495888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uhsax(cond, rd, rn, rm); 495988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 496088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhsax(Register rd, Register rn, Register rm) { Uhsax(al, rd, rn, rm); } 496188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 496288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhsub16(Condition cond, Register rd, Register rn, Register rm) { 4963cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4964cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4965cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 496688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 496788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 496988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 497088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uhsub16(cond, rd, rn, rm); 497188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 497288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhsub16(Register rd, Register rn, Register rm) { 497388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Uhsub16(al, rd, rn, rm); 497488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 497588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 497688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhsub8(Condition cond, Register rd, Register rn, Register rm) { 4977cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 4978cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4979cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 498088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 498188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 498388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 498488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uhsub8(cond, rd, rn, rm); 498588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 498688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uhsub8(Register rd, Register rn, Register rm) { Uhsub8(al, rd, rn, rm); } 498788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 498888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umaal( 498988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 4990cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 4991cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 4992cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 4993cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 499488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 499588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 49968d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 499788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 499888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois umaal(cond, rdlo, rdhi, rn, rm); 499988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 500088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umaal(Register rdlo, Register rdhi, Register rn, Register rm) { 500188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Umaal(al, rdlo, rdhi, rn, rm); 500288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 500388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 500488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umlal( 500588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 5006cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 5007cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 5008cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5009cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 501088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 501188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 50128d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 501388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 501488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois umlal(cond, rdlo, rdhi, rn, rm); 501588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 501688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umlal(Register rdlo, Register rdhi, Register rn, Register rm) { 501788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Umlal(al, rdlo, rdhi, rn, rm); 501888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 5019934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Umlal(FlagsUpdate flags, 5020934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 5021934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdlo, 5022934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdhi, 5023934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 5024934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm) { 5025934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 5026934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 5027934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umlal(cond, rdlo, rdhi, rn, rm); 5028934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 5029934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 5030934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umlals(cond, rdlo, rdhi, rn, rm); 5031934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 5032934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 5033934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umlal(cond, rdlo, rdhi, rn, rm); 5034934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 5035934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 5036934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 5037934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Umlal(FlagsUpdate flags, 5038934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdlo, 5039934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdhi, 5040934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 5041934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm) { 5042934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umlal(flags, al, rdlo, rdhi, rn, rm); 5043934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 504488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 504588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umlals( 504688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 5047cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 5048cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 5049cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5050cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 505188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 505288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 50538d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 505488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 505588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois umlals(cond, rdlo, rdhi, rn, rm); 505688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 505788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umlals(Register rdlo, Register rdhi, Register rn, Register rm) { 505888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Umlals(al, rdlo, rdhi, rn, rm); 505988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 506088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 506188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umull( 506288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 5063cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 5064cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 5065cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5066cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 506788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 506888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 50698d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 507088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 507188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois umull(cond, rdlo, rdhi, rn, rm); 507288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 507388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umull(Register rdlo, Register rdhi, Register rn, Register rm) { 507488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Umull(al, rdlo, rdhi, rn, rm); 507588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 5076934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Umull(FlagsUpdate flags, 5077934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Condition cond, 5078934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdlo, 5079934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdhi, 5080934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 5081934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm) { 5082934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard switch (flags) { 5083934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case LeaveFlags: 5084934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umull(cond, rdlo, rdhi, rn, rm); 5085934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 5086934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case SetFlags: 5087934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umulls(cond, rdlo, rdhi, rn, rm); 5088934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 5089934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard case DontCare: 5090934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umull(cond, rdlo, rdhi, rn, rm); 5091934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard break; 5092934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 5093934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 5094934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard void Umull(FlagsUpdate flags, 5095934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdlo, 5096934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rdhi, 5097934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rn, 5098934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Register rm) { 5099934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard Umull(flags, al, rdlo, rdhi, rn, rm); 5100934696dd32c579b5a8aa80bae5384be22f0d9b9cVincent Belliard } 510188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 510288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umulls( 510388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rdlo, Register rdhi, Register rn, Register rm) { 5104cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdlo)); 5105cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rdhi)); 5106cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5107cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 510888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 510988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 51108d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 511188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 511288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois umulls(cond, rdlo, rdhi, rn, rm); 511388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 511488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Umulls(Register rdlo, Register rdhi, Register rn, Register rm) { 511588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Umulls(al, rdlo, rdhi, rn, rm); 511688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 511788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 511888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqadd16(Condition cond, Register rd, Register rn, Register rm) { 5119cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5120cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5121cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 512288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 512388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 51248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 512588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 512688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uqadd16(cond, rd, rn, rm); 512788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 512888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqadd16(Register rd, Register rn, Register rm) { 512988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Uqadd16(al, rd, rn, rm); 513088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 513188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 513288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqadd8(Condition cond, Register rd, Register rn, Register rm) { 5133cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5134cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5135cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 513688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 513788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 51388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 513988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 514088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uqadd8(cond, rd, rn, rm); 514188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 514288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqadd8(Register rd, Register rn, Register rm) { Uqadd8(al, rd, rn, rm); } 514388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 514488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqasx(Condition cond, Register rd, Register rn, Register rm) { 5145cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5146cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5147cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 514888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 514988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 51508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 515188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 515288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uqasx(cond, rd, rn, rm); 515388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 515488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqasx(Register rd, Register rn, Register rm) { Uqasx(al, rd, rn, rm); } 515588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 515688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqsax(Condition cond, Register rd, Register rn, Register rm) { 5157cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5158cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5159cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 516088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 516188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 51628d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 516388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 516488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uqsax(cond, rd, rn, rm); 516588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 516688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqsax(Register rd, Register rn, Register rm) { Uqsax(al, rd, rn, rm); } 516788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 516888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqsub16(Condition cond, Register rd, Register rn, Register rm) { 5169cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5170cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5171cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 517288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 517388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 51748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 517588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 517688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uqsub16(cond, rd, rn, rm); 517788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 517888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqsub16(Register rd, Register rn, Register rm) { 517988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Uqsub16(al, rd, rn, rm); 518088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 518188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 518288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqsub8(Condition cond, Register rd, Register rn, Register rm) { 5183cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5184cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5185cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 518688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 518788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 51888d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 518988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 519088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uqsub8(cond, rd, rn, rm); 519188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 519288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uqsub8(Register rd, Register rn, Register rm) { Uqsub8(al, rd, rn, rm); } 519388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 519488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usad8(Condition cond, Register rd, Register rn, Register rm) { 5195cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5196cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5197cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 519888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 519988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 520188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 520288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois usad8(cond, rd, rn, rm); 520388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 520488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usad8(Register rd, Register rn, Register rm) { Usad8(al, rd, rn, rm); } 520588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 520688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usada8( 520788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rd, Register rn, Register rm, Register ra) { 5208cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5209cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5210cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 5211cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(ra)); 521288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 521388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52148d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 521588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 521688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois usada8(cond, rd, rn, rm, ra); 521788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 521888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usada8(Register rd, Register rn, Register rm, Register ra) { 521988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Usada8(al, rd, rn, rm, ra); 522088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 522188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 522288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usat(Condition cond, Register rd, uint32_t imm, const Operand& operand) { 5223cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5224cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 522588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 522688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52278d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 522888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 522988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois usat(cond, rd, imm, operand); 523088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 523188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usat(Register rd, uint32_t imm, const Operand& operand) { 523288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Usat(al, rd, imm, operand); 523388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 523488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 523588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usat16(Condition cond, Register rd, uint32_t imm, Register rn) { 5236cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5237cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 523888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 523988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52408d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 524188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 524288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois usat16(cond, rd, imm, rn); 524388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 524488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usat16(Register rd, uint32_t imm, Register rn) { 524588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Usat16(al, rd, imm, rn); 524688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 524788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 524888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usax(Condition cond, Register rd, Register rn, Register rm) { 5249cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5250cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5251cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 525288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 525388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 525588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 525688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois usax(cond, rd, rn, rm); 525788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 525888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usax(Register rd, Register rn, Register rm) { Usax(al, rd, rn, rm); } 525988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 526088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usub16(Condition cond, Register rd, Register rn, Register rm) { 5261cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5262cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5263cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 526488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 526588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52668d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 526788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 526888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois usub16(cond, rd, rn, rm); 526988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 527088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usub16(Register rd, Register rn, Register rm) { Usub16(al, rd, rn, rm); } 527188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 527288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usub8(Condition cond, Register rd, Register rn, Register rm) { 5273cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5274cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5275cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 527688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 527788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52788d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 527988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 528088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois usub8(cond, rd, rn, rm); 528188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 528288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Usub8(Register rd, Register rn, Register rm) { Usub8(al, rd, rn, rm); } 528388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 528488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtab(Condition cond, Register rd, Register rn, const Operand& operand) { 5285cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5286cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5287cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 528888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 528988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 52908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 529188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 529288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uxtab(cond, rd, rn, operand); 529388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 529488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtab(Register rd, Register rn, const Operand& operand) { 529588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Uxtab(al, rd, rn, operand); 529688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 529788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 529888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtab16(Condition cond, 529988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rd, 530088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 530188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Operand& operand) { 5302cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5303cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5304cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 530588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 530688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53078d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 530888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 530988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uxtab16(cond, rd, rn, operand); 531088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 531188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtab16(Register rd, Register rn, const Operand& operand) { 531288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Uxtab16(al, rd, rn, operand); 531388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 531488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 531588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtah(Condition cond, Register rd, Register rn, const Operand& operand) { 5316cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5317cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5318cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 531988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 532088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53218d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 532288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 532388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uxtah(cond, rd, rn, operand); 532488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 532588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtah(Register rd, Register rn, const Operand& operand) { 532688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Uxtah(al, rd, rn, operand); 532788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 532888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 532988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtb(Condition cond, Register rd, const Operand& operand) { 5330cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5331cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 533288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 533388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 533588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 533688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uxtb(cond, rd, operand); 533788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 533888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtb(Register rd, const Operand& operand) { Uxtb(al, rd, operand); } 533988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 534088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtb16(Condition cond, Register rd, const Operand& operand) { 5341cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5342cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 534388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 534488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53458d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 534688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 534788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uxtb16(cond, rd, operand); 534888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 534988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxtb16(Register rd, const Operand& operand) { Uxtb16(al, rd, operand); } 535088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 535188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxth(Condition cond, Register rd, const Operand& operand) { 5352cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5353cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 535488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 535588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 535788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 535888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uxth(cond, rd, operand); 535988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 536088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Uxth(Register rd, const Operand& operand) { Uxth(al, rd, operand); } 536188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 536288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaba( 536388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5364cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5365cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5366cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 536788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 536888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53698d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 537088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 537188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vaba(cond, dt, rd, rn, rm); 537288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 537388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaba(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 537488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vaba(al, dt, rd, rn, rm); 537588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 537688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 537788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaba( 537888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5379cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5380cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5381cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 538288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 538388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 538588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 538688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vaba(cond, dt, rd, rn, rm); 538788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 538888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaba(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 538988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vaba(al, dt, rd, rn, rm); 539088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 539188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 539288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabal( 539388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 5394cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5395cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5396cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 539788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 539888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 53998d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 540088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 540188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vabal(cond, dt, rd, rn, rm); 540288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 540388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabal(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 540488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vabal(al, dt, rd, rn, rm); 540588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 540688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 540788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabd( 540888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5409cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5410cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5411cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 541288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 541388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 54148d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 541588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 541688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vabd(cond, dt, rd, rn, rm); 541788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 541888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabd(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 541988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vabd(al, dt, rd, rn, rm); 542088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 542188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 542288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabd( 542388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5424cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5425cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5426cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 542788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 542888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 54298d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 543088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 543188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vabd(cond, dt, rd, rn, rm); 543288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 543388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabd(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 543488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vabd(al, dt, rd, rn, rm); 543588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 543688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 543788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabdl( 543888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 5439cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5440cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5441cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 544288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 544388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 54448d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 544588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 544688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vabdl(cond, dt, rd, rn, rm); 544788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 544888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabdl(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 544988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vabdl(al, dt, rd, rn, rm); 545088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 545188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 545288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabs(Condition cond, DataType dt, DRegister rd, DRegister rm) { 5453cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5454cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 545588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 545688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 54578d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 545888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 545988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vabs(cond, dt, rd, rm); 546088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 546188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabs(DataType dt, DRegister rd, DRegister rm) { Vabs(al, dt, rd, rm); } 546288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 546388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabs(Condition cond, DataType dt, QRegister rd, QRegister rm) { 5464cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5465cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 546688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 546788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 54688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 546988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 547088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vabs(cond, dt, rd, rm); 547188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 547288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabs(DataType dt, QRegister rd, QRegister rm) { Vabs(al, dt, rd, rm); } 547388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 547488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabs(Condition cond, DataType dt, SRegister rd, SRegister rm) { 5475cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5476cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 547788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 547888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 54798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 548088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 548188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vabs(cond, dt, rd, rm); 548288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 548388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vabs(DataType dt, SRegister rd, SRegister rm) { Vabs(al, dt, rd, rm); } 548488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 548588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacge( 548688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5487cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5488cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5489cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 549088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 549188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 54928d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 549388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 549488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vacge(cond, dt, rd, rn, rm); 549588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 549688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacge(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 549788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vacge(al, dt, rd, rn, rm); 549888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 549988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 550088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacge( 550188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5502cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5503cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5504cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 550588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 550688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 55078d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 550888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 550988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vacge(cond, dt, rd, rn, rm); 551088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 551188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacge(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 551288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vacge(al, dt, rd, rn, rm); 551388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 551488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 551588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacgt( 551688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5517cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5518cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5519cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 552088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 552188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 55228d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 552388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 552488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vacgt(cond, dt, rd, rn, rm); 552588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 552688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 552788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vacgt(al, dt, rd, rn, rm); 552888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 552988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 553088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacgt( 553188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5532cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5533cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5534cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 553588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 553688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 55378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 553888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 553988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vacgt(cond, dt, rd, rn, rm); 554088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 554188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 554288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vacgt(al, dt, rd, rn, rm); 554388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 554488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 554588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacle( 554688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5547cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5548cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5549cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 555088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 555188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 55528d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 555388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 555488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vacle(cond, dt, rd, rn, rm); 555588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 555688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacle(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 555788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vacle(al, dt, rd, rn, rm); 555888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 555988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 556088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacle( 556188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5562cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5563cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5564cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 556588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 556688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 55678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 556888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 556988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vacle(cond, dt, rd, rn, rm); 557088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 557188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vacle(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 557288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vacle(al, dt, rd, rn, rm); 557388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 557488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 557588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaclt( 557688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5577cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5578cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5579cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 558088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 558188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 55828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 558388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 558488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vaclt(cond, dt, rd, rn, rm); 558588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 558688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 558788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vaclt(al, dt, rd, rn, rm); 558888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 558988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 559088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaclt( 559188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5592cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5593cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5594cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 559588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 559688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 55978d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 559888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 559988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vaclt(cond, dt, rd, rn, rm); 560088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 560188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 560288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vaclt(al, dt, rd, rn, rm); 560388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 560488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 560588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vadd( 560688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5607cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5608cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5609cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 561088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 561188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 56128d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 561388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 561488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vadd(cond, dt, rd, rn, rm); 561588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 561688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 561788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vadd(al, dt, rd, rn, rm); 561888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 561988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 562088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vadd( 562188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5622cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5623cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5624cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 562588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 562688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 56278d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 562888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 562988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vadd(cond, dt, rd, rn, rm); 563088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 563188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 563288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vadd(al, dt, rd, rn, rm); 563388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 563488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 563588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vadd( 563688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 5637cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5638cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5639cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 564088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 564188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 56428d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 564388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 564488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vadd(cond, dt, rd, rn, rm); 564588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 564688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vadd(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 564788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vadd(al, dt, rd, rn, rm); 564888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 564988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 565088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaddhn( 565188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) { 5652cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5653cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5654cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 565588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 565688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 56578d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 565888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 565988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vaddhn(cond, dt, rd, rn, rm); 566088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 566188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaddhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) { 566288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vaddhn(al, dt, rd, rn, rm); 566388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 566488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 566588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaddl( 566688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 5667cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5668cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5669cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 567088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 567188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 56728d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 567388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 567488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vaddl(cond, dt, rd, rn, rm); 567588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 567688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaddl(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 567788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vaddl(al, dt, rd, rn, rm); 567888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 567988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 568088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaddw( 568188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm) { 5682cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5683cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5684cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 568588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 568688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 56878d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 568888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 568988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vaddw(cond, dt, rd, rn, rm); 569088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 569188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vaddw(DataType dt, QRegister rd, QRegister rn, DRegister rm) { 569288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vaddw(al, dt, rd, rn, rm); 569388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 569488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 569588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vand(Condition cond, 569688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 569788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 569888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 569988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 5700cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5701cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5702cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 570388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 570488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 57058d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 570688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 570788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vand(cond, dt, rd, rn, operand); 570888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 570988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vand(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) { 571088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vand(al, dt, rd, rn, operand); 571188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 571288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 571388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vand(Condition cond, 571488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 571588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 571688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 571788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 5718cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5719cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5720cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 572188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 572288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 57238d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 572488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 572588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vand(cond, dt, rd, rn, operand); 572688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 572788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vand(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) { 572888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vand(al, dt, rd, rn, operand); 572988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 573088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 573188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbic(Condition cond, 573288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 573388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 573488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 573588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 5736cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5737cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5738cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 573988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 574088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 57418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 574288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 574388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbic(cond, dt, rd, rn, operand); 574488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 574588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbic(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) { 574688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbic(al, dt, rd, rn, operand); 574788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 574888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 574988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbic(Condition cond, 575088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 575188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 575288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 575388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 5754cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5755cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5756cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 575788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 575888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 57598d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 576088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 576188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbic(cond, dt, rd, rn, operand); 576288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 576388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbic(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) { 576488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbic(al, dt, rd, rn, operand); 576588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 576688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 576788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif( 576888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5769cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5770cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5771cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 577288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 577388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 57748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 577588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 577688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbif(cond, dt, rd, rn, rm); 577788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 577888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 577988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbif(al, dt, rd, rn, rm); 578088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 578188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif(Condition cond, DRegister rd, DRegister rn, DRegister rm) { 578288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbif(cond, kDataTypeValueNone, rd, rn, rm); 578388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 578488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif(DRegister rd, DRegister rn, DRegister rm) { 578588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbif(al, kDataTypeValueNone, rd, rn, rm); 578688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 578788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 578888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif( 578988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5790cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5791cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5792cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 579388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 579488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 57958d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 579688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 579788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbif(cond, dt, rd, rn, rm); 579888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 579988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 580088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbif(al, dt, rd, rn, rm); 580188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 580288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif(Condition cond, QRegister rd, QRegister rn, QRegister rm) { 580388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbif(cond, kDataTypeValueNone, rd, rn, rm); 580488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 580588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbif(QRegister rd, QRegister rn, QRegister rm) { 580688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbif(al, kDataTypeValueNone, rd, rn, rm); 580788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 580888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 580988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit( 581088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5811cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5812cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5813cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 581488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 581588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 58168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 581788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 581888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbit(cond, dt, rd, rn, rm); 581988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 582088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 582188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbit(al, dt, rd, rn, rm); 582288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 582388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit(Condition cond, DRegister rd, DRegister rn, DRegister rm) { 582488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbit(cond, kDataTypeValueNone, rd, rn, rm); 582588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 582688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit(DRegister rd, DRegister rn, DRegister rm) { 582788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbit(al, kDataTypeValueNone, rd, rn, rm); 582888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 582988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 583088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit( 583188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5832cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5833cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5834cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 583588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 583688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 58378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 583888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 583988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbit(cond, dt, rd, rn, rm); 584088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 584188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 584288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbit(al, dt, rd, rn, rm); 584388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 584488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit(Condition cond, QRegister rd, QRegister rn, QRegister rm) { 584588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbit(cond, kDataTypeValueNone, rd, rn, rm); 584688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 584788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbit(QRegister rd, QRegister rn, QRegister rm) { 584888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbit(al, kDataTypeValueNone, rd, rn, rm); 584988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 585088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 585188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl( 585288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5853cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5854cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5855cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 585688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 585788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 58588d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 585988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 586088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbsl(cond, dt, rd, rn, rm); 586188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 586288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 586388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbsl(al, dt, rd, rn, rm); 586488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 586588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl(Condition cond, DRegister rd, DRegister rn, DRegister rm) { 586688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbsl(cond, kDataTypeValueNone, rd, rn, rm); 586788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 586888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl(DRegister rd, DRegister rn, DRegister rm) { 586988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbsl(al, kDataTypeValueNone, rd, rn, rm); 587088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 587188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 587288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl( 587388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5874cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5875cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5876cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 587788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 587888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 58798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 588088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 588188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vbsl(cond, dt, rd, rn, rm); 588288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 588388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 588488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbsl(al, dt, rd, rn, rm); 588588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 588688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl(Condition cond, QRegister rd, QRegister rn, QRegister rm) { 588788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbsl(cond, kDataTypeValueNone, rd, rn, rm); 588888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 588988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vbsl(QRegister rd, QRegister rn, QRegister rm) { 589088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vbsl(al, kDataTypeValueNone, rd, rn, rm); 589188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 589288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 589388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq(Condition cond, 589488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 589588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 589688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 589788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 5898cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5899cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 5900cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 590188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 590288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 59038d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 590488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 590588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vceq(cond, dt, rd, rm, operand); 590688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 590788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 590888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vceq(al, dt, rd, rm, operand); 590988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 591088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 591188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq(Condition cond, 591288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 591388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 591488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 591588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 5916cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5917cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 5918cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 591988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 592088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 59218d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 592288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 592388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vceq(cond, dt, rd, rm, operand); 592488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 592588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 592688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vceq(al, dt, rd, rm, operand); 592788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 592888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 592988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq( 593088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5931cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5932cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5933cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 593488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 593588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 59368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 593788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 593888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vceq(cond, dt, rd, rn, rm); 593988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 594088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 594188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vceq(al, dt, rd, rn, rm); 594288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 594388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 594488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq( 594588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 5946cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5947cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5948cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 594988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 595088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 59518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 595288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 595388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vceq(cond, dt, rd, rn, rm); 595488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 595588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vceq(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 595688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vceq(al, dt, rd, rn, rm); 595788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 595888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 595988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge(Condition cond, 596088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 596188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 596288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 596388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 5964cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5965cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 5966cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 596788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 596888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 59698d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 597088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 597188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcge(cond, dt, rd, rm, operand); 597288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 597388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 597488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcge(al, dt, rd, rm, operand); 597588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 597688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 597788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge(Condition cond, 597888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 597988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 598088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 598188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 5982cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5983cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 5984cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 598588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 598688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 59878d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 598888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 598988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcge(cond, dt, rd, rm, operand); 599088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 599188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 599288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcge(al, dt, rd, rm, operand); 599388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 599488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 599588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge( 599688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 5997cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 5998cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 5999cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 600088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 600188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 60028d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 600388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 600488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcge(cond, dt, rd, rn, rm); 600588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 600688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 600788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcge(al, dt, rd, rn, rm); 600888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 600988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 601088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge( 601188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 6012cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6013cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6014cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 601588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 601688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 60178d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 601888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 601988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcge(cond, dt, rd, rn, rm); 602088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 602188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcge(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 602288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcge(al, dt, rd, rn, rm); 602388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 602488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 602588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt(Condition cond, 602688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 602788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 602888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 602988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 6030cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6031cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6032cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 603388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 603488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 60358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 603688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 603788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcgt(cond, dt, rd, rm, operand); 603888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 603988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 604088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcgt(al, dt, rd, rm, operand); 604188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 604288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 604388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt(Condition cond, 604488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 604588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 604688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 604788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 6048cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6049cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6050cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 605188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 605288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 60538d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 605488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 605588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcgt(cond, dt, rd, rm, operand); 605688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 605788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 605888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcgt(al, dt, rd, rm, operand); 605988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 606088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 606188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt( 606288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 6063cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6064cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6065cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 606688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 606788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 60688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 606988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 607088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcgt(cond, dt, rd, rn, rm); 607188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 607288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 607388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcgt(al, dt, rd, rn, rm); 607488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 607588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 607688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt( 607788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 6078cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6079cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6080cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 608188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 608288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 60838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 608488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 608588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcgt(cond, dt, rd, rn, rm); 608688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 608788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcgt(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 608888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcgt(al, dt, rd, rn, rm); 608988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 609088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 609188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle(Condition cond, 609288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 609388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 609488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 609588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 6096cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6097cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6098cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 609988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 610088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 61018d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 610288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 610388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcle(cond, dt, rd, rm, operand); 610488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 610588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 610688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcle(al, dt, rd, rm, operand); 610788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 610888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 610988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle(Condition cond, 611088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 611188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 611288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 611388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 6114cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6115cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6116cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 611788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 611888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 61198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 612088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 612188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcle(cond, dt, rd, rm, operand); 612288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 612388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 612488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcle(al, dt, rd, rm, operand); 612588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 612688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 612788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle( 612888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 6129cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6130cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6131cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 613288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 613388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 61348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 613588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 613688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcle(cond, dt, rd, rn, rm); 613788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 613888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 613988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcle(al, dt, rd, rn, rm); 614088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 614188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 614288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle( 614388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 6144cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6145cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6146cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 614788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 614888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 61498d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 615088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 615188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcle(cond, dt, rd, rn, rm); 615288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 615388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcle(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 615488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcle(al, dt, rd, rn, rm); 615588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 615688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 615788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcls(Condition cond, DataType dt, DRegister rd, DRegister rm) { 6158cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6159cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 616088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 616188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 61628d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 616388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 616488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcls(cond, dt, rd, rm); 616588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 616688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcls(DataType dt, DRegister rd, DRegister rm) { Vcls(al, dt, rd, rm); } 616788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 616888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcls(Condition cond, DataType dt, QRegister rd, QRegister rm) { 6169cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6170cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 617188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 617288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 61738d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 617488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 617588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcls(cond, dt, rd, rm); 617688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 617788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcls(DataType dt, QRegister rd, QRegister rm) { Vcls(al, dt, rd, rm); } 617888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 617988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt(Condition cond, 618088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 618188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 618288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 618388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 6184cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6185cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6186cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 618788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 618888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 61898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 619088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 619188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vclt(cond, dt, rd, rm, operand); 619288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 619388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 619488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vclt(al, dt, rd, rm, operand); 619588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 619688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 619788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt(Condition cond, 619888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 619988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 620088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 620188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 6202cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6203cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6204cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 620588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 620688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62078d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 620888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 620988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vclt(cond, dt, rd, rm, operand); 621088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 621188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 621288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vclt(al, dt, rd, rm, operand); 621388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 621488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 621588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt( 621688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 6217cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6218cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6219cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 622088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 622188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62228d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 622388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 622488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vclt(cond, dt, rd, rn, rm); 622588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 622688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 622788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vclt(al, dt, rd, rn, rm); 622888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 622988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 623088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt( 623188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 6232cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6233cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6234cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 623588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 623688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 623888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 623988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vclt(cond, dt, rd, rn, rm); 624088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 624188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclt(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 624288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vclt(al, dt, rd, rn, rm); 624388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 624488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 624588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclz(Condition cond, DataType dt, DRegister rd, DRegister rm) { 6246cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6247cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 624888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 624988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 625188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 625288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vclz(cond, dt, rd, rm); 625388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 625488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclz(DataType dt, DRegister rd, DRegister rm) { Vclz(al, dt, rd, rm); } 625588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 625688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclz(Condition cond, DataType dt, QRegister rd, QRegister rm) { 6257cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6258cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 625988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 626088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62618d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 626288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 626388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vclz(cond, dt, rd, rm); 626488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 626588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vclz(DataType dt, QRegister rd, QRegister rm) { Vclz(al, dt, rd, rm); } 626688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 626788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(Condition cond, DataType dt, SRegister rd, SRegister rm) { 6268cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6269cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 627088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 627188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62728d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 627388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 627488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmp(cond, dt, rd, rm); 627588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 627688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(DataType dt, SRegister rd, SRegister rm) { Vcmp(al, dt, rd, rm); } 627788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 627888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(Condition cond, DataType dt, DRegister rd, DRegister rm) { 6279cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6280cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 628188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 628288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 628488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 628588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmp(cond, dt, rd, rm); 628688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 628788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(DataType dt, DRegister rd, DRegister rm) { Vcmp(al, dt, rd, rm); } 628888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 628988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(Condition cond, DataType dt, SRegister rd, double imm) { 6290cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 629188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 629288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 62938d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 629488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 629588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmp(cond, dt, rd, imm); 629688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 629788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(DataType dt, SRegister rd, double imm) { Vcmp(al, dt, rd, imm); } 629888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 629988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(Condition cond, DataType dt, DRegister rd, double imm) { 6300cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 630188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 630288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63038d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 630488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 630588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmp(cond, dt, rd, imm); 630688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 630788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmp(DataType dt, DRegister rd, double imm) { Vcmp(al, dt, rd, imm); } 630888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 630988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(Condition cond, DataType dt, SRegister rd, SRegister rm) { 6310cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6311cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 631288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 631388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63148d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 631588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 631688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmpe(cond, dt, rd, rm); 631788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 631888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(DataType dt, SRegister rd, SRegister rm) { Vcmpe(al, dt, rd, rm); } 631988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 632088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(Condition cond, DataType dt, DRegister rd, DRegister rm) { 6321cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6322cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 632388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 632488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 632688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 632788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmpe(cond, dt, rd, rm); 632888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 632988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(DataType dt, DRegister rd, DRegister rm) { Vcmpe(al, dt, rd, rm); } 633088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 633188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(Condition cond, DataType dt, SRegister rd, double imm) { 6332cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 633388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 633488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 633688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 633788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmpe(cond, dt, rd, imm); 633888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 633988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(DataType dt, SRegister rd, double imm) { Vcmpe(al, dt, rd, imm); } 634088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 634188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(Condition cond, DataType dt, DRegister rd, double imm) { 6342cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 634388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 634488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63458d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 634688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 634788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcmpe(cond, dt, rd, imm); 634888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 634988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcmpe(DataType dt, DRegister rd, double imm) { Vcmpe(al, dt, rd, imm); } 635088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 635188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcnt(Condition cond, DataType dt, DRegister rd, DRegister rm) { 6352cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6353cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 635488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 635588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 635788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 635888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcnt(cond, dt, rd, rm); 635988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 636088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcnt(DataType dt, DRegister rd, DRegister rm) { Vcnt(al, dt, rd, rm); } 636188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 636288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcnt(Condition cond, DataType dt, QRegister rd, QRegister rm) { 6363cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6364cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 636588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 636688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 636888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 636988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcnt(cond, dt, rd, rm); 637088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 637188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcnt(DataType dt, QRegister rd, QRegister rm) { Vcnt(al, dt, rd, rm); } 637288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 637388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 637488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) { 6375cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6376cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 637788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 637888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 638088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 638188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm); 638288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 638388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) { 638488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm); 638588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 638688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 638788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 638888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6389cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6390cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 639188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 639288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 63938d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 639488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 639588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm); 639688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 639788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 639888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm); 639988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 640088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 640188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(Condition cond, 640288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt1, 640388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt2, 640488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 640588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 640688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois int32_t fbits) { 6407cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6408cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 640988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 641088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 64118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 641288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 641388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm, fbits); 641488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 641588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 641688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt1, DataType dt2, DRegister rd, DRegister rm, int32_t fbits) { 641788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm, fbits); 641888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 641988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 642088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(Condition cond, 642188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt1, 642288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt2, 642388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 642488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 642588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois int32_t fbits) { 6426cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6427cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 642888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 642988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 64308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 643188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 643288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm, fbits); 643388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 643488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 643588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt1, DataType dt2, QRegister rd, QRegister rm, int32_t fbits) { 643688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm, fbits); 643788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 643888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 643988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(Condition cond, 644088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt1, 644188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt2, 644288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rd, 644388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rm, 644488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois int32_t fbits) { 6445cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6446cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 644788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 644888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 64498d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 645088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 645188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm, fbits); 645288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 645388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 645488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt1, DataType dt2, SRegister rd, SRegister rm, int32_t fbits) { 645588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm, fbits); 645688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 645788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 645888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 645988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 6460cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6461cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 646288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 646388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 64648d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 646588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 646688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm); 646788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 646888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 646988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm); 647088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 647188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 647288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 647388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 6474cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6475cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 647688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 647788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 64788d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 647988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 648088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm); 648188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 648288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 648388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm); 648488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 648588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 648688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 648788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm) { 6488cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6489cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 649088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 649188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 64928d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 649388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 649488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm); 649588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 649688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(DataType dt1, DataType dt2, DRegister rd, QRegister rm) { 649788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm); 649888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 649988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 650088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 650188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm) { 6502cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6503cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 650488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 650588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65068d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 650788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 650888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm); 650988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 651088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(DataType dt1, DataType dt2, QRegister rd, DRegister rm) { 651188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm); 651288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 651388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 651488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt( 651588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6516cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6517cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 651888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 651988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 652188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 652288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvt(cond, dt1, dt2, rd, rm); 652388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 652488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 652588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvt(al, dt1, dt2, rd, rm); 652688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 652788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 652888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvta(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 6529cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6530cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 653188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 653288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65338d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 653488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvta(dt1, dt2, rd, rm); 653588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 653688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 653788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvta(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 6538cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6539cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 654088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 654188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65428d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 654388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvta(dt1, dt2, rd, rm); 654488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 654588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 654688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvta(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6547cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6548cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 654988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 655088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 655288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvta(dt1, dt2, rd, rm); 655388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 655488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 655588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvta(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6556cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6557cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 655888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 655988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65608d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 656188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvta(dt1, dt2, rd, rm); 656288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 656388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 656488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtb( 656588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6566cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6567cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 656888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 656988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65708d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 657188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 657288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtb(cond, dt1, dt2, rd, rm); 657388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 657488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtb(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 657588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtb(al, dt1, dt2, rd, rm); 657688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 657788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 657888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtb( 657988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) { 6580cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6581cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 658288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 658388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 658588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 658688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtb(cond, dt1, dt2, rd, rm); 658788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 658888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtb(DataType dt1, DataType dt2, DRegister rd, SRegister rm) { 658988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtb(al, dt1, dt2, rd, rm); 659088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 659188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 659288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtb( 659388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6594cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6595cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 659688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 659788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 65988d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 659988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 660088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtb(cond, dt1, dt2, rd, rm); 660188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 660288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtb(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 660388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtb(al, dt1, dt2, rd, rm); 660488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 660588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 660688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtm(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 6607cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6608cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 660988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 661088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 661288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtm(dt1, dt2, rd, rm); 661388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 661488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 661588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtm(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 6616cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6617cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 661888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 661988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 662188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtm(dt1, dt2, rd, rm); 662288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 662388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 662488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtm(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6625cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6626cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 662788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 662888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66298d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 663088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtm(dt1, dt2, rd, rm); 663188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 663288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 663388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtm(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6634cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6635cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 663688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 663788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 663988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtm(dt1, dt2, rd, rm); 664088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 664188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 664288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtn(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 6643cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6644cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 664588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 664688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66478d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 664888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtn(dt1, dt2, rd, rm); 664988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 665088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 665188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtn(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 6652cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6653cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 665488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 665588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 665788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtn(dt1, dt2, rd, rm); 665888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 665988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 666088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtn(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6661cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6662cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 666388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 666488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66658d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 666688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtn(dt1, dt2, rd, rm); 666788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 666888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 666988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtn(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6670cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6671cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 667288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 667388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 667588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtn(dt1, dt2, rd, rm); 667688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 667788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 667888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtp(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 6679cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6680cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 668188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 668288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 668488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtp(dt1, dt2, rd, rm); 668588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 668688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 668788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtp(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 6688cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6689cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 669088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 669188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 66928d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 669388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtp(dt1, dt2, rd, rm); 669488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 669588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 669688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtp(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6697cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6698cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 669988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 670088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67018d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 670288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtp(dt1, dt2, rd, rm); 670388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 670488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 670588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtp(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6706cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6707cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 670888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 670988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67108d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 671188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtp(dt1, dt2, rd, rm); 671288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 671388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 671488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtr( 671588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6716cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6717cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 671888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 671988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 672188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 672288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtr(cond, dt1, dt2, rd, rm); 672388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 672488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtr(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 672588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtr(al, dt1, dt2, rd, rm); 672688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 672788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 672888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtr( 672988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6730cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6731cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 673288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 673388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 673588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 673688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtr(cond, dt1, dt2, rd, rm); 673788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 673888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtr(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 673988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtr(al, dt1, dt2, rd, rm); 674088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 674188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 674288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtt( 674388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 6744cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6745cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 674688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 674788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 674988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 675088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtt(cond, dt1, dt2, rd, rm); 675188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 675288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtt(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 675388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtt(al, dt1, dt2, rd, rm); 675488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 675588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 675688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtt( 675788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm) { 6758cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6759cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 676088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 676188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67628d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 676388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 676488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtt(cond, dt1, dt2, rd, rm); 676588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 676688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtt(DataType dt1, DataType dt2, DRegister rd, SRegister rm) { 676788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtt(al, dt1, dt2, rd, rm); 676888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 676988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 677088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtt( 677188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 6772cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6773cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 677488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 677588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67768d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 677788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 677888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vcvtt(cond, dt1, dt2, rd, rm); 677988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 678088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vcvtt(DataType dt1, DataType dt2, SRegister rd, DRegister rm) { 678188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vcvtt(al, dt1, dt2, rd, rm); 678288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 678388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 678488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdiv( 678588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 6786cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6787cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6788cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 678988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 679088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 67918d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 679288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 679388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vdiv(cond, dt, rd, rn, rm); 679488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 679588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdiv(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 679688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vdiv(al, dt, rd, rn, rm); 679788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 679888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 679988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdiv( 680088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 6801cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6802cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6803cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 680488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 680588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 68068d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 680788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 680888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vdiv(cond, dt, rd, rn, rm); 680988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 681088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdiv(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 681188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vdiv(al, dt, rd, rn, rm); 681288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 681388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 681488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(Condition cond, DataType dt, QRegister rd, Register rt) { 6815cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6816cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 681788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 681888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 68198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 682088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 682188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vdup(cond, dt, rd, rt); 682288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 682388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(DataType dt, QRegister rd, Register rt) { Vdup(al, dt, rd, rt); } 682488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 682588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(Condition cond, DataType dt, DRegister rd, Register rt) { 6826cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6827cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 682888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 682988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 68308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 683188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 683288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vdup(cond, dt, rd, rt); 683388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 683488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(DataType dt, DRegister rd, Register rt) { Vdup(al, dt, rd, rt); } 683588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 683688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(Condition cond, DataType dt, DRegister rd, DRegisterLane rm) { 6837cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6838cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 683988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 684088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 68418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 684288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 684388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vdup(cond, dt, rd, rm); 684488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 684588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(DataType dt, DRegister rd, DRegisterLane rm) { 684688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vdup(al, dt, rd, rm); 684788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 684888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 684988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(Condition cond, DataType dt, QRegister rd, DRegisterLane rm) { 6850cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6851cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 685288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 685388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 68548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 685588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 685688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vdup(cond, dt, rd, rm); 685788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 685888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vdup(DataType dt, QRegister rd, DRegisterLane rm) { 685988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vdup(al, dt, rd, rm); 686088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 686188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 686288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor( 686388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 6864cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6865cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6866cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 686788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 686888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 68698d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 687088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 687188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois veor(cond, dt, rd, rn, rm); 687288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 687388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 687488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Veor(al, dt, rd, rn, rm); 687588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 687688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor(Condition cond, DRegister rd, DRegister rn, DRegister rm) { 687788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Veor(cond, kDataTypeValueNone, rd, rn, rm); 687888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 687988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor(DRegister rd, DRegister rn, DRegister rm) { 688088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Veor(al, kDataTypeValueNone, rd, rn, rm); 688188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 688288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 688388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor( 688488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 6885cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6886cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6887cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 688888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 688988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 68908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 689188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 689288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois veor(cond, dt, rd, rn, rm); 689388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 689488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 689588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Veor(al, dt, rd, rn, rm); 689688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 689788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor(Condition cond, QRegister rd, QRegister rn, QRegister rm) { 689888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Veor(cond, kDataTypeValueNone, rd, rn, rm); 689988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 690088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Veor(QRegister rd, QRegister rn, QRegister rm) { 690188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Veor(al, kDataTypeValueNone, rd, rn, rm); 690288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 690388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 690488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vext(Condition cond, 690588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 690688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 690788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 690888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 690988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 6910cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6911cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6912cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6913cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 691488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 691588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 69168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 691788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 691888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vext(cond, dt, rd, rn, rm, operand); 691988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 692088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vext(DataType dt, 692188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 692288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 692388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 692488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 692588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vext(al, dt, rd, rn, rm, operand); 692688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 692788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 692888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vext(Condition cond, 692988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 693088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 693188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 693288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 693388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 6934cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6935cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6936cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 6937cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 693888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 693988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 69408d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 694188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 694288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vext(cond, dt, rd, rn, rm, operand); 694388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 694488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vext(DataType dt, 694588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 694688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 694788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 694888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 694988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vext(al, dt, rd, rn, rm, operand); 695088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 695188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 695288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfma( 695388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 6954cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6955cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6956cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 695788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 695888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 69598d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 696088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 696188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfma(cond, dt, rd, rn, rm); 696288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 696388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfma(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 696488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfma(al, dt, rd, rn, rm); 696588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 696688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 696788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfma( 696888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 6969cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6970cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6971cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 697288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 697388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 69748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 697588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 697688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfma(cond, dt, rd, rn, rm); 697788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 697888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfma(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 697988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfma(al, dt, rd, rn, rm); 698088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 698188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 698288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfma( 698388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 6984cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 6985cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 6986cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 698788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 698888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 69898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 699088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 699188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfma(cond, dt, rd, rn, rm); 699288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 699388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfma(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 699488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfma(al, dt, rd, rn, rm); 699588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 699688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 699788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfms( 699888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 6999cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7000cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7001cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 700288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 700388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 70048d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 700588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 700688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfms(cond, dt, rd, rn, rm); 700788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 700888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfms(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 700988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfms(al, dt, rd, rn, rm); 701088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 701188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 701288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfms( 701388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7014cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7015cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7016cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 701788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 701888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 70198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 702088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 702188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfms(cond, dt, rd, rn, rm); 702288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 702388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfms(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 702488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfms(al, dt, rd, rn, rm); 702588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 702688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 702788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfms( 702888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 7029cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7030cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7031cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 703288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 703388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 70348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 703588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 703688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfms(cond, dt, rd, rn, rm); 703788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 703888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfms(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 703988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfms(al, dt, rd, rn, rm); 704088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 704188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 704288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnma( 704388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 7044cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7045cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7046cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 704788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 704888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 70498d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 705088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 705188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfnma(cond, dt, rd, rn, rm); 705288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 705388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnma(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 705488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfnma(al, dt, rd, rn, rm); 705588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 705688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 705788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnma( 705888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7059cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7060cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7061cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 706288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 706388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 70648d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 706588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 706688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfnma(cond, dt, rd, rn, rm); 706788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 706888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnma(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 706988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfnma(al, dt, rd, rn, rm); 707088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 707188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 707288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnms( 707388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 7074cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7075cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7076cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 707788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 707888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 70798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 708088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 708188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfnms(cond, dt, rd, rn, rm); 708288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 708388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnms(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 708488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfnms(al, dt, rd, rn, rm); 708588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 708688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 708788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnms( 708888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7089cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7090cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7091cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 709288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 709388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 70948d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 709588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 709688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vfnms(cond, dt, rd, rn, rm); 709788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 709888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vfnms(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 709988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vfnms(al, dt, rd, rn, rm); 710088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 710188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 710288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhadd( 710388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7104cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7105cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7106cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 710788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 710888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 71098d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 711088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 711188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vhadd(cond, dt, rd, rn, rm); 711288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 711388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 711488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vhadd(al, dt, rd, rn, rm); 711588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 711688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 711788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhadd( 711888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7119cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7120cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7121cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 712288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 712388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 71248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 712588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 712688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vhadd(cond, dt, rd, rn, rm); 712788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 712888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 712988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vhadd(al, dt, rd, rn, rm); 713088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 713188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 713288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhsub( 713388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7134cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7135cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7136cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 713788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 713888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 71398d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 714088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 714188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vhsub(cond, dt, rd, rn, rm); 714288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 714388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 714488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vhsub(al, dt, rd, rn, rm); 714588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 714688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 714788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhsub( 714888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7149cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7150cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7151cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 715288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 715388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 71548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 715588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 715688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vhsub(cond, dt, rd, rn, rm); 715788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 715888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vhsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 715988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vhsub(al, dt, rd, rn, rm); 716088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 716188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 716288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld1(Condition cond, 716388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 716488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 716588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 7166cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 7167cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 716888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 716988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 71708d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 717188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 717288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vld1(cond, dt, nreglist, operand); 717388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 717488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld1(DataType dt, 717588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 717688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 717788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vld1(al, dt, nreglist, operand); 717888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 717988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 718088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld2(Condition cond, 718188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 718288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 718388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 7184cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 7185cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 718688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 718788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 71888d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 718988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 719088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vld2(cond, dt, nreglist, operand); 719188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 719288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld2(DataType dt, 719388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 719488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 719588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vld2(al, dt, nreglist, operand); 719688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 719788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 719888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld3(Condition cond, 719988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 720088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 720188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 7202cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 7203cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 720488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 720588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 72068d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 720788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 720888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vld3(cond, dt, nreglist, operand); 720988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 721088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld3(DataType dt, 721188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 721288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 721388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vld3(al, dt, nreglist, operand); 721488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 721588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 721688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld3(Condition cond, 721788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 721888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 721988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 7220cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 7221cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 722288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 722388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 72248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 722588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 722688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vld3(cond, dt, nreglist, operand); 722788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 722888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld3(DataType dt, 722988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 723088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 723188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vld3(al, dt, nreglist, operand); 723288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 723388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 723488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld4(Condition cond, 723588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 723688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 723788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 7238cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 7239cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 724088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 724188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 72428d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 724388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 724488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vld4(cond, dt, nreglist, operand); 724588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 724688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vld4(DataType dt, 724788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 724888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 724988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vld4(al, dt, nreglist, operand); 725088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 725188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 725288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(Condition cond, 725388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 725488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 725588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 725688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 7257cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7258cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 725988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 726088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 72618d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 726288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 726388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldm(cond, dt, rn, write_back, dreglist); 726488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 726588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(DataType dt, 726688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 726788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 726888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 726988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldm(al, dt, rn, write_back, dreglist); 727088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 727188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(Condition cond, 727288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 727388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 727488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 727588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldm(cond, kDataTypeValueNone, rn, write_back, dreglist); 727688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 727788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(Register rn, WriteBack write_back, DRegisterList dreglist) { 727888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldm(al, kDataTypeValueNone, rn, write_back, dreglist); 727988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 728088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 728188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(Condition cond, 728288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 728388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 728488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 728588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 7286cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7287cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 728888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 728988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 72908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 729188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 729288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldm(cond, dt, rn, write_back, sreglist); 729388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 729488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(DataType dt, 729588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 729688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 729788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 729888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldm(al, dt, rn, write_back, sreglist); 729988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 730088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(Condition cond, 730188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 730288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 730388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 730488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldm(cond, kDataTypeValueNone, rn, write_back, sreglist); 730588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 730688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldm(Register rn, WriteBack write_back, SRegisterList sreglist) { 730788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldm(al, kDataTypeValueNone, rn, write_back, sreglist); 730888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 730988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 731088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(Condition cond, 731188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 731288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 731388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 731488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 7315cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7316cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 731788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 731888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 73198d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 732088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 732188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldmdb(cond, dt, rn, write_back, dreglist); 732288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 732388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(DataType dt, 732488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 732588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 732688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 732788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmdb(al, dt, rn, write_back, dreglist); 732888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 732988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(Condition cond, 733088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 733188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 733288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 733388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmdb(cond, kDataTypeValueNone, rn, write_back, dreglist); 733488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 733588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(Register rn, WriteBack write_back, DRegisterList dreglist) { 733688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmdb(al, kDataTypeValueNone, rn, write_back, dreglist); 733788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 733888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 733988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(Condition cond, 734088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 734188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 734288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 734388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 7344cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7345cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 734688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 734788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 73488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 734988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 735088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldmdb(cond, dt, rn, write_back, sreglist); 735188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 735288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(DataType dt, 735388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 735488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 735588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 735688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmdb(al, dt, rn, write_back, sreglist); 735788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 735888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(Condition cond, 735988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 736088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 736188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 736288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmdb(cond, kDataTypeValueNone, rn, write_back, sreglist); 736388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 736488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmdb(Register rn, WriteBack write_back, SRegisterList sreglist) { 736588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmdb(al, kDataTypeValueNone, rn, write_back, sreglist); 736688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 736788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 736888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(Condition cond, 736988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 737088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 737188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 737288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 7373cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7374cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 737588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 737688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 73778d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 737888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 737988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldmia(cond, dt, rn, write_back, dreglist); 738088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 738188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(DataType dt, 738288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 738388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 738488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 738588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmia(al, dt, rn, write_back, dreglist); 738688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 738788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(Condition cond, 738888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 738988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 739088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 739188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmia(cond, kDataTypeValueNone, rn, write_back, dreglist); 739288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 739388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(Register rn, WriteBack write_back, DRegisterList dreglist) { 739488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmia(al, kDataTypeValueNone, rn, write_back, dreglist); 739588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 739688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 739788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(Condition cond, 739888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 739988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 740088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 740188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 7402cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7403cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 740488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 740588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 74068d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 740788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 740888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldmia(cond, dt, rn, write_back, sreglist); 740988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 741088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(DataType dt, 741188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 741288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 741388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 741488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmia(al, dt, rn, write_back, sreglist); 741588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 741688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(Condition cond, 741788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 741888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 741988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 742088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmia(cond, kDataTypeValueNone, rn, write_back, sreglist); 742188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 742288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldmia(Register rn, WriteBack write_back, SRegisterList sreglist) { 742388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldmia(al, kDataTypeValueNone, rn, write_back, sreglist); 742488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 742588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 742688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 742788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(Condition cond, 742888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 742988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 743088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 7431cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7432cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 743388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 743488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 74358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 743688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 743788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldr(cond, dt, rd, operand); 743888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 743988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(DataType dt, DRegister rd, const MemOperand& operand) { 744088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldr(al, dt, rd, operand); 744188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 744288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(Condition cond, DRegister rd, const MemOperand& operand) { 744388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldr(cond, Untyped64, rd, operand); 744488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 744588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(DRegister rd, const MemOperand& operand) { 744688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldr(al, Untyped64, rd, operand); 744788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 744888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 744988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 745088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(Condition cond, 745188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 745288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rd, 745388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 7454cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7455cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 745688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 745788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 74588d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 745988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 746088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vldr(cond, dt, rd, operand); 746188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 746288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(DataType dt, SRegister rd, const MemOperand& operand) { 746388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldr(al, dt, rd, operand); 746488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 746588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(Condition cond, SRegister rd, const MemOperand& operand) { 746688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldr(cond, Untyped32, rd, operand); 746788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 746888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vldr(SRegister rd, const MemOperand& operand) { 746988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vldr(al, Untyped32, rd, operand); 747088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 747188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 747288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmax( 747388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7474cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7475cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7476cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 747788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 747888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 74798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 748088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 748188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmax(cond, dt, rd, rn, rm); 748288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 748388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmax(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 748488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmax(al, dt, rd, rn, rm); 748588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 748688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 748788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmax( 748888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7489cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7490cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7491cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 749288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 749388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 74948d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 749588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 749688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmax(cond, dt, rd, rn, rm); 749788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 749888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmax(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 749988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmax(al, dt, rd, rn, rm); 750088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 750188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 750288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmaxnm(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7503cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7504cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7505cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 750688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 750788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75088d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 750988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmaxnm(dt, rd, rn, rm); 751088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 751188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 751288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmaxnm(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7513cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7514cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7515cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 751688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 751788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 751988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmaxnm(dt, rd, rn, rm); 752088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 752188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 752288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmaxnm(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 7523cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7524cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7525cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 752688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 752788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 752988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmaxnm(dt, rd, rn, rm); 753088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 753188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 753288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmin( 753388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7534cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7535cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7536cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 753788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 753888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75398d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 754088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 754188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmin(cond, dt, rd, rn, rm); 754288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 754388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmin(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 754488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmin(al, dt, rd, rn, rm); 754588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 754688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 754788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmin( 754888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7549cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7550cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7551cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 755288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 755388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 755588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 755688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmin(cond, dt, rd, rn, rm); 755788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 755888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmin(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 755988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmin(al, dt, rd, rn, rm); 756088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 756188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 756288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vminnm(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7563cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7564cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7565cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 756688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 756788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 756988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vminnm(dt, rd, rn, rm); 757088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 757188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 757288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vminnm(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7573cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7574cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7575cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 757688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 757788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75788d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 757988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vminnm(dt, rd, rn, rm); 758088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 758188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 758288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vminnm(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 7583cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7584cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7585cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 758688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 758788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 75888d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 758988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vminnm(dt, rd, rn, rm); 759088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 759188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 759288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla(Condition cond, 759388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 759488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 759588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 759688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 7597cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7598cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7599cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 760088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 760188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 76028d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 760388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 760488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmla(cond, dt, rd, rn, rm); 760588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 760688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) { 760788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmla(al, dt, rd, rn, rm); 760888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 760988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 761088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla(Condition cond, 761188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 761288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 761388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 761488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 7615cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7616cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7617cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 761888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 761988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 76208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 762188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 762288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmla(cond, dt, rd, rn, rm); 762388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 762488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) { 762588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmla(al, dt, rd, rn, rm); 762688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 762788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 762888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla( 762988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7630cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7631cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7632cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 763388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 763488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 76358d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 763688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 763788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmla(cond, dt, rd, rn, rm); 763888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 763988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 764088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmla(al, dt, rd, rn, rm); 764188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 764288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 764388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla( 764488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7645cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7646cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7647cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 764888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 764988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 76508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 765188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 765288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmla(cond, dt, rd, rn, rm); 765388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 765488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 765588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmla(al, dt, rd, rn, rm); 765688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 765788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 765888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla( 765988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 7660cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7661cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7662cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 766388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 766488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 76658d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 766688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 766788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmla(cond, dt, rd, rn, rm); 766888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 766988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmla(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 767088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmla(al, dt, rd, rn, rm); 767188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 767288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 767388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlal(Condition cond, 767488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 767588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 767688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 767788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 7678cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7679cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7680cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 768188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 768288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 76838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 768488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 768588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmlal(cond, dt, rd, rn, rm); 768688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 768788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlal(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) { 768888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmlal(al, dt, rd, rn, rm); 768988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 769088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 769188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlal( 769288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 7693cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7694cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7695cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 769688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 769788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 76988d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 769988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 770088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmlal(cond, dt, rd, rn, rm); 770188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 770288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlal(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 770388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmlal(al, dt, rd, rn, rm); 770488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 770588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 770688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls(Condition cond, 770788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 770888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 770988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 771088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 7711cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7712cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7713cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 771488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 771588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 77168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 771788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 771888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmls(cond, dt, rd, rn, rm); 771988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 772088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) { 772188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmls(al, dt, rd, rn, rm); 772288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 772388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 772488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls(Condition cond, 772588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 772688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 772788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 772888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 7729cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7730cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7731cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 773288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 773388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 77348d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 773588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 773688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmls(cond, dt, rd, rn, rm); 773788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 773888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) { 773988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmls(al, dt, rd, rn, rm); 774088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 774188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 774288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls( 774388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 7744cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7745cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7746cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 774788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 774888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 77498d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 775088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 775188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmls(cond, dt, rd, rn, rm); 775288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 775388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 775488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmls(al, dt, rd, rn, rm); 775588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 775688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 775788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls( 775888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 7759cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7760cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7761cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 776288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 776388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 77648d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 776588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 776688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmls(cond, dt, rd, rn, rm); 776788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 776888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 776988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmls(al, dt, rd, rn, rm); 777088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 777188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 777288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls( 777388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 7774cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7775cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7776cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 777788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 777888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 77798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 778088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 778188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmls(cond, dt, rd, rn, rm); 778288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 778388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmls(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 778488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmls(al, dt, rd, rn, rm); 778588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 778688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 778788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlsl(Condition cond, 778888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 778988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 779088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 779188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 7792cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7793cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7794cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 779588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 779688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 77978d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 779888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 779988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmlsl(cond, dt, rd, rn, rm); 780088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 780188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlsl(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) { 780288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmlsl(al, dt, rd, rn, rm); 780388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 780488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 780588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlsl( 780688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 7807cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7808cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7809cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 781088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 781188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 78128d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 781388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 781488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmlsl(cond, dt, rd, rn, rm); 781588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 781688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmlsl(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 781788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmlsl(al, dt, rd, rn, rm); 781888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 781988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 782088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, Register rt, SRegister rn) { 7821cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 7822cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 782388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 782488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 78258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 782688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 782788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, rt, rn); 782888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 782988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Register rt, SRegister rn) { Vmov(al, rt, rn); } 783088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 783188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, SRegister rn, Register rt) { 7832cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 7833cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 783488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 783588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 78368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 783788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 783888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, rn, rt); 783988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 784088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(SRegister rn, Register rt) { Vmov(al, rn, rt); } 784188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 784288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, Register rt, Register rt2, DRegister rm) { 7843cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 7844cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 7845cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 784688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 784788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 78488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 784988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 785088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, rt, rt2, rm); 785188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 785288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Register rt, Register rt2, DRegister rm) { Vmov(al, rt, rt2, rm); } 785388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 785488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, DRegister rm, Register rt, Register rt2) { 7855cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 7856cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 7857cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 785888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 785988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 78608d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 786188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 786288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, rm, rt, rt2); 786388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 786488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DRegister rm, Register rt, Register rt2) { Vmov(al, rm, rt, rt2); } 786588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 786688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov( 786788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1) { 7868cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 7869cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 7870cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 7871cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm1)); 787288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 787388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 78748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 787588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 787688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, rt, rt2, rm, rm1); 787788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 787888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Register rt, Register rt2, SRegister rm, SRegister rm1) { 787988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, rt, rt2, rm, rm1); 788088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 788188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 788288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov( 788388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2) { 7884cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 7885cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm1)); 7886cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 7887cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt2)); 788888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 788988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 78908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 789188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 789288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, rm, rm1, rt, rt2); 789388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 789488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(SRegister rm, SRegister rm1, Register rt, Register rt2) { 789588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, rm, rm1, rt, rt2); 789688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 789788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 789888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, DataType dt, DRegisterLane rd, Register rt) { 7899cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7900cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 790188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 790288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 79038d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 790488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 790588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, dt, rd, rt); 790688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 790788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DataType dt, DRegisterLane rd, Register rt) { 790888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, dt, rd, rt); 790988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 791088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, DRegisterLane rd, Register rt) { 791188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(cond, kDataTypeValueNone, rd, rt); 791288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 791388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DRegisterLane rd, Register rt) { 791488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, kDataTypeValueNone, rd, rt); 791588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 791688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 791788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, 791888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 791988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 792088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 7921cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7922cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 792388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 792488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 79258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 792688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 792788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, dt, rd, operand); 792888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 792988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DataType dt, DRegister rd, const DOperand& operand) { 793088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, dt, rd, operand); 793188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 793288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 793388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, 793488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 793588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 793688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 7937cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7938cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 793988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 794088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 79418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 794288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 794388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, dt, rd, operand); 794488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 794588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DataType dt, QRegister rd, const QOperand& operand) { 794688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, dt, rd, operand); 794788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 794888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 794988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, 795088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 795188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rd, 795288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const SOperand& operand) { 7953cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7954cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 795588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 795688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 79578d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 795888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 795988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, dt, rd, operand); 796088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 796188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DataType dt, SRegister rd, const SOperand& operand) { 796288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, dt, rd, operand); 796388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 796488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 796588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, DataType dt, Register rt, DRegisterLane rn) { 7966cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 7967cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 796888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 796988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 79708d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 797188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 797288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmov(cond, dt, rt, rn); 797388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 797488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(DataType dt, Register rt, DRegisterLane rn) { 797588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, dt, rt, rn); 797688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 797788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Condition cond, Register rt, DRegisterLane rn) { 797888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(cond, kDataTypeValueNone, rt, rn); 797988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 798088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmov(Register rt, DRegisterLane rn) { 798188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmov(al, kDataTypeValueNone, rt, rn); 798288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 798388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 798488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmovl(Condition cond, DataType dt, QRegister rd, DRegister rm) { 7985cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7986cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 798788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 798888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 79898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 799088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 799188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmovl(cond, dt, rd, rm); 799288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 799388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmovl(DataType dt, QRegister rd, DRegister rm) { Vmovl(al, dt, rd, rm); } 799488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 799588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmovn(Condition cond, DataType dt, DRegister rd, QRegister rm) { 7996cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 7997cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 799888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 799988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 80008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 800188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 800288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmovn(cond, dt, rd, rm); 800388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 800488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmovn(DataType dt, DRegister rd, QRegister rm) { Vmovn(al, dt, rd, rm); } 800588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 800688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmrs(Condition cond, 800788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterOrAPSR_nzcv rt, 800888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SpecialFPRegister spec_reg) { 8009cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 801088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 801188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 80128d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 801388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 801488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmrs(cond, rt, spec_reg); 801588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 801688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmrs(RegisterOrAPSR_nzcv rt, SpecialFPRegister spec_reg) { 801788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmrs(al, rt, spec_reg); 801888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 801988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 802088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmsr(Condition cond, SpecialFPRegister spec_reg, Register rt) { 8021cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rt)); 802288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 802388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 80248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 802588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 802688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmsr(cond, spec_reg, rt); 802788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 802888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmsr(SpecialFPRegister spec_reg, Register rt) { Vmsr(al, spec_reg, rt); } 802988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 803088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul(Condition cond, 803188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 803288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 803388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 803488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister dm, 803588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned index) { 8036cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8037cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8038cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dm)); 803988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 804088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 80418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 804288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 804388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmul(cond, dt, rd, rn, dm, index); 804488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 804588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul( 804688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, DRegister rd, DRegister rn, DRegister dm, unsigned index) { 804788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmul(al, dt, rd, rn, dm, index); 804888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 804988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 805088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul(Condition cond, 805188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 805288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 805388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 805488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister dm, 805588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned index) { 8056cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8057cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8058cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dm)); 805988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 806088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 80618d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 806288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 806388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmul(cond, dt, rd, rn, dm, index); 806488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 806588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul( 806688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, QRegister rd, QRegister rn, DRegister dm, unsigned index) { 806788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmul(al, dt, rd, rn, dm, index); 806888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 806988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 807088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul( 807188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8072cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8073cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8074cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 807588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 807688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 80778d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 807888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 807988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmul(cond, dt, rd, rn, rm); 808088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 808188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 808288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmul(al, dt, rd, rn, rm); 808388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 808488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 808588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul( 808688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 8087cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8088cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8089cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 809088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 809188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 80928d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 809388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 809488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmul(cond, dt, rd, rn, rm); 809588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 809688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 809788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmul(al, dt, rd, rn, rm); 809888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 809988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 810088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul( 810188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 8102cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8103cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8104cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 810588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 810688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 81078d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 810888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 810988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmul(cond, dt, rd, rn, rm); 811088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 811188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmul(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 811288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmul(al, dt, rd, rn, rm); 811388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 811488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 811588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmull(Condition cond, 811688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 811788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 811888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 811988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister dm, 812088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned index) { 8121cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8122cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8123cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dm)); 812488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 812588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 81268d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 812788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 812888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmull(cond, dt, rd, rn, dm, index); 812988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 813088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmull( 813188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) { 813288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmull(al, dt, rd, rn, dm, index); 813388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 813488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 813588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmull( 813688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 8137cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8138cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8139cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 814088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 814188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 81428d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 814388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 814488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmull(cond, dt, rd, rn, rm); 814588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 814688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmull(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 814788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmull(al, dt, rd, rn, rm); 814888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 814988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 815088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmvn(Condition cond, 815188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 815288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 815388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 8154cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8155cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 815688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 815788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 81588d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 815988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 816088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmvn(cond, dt, rd, operand); 816188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 816288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmvn(DataType dt, DRegister rd, const DOperand& operand) { 816388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmvn(al, dt, rd, operand); 816488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 816588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 816688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmvn(Condition cond, 816788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 816888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 816988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 8170cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8171cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 817288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 817388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 81748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 817588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 817688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vmvn(cond, dt, rd, operand); 817788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 817888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vmvn(DataType dt, QRegister rd, const QOperand& operand) { 817988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vmvn(al, dt, rd, operand); 818088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 818188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 818288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vneg(Condition cond, DataType dt, DRegister rd, DRegister rm) { 8183cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8184cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 818588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 818688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 81878d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 818888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 818988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vneg(cond, dt, rd, rm); 819088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 819188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vneg(DataType dt, DRegister rd, DRegister rm) { Vneg(al, dt, rd, rm); } 819288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 819388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vneg(Condition cond, DataType dt, QRegister rd, QRegister rm) { 8194cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8195cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 819688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 819788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 81988d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 819988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 820088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vneg(cond, dt, rd, rm); 820188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 820288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vneg(DataType dt, QRegister rd, QRegister rm) { Vneg(al, dt, rd, rm); } 820388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 820488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vneg(Condition cond, DataType dt, SRegister rd, SRegister rm) { 8205cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8206cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 820788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 820888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 82098d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 821088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 821188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vneg(cond, dt, rd, rm); 821288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 821388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vneg(DataType dt, SRegister rd, SRegister rm) { Vneg(al, dt, rd, rm); } 821488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 821588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmla( 821688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 8217cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8218cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8219cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 822088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 822188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 82228d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 822388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 822488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vnmla(cond, dt, rd, rn, rm); 822588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 822688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmla(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 822788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vnmla(al, dt, rd, rn, rm); 822888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 822988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 823088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmla( 823188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8232cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8233cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8234cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 823588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 823688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 82378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 823888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 823988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vnmla(cond, dt, rd, rn, rm); 824088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 824188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmla(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 824288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vnmla(al, dt, rd, rn, rm); 824388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 824488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 824588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmls( 824688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 8247cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8248cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8249cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 825088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 825188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 82528d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 825388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 825488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vnmls(cond, dt, rd, rn, rm); 825588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 825688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmls(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 825788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vnmls(al, dt, rd, rn, rm); 825888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 825988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 826088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmls( 826188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8262cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8263cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8264cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 826588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 826688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 82678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 826888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 826988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vnmls(cond, dt, rd, rn, rm); 827088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 827188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmls(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 827288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vnmls(al, dt, rd, rn, rm); 827388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 827488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 827588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmul( 827688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 8277cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8278cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8279cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 828088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 828188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 82828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 828388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 828488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vnmul(cond, dt, rd, rn, rm); 828588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 828688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmul(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 828788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vnmul(al, dt, rd, rn, rm); 828888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 828988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 829088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmul( 829188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8292cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8293cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8294cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 829588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 829688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 82978d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 829888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 829988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vnmul(cond, dt, rd, rn, rm); 830088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 830188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vnmul(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 830288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vnmul(al, dt, rd, rn, rm); 830388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 830488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 830588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorn(Condition cond, 830688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 830788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 830888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 830988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 8310cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8311cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8312cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 831388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 831488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 83158d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 831688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 831788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vorn(cond, dt, rd, rn, operand); 831888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 831988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorn(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) { 832088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorn(al, dt, rd, rn, operand); 832188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 832288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 832388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorn(Condition cond, 832488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 832588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 832688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 832788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 8328cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8329cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8330cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 833188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 833288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 83338d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 833488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 833588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vorn(cond, dt, rd, rn, operand); 833688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 833788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorn(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) { 833888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorn(al, dt, rd, rn, operand); 833988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 834088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 834188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(Condition cond, 834288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 834388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 834488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 834588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 8346cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8347cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8348cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 834988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 835088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 83518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 835288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 835388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vorr(cond, dt, rd, rn, operand); 835488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 835588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(DataType dt, DRegister rd, DRegister rn, const DOperand& operand) { 835688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorr(al, dt, rd, rn, operand); 835788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 835888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(Condition cond, 835988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 836088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 836188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 836288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorr(cond, kDataTypeValueNone, rd, rn, operand); 836388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 836488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(DRegister rd, DRegister rn, const DOperand& operand) { 836588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorr(al, kDataTypeValueNone, rd, rn, operand); 836688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 836788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 836888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(Condition cond, 836988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 837088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 837188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 837288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 8373cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8374cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8375cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 837688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 837788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 83788d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 837988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 838088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vorr(cond, dt, rd, rn, operand); 838188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 838288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(DataType dt, QRegister rd, QRegister rn, const QOperand& operand) { 838388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorr(al, dt, rd, rn, operand); 838488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 838588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(Condition cond, 838688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 838788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 838888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 838988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorr(cond, kDataTypeValueNone, rd, rn, operand); 839088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 839188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vorr(QRegister rd, QRegister rn, const QOperand& operand) { 839288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vorr(al, kDataTypeValueNone, rd, rn, operand); 839388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 839488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 839588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpadal(Condition cond, DataType dt, DRegister rd, DRegister rm) { 8396cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8397cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 839888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 839988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 840188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 840288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpadal(cond, dt, rd, rm); 840388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 840488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpadal(DataType dt, DRegister rd, DRegister rm) { 840588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpadal(al, dt, rd, rm); 840688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 840788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 840888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpadal(Condition cond, DataType dt, QRegister rd, QRegister rm) { 8409cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8410cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 841188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 841288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84138d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 841488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 841588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpadal(cond, dt, rd, rm); 841688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 841788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpadal(DataType dt, QRegister rd, QRegister rm) { 841888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpadal(al, dt, rd, rm); 841988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 842088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 842188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpadd( 842288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8423cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8424cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8425cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 842688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 842788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 842988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 843088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpadd(cond, dt, rd, rn, rm); 843188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 843288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 843388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpadd(al, dt, rd, rn, rm); 843488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 843588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 843688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpaddl(Condition cond, DataType dt, DRegister rd, DRegister rm) { 8437cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8438cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 843988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 844088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 844288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 844388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpaddl(cond, dt, rd, rm); 844488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 844588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpaddl(DataType dt, DRegister rd, DRegister rm) { 844688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpaddl(al, dt, rd, rm); 844788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 844888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 844988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpaddl(Condition cond, DataType dt, QRegister rd, QRegister rm) { 8450cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8451cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 845288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 845388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 845588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 845688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpaddl(cond, dt, rd, rm); 845788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 845888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpaddl(DataType dt, QRegister rd, QRegister rm) { 845988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpaddl(al, dt, rd, rm); 846088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 846188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 846288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpmax( 846388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8464cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8465cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8466cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 846788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 846888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84698d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 847088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 847188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpmax(cond, dt, rd, rn, rm); 847288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 847388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpmax(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 847488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpmax(al, dt, rd, rn, rm); 847588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 847688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 847788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpmin( 847888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8479cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8480cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8481cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 848288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 848388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 848588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 848688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpmin(cond, dt, rd, rn, rm); 848788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 848888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpmin(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 848988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpmin(al, dt, rd, rn, rm); 849088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 849188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 849288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(Condition cond, DataType dt, DRegisterList dreglist) { 8493cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 849488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 849588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 84968d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 849788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 849888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpop(cond, dt, dreglist); 849988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 850088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(DataType dt, DRegisterList dreglist) { Vpop(al, dt, dreglist); } 850188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(Condition cond, DRegisterList dreglist) { 850288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpop(cond, kDataTypeValueNone, dreglist); 850388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 850488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(DRegisterList dreglist) { Vpop(al, kDataTypeValueNone, dreglist); } 850588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 850688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(Condition cond, DataType dt, SRegisterList sreglist) { 8507cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 850888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 850988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 85108d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 851188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 851288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpop(cond, dt, sreglist); 851388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 851488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(DataType dt, SRegisterList sreglist) { Vpop(al, dt, sreglist); } 851588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(Condition cond, SRegisterList sreglist) { 851688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpop(cond, kDataTypeValueNone, sreglist); 851788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 851888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpop(SRegisterList sreglist) { Vpop(al, kDataTypeValueNone, sreglist); } 851988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 852088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(Condition cond, DataType dt, DRegisterList dreglist) { 8521cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 852288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 852388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 85248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 852588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 852688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpush(cond, dt, dreglist); 852788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 852888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(DataType dt, DRegisterList dreglist) { Vpush(al, dt, dreglist); } 852988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(Condition cond, DRegisterList dreglist) { 853088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpush(cond, kDataTypeValueNone, dreglist); 853188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 853288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(DRegisterList dreglist) { 853388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpush(al, kDataTypeValueNone, dreglist); 853488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 853588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 853688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(Condition cond, DataType dt, SRegisterList sreglist) { 8537cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 853888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 853988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 85408d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 854188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 854288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vpush(cond, dt, sreglist); 854388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 854488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(DataType dt, SRegisterList sreglist) { Vpush(al, dt, sreglist); } 854588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(Condition cond, SRegisterList sreglist) { 854688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpush(cond, kDataTypeValueNone, sreglist); 854788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 854888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vpush(SRegisterList sreglist) { 854988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vpush(al, kDataTypeValueNone, sreglist); 855088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 855188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 855288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqabs(Condition cond, DataType dt, DRegister rd, DRegister rm) { 8553cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8554cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 855588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 855688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 85578d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 855888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 855988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqabs(cond, dt, rd, rm); 856088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 856188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqabs(DataType dt, DRegister rd, DRegister rm) { Vqabs(al, dt, rd, rm); } 856288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 856388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqabs(Condition cond, DataType dt, QRegister rd, QRegister rm) { 8564cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8565cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 856688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 856788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 85688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 856988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 857088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqabs(cond, dt, rd, rm); 857188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 857288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqabs(DataType dt, QRegister rd, QRegister rm) { Vqabs(al, dt, rd, rm); } 857388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 857488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqadd( 857588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8576cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8577cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8578cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 857988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 858088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 85818d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 858288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 858388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqadd(cond, dt, rd, rn, rm); 858488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 858588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 858688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqadd(al, dt, rd, rn, rm); 858788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 858888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 858988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqadd( 859088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 8591cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8592cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8593cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 859488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 859588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 85968d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 859788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 859888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqadd(cond, dt, rd, rn, rm); 859988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 860088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 860188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqadd(al, dt, rd, rn, rm); 860288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 860388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 860488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlal( 860588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 8606cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8607cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8608cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 860988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 861088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 86118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 861288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 861388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmlal(cond, dt, rd, rn, rm); 861488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 861588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlal(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 861688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmlal(al, dt, rd, rn, rm); 861788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 861888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 861988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlal(Condition cond, 862088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 862188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 862288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 862388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister dm, 862488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned index) { 8625cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8626cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8627cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dm)); 862888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 862988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 86308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 863188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 863288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmlal(cond, dt, rd, rn, dm, index); 863388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 863488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlal( 863588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) { 863688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmlal(al, dt, rd, rn, dm, index); 863788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 863888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 863988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlsl( 864088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 8641cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8642cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8643cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 864488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 864588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 86468d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 864788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 864888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmlsl(cond, dt, rd, rn, rm); 864988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 865088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlsl(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 865188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmlsl(al, dt, rd, rn, rm); 865288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 865388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 865488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlsl(Condition cond, 865588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 865688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 865788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 865888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister dm, 865988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned index) { 8660cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8661cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8662cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dm)); 866388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 866488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 86658d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 866688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 866788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmlsl(cond, dt, rd, rn, dm, index); 866888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 866988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmlsl( 867088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, QRegister rd, DRegister rn, DRegister dm, unsigned index) { 867188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmlsl(al, dt, rd, rn, dm, index); 867288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 867388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 867488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh( 867588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8676cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8677cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8678cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 867988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 868088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 86818d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 868288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 868388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmulh(cond, dt, rd, rn, rm); 868488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 868588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 868688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmulh(al, dt, rd, rn, rm); 868788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 868888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 868988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh( 869088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 8691cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8692cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8693cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 869488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 869588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 86968d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 869788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 869888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmulh(cond, dt, rd, rn, rm); 869988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 870088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 870188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmulh(al, dt, rd, rn, rm); 870288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 870388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 870488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh(Condition cond, 870588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 870688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 870788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 870888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 8709cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8710cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8711cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 871288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 871388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 87148d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 871588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 871688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmulh(cond, dt, rd, rn, rm); 871788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 871888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) { 871988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmulh(al, dt, rd, rn, rm); 872088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 872188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 872288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh(Condition cond, 872388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 872488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 872588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 872688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 8727cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8728cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8729cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 873088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 873188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 87328d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 873388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 873488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmulh(cond, dt, rd, rn, rm); 873588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 873688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmulh(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) { 873788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmulh(al, dt, rd, rn, rm); 873888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 873988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 874088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmull( 874188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 8742cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8743cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8744cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 874588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 874688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 87478d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 874888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 874988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmull(cond, dt, rd, rn, rm); 875088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 875188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmull(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 875288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmull(al, dt, rd, rn, rm); 875388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 875488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 875588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmull(Condition cond, 875688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 875788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 875888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 875988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 8760cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8761cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8762cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 876388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 876488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 87658d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 876688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 876788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqdmull(cond, dt, rd, rn, rm); 876888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 876988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqdmull(DataType dt, QRegister rd, DRegister rn, DRegisterLane rm) { 877088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqdmull(al, dt, rd, rn, rm); 877188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 877288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 877388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqmovn(Condition cond, DataType dt, DRegister rd, QRegister rm) { 8774cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8775cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 877688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 877788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 87788d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 877988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 878088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqmovn(cond, dt, rd, rm); 878188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 878288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqmovn(DataType dt, DRegister rd, QRegister rm) { 878388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqmovn(al, dt, rd, rm); 878488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 878588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 878688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqmovun(Condition cond, DataType dt, DRegister rd, QRegister rm) { 8787cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8788cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 878988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 879088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 87918d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 879288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 879388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqmovun(cond, dt, rd, rm); 879488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 879588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqmovun(DataType dt, DRegister rd, QRegister rm) { 879688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqmovun(al, dt, rd, rm); 879788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 879888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 879988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqneg(Condition cond, DataType dt, DRegister rd, DRegister rm) { 8800cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8801cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 880288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 880388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 88048d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 880588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 880688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqneg(cond, dt, rd, rm); 880788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 880888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqneg(DataType dt, DRegister rd, DRegister rm) { Vqneg(al, dt, rd, rm); } 880988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 881088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqneg(Condition cond, DataType dt, QRegister rd, QRegister rm) { 8811cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8812cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 881388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 881488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 88158d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 881688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 881788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqneg(cond, dt, rd, rm); 881888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 881988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqneg(DataType dt, QRegister rd, QRegister rm) { Vqneg(al, dt, rd, rm); } 882088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 882188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh( 882288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 8823cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8824cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8825cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 882688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 882788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 88288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 882988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 883088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrdmulh(cond, dt, rd, rn, rm); 883188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 883288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 883388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrdmulh(al, dt, rd, rn, rm); 883488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 883588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 883688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh( 883788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 8838cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8839cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8840cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 884188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 884288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 88438d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 884488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 884588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrdmulh(cond, dt, rd, rn, rm); 884688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 884788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 884888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrdmulh(al, dt, rd, rn, rm); 884988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 885088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 885188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh(Condition cond, 885288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 885388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 885488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rn, 885588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 8856cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8857cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8858cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 885988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 886088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 88618d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 886288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 886388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrdmulh(cond, dt, rd, rn, rm); 886488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 886588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh(DataType dt, DRegister rd, DRegister rn, DRegisterLane rm) { 886688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrdmulh(al, dt, rd, rn, rm); 886788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 886888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 886988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh(Condition cond, 887088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 887188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 887288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rn, 887388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterLane rm) { 8874cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8875cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 8876cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 887788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 887888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 88798d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 888088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 888188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrdmulh(cond, dt, rd, rn, rm); 888288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 888388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrdmulh(DataType dt, QRegister rd, QRegister rn, DRegisterLane rm) { 888488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrdmulh(al, dt, rd, rn, rm); 888588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 888688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 888788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshl( 888888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn) { 8889cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8890cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 8891cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 889288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 889388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 88948d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 889588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 889688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrshl(cond, dt, rd, rm, rn); 889788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 889888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshl(DataType dt, DRegister rd, DRegister rm, DRegister rn) { 889988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrshl(al, dt, rd, rm, rn); 890088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 890188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 890288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshl( 890388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn) { 8904cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8905cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 8906cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 890788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 890888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 89098d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 891088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 891188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrshl(cond, dt, rd, rm, rn); 891288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 891388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshl(DataType dt, QRegister rd, QRegister rm, QRegister rn) { 891488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrshl(al, dt, rd, rm, rn); 891588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 891688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 891788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshrn(Condition cond, 891888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 891988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 892088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 892188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 8922cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8923cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 8924cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 892588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 892688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 89278d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 892888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 892988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrshrn(cond, dt, rd, rm, operand); 893088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 893188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshrn(DataType dt, 893288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 893388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 893488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 893588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrshrn(al, dt, rd, rm, operand); 893688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 893788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 893888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshrun(Condition cond, 893988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 894088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 894188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 894288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 8943cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8944cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 8945cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 894688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 894788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 89488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 894988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 895088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqrshrun(cond, dt, rd, rm, operand); 895188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 895288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqrshrun(DataType dt, 895388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 895488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 895588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 895688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqrshrun(al, dt, rd, rm, operand); 895788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 895888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 895988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshl(Condition cond, 896088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 896188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 896288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 896388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 8964cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8965cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 8966cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 896788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 896888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 89698d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 897088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 897188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqshl(cond, dt, rd, rm, operand); 897288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 897388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshl(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 897488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqshl(al, dt, rd, rm, operand); 897588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 897688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 897788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshl(Condition cond, 897888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 897988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 898088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 898188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 8982cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 8983cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 8984cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 898588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 898688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 89878d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 898888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 898988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqshl(cond, dt, rd, rm, operand); 899088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 899188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshl(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 899288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqshl(al, dt, rd, rm, operand); 899388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 899488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 899588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshlu(Condition cond, 899688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 899788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 899888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 899988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9000cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9001cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9002cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 900388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 900488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 90058d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 900688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 900788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqshlu(cond, dt, rd, rm, operand); 900888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 900988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshlu(DataType dt, 901088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 901188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 901288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 901388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqshlu(al, dt, rd, rm, operand); 901488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 901588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 901688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshlu(Condition cond, 901788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 901888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 901988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 902088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9021cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9022cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9023cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 902488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 902588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 90268d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 902788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 902888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqshlu(cond, dt, rd, rm, operand); 902988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 903088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshlu(DataType dt, 903188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 903288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 903388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 903488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqshlu(al, dt, rd, rm, operand); 903588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 903688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 903788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshrn(Condition cond, 903888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 903988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 904088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 904188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9042cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9043cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9044cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 904588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 904688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 90478d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 904888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 904988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqshrn(cond, dt, rd, rm, operand); 905088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 905188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshrn(DataType dt, 905288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 905388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 905488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 905588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqshrn(al, dt, rd, rm, operand); 905688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 905788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 905888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshrun(Condition cond, 905988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 906088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 906188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 906288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9063cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9064cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9065cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 906688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 906788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 90688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 906988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 907088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqshrun(cond, dt, rd, rm, operand); 907188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 907288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqshrun(DataType dt, 907388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 907488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 907588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 907688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqshrun(al, dt, rd, rm, operand); 907788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 907888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 907988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqsub( 908088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9081cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9082cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9083cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 908488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 908588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 90868d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 908788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 908888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqsub(cond, dt, rd, rn, rm); 908988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 909088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 909188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqsub(al, dt, rd, rn, rm); 909288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 909388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 909488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqsub( 909588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 9096cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9097cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9098cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 909988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 910088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91018d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 910288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 910388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vqsub(cond, dt, rd, rn, rm); 910488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 910588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vqsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 910688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vqsub(al, dt, rd, rn, rm); 910788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 910888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 910988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vraddhn( 911088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) { 9111cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9112cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9113cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 911488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 911588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 911788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 911888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vraddhn(cond, dt, rd, rn, rm); 911988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 912088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vraddhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) { 912188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vraddhn(al, dt, rd, rn, rm); 912288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 912388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 912488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecpe(Condition cond, DataType dt, DRegister rd, DRegister rm) { 9125cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9126cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 912788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 912888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91298d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 913088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 913188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrecpe(cond, dt, rd, rm); 913288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 913388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecpe(DataType dt, DRegister rd, DRegister rm) { 913488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrecpe(al, dt, rd, rm); 913588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 913688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 913788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecpe(Condition cond, DataType dt, QRegister rd, QRegister rm) { 9138cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9139cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 914088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 914188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91428d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 914388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 914488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrecpe(cond, dt, rd, rm); 914588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 914688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecpe(DataType dt, QRegister rd, QRegister rm) { 914788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrecpe(al, dt, rd, rm); 914888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 914988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 915088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecps( 915188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9152cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9153cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9154cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 915588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 915688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91578d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 915888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 915988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrecps(cond, dt, rd, rn, rm); 916088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 916188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecps(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 916288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrecps(al, dt, rd, rn, rm); 916388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 916488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 916588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecps( 916688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 9167cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9168cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9169cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 917088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 917188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91728d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 917388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 917488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrecps(cond, dt, rd, rn, rm); 917588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 917688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrecps(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 917788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrecps(al, dt, rd, rn, rm); 917888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 917988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 918088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev16(Condition cond, DataType dt, DRegister rd, DRegister rm) { 9181cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9182cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 918388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 918488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91858d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 918688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 918788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrev16(cond, dt, rd, rm); 918888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 918988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev16(DataType dt, DRegister rd, DRegister rm) { 919088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrev16(al, dt, rd, rm); 919188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 919288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 919388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev16(Condition cond, DataType dt, QRegister rd, QRegister rm) { 9194cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9195cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 919688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 919788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 91988d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 919988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 920088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrev16(cond, dt, rd, rm); 920188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 920288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev16(DataType dt, QRegister rd, QRegister rm) { 920388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrev16(al, dt, rd, rm); 920488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 920588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 920688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev32(Condition cond, DataType dt, DRegister rd, DRegister rm) { 9207cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9208cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 920988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 921088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 92118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 921288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 921388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrev32(cond, dt, rd, rm); 921488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 921588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev32(DataType dt, DRegister rd, DRegister rm) { 921688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrev32(al, dt, rd, rm); 921788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 921888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 921988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev32(Condition cond, DataType dt, QRegister rd, QRegister rm) { 9220cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9221cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 922288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 922388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 92248d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 922588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 922688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrev32(cond, dt, rd, rm); 922788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 922888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev32(DataType dt, QRegister rd, QRegister rm) { 922988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrev32(al, dt, rd, rm); 923088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 923188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 923288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev64(Condition cond, DataType dt, DRegister rd, DRegister rm) { 9233cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9234cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 923588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 923688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 92378d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 923888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 923988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrev64(cond, dt, rd, rm); 924088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 924188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev64(DataType dt, DRegister rd, DRegister rm) { 924288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrev64(al, dt, rd, rm); 924388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 924488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 924588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev64(Condition cond, DataType dt, QRegister rd, QRegister rm) { 9246cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9247cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 924888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 924988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 92508d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 925188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 925288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrev64(cond, dt, rd, rm); 925388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 925488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrev64(DataType dt, QRegister rd, QRegister rm) { 925588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrev64(al, dt, rd, rm); 925688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 925788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 925888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrhadd( 925988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9260cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9261cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9262cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 926388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 926488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 92658d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 926688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 926788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrhadd(cond, dt, rd, rn, rm); 926888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 926988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrhadd(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 927088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrhadd(al, dt, rd, rn, rm); 927188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 927288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 927388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrhadd( 927488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 9275cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9276cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9277cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 927888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 927988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 92808d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 928188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 928288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrhadd(cond, dt, rd, rn, rm); 928388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 928488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrhadd(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 928588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrhadd(al, dt, rd, rn, rm); 928688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 928788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 928888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrinta(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 9289cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9290cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 929188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 929288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 92938d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 929488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrinta(dt1, dt2, rd, rm); 929588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 929688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 929788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrinta(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 9298cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9299cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 930088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 930188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93028d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 930388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrinta(dt1, dt2, rd, rm); 930488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 930588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 930688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrinta(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 9307cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9308cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 930988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 931088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93118d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 931288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrinta(dt1, dt2, rd, rm); 931388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 931488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 931588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintm(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 9316cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9317cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 931888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 931988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 932188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintm(dt1, dt2, rd, rm); 932288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 932388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 932488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintm(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 9325cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9326cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 932788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 932888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93298d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 933088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintm(dt1, dt2, rd, rm); 933188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 933288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 933388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintm(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 9334cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9335cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 933688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 933788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 933988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintm(dt1, dt2, rd, rm); 934088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 934188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 934288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintn(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 9343cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9344cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 934588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 934688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93478d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 934888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintn(dt1, dt2, rd, rm); 934988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 935088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 935188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintn(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 9352cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9353cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 935488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 935588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 935788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintn(dt1, dt2, rd, rm); 935888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 935988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 936088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintn(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 9361cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9362cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 936388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 936488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93658d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 936688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintn(dt1, dt2, rd, rm); 936788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 936888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 936988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintp(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 9370cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9371cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 937288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 937388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 937588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintp(dt1, dt2, rd, rm); 937688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 937788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 937888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintp(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 9379cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9380cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 938188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 938288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 938488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintp(dt1, dt2, rd, rm); 938588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 938688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 938788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintp(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 9388cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9389cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 939088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 939188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 93928d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 939388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintp(dt1, dt2, rd, rm); 939488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 939588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 939688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintr( 939788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 9398cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9399cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 940088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 940188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94028d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 940388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 940488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintr(cond, dt1, dt2, rd, rm); 940588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 940688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintr(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 940788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrintr(al, dt1, dt2, rd, rm); 940888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 940988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 941088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintr( 941188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 9412cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9413cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 941488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 941588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94168d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 941788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 941888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintr(cond, dt1, dt2, rd, rm); 941988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 942088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintr(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 942188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrintr(al, dt1, dt2, rd, rm); 942288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 942388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 942488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintx( 942588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 9426cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9427cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 942888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 942988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 943188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 943288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintx(cond, dt1, dt2, rd, rm); 943388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 943488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintx(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 943588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrintx(al, dt1, dt2, rd, rm); 943688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 943788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 943888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintx(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 9439cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9440cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 944188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 944288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94438d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 944488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintx(dt1, dt2, rd, rm); 944588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 944688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 944788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintx( 944888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 9449cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9450cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 945188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 945288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94538d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 945488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 945588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintx(cond, dt1, dt2, rd, rm); 945688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 945788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintx(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 945888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrintx(al, dt1, dt2, rd, rm); 945988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 946088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 946188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintz( 946288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 9463cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9464cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 946588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 946688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 946888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 946988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintz(cond, dt1, dt2, rd, rm); 947088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 947188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintz(DataType dt1, DataType dt2, DRegister rd, DRegister rm) { 947288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrintz(al, dt1, dt2, rd, rm); 947388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 947488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 947588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintz(DataType dt1, DataType dt2, QRegister rd, QRegister rm) { 9476cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9477cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 947888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 947988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94808d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 948188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintz(dt1, dt2, rd, rm); 948288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 948388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 948488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintz( 948588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 9486cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9487cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 948888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 948988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 94908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 949188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 949288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrintz(cond, dt1, dt2, rd, rm); 949388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 949488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrintz(DataType dt1, DataType dt2, SRegister rd, SRegister rm) { 949588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrintz(al, dt1, dt2, rd, rm); 949688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 949788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 949888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshl( 949988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn) { 9500cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9501cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9502cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 950388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 950488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 95058d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 950688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 950788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrshl(cond, dt, rd, rm, rn); 950888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 950988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshl(DataType dt, DRegister rd, DRegister rm, DRegister rn) { 951088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrshl(al, dt, rd, rm, rn); 951188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 951288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 951388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshl( 951488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn) { 9515cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9516cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9517cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 951888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 951988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 95208d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 952188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 952288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrshl(cond, dt, rd, rm, rn); 952388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 952488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshl(DataType dt, QRegister rd, QRegister rm, QRegister rn) { 952588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrshl(al, dt, rd, rm, rn); 952688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 952788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 952888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshr(Condition cond, 952988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 953088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 953188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 953288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9533cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9534cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9535cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 953688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 953788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 95388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 953988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 954088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrshr(cond, dt, rd, rm, operand); 954188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 954288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshr(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 954388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrshr(al, dt, rd, rm, operand); 954488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 954588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 954688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshr(Condition cond, 954788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 954888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 954988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 955088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9551cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9552cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9553cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 955488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 955588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 95568d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 955788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 955888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrshr(cond, dt, rd, rm, operand); 955988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 956088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshr(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 956188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrshr(al, dt, rd, rm, operand); 956288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 956388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 956488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshrn(Condition cond, 956588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 956688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 956788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 956888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9569cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9570cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9571cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 957288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 957388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 95748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 957588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 957688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrshrn(cond, dt, rd, rm, operand); 957788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 957888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrshrn(DataType dt, 957988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 958088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 958188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 958288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrshrn(al, dt, rd, rm, operand); 958388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 958488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 958588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrte(Condition cond, DataType dt, DRegister rd, DRegister rm) { 9586cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9587cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 958888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 958988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 95908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 959188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 959288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrsqrte(cond, dt, rd, rm); 959388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 959488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrte(DataType dt, DRegister rd, DRegister rm) { 959588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrsqrte(al, dt, rd, rm); 959688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 959788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 959888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrte(Condition cond, DataType dt, QRegister rd, QRegister rm) { 9599cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9600cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 960188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 960288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 96038d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 960488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 960588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrsqrte(cond, dt, rd, rm); 960688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 960788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrte(DataType dt, QRegister rd, QRegister rm) { 960888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrsqrte(al, dt, rd, rm); 960988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 961088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 961188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrts( 961288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9613cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9614cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9615cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 961688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 961788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 96188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 961988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 962088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrsqrts(cond, dt, rd, rn, rm); 962188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 962288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrts(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 962388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrsqrts(al, dt, rd, rn, rm); 962488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 962588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 962688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrts( 962788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 9628cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9629cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9630cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 963188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 963288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 96338d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 963488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 963588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrsqrts(cond, dt, rd, rn, rm); 963688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 963788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsqrts(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 963888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrsqrts(al, dt, rd, rn, rm); 963988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 964088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 964188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsra(Condition cond, 964288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 964388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 964488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 964588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9646cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9647cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9648cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 964988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 965088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 96518d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 965288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 965388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrsra(cond, dt, rd, rm, operand); 965488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 965588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsra(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 965688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrsra(al, dt, rd, rm, operand); 965788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 965888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 965988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsra(Condition cond, 966088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 966188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 966288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 966388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9664cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9665cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9666cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 966788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 966888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 96698d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 967088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 967188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrsra(cond, dt, rd, rm, operand); 967288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 967388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsra(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 967488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrsra(al, dt, rd, rm, operand); 967588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 967688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 967788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsubhn( 967888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) { 9679cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9680cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9681cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 968288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 968388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 96848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 968588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 968688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vrsubhn(cond, dt, rd, rn, rm); 968788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 968888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vrsubhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) { 968988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vrsubhn(al, dt, rd, rn, rm); 969088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 969188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 969288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vseleq(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9693cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9694cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9695cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 969688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 969788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 96988d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 969988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vseleq(dt, rd, rn, rm); 970088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 970188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 970288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vseleq(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 9703cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9704cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9705cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 970688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 970788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97088d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 970988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vseleq(dt, rd, rn, rm); 971088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 971188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 971288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vselge(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9713cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9714cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9715cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 971688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 971788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 971988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vselge(dt, rd, rn, rm); 972088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 972188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 972288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vselge(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 9723cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9724cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9725cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 972688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 972788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 972988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vselge(dt, rd, rn, rm); 973088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 973188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 973288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vselgt(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9733cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9734cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9735cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 973688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 973788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 973988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vselgt(dt, rd, rn, rm); 974088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 974188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 974288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vselgt(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 9743cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9744cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9745cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 974688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 974788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 974988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vselgt(dt, rd, rn, rm); 975088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 975188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 975288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vselvs(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 9753cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9754cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9755cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 975688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 975788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97588d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 975988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vselvs(dt, rd, rn, rm); 976088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 976188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 976288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vselvs(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 9763cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9764cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 9765cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 976688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 976788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97688d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 976988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vselvs(dt, rd, rn, rm); 977088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 977188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 977288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshl(Condition cond, 977388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 977488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 977588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 977688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9777cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9778cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9779cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 978088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 978188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 97828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 978388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 978488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vshl(cond, dt, rd, rm, operand); 978588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 978688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshl(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 978788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vshl(al, dt, rd, rm, operand); 978888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 978988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 979088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshl(Condition cond, 979188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 979288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 979388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 979488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9795cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9796cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9797cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 979888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 979988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 98008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 980188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 980288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vshl(cond, dt, rd, rm, operand); 980388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 980488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshl(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 980588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vshl(al, dt, rd, rm, operand); 980688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 980788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 980888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshll(Condition cond, 980988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 981088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 981188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 981288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9813cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9814cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9815cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 981688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 981788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 98188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 981988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 982088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vshll(cond, dt, rd, rm, operand); 982188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 982288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshll(DataType dt, QRegister rd, DRegister rm, const DOperand& operand) { 982388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vshll(al, dt, rd, rm, operand); 982488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 982588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 982688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshr(Condition cond, 982788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 982888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 982988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 983088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9831cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9832cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9833cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 983488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 983588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 98368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 983788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 983888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vshr(cond, dt, rd, rm, operand); 983988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 984088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshr(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 984188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vshr(al, dt, rd, rm, operand); 984288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 984388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 984488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshr(Condition cond, 984588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 984688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 984788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 984888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9849cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9850cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9851cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 985288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 985388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 98548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 985588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 985688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vshr(cond, dt, rd, rm, operand); 985788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 985888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshr(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 985988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vshr(al, dt, rd, rm, operand); 986088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 986188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 986288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshrn(Condition cond, 986388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 986488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 986588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 986688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9867cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9868cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9869cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 987088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 987188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 98728d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 987388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 987488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vshrn(cond, dt, rd, rm, operand); 987588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 987688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vshrn(DataType dt, DRegister rd, QRegister rm, const QOperand& operand) { 987788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vshrn(al, dt, rd, rm, operand); 987888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 987988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 988088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsli(Condition cond, 988188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 988288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 988388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 988488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9885cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9886cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9887cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 988888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 988988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 98908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 989188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 989288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsli(cond, dt, rd, rm, operand); 989388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 989488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsli(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 989588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsli(al, dt, rd, rm, operand); 989688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 989788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 989888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsli(Condition cond, 989988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 990088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 990188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 990288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9903cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9904cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9905cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 990688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 990788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 99088d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 990988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 991088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsli(cond, dt, rd, rm, operand); 991188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 991288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsli(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 991388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsli(al, dt, rd, rm, operand); 991488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 991588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 991688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsqrt(Condition cond, DataType dt, SRegister rd, SRegister rm) { 9917cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9918cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 991988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 992088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 99218d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 992288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 992388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsqrt(cond, dt, rd, rm); 992488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 992588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsqrt(DataType dt, SRegister rd, SRegister rm) { Vsqrt(al, dt, rd, rm); } 992688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 992788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsqrt(Condition cond, DataType dt, DRegister rd, DRegister rm) { 9928cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9929cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 993088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 993188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 99328d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 993388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 993488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsqrt(cond, dt, rd, rm); 993588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 993688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsqrt(DataType dt, DRegister rd, DRegister rm) { Vsqrt(al, dt, rd, rm); } 993788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 993888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsra(Condition cond, 993988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 994088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 994188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 994288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9943cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9944cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9945cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 994688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 994788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 99488d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 994988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 995088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsra(cond, dt, rd, rm, operand); 995188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 995288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsra(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 995388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsra(al, dt, rd, rm, operand); 995488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 995588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 995688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsra(Condition cond, 995788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 995888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 995988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 996088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9961cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9962cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9963cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 996488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 996588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 99668d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 996788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 996888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsra(cond, dt, rd, rm, operand); 996988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 997088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsra(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 997188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsra(al, dt, rd, rm, operand); 997288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 997388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 997488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsri(Condition cond, 997588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 997688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 997788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm, 997888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const DOperand& operand) { 9979cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9980cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9981cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 998288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 998388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 99848d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 998588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 998688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsri(cond, dt, rd, rm, operand); 998788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 998888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsri(DataType dt, DRegister rd, DRegister rm, const DOperand& operand) { 998988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsri(al, dt, rd, rm, operand); 999088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 999188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 999288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsri(Condition cond, 999388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 999488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rd, 999588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister rm, 999688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const QOperand& operand) { 9997cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 9998cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 9999cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1000088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1000188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 100028d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1000388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1000488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsri(cond, dt, rd, rm, operand); 1000588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1000688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsri(DataType dt, QRegister rd, QRegister rm, const QOperand& operand) { 1000788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsri(al, dt, rd, rm, operand); 1000888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1000988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1001088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst1(Condition cond, 1001188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1001288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1001388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 10014cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 10015cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1001688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1001788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 100188d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1001988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1002088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vst1(cond, dt, nreglist, operand); 1002188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1002288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst1(DataType dt, 1002388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1002488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 1002588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vst1(al, dt, nreglist, operand); 1002688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1002788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1002888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst2(Condition cond, 1002988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1003088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1003188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 10032cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 10033cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1003488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1003588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 100368d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1003788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1003888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vst2(cond, dt, nreglist, operand); 1003988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1004088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst2(DataType dt, 1004188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1004288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 1004388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vst2(al, dt, nreglist, operand); 1004488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1004588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1004688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst3(Condition cond, 1004788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1004888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1004988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 10050cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 10051cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1005288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1005388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 100548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1005588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1005688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vst3(cond, dt, nreglist, operand); 1005788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1005888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst3(DataType dt, 1005988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1006088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 1006188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vst3(al, dt, nreglist, operand); 1006288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1006388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1006488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst3(Condition cond, 1006588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1006688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1006788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 10068cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 10069cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1007088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1007188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 100728d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1007388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1007488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vst3(cond, dt, nreglist, operand); 1007588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1007688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst3(DataType dt, 1007788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1007888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 1007988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vst3(al, dt, nreglist, operand); 1008088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1008188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1008288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst4(Condition cond, 1008388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1008488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1008588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 10086cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 10087cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1008888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1008988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 100908d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1009188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1009288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vst4(cond, dt, nreglist, operand); 1009388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1009488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vst4(DataType dt, 1009588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1009688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const AlignedMemOperand& operand) { 1009788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vst4(al, dt, nreglist, operand); 1009888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1009988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1010088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(Condition cond, 1010188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1010288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1010388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1010488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 10105cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10106cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 1010788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1010888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 101098d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1011088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1011188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstm(cond, dt, rn, write_back, dreglist); 1011288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1011388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(DataType dt, 1011488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1011588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1011688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1011788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstm(al, dt, rn, write_back, dreglist); 1011888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1011988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(Condition cond, 1012088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1012188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1012288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1012388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstm(cond, kDataTypeValueNone, rn, write_back, dreglist); 1012488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1012588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(Register rn, WriteBack write_back, DRegisterList dreglist) { 1012688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstm(al, kDataTypeValueNone, rn, write_back, dreglist); 1012788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1012888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1012988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(Condition cond, 1013088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1013188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1013288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1013388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 10134cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10135cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 1013688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1013788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 101388d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1013988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1014088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstm(cond, dt, rn, write_back, sreglist); 1014188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1014288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(DataType dt, 1014388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1014488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1014588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 1014688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstm(al, dt, rn, write_back, sreglist); 1014788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1014888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(Condition cond, 1014988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1015088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1015188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 1015288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstm(cond, kDataTypeValueNone, rn, write_back, sreglist); 1015388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1015488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstm(Register rn, WriteBack write_back, SRegisterList sreglist) { 1015588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstm(al, kDataTypeValueNone, rn, write_back, sreglist); 1015688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1015788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1015888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(Condition cond, 1015988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1016088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1016188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1016288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 10163cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10164cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 1016588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1016688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 101678d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1016888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1016988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstmdb(cond, dt, rn, write_back, dreglist); 1017088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1017188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(DataType dt, 1017288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1017388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1017488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1017588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmdb(al, dt, rn, write_back, dreglist); 1017688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1017788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(Condition cond, 1017888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1017988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1018088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1018188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmdb(cond, kDataTypeValueNone, rn, write_back, dreglist); 1018288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1018388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(Register rn, WriteBack write_back, DRegisterList dreglist) { 1018488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmdb(al, kDataTypeValueNone, rn, write_back, dreglist); 1018588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1018688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1018788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(Condition cond, 1018888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1018988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1019088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1019188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 10192cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10193cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 1019488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1019588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 101968d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1019788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1019888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstmdb(cond, dt, rn, write_back, sreglist); 1019988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1020088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(DataType dt, 1020188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1020288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1020388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 1020488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmdb(al, dt, rn, write_back, sreglist); 1020588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1020688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(Condition cond, 1020788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1020888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1020988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 1021088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmdb(cond, kDataTypeValueNone, rn, write_back, sreglist); 1021188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1021288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmdb(Register rn, WriteBack write_back, SRegisterList sreglist) { 1021388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmdb(al, kDataTypeValueNone, rn, write_back, sreglist); 1021488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1021588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1021688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(Condition cond, 1021788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1021888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1021988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1022088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 10221cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10222cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(dreglist)); 1022388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1022488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 102258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1022688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1022788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstmia(cond, dt, rn, write_back, dreglist); 1022888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1022988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(DataType dt, 1023088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1023188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1023288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1023388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmia(al, dt, rn, write_back, dreglist); 1023488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1023588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(Condition cond, 1023688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1023788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1023888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegisterList dreglist) { 1023988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmia(cond, kDataTypeValueNone, rn, write_back, dreglist); 1024088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1024188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(Register rn, WriteBack write_back, DRegisterList dreglist) { 1024288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmia(al, kDataTypeValueNone, rn, write_back, dreglist); 1024388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1024488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1024588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(Condition cond, 1024688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1024788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1024888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1024988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 10250cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10251cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(sreglist)); 1025288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1025388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 102548d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1025588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1025688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstmia(cond, dt, rn, write_back, sreglist); 1025788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1025888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(DataType dt, 1025988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1026088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1026188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 1026288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmia(al, dt, rn, write_back, sreglist); 1026388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1026488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(Condition cond, 1026588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register rn, 1026688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois WriteBack write_back, 1026788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegisterList sreglist) { 1026888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmia(cond, kDataTypeValueNone, rn, write_back, sreglist); 1026988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1027088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstmia(Register rn, WriteBack write_back, SRegisterList sreglist) { 1027188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstmia(al, kDataTypeValueNone, rn, write_back, sreglist); 1027288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1027388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1027488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(Condition cond, 1027588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1027688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 1027788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 10278cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10279cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1028088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1028188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 102828d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1028388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1028488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstr(cond, dt, rd, operand); 1028588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1028688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(DataType dt, DRegister rd, const MemOperand& operand) { 1028788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstr(al, dt, rd, operand); 1028888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1028988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(Condition cond, DRegister rd, const MemOperand& operand) { 1029088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstr(cond, Untyped64, rd, operand); 1029188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1029288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(DRegister rd, const MemOperand& operand) { 1029388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstr(al, Untyped64, rd, operand); 1029488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1029588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1029688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(Condition cond, 1029788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1029888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister rd, 1029988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const MemOperand& operand) { 10300cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10301cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(operand)); 1030288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1030388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 103048d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1030588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1030688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vstr(cond, dt, rd, operand); 1030788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1030888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(DataType dt, SRegister rd, const MemOperand& operand) { 1030988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstr(al, dt, rd, operand); 1031088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1031188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(Condition cond, SRegister rd, const MemOperand& operand) { 1031288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstr(cond, Untyped32, rd, operand); 1031388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1031488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vstr(SRegister rd, const MemOperand& operand) { 1031588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vstr(al, Untyped32, rd, operand); 1031688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1031788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1031888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsub( 1031988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 10320cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10321cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10322cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1032388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1032488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 103258d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1032688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1032788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsub(cond, dt, rd, rn, rm); 1032888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1032988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsub(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 1033088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsub(al, dt, rd, rn, rm); 1033188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1033288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1033388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsub( 1033488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 10335cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10336cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10337cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1033888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1033988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 103408d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1034188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1034288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsub(cond, dt, rd, rn, rm); 1034388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1034488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsub(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 1034588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsub(al, dt, rd, rn, rm); 1034688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1034788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1034888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsub( 1034988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm) { 10350cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10351cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10352cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1035388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1035488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 103558d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1035688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1035788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsub(cond, dt, rd, rn, rm); 1035888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1035988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsub(DataType dt, SRegister rd, SRegister rn, SRegister rm) { 1036088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsub(al, dt, rd, rn, rm); 1036188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1036288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1036388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsubhn( 1036488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm) { 10365cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10366cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10367cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1036888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1036988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 103708d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1037188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1037288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsubhn(cond, dt, rd, rn, rm); 1037388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1037488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsubhn(DataType dt, DRegister rd, QRegister rn, QRegister rm) { 1037588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsubhn(al, dt, rd, rn, rm); 1037688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1037788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1037888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsubl( 1037988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm) { 10380cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10381cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10382cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1038388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1038488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 103858d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1038688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1038788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsubl(cond, dt, rd, rn, rm); 1038888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1038988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsubl(DataType dt, QRegister rd, DRegister rn, DRegister rm) { 1039088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsubl(al, dt, rd, rn, rm); 1039188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1039288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1039388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsubw( 1039488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm) { 10395cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10396cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10397cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1039888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1039988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 104008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1040188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1040288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vsubw(cond, dt, rd, rn, rm); 1040388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1040488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vsubw(DataType dt, QRegister rd, QRegister rn, DRegister rm) { 1040588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vsubw(al, dt, rd, rn, rm); 1040688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1040788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1040888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(Condition cond, DataType dt, DRegister rd, DRegister rm) { 10409cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10410cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1041188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1041288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 104138d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1041488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1041588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vswp(cond, dt, rd, rm); 1041688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1041788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(DataType dt, DRegister rd, DRegister rm) { Vswp(al, dt, rd, rm); } 1041888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(Condition cond, DRegister rd, DRegister rm) { 1041988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vswp(cond, kDataTypeValueNone, rd, rm); 1042088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1042188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(DRegister rd, DRegister rm) { 1042288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vswp(al, kDataTypeValueNone, rd, rm); 1042388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1042488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1042588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(Condition cond, DataType dt, QRegister rd, QRegister rm) { 10426cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10427cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1042888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1042988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 104308d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1043188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1043288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vswp(cond, dt, rd, rm); 1043388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1043488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(DataType dt, QRegister rd, QRegister rm) { Vswp(al, dt, rd, rm); } 1043588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(Condition cond, QRegister rd, QRegister rm) { 1043688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vswp(cond, kDataTypeValueNone, rd, rm); 1043788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1043888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vswp(QRegister rd, QRegister rm) { 1043988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vswp(al, kDataTypeValueNone, rd, rm); 1044088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1044188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1044288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtbl(Condition cond, 1044388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1044488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 1044588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1044688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm) { 10447cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10448cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 10449cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1045088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1045188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 104528d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1045388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1045488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vtbl(cond, dt, rd, nreglist, rm); 1045588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1045688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtbl(DataType dt, 1045788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 1045888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1045988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm) { 1046088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vtbl(al, dt, rd, nreglist, rm); 1046188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1046288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1046388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtbx(Condition cond, 1046488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DataType dt, 1046588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 1046688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1046788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm) { 10468cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10469cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(nreglist)); 10470cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1047188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1047288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 104738d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1047488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1047588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vtbx(cond, dt, rd, nreglist, rm); 1047688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1047788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtbx(DataType dt, 1047888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rd, 1047988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const NeonRegisterList& nreglist, 1048088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister rm) { 1048188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vtbx(al, dt, rd, nreglist, rm); 1048288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1048388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1048488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtrn(Condition cond, DataType dt, DRegister rd, DRegister rm) { 10485cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10486cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1048788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1048888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 104898d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1049088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1049188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vtrn(cond, dt, rd, rm); 1049288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1049388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtrn(DataType dt, DRegister rd, DRegister rm) { Vtrn(al, dt, rd, rm); } 1049488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1049588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtrn(Condition cond, DataType dt, QRegister rd, QRegister rm) { 10496cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10497cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1049888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1049988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105008d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1050188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1050288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vtrn(cond, dt, rd, rm); 1050388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1050488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtrn(DataType dt, QRegister rd, QRegister rm) { Vtrn(al, dt, rd, rm); } 1050588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1050688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtst( 1050788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm) { 10508cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10509cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10510cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1051188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1051288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105138d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1051488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1051588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vtst(cond, dt, rd, rn, rm); 1051688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1051788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtst(DataType dt, DRegister rd, DRegister rn, DRegister rm) { 1051888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vtst(al, dt, rd, rn, rm); 1051988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1052088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1052188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtst( 1052288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm) { 10523cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10524cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rn)); 10525cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1052688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1052788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105288d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1052988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1053088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vtst(cond, dt, rd, rn, rm); 1053188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1053288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vtst(DataType dt, QRegister rd, QRegister rn, QRegister rm) { 1053388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Vtst(al, dt, rd, rn, rm); 1053488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1053588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1053688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vuzp(Condition cond, DataType dt, DRegister rd, DRegister rm) { 10537cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10538cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1053988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1054088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105418d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1054288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1054388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vuzp(cond, dt, rd, rm); 1054488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1054588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vuzp(DataType dt, DRegister rd, DRegister rm) { Vuzp(al, dt, rd, rm); } 1054688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1054788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vuzp(Condition cond, DataType dt, QRegister rd, QRegister rm) { 10548cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10549cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1055088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1055188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105528d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1055388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1055488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vuzp(cond, dt, rd, rm); 1055588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1055688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vuzp(DataType dt, QRegister rd, QRegister rm) { Vuzp(al, dt, rd, rm); } 1055788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1055888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vzip(Condition cond, DataType dt, DRegister rd, DRegister rm) { 10559cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10560cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1056188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1056288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105638d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1056488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1056588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vzip(cond, dt, rd, rm); 1056688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1056788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vzip(DataType dt, DRegister rd, DRegister rm) { Vzip(al, dt, rd, rm); } 1056888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1056988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vzip(Condition cond, DataType dt, QRegister rd, QRegister rm) { 10570cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rd)); 10571cf4d2842eb8d63c621d7003e240ec094a357cad0Jacob Bramley VIXL_ASSERT(!AliasesAvailableScratchRegister(rm)); 1057288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1057388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105748d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1057588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1057688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois vzip(cond, dt, rd, rm); 1057788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1057888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Vzip(DataType dt, QRegister rd, QRegister rm) { Vzip(al, dt, rd, rm); } 1057988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1058088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Yield(Condition cond) { 1058188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(allow_macro_instructions_); 1058288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(OutsideITBlock()); 105838d191abf32edf41421f68f35585e4fce8da4d50cAlexandre Rames MacroEmissionCheckScope guard(this); 1058488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ITScope it_scope(this, &cond); 1058588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois yield(cond); 1058688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1058788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Yield() { Yield(al); } 10588f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vabs(Condition cond, VRegister rd, VRegister rm) { 10589f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10590f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10591f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10592f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vabs(cond, F32, rd.S(), rm.S()); 10593f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10594f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vabs(cond, F64, rd.D(), rm.D()); 10595f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10596f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10597f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vabs(VRegister rd, VRegister rm) { Vabs(al, rd, rm); } 10598f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vadd(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10599f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10600f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10601f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10602f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10603f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vadd(cond, F32, rd.S(), rn.S(), rm.S()); 10604f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10605f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vadd(cond, F64, rd.D(), rn.D(), rm.D()); 10606f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10607f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10608f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vadd(VRegister rd, VRegister rn, VRegister rm) { Vadd(al, rd, rn, rm); } 10609f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vcmp(Condition cond, VRegister rd, VRegister rm) { 10610f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10611f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10612f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10613f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vcmp(cond, F32, rd.S(), rm.S()); 10614f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10615f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vcmp(cond, F64, rd.D(), rm.D()); 10616f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10617f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10618f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vcmp(VRegister rd, VRegister rm) { Vcmp(al, rd, rm); } 10619f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vcmpe(Condition cond, VRegister rd, VRegister rm) { 10620f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10621f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10622f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10623f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vcmpe(cond, F32, rd.S(), rm.S()); 10624f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10625f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vcmpe(cond, F64, rd.D(), rm.D()); 10626f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10627f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10628f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vcmpe(VRegister rd, VRegister rm) { Vcmpe(al, rd, rm); } 10629f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vdiv(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10630f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10631f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10632f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10633f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10634f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vdiv(cond, F32, rd.S(), rn.S(), rm.S()); 10635f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10636f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vdiv(cond, F64, rd.D(), rn.D(), rm.D()); 10637f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10638f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10639f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vdiv(VRegister rd, VRegister rn, VRegister rm) { Vdiv(al, rd, rn, rm); } 10640f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfma(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10641f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10642f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10643f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10644f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10645f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfma(cond, F32, rd.S(), rn.S(), rm.S()); 10646f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10647f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfma(cond, F64, rd.D(), rn.D(), rm.D()); 10648f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10649f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10650f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfma(VRegister rd, VRegister rn, VRegister rm) { Vfma(al, rd, rn, rm); } 10651f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfms(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10652f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10653f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10654f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10655f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10656f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfms(cond, F32, rd.S(), rn.S(), rm.S()); 10657f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10658f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfms(cond, F64, rd.D(), rn.D(), rm.D()); 10659f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10660f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10661f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfms(VRegister rd, VRegister rn, VRegister rm) { Vfms(al, rd, rn, rm); } 10662f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfnma(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10663f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10664f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10665f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10666f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10667f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfnma(cond, F32, rd.S(), rn.S(), rm.S()); 10668f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10669f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfnma(cond, F64, rd.D(), rn.D(), rm.D()); 10670f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10671f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10672f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfnma(VRegister rd, VRegister rn, VRegister rm) { 10673f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfnma(al, rd, rn, rm); 10674f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10675f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfnms(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10676f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10677f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10678f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10679f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10680f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfnms(cond, F32, rd.S(), rn.S(), rm.S()); 10681f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10682f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfnms(cond, F64, rd.D(), rn.D(), rm.D()); 10683f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10684f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10685f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vfnms(VRegister rd, VRegister rn, VRegister rm) { 10686f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vfnms(al, rd, rn, rm); 10687f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10688f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmaxnm(VRegister rd, VRegister rn, VRegister rm) { 10689f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10690f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10691f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10692f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10693f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmaxnm(F32, rd.S(), rn.S(), rm.S()); 10694f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10695f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmaxnm(F64, rd.D(), rn.D(), rm.D()); 10696f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10697f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10698f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vminnm(VRegister rd, VRegister rn, VRegister rm) { 10699f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10700f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10701f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10702f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10703f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vminnm(F32, rd.S(), rn.S(), rm.S()); 10704f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10705f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vminnm(F64, rd.D(), rn.D(), rm.D()); 10706f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10707f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10708f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmla(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10709f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10710f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10711f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10712f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10713f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmla(cond, F32, rd.S(), rn.S(), rm.S()); 10714f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10715f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmla(cond, F64, rd.D(), rn.D(), rm.D()); 10716f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10717f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10718f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmla(VRegister rd, VRegister rn, VRegister rm) { Vmla(al, rd, rn, rm); } 10719f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmls(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10720f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10721f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10722f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10723f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10724f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmls(cond, F32, rd.S(), rn.S(), rm.S()); 10725f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10726f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmls(cond, F64, rd.D(), rn.D(), rm.D()); 10727f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10728f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10729f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmls(VRegister rd, VRegister rn, VRegister rm) { Vmls(al, rd, rn, rm); } 10730f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmov(Condition cond, VRegister rd, VRegister rm) { 10731f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10732f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10733f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10734f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmov(cond, F32, rd.S(), rm.S()); 10735f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10736f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmov(cond, F64, rd.D(), rm.D()); 10737f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10738f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10739f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmov(VRegister rd, VRegister rm) { Vmov(al, rd, rm); } 10740f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmul(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10741f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10742f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10743f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10744f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10745f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmul(cond, F32, rd.S(), rn.S(), rm.S()); 10746f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10747f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vmul(cond, F64, rd.D(), rn.D(), rm.D()); 10748f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10749f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10750f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vmul(VRegister rd, VRegister rn, VRegister rm) { Vmul(al, rd, rn, rm); } 10751f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vneg(Condition cond, VRegister rd, VRegister rm) { 10752f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10753f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10754f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10755f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vneg(cond, F32, rd.S(), rm.S()); 10756f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10757f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vneg(cond, F64, rd.D(), rm.D()); 10758f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10759f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10760f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vneg(VRegister rd, VRegister rm) { Vneg(al, rd, rm); } 10761f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vnmla(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10762f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10763f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10764f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10765f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10766f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmla(cond, F32, rd.S(), rn.S(), rm.S()); 10767f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10768f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmla(cond, F64, rd.D(), rn.D(), rm.D()); 10769f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10770f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10771f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vnmla(VRegister rd, VRegister rn, VRegister rm) { 10772f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmla(al, rd, rn, rm); 10773f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10774f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vnmls(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10775f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10776f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10777f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10778f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10779f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmls(cond, F32, rd.S(), rn.S(), rm.S()); 10780f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10781f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmls(cond, F64, rd.D(), rn.D(), rm.D()); 10782f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10783f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10784f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vnmls(VRegister rd, VRegister rn, VRegister rm) { 10785f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmls(al, rd, rn, rm); 10786f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10787f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vnmul(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10788f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10789f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10790f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10791f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10792f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmul(cond, F32, rd.S(), rn.S(), rm.S()); 10793f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10794f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmul(cond, F64, rd.D(), rn.D(), rm.D()); 10795f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10796f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10797f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vnmul(VRegister rd, VRegister rn, VRegister rm) { 10798f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vnmul(al, rd, rn, rm); 10799f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10800f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vseleq(VRegister rd, VRegister rn, VRegister rm) { 10801f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10802f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10803f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10804f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10805f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vseleq(F32, rd.S(), rn.S(), rm.S()); 10806f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10807f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vseleq(F64, rd.D(), rn.D(), rm.D()); 10808f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10809f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10810f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vselge(VRegister rd, VRegister rn, VRegister rm) { 10811f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10812f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10813f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10814f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10815f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vselge(F32, rd.S(), rn.S(), rm.S()); 10816f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10817f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vselge(F64, rd.D(), rn.D(), rm.D()); 10818f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10819f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10820f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vselgt(VRegister rd, VRegister rn, VRegister rm) { 10821f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10822f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10823f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10824f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10825f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vselgt(F32, rd.S(), rn.S(), rm.S()); 10826f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10827f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vselgt(F64, rd.D(), rn.D(), rm.D()); 10828f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10829f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10830f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vselvs(VRegister rd, VRegister rn, VRegister rm) { 10831f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10832f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10833f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10834f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10835f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vselvs(F32, rd.S(), rn.S(), rm.S()); 10836f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10837f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vselvs(F64, rd.D(), rn.D(), rm.D()); 10838f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10839f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10840f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vsqrt(Condition cond, VRegister rd, VRegister rm) { 10841f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10842f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10843f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10844f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vsqrt(cond, F32, rd.S(), rm.S()); 10845f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10846f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vsqrt(cond, F64, rd.D(), rm.D()); 10847f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10848f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10849f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vsqrt(VRegister rd, VRegister rm) { Vsqrt(al, rd, rm); } 10850f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vsub(Condition cond, VRegister rd, VRegister rn, VRegister rm) { 10851f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.IsS() || rd.IsD()); 10852f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rn.GetType()); 10853f678618ae35a43dab65455f446c3de324994c204Vincent Belliard VIXL_ASSERT(rd.GetType() == rm.GetType()); 10854f678618ae35a43dab65455f446c3de324994c204Vincent Belliard if (rd.IsS()) { 10855f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vsub(cond, F32, rd.S(), rn.S(), rm.S()); 10856f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } else { 10857f678618ae35a43dab65455f446c3de324994c204Vincent Belliard Vsub(cond, F64, rd.D(), rn.D(), rm.D()); 10858f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10859f678618ae35a43dab65455f446c3de324994c204Vincent Belliard } 10860f678618ae35a43dab65455f446c3de324994c204Vincent Belliard void Vsub(VRegister rd, VRegister rn, VRegister rm) { Vsub(al, rd, rn, rm); } 1086188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // End of generated code. 10862d17e348e16bf0d6eca4f9ea0e935c7544098d045Vincent Belliard 108630cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois virtual bool AllowUnpredictable() VIXL_OVERRIDE { 108640cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois VIXL_ABORT_WITH_MSG("Unpredictable instruction.\n"); 108650cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois return false; 108660cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois } 108670cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois virtual bool AllowStronglyDiscouraged() VIXL_OVERRIDE { 108680cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois VIXL_ABORT_WITH_MSG( 108690cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois "ARM strongly recommends to not use this instruction.\n"); 108700cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois return false; 108710cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois } 108720cc43be9ba1881f608a25467b1387927af3b4caaPierre Langlois 1087388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 1087488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois RegisterList available_; 1087588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VRegisterList available_vfp_; 10876e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley UseScratchRegisterScope* current_scratch_scope_; 1087788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois MacroAssemblerContext context_; 1087888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Label::Offset checkpoint_; 1087988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois LiteralPoolManager literal_pool_manager_; 1088088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VeneerPoolManager veneer_pool_manager_; 108811e85b7f2e8ad2bfb233de29405aade635ed207cePierre Langlois bool generate_simulator_code_; 1088288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool allow_macro_instructions_; 1088388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}; 1088488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1088588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// This scope utility allows scratch registers to be managed safely. The 1088688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// MacroAssembler's GetScratchRegisterList() is used as a pool of scratch 1088788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// registers. These registers can be allocated on demand, and will be returned 1088888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// at the end of the scope. 1088988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// 1089088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// When the scope ends, the MacroAssembler's lists will be restored to their 1089188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois// original state, even if the lists were modified by some other means. 10892e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley// 10893e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley// Scopes must nest perfectly. That is, they must be destructed in reverse 10894e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley// construction order. Otherwise, it is not clear how to handle cases where one 10895e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley// scope acquires a register that was included in a now-closing scope. With 10896e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley// perfect nesting, this cannot occur. 1089788c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisclass UseScratchRegisterScope { 1089888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois public: 1089988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // This constructor implicitly calls the `Open` function to initialise the 1090088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // scope, so it is ready to use immediately after it has been constructed. 1090188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois explicit UseScratchRegisterScope(MacroAssembler* masm) 10902e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley : masm_(NULL), parent_(NULL), old_available_(0), old_available_vfp_(0) { 1090388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Open(masm); 1090488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1090588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // This constructor allows deferred and optional initialisation of the scope. 1090688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // The user is required to explicitly call the `Open` function before using 1090788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // the scope. 1090888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois UseScratchRegisterScope() 10909e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley : masm_(NULL), parent_(NULL), old_available_(0), old_available_vfp_(0) {} 1091088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1091188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // This function performs the actual initialisation work. 1091288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Open(MacroAssembler* masm); 1091388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1091488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // The destructor always implicitly calls the `Close` function. 1091588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois ~UseScratchRegisterScope() { Close(); } 1091688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1091788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // This function performs the cleaning-up work. It must succeed even if the 1091888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // scope has not been opened. It is safe to call multiple times. 1091988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Close(); 1092088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1092188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool IsAvailable(const Register& reg) const; 1092288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois bool IsAvailable(const VRegister& reg) const; 1092388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1092488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Take a register from the temp list. It will be returned automatically when 1092588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // the scope ends. 1092688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Register Acquire(); 1092788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VRegister AcquireV(unsigned size_in_bits); 1092888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois QRegister AcquireQ(); 1092988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois DRegister AcquireD(); 1093088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois SRegister AcquireS(); 1093188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1093288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Explicitly release an acquired (or excluded) register, putting it back in 1093388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // the temp list. 1093488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Release(const Register& reg); 1093588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Release(const VRegister& reg); 1093688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1093788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Make the specified registers available as scratch registers for the 1093888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // duration of this scope. 1093988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Include(const RegisterList& list); 1094088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Include(const Register& reg1, 1094188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Register& reg2 = NoReg, 1094288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Register& reg3 = NoReg, 1094388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Register& reg4 = NoReg) { 1094488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Include(RegisterList(reg1, reg2, reg3, reg4)); 1094588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1094688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Include(const VRegisterList& list); 1094788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Include(const VRegister& reg1, 1094888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const VRegister& reg2 = NoVReg, 1094988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const VRegister& reg3 = NoVReg, 1095088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const VRegister& reg4 = NoVReg) { 1095188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Include(VRegisterList(reg1, reg2, reg3, reg4)); 1095288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1095388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1095488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Make sure that the specified registers are not available in this scope. 1095588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // This can be used to prevent helper functions from using sensitive 1095688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // registers, for example. 1095788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Exclude(const RegisterList& list); 1095888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Exclude(const Register& reg1, 1095988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Register& reg2 = NoReg, 1096088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Register& reg3 = NoReg, 1096188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const Register& reg4 = NoReg) { 1096288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Exclude(RegisterList(reg1, reg2, reg3, reg4)); 1096388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1096488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Exclude(const VRegisterList& list); 1096588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void Exclude(const VRegister& reg1, 1096688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const VRegister& reg2 = NoVReg, 1096788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const VRegister& reg3 = NoVReg, 1096888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois const VRegister& reg4 = NoVReg) { 1096988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois Exclude(VRegisterList(reg1, reg2, reg3, reg4)); 1097088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1097188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 109729ee25b5df54608e45947a7f99f2c23ce61802474Jacob Bramley // A convenience helper to exclude any registers used by the operand. 109739ee25b5df54608e45947a7f99f2c23ce61802474Jacob Bramley void Exclude(const Operand& operand); 109749ee25b5df54608e45947a7f99f2c23ce61802474Jacob Bramley 1097588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // Prevent any scratch registers from being used in this scope. 1097688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois void ExcludeAll(); 1097788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1097888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois private: 10979e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley // The MacroAssembler maintains a list of available scratch registers, and 10980e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley // also keeps track of the most recently-opened scope so that on destruction 10981e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley // we can check that scopes do not outlive their parents. 10982e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley MacroAssembler* masm_; 10983e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66Jacob Bramley UseScratchRegisterScope* parent_; 1098488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1098588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois // The state of the available lists at the start of this scope. 1098688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uint32_t old_available_; // kRRegister 1098788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois uint64_t old_available_vfp_; // kVRegister 1098888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1098988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_DEBUG_NO_RETURN UseScratchRegisterScope(const UseScratchRegisterScope&) { 1099088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_UNREACHABLE(); 1099188c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1099288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_DEBUG_NO_RETURN void operator=(const UseScratchRegisterScope&) { 1099388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_UNREACHABLE(); 1099488c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois } 1099588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois}; 1099688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1099788c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 1099888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois} // namespace aarch32 1099988c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois} // namespace vixl 1100088c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois 11001d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#endif // VIXL_AARCH32_MACRO_ASSEMBLER_AARCH32_H_ 11002