113759Sgiacomo.gabrielli@arm.com// Copyright (c) 2018-2019 ARM Limited 213759Sgiacomo.gabrielli@arm.com// All rights reserved 313759Sgiacomo.gabrielli@arm.com// 413759Sgiacomo.gabrielli@arm.com// The license below extends only to copyright in the software and shall 513759Sgiacomo.gabrielli@arm.com// not be construed as granting a license to any other intellectual 613759Sgiacomo.gabrielli@arm.com// property including but not limited to intellectual property relating 713759Sgiacomo.gabrielli@arm.com// to a hardware implementation of the functionality of the software 813759Sgiacomo.gabrielli@arm.com// licensed hereunder. You may use the software subject to the license 913759Sgiacomo.gabrielli@arm.com// terms below provided that you ensure that this notice is replicated 1013759Sgiacomo.gabrielli@arm.com// unmodified and in its entirety in all distributions of the software, 1113759Sgiacomo.gabrielli@arm.com// modified or unmodified, in source code or in binary form. 1213759Sgiacomo.gabrielli@arm.com// 1313759Sgiacomo.gabrielli@arm.com// Redistribution and use in source and binary forms, with or without 1413759Sgiacomo.gabrielli@arm.com// modification, are permitted provided that the following conditions are 1513759Sgiacomo.gabrielli@arm.com// met: redistributions of source code must retain the above copyright 1613759Sgiacomo.gabrielli@arm.com// notice, this list of conditions and the following disclaimer; 1713759Sgiacomo.gabrielli@arm.com// redistributions in binary form must reproduce the above copyright 1813759Sgiacomo.gabrielli@arm.com// notice, this list of conditions and the following disclaimer in the 1913759Sgiacomo.gabrielli@arm.com// documentation and/or other materials provided with the distribution; 2013759Sgiacomo.gabrielli@arm.com// neither the name of the copyright holders nor the names of its 2113759Sgiacomo.gabrielli@arm.com// contributors may be used to endorse or promote products derived from 2213759Sgiacomo.gabrielli@arm.com// this software without specific prior written permission. 2313759Sgiacomo.gabrielli@arm.com// 2413759Sgiacomo.gabrielli@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2513759Sgiacomo.gabrielli@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2613759Sgiacomo.gabrielli@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2713759Sgiacomo.gabrielli@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2813759Sgiacomo.gabrielli@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2913759Sgiacomo.gabrielli@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3013759Sgiacomo.gabrielli@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3113759Sgiacomo.gabrielli@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3213759Sgiacomo.gabrielli@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3313759Sgiacomo.gabrielli@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3413759Sgiacomo.gabrielli@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3513759Sgiacomo.gabrielli@arm.com// 3613759Sgiacomo.gabrielli@arm.com// Authors: Giacomo Gabrielli 3713759Sgiacomo.gabrielli@arm.com 3813759Sgiacomo.gabrielli@arm.comlet {{ 3913759Sgiacomo.gabrielli@arm.com sveEnabledCheckCode = ''' 4013759Sgiacomo.gabrielli@arm.com if (FullSystem) { 4113955Sgiacomo.gabrielli@arm.com fault = this->checkSveEnabled(xc->tcBase(), Cpsr, Cpacr64); 4213759Sgiacomo.gabrielli@arm.com if (fault != NoFault) { 4313759Sgiacomo.gabrielli@arm.com return fault; 4413759Sgiacomo.gabrielli@arm.com } 4513759Sgiacomo.gabrielli@arm.com } 4613759Sgiacomo.gabrielli@arm.com ''' 4713759Sgiacomo.gabrielli@arm.com}}; 4813759Sgiacomo.gabrielli@arm.com 4913759Sgiacomo.gabrielli@arm.comdef template SveWideningUnaryPredOpDeclare {{ 5013759Sgiacomo.gabrielli@arm.comtemplate <class _SElement, class _DElement> 5113759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 5213759Sgiacomo.gabrielli@arm.com{ 5313759Sgiacomo.gabrielli@arm.com protected: 5413759Sgiacomo.gabrielli@arm.com typedef _SElement Element; 5513759Sgiacomo.gabrielli@arm.com typedef _SElement SElement; 5613759Sgiacomo.gabrielli@arm.com typedef _DElement DElement; 5713759Sgiacomo.gabrielli@arm.com typedef _SElement TPSElem; 5813759Sgiacomo.gabrielli@arm.com typedef _DElement TPDElem; 5913759Sgiacomo.gabrielli@arm.com public: 6013759Sgiacomo.gabrielli@arm.com // Constructor 6113759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 6213759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _gp) 6313759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 6413759Sgiacomo.gabrielli@arm.com _dest, _op1, _gp) 6513759Sgiacomo.gabrielli@arm.com { 6613759Sgiacomo.gabrielli@arm.com %(constructor)s; 6713759Sgiacomo.gabrielli@arm.com } 6813759Sgiacomo.gabrielli@arm.com 6913759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 7013759Sgiacomo.gabrielli@arm.com}; 7113759Sgiacomo.gabrielli@arm.com}}; 7213759Sgiacomo.gabrielli@arm.com 7313759Sgiacomo.gabrielli@arm.comdef template SveUnaryPredOpDeclare {{ 7413759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 7513759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 7613759Sgiacomo.gabrielli@arm.com{ 7713759Sgiacomo.gabrielli@arm.com protected: 7813759Sgiacomo.gabrielli@arm.com typedef _Element Element; 7913759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 8013759Sgiacomo.gabrielli@arm.com public: 8113759Sgiacomo.gabrielli@arm.com // Constructor 8213759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 8313759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _gp) 8413759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 8513759Sgiacomo.gabrielli@arm.com _dest, _op1, _gp) 8613759Sgiacomo.gabrielli@arm.com { 8713759Sgiacomo.gabrielli@arm.com %(constructor)s; 8813759Sgiacomo.gabrielli@arm.com } 8913759Sgiacomo.gabrielli@arm.com 9013759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 9113759Sgiacomo.gabrielli@arm.com}; 9213759Sgiacomo.gabrielli@arm.com}}; 9313759Sgiacomo.gabrielli@arm.com 9413759Sgiacomo.gabrielli@arm.comdef template SveUnaryUnpredOpDeclare {{ 9513759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 9613759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 9713759Sgiacomo.gabrielli@arm.com{ 9813759Sgiacomo.gabrielli@arm.com protected: 9913759Sgiacomo.gabrielli@arm.com typedef _Element Element; 10013759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 10113759Sgiacomo.gabrielli@arm.com public: 10213759Sgiacomo.gabrielli@arm.com // Constructor 10313759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 10413759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1) 10513759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 10613759Sgiacomo.gabrielli@arm.com _dest, _op1) 10713759Sgiacomo.gabrielli@arm.com { 10813759Sgiacomo.gabrielli@arm.com %(constructor)s; 10913759Sgiacomo.gabrielli@arm.com } 11013759Sgiacomo.gabrielli@arm.com 11113759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 11213759Sgiacomo.gabrielli@arm.com}; 11313759Sgiacomo.gabrielli@arm.com}}; 11413759Sgiacomo.gabrielli@arm.com 11513759Sgiacomo.gabrielli@arm.comdef template SveShiftAndInsertOpDeclare {{ 11613759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 11713759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 11813759Sgiacomo.gabrielli@arm.com{ 11913759Sgiacomo.gabrielli@arm.com protected: 12013759Sgiacomo.gabrielli@arm.com typedef _Element Element; 12113759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 12213759Sgiacomo.gabrielli@arm.com public: 12313759Sgiacomo.gabrielli@arm.com // Constructor 12413759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 12513759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1) 12613759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 12713759Sgiacomo.gabrielli@arm.com _dest, _op1, %(isSimdFp)s) 12813759Sgiacomo.gabrielli@arm.com { 12913759Sgiacomo.gabrielli@arm.com %(constructor)s; 13013759Sgiacomo.gabrielli@arm.com } 13113759Sgiacomo.gabrielli@arm.com 13213759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 13313759Sgiacomo.gabrielli@arm.com}; 13413759Sgiacomo.gabrielli@arm.com}}; 13513759Sgiacomo.gabrielli@arm.com 13613759Sgiacomo.gabrielli@arm.comdef template SveWideImmUnpredOpDeclare {{ 13713759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 13813759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 13913759Sgiacomo.gabrielli@arm.com{ 14013759Sgiacomo.gabrielli@arm.com protected: 14113759Sgiacomo.gabrielli@arm.com typedef _Element Element; 14213759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 14313759Sgiacomo.gabrielli@arm.com public: 14413759Sgiacomo.gabrielli@arm.com // Constructor 14513759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 14613759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, uint64_t _imm) 14713759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 14813759Sgiacomo.gabrielli@arm.com _dest, _imm) 14913759Sgiacomo.gabrielli@arm.com { 15013759Sgiacomo.gabrielli@arm.com %(constructor)s; 15113759Sgiacomo.gabrielli@arm.com } 15213759Sgiacomo.gabrielli@arm.com 15313759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 15413759Sgiacomo.gabrielli@arm.com}; 15513759Sgiacomo.gabrielli@arm.com}}; 15613759Sgiacomo.gabrielli@arm.com 15713759Sgiacomo.gabrielli@arm.comdef template SveWideImmPredOpDeclare {{ 15813759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 15913759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 16013759Sgiacomo.gabrielli@arm.com{ 16113759Sgiacomo.gabrielli@arm.com protected: 16213759Sgiacomo.gabrielli@arm.com typedef _Element Element; 16313759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 16413759Sgiacomo.gabrielli@arm.com public: 16513759Sgiacomo.gabrielli@arm.com // Constructor 16613759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 16713759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, uint64_t _imm, IntRegIndex _gp, 16813759Sgiacomo.gabrielli@arm.com bool _isMerging = true) 16913759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 17013759Sgiacomo.gabrielli@arm.com _dest, _imm, _gp, _isMerging) 17113759Sgiacomo.gabrielli@arm.com { 17213759Sgiacomo.gabrielli@arm.com %(constructor)s; 17313759Sgiacomo.gabrielli@arm.com } 17413759Sgiacomo.gabrielli@arm.com 17513759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 17613759Sgiacomo.gabrielli@arm.com}; 17713759Sgiacomo.gabrielli@arm.com}}; 17813759Sgiacomo.gabrielli@arm.com 17913759Sgiacomo.gabrielli@arm.comdef template SveBinImmUnpredOpDeclare {{ 18013759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 18113759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 18213759Sgiacomo.gabrielli@arm.com{ 18313759Sgiacomo.gabrielli@arm.com protected: 18413759Sgiacomo.gabrielli@arm.com typedef _Element Element; 18513759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 18613759Sgiacomo.gabrielli@arm.com public: 18713759Sgiacomo.gabrielli@arm.com // Constructor 18813759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 18913759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, uint64_t _imm) 19013759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 19113759Sgiacomo.gabrielli@arm.com _dest, _op1, _imm) 19213759Sgiacomo.gabrielli@arm.com { 19313759Sgiacomo.gabrielli@arm.com %(constructor)s; 19413759Sgiacomo.gabrielli@arm.com } 19513759Sgiacomo.gabrielli@arm.com 19613759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 19713759Sgiacomo.gabrielli@arm.com}; 19813759Sgiacomo.gabrielli@arm.com}}; 19913759Sgiacomo.gabrielli@arm.com 20013759Sgiacomo.gabrielli@arm.comdef template SveBinImmPredOpDeclare {{ 20113759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 20213759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 20313759Sgiacomo.gabrielli@arm.com{ 20413759Sgiacomo.gabrielli@arm.com protected: 20513759Sgiacomo.gabrielli@arm.com typedef _Element Element; 20613759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 20713759Sgiacomo.gabrielli@arm.com public: 20813759Sgiacomo.gabrielli@arm.com // Constructor 20913759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 21013759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, uint64_t _imm, IntRegIndex _gp) 21113759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 21213759Sgiacomo.gabrielli@arm.com _dest, _imm, _gp) 21313759Sgiacomo.gabrielli@arm.com { 21413759Sgiacomo.gabrielli@arm.com %(constructor)s; 21513759Sgiacomo.gabrielli@arm.com } 21613759Sgiacomo.gabrielli@arm.com 21713759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 21813759Sgiacomo.gabrielli@arm.com}; 21913759Sgiacomo.gabrielli@arm.com}}; 22013759Sgiacomo.gabrielli@arm.com 22113759Sgiacomo.gabrielli@arm.comdef template SveBinDestrPredOpDeclare {{ 22213759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 22313759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 22413759Sgiacomo.gabrielli@arm.com{ 22513759Sgiacomo.gabrielli@arm.com protected: 22613759Sgiacomo.gabrielli@arm.com typedef _Element Element; 22713759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 22813759Sgiacomo.gabrielli@arm.com public: 22913759Sgiacomo.gabrielli@arm.com // Constructor 23013759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 23113759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op2, IntRegIndex _gp) 23213759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 23313759Sgiacomo.gabrielli@arm.com _dest, _op2, _gp) 23413759Sgiacomo.gabrielli@arm.com { 23513759Sgiacomo.gabrielli@arm.com %(constructor)s; 23613759Sgiacomo.gabrielli@arm.com } 23713759Sgiacomo.gabrielli@arm.com 23813759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 23913759Sgiacomo.gabrielli@arm.com}; 24013759Sgiacomo.gabrielli@arm.com}}; 24113759Sgiacomo.gabrielli@arm.com 24213759Sgiacomo.gabrielli@arm.comdef template SveBinConstrPredOpDeclare {{ 24313759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 24413759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 24513759Sgiacomo.gabrielli@arm.com{ 24613759Sgiacomo.gabrielli@arm.com protected: 24713759Sgiacomo.gabrielli@arm.com typedef _Element Element; 24813759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 24913759Sgiacomo.gabrielli@arm.com public: 25013759Sgiacomo.gabrielli@arm.com // Constructor 25113759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 25213759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 25313759Sgiacomo.gabrielli@arm.com IntRegIndex _gp, SvePredType _predType) 25413759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 25513759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _gp, _predType) 25613759Sgiacomo.gabrielli@arm.com { 25713759Sgiacomo.gabrielli@arm.com %(constructor)s; 25813759Sgiacomo.gabrielli@arm.com } 25913759Sgiacomo.gabrielli@arm.com 26013759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 26113759Sgiacomo.gabrielli@arm.com}; 26213759Sgiacomo.gabrielli@arm.com}}; 26313759Sgiacomo.gabrielli@arm.com 26413759Sgiacomo.gabrielli@arm.comdef template SveBinUnpredOpDeclare {{ 26513759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 26613759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 26713759Sgiacomo.gabrielli@arm.com{ 26813759Sgiacomo.gabrielli@arm.com protected: 26913759Sgiacomo.gabrielli@arm.com typedef _Element Element; 27013759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 27113759Sgiacomo.gabrielli@arm.com public: 27213759Sgiacomo.gabrielli@arm.com // Constructor 27313759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 27413759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2) 27513759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 27613759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2) 27713759Sgiacomo.gabrielli@arm.com { 27813759Sgiacomo.gabrielli@arm.com %(constructor)s; 27913759Sgiacomo.gabrielli@arm.com } 28013759Sgiacomo.gabrielli@arm.com 28113759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 28213759Sgiacomo.gabrielli@arm.com}; 28313759Sgiacomo.gabrielli@arm.com}}; 28413759Sgiacomo.gabrielli@arm.com 28513759Sgiacomo.gabrielli@arm.comdef template SveBinIdxUnpredOpDeclare {{ 28613759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 28713759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 28813759Sgiacomo.gabrielli@arm.com{ 28913759Sgiacomo.gabrielli@arm.com protected: 29013759Sgiacomo.gabrielli@arm.com typedef _Element Element; 29113759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 29213759Sgiacomo.gabrielli@arm.com public: 29313759Sgiacomo.gabrielli@arm.com // Constructor 29413759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 29513759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 29613759Sgiacomo.gabrielli@arm.com uint8_t _index) 29713759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 29813759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _index) 29913759Sgiacomo.gabrielli@arm.com { 30013759Sgiacomo.gabrielli@arm.com %(constructor)s; 30113759Sgiacomo.gabrielli@arm.com } 30213759Sgiacomo.gabrielli@arm.com 30313759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 30413759Sgiacomo.gabrielli@arm.com}; 30513759Sgiacomo.gabrielli@arm.com}}; 30613759Sgiacomo.gabrielli@arm.com 30713759Sgiacomo.gabrielli@arm.comdef template SvePredLogicalOpDeclare {{ 30813759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 30913759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 31013759Sgiacomo.gabrielli@arm.com{ 31113759Sgiacomo.gabrielli@arm.com protected: 31213759Sgiacomo.gabrielli@arm.com typedef _Element Element; 31313759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 31413759Sgiacomo.gabrielli@arm.com public: 31513759Sgiacomo.gabrielli@arm.com // Constructor 31613759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 31713759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 31813759Sgiacomo.gabrielli@arm.com IntRegIndex _gp, bool _isSel = false) 31913759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 32013759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _gp, _isSel) 32113759Sgiacomo.gabrielli@arm.com { 32213759Sgiacomo.gabrielli@arm.com %(constructor)s; 32313759Sgiacomo.gabrielli@arm.com } 32413759Sgiacomo.gabrielli@arm.com 32513759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 32613759Sgiacomo.gabrielli@arm.com}; 32713759Sgiacomo.gabrielli@arm.com}}; 32813759Sgiacomo.gabrielli@arm.com 32913759Sgiacomo.gabrielli@arm.comdef template SveCmpOpDeclare {{ 33013759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 33113759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 33213759Sgiacomo.gabrielli@arm.com{ 33313759Sgiacomo.gabrielli@arm.com protected: 33413759Sgiacomo.gabrielli@arm.com typedef _Element Element; 33513759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 33613759Sgiacomo.gabrielli@arm.com public: 33713759Sgiacomo.gabrielli@arm.com // Constructor 33813759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 33913759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 34013759Sgiacomo.gabrielli@arm.com IntRegIndex _gp) 34113759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 34213759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _gp) 34313759Sgiacomo.gabrielli@arm.com { 34413759Sgiacomo.gabrielli@arm.com %(constructor)s; 34513759Sgiacomo.gabrielli@arm.com } 34613759Sgiacomo.gabrielli@arm.com 34713759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 34813759Sgiacomo.gabrielli@arm.com}; 34913759Sgiacomo.gabrielli@arm.com}}; 35013759Sgiacomo.gabrielli@arm.com 35113759Sgiacomo.gabrielli@arm.comdef template SveIntCmpOpDeclare {{ 35213759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 35313759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 35413759Sgiacomo.gabrielli@arm.com{ 35513759Sgiacomo.gabrielli@arm.com protected: 35613759Sgiacomo.gabrielli@arm.com typedef _Element Element; 35713759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 35813759Sgiacomo.gabrielli@arm.com public: 35913759Sgiacomo.gabrielli@arm.com // Constructor 36013759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 36113759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 36213759Sgiacomo.gabrielli@arm.com IntRegIndex _gp) 36313759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 36413759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _gp, %(op2IsWide)s) 36513759Sgiacomo.gabrielli@arm.com { 36613759Sgiacomo.gabrielli@arm.com %(constructor)s; 36713759Sgiacomo.gabrielli@arm.com } 36813759Sgiacomo.gabrielli@arm.com 36913759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 37013759Sgiacomo.gabrielli@arm.com}; 37113759Sgiacomo.gabrielli@arm.com}}; 37213759Sgiacomo.gabrielli@arm.com 37313759Sgiacomo.gabrielli@arm.comdef template SveCmpImmOpDeclare {{ 37413759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 37513759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 37613759Sgiacomo.gabrielli@arm.com{ 37713759Sgiacomo.gabrielli@arm.com protected: 37813759Sgiacomo.gabrielli@arm.com typedef _Element Element; 37913759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 38013759Sgiacomo.gabrielli@arm.com public: 38113759Sgiacomo.gabrielli@arm.com // Constructor 38213759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 38313759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, uint64_t _imm, 38413759Sgiacomo.gabrielli@arm.com IntRegIndex _gp) 38513759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 38613759Sgiacomo.gabrielli@arm.com _dest, _op1, _imm, _gp) 38713759Sgiacomo.gabrielli@arm.com { 38813759Sgiacomo.gabrielli@arm.com %(constructor)s; 38913759Sgiacomo.gabrielli@arm.com } 39013759Sgiacomo.gabrielli@arm.com 39113759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 39213759Sgiacomo.gabrielli@arm.com}; 39313759Sgiacomo.gabrielli@arm.com}}; 39413759Sgiacomo.gabrielli@arm.com 39513759Sgiacomo.gabrielli@arm.comdef template SveTerPredOpDeclare {{ 39613759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 39713759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 39813759Sgiacomo.gabrielli@arm.com{ 39913759Sgiacomo.gabrielli@arm.com protected: 40013759Sgiacomo.gabrielli@arm.com typedef _Element Element; 40113759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 40213759Sgiacomo.gabrielli@arm.com public: 40313759Sgiacomo.gabrielli@arm.com // Constructor 40413759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 40513759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 40613759Sgiacomo.gabrielli@arm.com IntRegIndex _gp) 40713759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 40813759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _gp) 40913759Sgiacomo.gabrielli@arm.com { 41013759Sgiacomo.gabrielli@arm.com %(constructor)s; 41113759Sgiacomo.gabrielli@arm.com } 41213759Sgiacomo.gabrielli@arm.com 41313759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 41413759Sgiacomo.gabrielli@arm.com}; 41513759Sgiacomo.gabrielli@arm.com}}; 41613759Sgiacomo.gabrielli@arm.com 41713759Sgiacomo.gabrielli@arm.comdef template SveTerImmUnpredOpDeclare {{ 41813759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 41913759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 42013759Sgiacomo.gabrielli@arm.com{ 42113759Sgiacomo.gabrielli@arm.com protected: 42213759Sgiacomo.gabrielli@arm.com typedef _Element Element; 42313759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 42413759Sgiacomo.gabrielli@arm.com public: 42513759Sgiacomo.gabrielli@arm.com // Constructor 42613759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 42713759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, uint64_t _imm) 42813759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 42913759Sgiacomo.gabrielli@arm.com _dest, _op1, _imm) 43013759Sgiacomo.gabrielli@arm.com { 43113759Sgiacomo.gabrielli@arm.com %(constructor)s; 43213759Sgiacomo.gabrielli@arm.com } 43313759Sgiacomo.gabrielli@arm.com 43413759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 43513759Sgiacomo.gabrielli@arm.com}; 43613759Sgiacomo.gabrielli@arm.com}}; 43713759Sgiacomo.gabrielli@arm.com 43813759Sgiacomo.gabrielli@arm.comdef template SveReducOpDeclare {{ 43913759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 44013759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 44113759Sgiacomo.gabrielli@arm.com{ 44213759Sgiacomo.gabrielli@arm.com protected: 44313759Sgiacomo.gabrielli@arm.com typedef _Element Element; 44413759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 44513759Sgiacomo.gabrielli@arm.com public: 44613759Sgiacomo.gabrielli@arm.com // Constructor 44713759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 44813759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _gp) 44913759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 45013759Sgiacomo.gabrielli@arm.com _dest, _op1, _gp) 45113759Sgiacomo.gabrielli@arm.com { 45213759Sgiacomo.gabrielli@arm.com %(constructor)s; 45313759Sgiacomo.gabrielli@arm.com } 45413759Sgiacomo.gabrielli@arm.com 45513759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 45613759Sgiacomo.gabrielli@arm.com}; 45713759Sgiacomo.gabrielli@arm.com}}; 45813759Sgiacomo.gabrielli@arm.com 45913759Sgiacomo.gabrielli@arm.comdef template SveWideningReducOpDeclare {{ 46013759Sgiacomo.gabrielli@arm.comtemplate <class _SElement, class _DElement> 46113759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 46213759Sgiacomo.gabrielli@arm.com{ 46313759Sgiacomo.gabrielli@arm.com protected: 46413759Sgiacomo.gabrielli@arm.com typedef _SElement Element; 46513759Sgiacomo.gabrielli@arm.com typedef _SElement SElement; 46613759Sgiacomo.gabrielli@arm.com typedef _DElement DElement; 46713759Sgiacomo.gabrielli@arm.com typedef _SElement TPSElem; 46813759Sgiacomo.gabrielli@arm.com typedef _DElement TPDElem; 46913759Sgiacomo.gabrielli@arm.com 47013759Sgiacomo.gabrielli@arm.com public: 47113759Sgiacomo.gabrielli@arm.com // Constructor 47213759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 47313759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _gp) 47413759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 47513759Sgiacomo.gabrielli@arm.com _dest, _op1, _gp) 47613759Sgiacomo.gabrielli@arm.com { 47713759Sgiacomo.gabrielli@arm.com %(constructor)s; 47813759Sgiacomo.gabrielli@arm.com } 47913759Sgiacomo.gabrielli@arm.com 48013759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 48113759Sgiacomo.gabrielli@arm.com}; 48213759Sgiacomo.gabrielli@arm.com}}; 48313759Sgiacomo.gabrielli@arm.com 48413759Sgiacomo.gabrielli@arm.comdef template SveIndexIIOpDeclare {{ 48513759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 48613759Sgiacomo.gabrielli@arm.comclass SveIndexII : public SveIndexIIOp 48713759Sgiacomo.gabrielli@arm.com{ 48813759Sgiacomo.gabrielli@arm.com protected: 48913759Sgiacomo.gabrielli@arm.com typedef _Element Element; 49013759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 49113759Sgiacomo.gabrielli@arm.com public: 49213759Sgiacomo.gabrielli@arm.com // Constructor 49313759Sgiacomo.gabrielli@arm.com SveIndexII(ExtMachInst machInst, 49413759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, int8_t _imm1, int8_t _imm2) 49513759Sgiacomo.gabrielli@arm.com : SveIndexIIOp("%(mnemonic)s", machInst, %(op_class)s, 49613759Sgiacomo.gabrielli@arm.com _dest, _imm1, _imm2) 49713759Sgiacomo.gabrielli@arm.com { 49813759Sgiacomo.gabrielli@arm.com %(constructor)s; 49913759Sgiacomo.gabrielli@arm.com } 50013759Sgiacomo.gabrielli@arm.com 50113759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 50213759Sgiacomo.gabrielli@arm.com}; 50313759Sgiacomo.gabrielli@arm.com}}; 50413759Sgiacomo.gabrielli@arm.com 50513759Sgiacomo.gabrielli@arm.comdef template SveIndexIROpDeclare {{ 50613759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 50713759Sgiacomo.gabrielli@arm.comclass SveIndexIR : public SveIndexIROp 50813759Sgiacomo.gabrielli@arm.com{ 50913759Sgiacomo.gabrielli@arm.com protected: 51013759Sgiacomo.gabrielli@arm.com typedef _Element Element; 51113759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 51213759Sgiacomo.gabrielli@arm.com public: 51313759Sgiacomo.gabrielli@arm.com // Constructor 51413759Sgiacomo.gabrielli@arm.com SveIndexIR(ExtMachInst machInst, 51513759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, int8_t _imm, IntRegIndex _op) 51613759Sgiacomo.gabrielli@arm.com : SveIndexIROp("%(mnemonic)s", machInst, %(op_class)s, 51713759Sgiacomo.gabrielli@arm.com _dest, _imm, _op) 51813759Sgiacomo.gabrielli@arm.com { 51913759Sgiacomo.gabrielli@arm.com %(constructor)s; 52013759Sgiacomo.gabrielli@arm.com } 52113759Sgiacomo.gabrielli@arm.com 52213759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 52313759Sgiacomo.gabrielli@arm.com}; 52413759Sgiacomo.gabrielli@arm.com}}; 52513759Sgiacomo.gabrielli@arm.com 52613759Sgiacomo.gabrielli@arm.comdef template SveIndexRIOpDeclare {{ 52713759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 52813759Sgiacomo.gabrielli@arm.comclass SveIndexRI : public SveIndexRIOp 52913759Sgiacomo.gabrielli@arm.com{ 53013759Sgiacomo.gabrielli@arm.com protected: 53113759Sgiacomo.gabrielli@arm.com typedef _Element Element; 53213759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 53313759Sgiacomo.gabrielli@arm.com public: 53413759Sgiacomo.gabrielli@arm.com // Constructor 53513759Sgiacomo.gabrielli@arm.com SveIndexRI(ExtMachInst machInst, 53613759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op, int8_t _imm) 53713759Sgiacomo.gabrielli@arm.com : SveIndexRIOp("%(mnemonic)s", machInst, %(op_class)s, 53813759Sgiacomo.gabrielli@arm.com _dest, _op, _imm) 53913759Sgiacomo.gabrielli@arm.com { 54013759Sgiacomo.gabrielli@arm.com %(constructor)s; 54113759Sgiacomo.gabrielli@arm.com } 54213759Sgiacomo.gabrielli@arm.com 54313759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 54413759Sgiacomo.gabrielli@arm.com}; 54513759Sgiacomo.gabrielli@arm.com}}; 54613759Sgiacomo.gabrielli@arm.com 54713759Sgiacomo.gabrielli@arm.comdef template SveIndexRROpDeclare {{ 54813759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 54913759Sgiacomo.gabrielli@arm.comclass SveIndexRR : public SveIndexRROp 55013759Sgiacomo.gabrielli@arm.com{ 55113759Sgiacomo.gabrielli@arm.com protected: 55213759Sgiacomo.gabrielli@arm.com typedef _Element Element; 55313759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 55413759Sgiacomo.gabrielli@arm.com public: 55513759Sgiacomo.gabrielli@arm.com // Constructor 55613759Sgiacomo.gabrielli@arm.com SveIndexRR(ExtMachInst machInst, 55713759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2) 55813759Sgiacomo.gabrielli@arm.com : SveIndexRROp("%(mnemonic)s", machInst, %(op_class)s, 55913759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2) 56013759Sgiacomo.gabrielli@arm.com { 56113759Sgiacomo.gabrielli@arm.com %(constructor)s; 56213759Sgiacomo.gabrielli@arm.com } 56313759Sgiacomo.gabrielli@arm.com 56413759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 56513759Sgiacomo.gabrielli@arm.com}; 56613759Sgiacomo.gabrielli@arm.com}}; 56713759Sgiacomo.gabrielli@arm.com 56813759Sgiacomo.gabrielli@arm.comdef template SvePredCountOpDeclare {{ 56913759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 57013759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 57113759Sgiacomo.gabrielli@arm.com{ 57213759Sgiacomo.gabrielli@arm.com protected: 57313759Sgiacomo.gabrielli@arm.com typedef _Element Element; 57413759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 57513759Sgiacomo.gabrielli@arm.com public: 57613759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, 57713759Sgiacomo.gabrielli@arm.com IntRegIndex _op1) 57813759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 57913759Sgiacomo.gabrielli@arm.com _dest, _op1, %(srcIs32b)s, %(destIsVec)s) 58013759Sgiacomo.gabrielli@arm.com { 58113759Sgiacomo.gabrielli@arm.com %(constructor)s; 58213759Sgiacomo.gabrielli@arm.com } 58313759Sgiacomo.gabrielli@arm.com 58413759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 58513759Sgiacomo.gabrielli@arm.com}; 58613759Sgiacomo.gabrielli@arm.com}}; 58713759Sgiacomo.gabrielli@arm.com 58813759Sgiacomo.gabrielli@arm.comdef template SvePredCountPredOpDeclare {{ 58913759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 59013759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 59113759Sgiacomo.gabrielli@arm.com{ 59213759Sgiacomo.gabrielli@arm.com protected: 59313759Sgiacomo.gabrielli@arm.com typedef _Element Element; 59413759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 59513759Sgiacomo.gabrielli@arm.com public: 59613759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, 59713759Sgiacomo.gabrielli@arm.com IntRegIndex _op1, IntRegIndex _gp) 59813759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 59913759Sgiacomo.gabrielli@arm.com _dest, _op1, _gp) 60013759Sgiacomo.gabrielli@arm.com { 60113759Sgiacomo.gabrielli@arm.com %(constructor)s; 60213759Sgiacomo.gabrielli@arm.com } 60313759Sgiacomo.gabrielli@arm.com 60413759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 60513759Sgiacomo.gabrielli@arm.com}; 60613759Sgiacomo.gabrielli@arm.com 60713759Sgiacomo.gabrielli@arm.com}}; 60813759Sgiacomo.gabrielli@arm.com 60913759Sgiacomo.gabrielli@arm.comdef template SvePtrueOpDeclare {{ 61013759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 61113759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 61213759Sgiacomo.gabrielli@arm.com{ 61313759Sgiacomo.gabrielli@arm.com protected: 61413759Sgiacomo.gabrielli@arm.com typedef _Element Element; 61513759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 61613759Sgiacomo.gabrielli@arm.com public: 61713759Sgiacomo.gabrielli@arm.com // Constructor 61813759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 61913759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, uint8_t _imm) 62013759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 62113759Sgiacomo.gabrielli@arm.com _dest, _imm) 62213759Sgiacomo.gabrielli@arm.com { 62313759Sgiacomo.gabrielli@arm.com %(constructor)s; 62413759Sgiacomo.gabrielli@arm.com } 62513759Sgiacomo.gabrielli@arm.com 62613759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 62713759Sgiacomo.gabrielli@arm.com}; 62813759Sgiacomo.gabrielli@arm.com}}; 62913759Sgiacomo.gabrielli@arm.com 63013759Sgiacomo.gabrielli@arm.comdef template SveAdrOpDeclare {{ 63113759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 63213759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 63313759Sgiacomo.gabrielli@arm.com{ 63413759Sgiacomo.gabrielli@arm.com protected: 63513759Sgiacomo.gabrielli@arm.com typedef _Element Element; 63613759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 63713759Sgiacomo.gabrielli@arm.com public: 63813759Sgiacomo.gabrielli@arm.com // Constructor 63913759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 64013759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _base, IntRegIndex _offset, 64113759Sgiacomo.gabrielli@arm.com uint8_t _mult, SveAdrOffsetFormat _offsetFormat) 64213759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 64313759Sgiacomo.gabrielli@arm.com _dest, _base, _offset, _mult, _offsetFormat) 64413759Sgiacomo.gabrielli@arm.com { 64513759Sgiacomo.gabrielli@arm.com %(constructor)s; 64613759Sgiacomo.gabrielli@arm.com } 64713759Sgiacomo.gabrielli@arm.com 64813759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 64913759Sgiacomo.gabrielli@arm.com}; 65013759Sgiacomo.gabrielli@arm.com}}; 65113759Sgiacomo.gabrielli@arm.com 65213759Sgiacomo.gabrielli@arm.comdef template SveWhileOpDeclare {{ 65313759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 65413759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 65513759Sgiacomo.gabrielli@arm.com{ 65613759Sgiacomo.gabrielli@arm.com protected: 65713759Sgiacomo.gabrielli@arm.com typedef _Element Element; 65813759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 65913759Sgiacomo.gabrielli@arm.com public: 66013759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, 66113759Sgiacomo.gabrielli@arm.com IntRegIndex _op1, IntRegIndex _op2) 66213759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 66313759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, %(srcIs32b)s) 66413759Sgiacomo.gabrielli@arm.com { 66513759Sgiacomo.gabrielli@arm.com %(constructor)s; 66613759Sgiacomo.gabrielli@arm.com } 66713759Sgiacomo.gabrielli@arm.com 66813759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 66913759Sgiacomo.gabrielli@arm.com}; 67013759Sgiacomo.gabrielli@arm.com}}; 67113759Sgiacomo.gabrielli@arm.com 67213759Sgiacomo.gabrielli@arm.comdef template SveCompTermOpDeclare {{ 67313759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 67413759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 67513759Sgiacomo.gabrielli@arm.com{ 67613759Sgiacomo.gabrielli@arm.com protected: 67713759Sgiacomo.gabrielli@arm.com typedef _Element Element; 67813759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 67913759Sgiacomo.gabrielli@arm.com public: 68013759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, IntRegIndex _op2) 68113759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, _op2) 68213759Sgiacomo.gabrielli@arm.com { 68313759Sgiacomo.gabrielli@arm.com %(constructor)s; 68413759Sgiacomo.gabrielli@arm.com } 68513759Sgiacomo.gabrielli@arm.com 68613759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 68713759Sgiacomo.gabrielli@arm.com}; 68813759Sgiacomo.gabrielli@arm.com}}; 68913759Sgiacomo.gabrielli@arm.com 69013759Sgiacomo.gabrielli@arm.comdef template SveIntCmpImmOpDeclare {{ 69113759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 69213759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 69313759Sgiacomo.gabrielli@arm.com{ 69413759Sgiacomo.gabrielli@arm.com protected: 69513759Sgiacomo.gabrielli@arm.com typedef _Element Element; 69613759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 69713759Sgiacomo.gabrielli@arm.com public: 69813759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, IntRegIndex _op1, 69913759Sgiacomo.gabrielli@arm.com int64_t _op2, IntRegIndex _gp) 70013759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1, 70113759Sgiacomo.gabrielli@arm.com _op2, _gp) 70213759Sgiacomo.gabrielli@arm.com { 70313759Sgiacomo.gabrielli@arm.com %(constructor)s; 70413759Sgiacomo.gabrielli@arm.com } 70513759Sgiacomo.gabrielli@arm.com 70613759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 70713759Sgiacomo.gabrielli@arm.com}; 70813759Sgiacomo.gabrielli@arm.com}}; 70913759Sgiacomo.gabrielli@arm.com 71013759Sgiacomo.gabrielli@arm.comdef template SveElemCountOpDeclare {{ 71113759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 71213759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 71313759Sgiacomo.gabrielli@arm.com{ 71413759Sgiacomo.gabrielli@arm.com protected: 71513759Sgiacomo.gabrielli@arm.com typedef _Element Element; 71613759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 71713759Sgiacomo.gabrielli@arm.com public: 71813759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, 71913759Sgiacomo.gabrielli@arm.com uint8_t _pattern, uint8_t _imm) 72013759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, 72113759Sgiacomo.gabrielli@arm.com _pattern, _imm, %(dstIsVec)s, %(dstIs32b)s) 72213759Sgiacomo.gabrielli@arm.com { 72313759Sgiacomo.gabrielli@arm.com %(constructor)s; 72413759Sgiacomo.gabrielli@arm.com esize = sizeof(Element); 72513759Sgiacomo.gabrielli@arm.com } 72613759Sgiacomo.gabrielli@arm.com 72713759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 72813759Sgiacomo.gabrielli@arm.com}; 72913759Sgiacomo.gabrielli@arm.com}}; 73013759Sgiacomo.gabrielli@arm.com 73113759Sgiacomo.gabrielli@arm.comdef template SvePartBrkOpDeclare {{ 73213759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 73313759Sgiacomo.gabrielli@arm.com{ 73413759Sgiacomo.gabrielli@arm.com public: 73513759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, IntRegIndex _gp, 73613759Sgiacomo.gabrielli@arm.com IntRegIndex _op1) 73713759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, 73813759Sgiacomo.gabrielli@arm.com _gp, _op1, %(isMerging)s) 73913759Sgiacomo.gabrielli@arm.com { 74013759Sgiacomo.gabrielli@arm.com %(constructor)s; 74113759Sgiacomo.gabrielli@arm.com } 74213759Sgiacomo.gabrielli@arm.com 74313759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 74413759Sgiacomo.gabrielli@arm.com}; 74513759Sgiacomo.gabrielli@arm.com}}; 74613759Sgiacomo.gabrielli@arm.com 74713759Sgiacomo.gabrielli@arm.comdef template SvePartBrkPropOpDeclare {{ 74813759Sgiacomo.gabrielli@arm.com// XXX: Might be done with SveTerPredOpDeclare and 74913759Sgiacomo.gabrielli@arm.com// instantiating with uint8_t 75013759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 75113759Sgiacomo.gabrielli@arm.com{ 75213759Sgiacomo.gabrielli@arm.com public: 75313759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, 75413759Sgiacomo.gabrielli@arm.com IntRegIndex _op1, IntRegIndex _op2, IntRegIndex _gp) 75513759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, 75613759Sgiacomo.gabrielli@arm.com _op1, _op2, _gp) 75713759Sgiacomo.gabrielli@arm.com { 75813759Sgiacomo.gabrielli@arm.com %(constructor)s; 75913759Sgiacomo.gabrielli@arm.com } 76013759Sgiacomo.gabrielli@arm.com 76113759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 76213759Sgiacomo.gabrielli@arm.com}; 76313759Sgiacomo.gabrielli@arm.com}}; 76413759Sgiacomo.gabrielli@arm.com 76513759Sgiacomo.gabrielli@arm.comdef template SveSelectOpDeclare {{ 76613759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 76713759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 76813759Sgiacomo.gabrielli@arm.com{ 76913759Sgiacomo.gabrielli@arm.com protected: 77013759Sgiacomo.gabrielli@arm.com typedef _Element Element; 77113759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 77213759Sgiacomo.gabrielli@arm.com public: 77313759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, 77413759Sgiacomo.gabrielli@arm.com IntRegIndex _op1, IntRegIndex _gp) 77513759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, 77613759Sgiacomo.gabrielli@arm.com _op1, _gp, %(isCond)s, %(isScalar)s, %(isSimdFp)s) 77713759Sgiacomo.gabrielli@arm.com { 77813759Sgiacomo.gabrielli@arm.com %(constructor)s; 77913759Sgiacomo.gabrielli@arm.com scalar_width = (sizeof(Element) == 8) ? 64 : 32; 78013759Sgiacomo.gabrielli@arm.com } 78113759Sgiacomo.gabrielli@arm.com 78213759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 78313759Sgiacomo.gabrielli@arm.com}; 78413759Sgiacomo.gabrielli@arm.com}}; 78513759Sgiacomo.gabrielli@arm.com 78613759Sgiacomo.gabrielli@arm.comdef template SveUnpackOpDeclare {{ 78713759Sgiacomo.gabrielli@arm.comtemplate <class _SElement, class _DElement> 78813759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 78913759Sgiacomo.gabrielli@arm.com{ 79013759Sgiacomo.gabrielli@arm.com protected: 79113759Sgiacomo.gabrielli@arm.com typedef _SElement Element; 79213759Sgiacomo.gabrielli@arm.com typedef _SElement SElement; 79313759Sgiacomo.gabrielli@arm.com typedef _DElement DElement; 79413759Sgiacomo.gabrielli@arm.com typedef _SElement TPSElem; 79513759Sgiacomo.gabrielli@arm.com typedef _DElement TPDElem; 79613759Sgiacomo.gabrielli@arm.com public: 79713759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 79813759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1) 79913759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 80013759Sgiacomo.gabrielli@arm.com _dest, _op1) 80113759Sgiacomo.gabrielli@arm.com { 80213759Sgiacomo.gabrielli@arm.com %(constructor)s; 80313759Sgiacomo.gabrielli@arm.com } 80413759Sgiacomo.gabrielli@arm.com 80513759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 80613759Sgiacomo.gabrielli@arm.com}; 80713759Sgiacomo.gabrielli@arm.com}}; 80813759Sgiacomo.gabrielli@arm.com 80913759Sgiacomo.gabrielli@arm.comdef template SvePredicateTestOpDeclare {{ 81013759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 81113759Sgiacomo.gabrielli@arm.com{ 81213759Sgiacomo.gabrielli@arm.com public: 81313759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, IntRegIndex _gp) 81413759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, _gp) 81513759Sgiacomo.gabrielli@arm.com { 81613759Sgiacomo.gabrielli@arm.com %(constructor)s; 81713759Sgiacomo.gabrielli@arm.com } 81813759Sgiacomo.gabrielli@arm.com 81913759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 82013759Sgiacomo.gabrielli@arm.com}; 82113759Sgiacomo.gabrielli@arm.com}}; 82213759Sgiacomo.gabrielli@arm.com 82313759Sgiacomo.gabrielli@arm.comdef template SvePredUnaryOpWImplicitSrcDeclare {{ 82413759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 82513759Sgiacomo.gabrielli@arm.com{ 82613759Sgiacomo.gabrielli@arm.com public: 82713759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest) 82813759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest) 82913759Sgiacomo.gabrielli@arm.com { 83013759Sgiacomo.gabrielli@arm.com %(constructor)s; 83113759Sgiacomo.gabrielli@arm.com } 83213759Sgiacomo.gabrielli@arm.com 83313759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 83413759Sgiacomo.gabrielli@arm.com}; 83513759Sgiacomo.gabrielli@arm.com}}; 83613759Sgiacomo.gabrielli@arm.com 83713759Sgiacomo.gabrielli@arm.comdef template SvePredUnaryPredOpWImplicitSrcDeclare {{ 83813759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 83913759Sgiacomo.gabrielli@arm.com{ 84013759Sgiacomo.gabrielli@arm.com public: 84113759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, IntRegIndex _gp) 84213759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _gp) 84313759Sgiacomo.gabrielli@arm.com { 84413759Sgiacomo.gabrielli@arm.com %(constructor)s; 84513759Sgiacomo.gabrielli@arm.com } 84613759Sgiacomo.gabrielli@arm.com 84713759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 84813759Sgiacomo.gabrielli@arm.com}; 84913759Sgiacomo.gabrielli@arm.com}}; 85013759Sgiacomo.gabrielli@arm.com 85113759Sgiacomo.gabrielli@arm.comdef template SvePredUnaryOpWImplicitDstDeclare {{ 85213759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 85313759Sgiacomo.gabrielli@arm.com{ 85413759Sgiacomo.gabrielli@arm.com public: 85513759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, IntRegIndex _op1) 85613759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1) 85713759Sgiacomo.gabrielli@arm.com { 85813759Sgiacomo.gabrielli@arm.com %(constructor)s; 85913759Sgiacomo.gabrielli@arm.com } 86013759Sgiacomo.gabrielli@arm.com 86113759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 86213759Sgiacomo.gabrielli@arm.com}; 86313759Sgiacomo.gabrielli@arm.com}}; 86413759Sgiacomo.gabrielli@arm.com 86513759Sgiacomo.gabrielli@arm.comdef template SveOpWImplicitSrcDstDeclare {{ 86613759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 86713759Sgiacomo.gabrielli@arm.com{ 86813759Sgiacomo.gabrielli@arm.com public: 86913759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst) 87013759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s) 87113759Sgiacomo.gabrielli@arm.com { 87213759Sgiacomo.gabrielli@arm.com %(constructor)s; 87313759Sgiacomo.gabrielli@arm.com } 87413759Sgiacomo.gabrielli@arm.com 87513759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 87613759Sgiacomo.gabrielli@arm.com}; 87713759Sgiacomo.gabrielli@arm.com}}; 87813759Sgiacomo.gabrielli@arm.com 87913759Sgiacomo.gabrielli@arm.comdef template SveWideningTerImmOpDeclare {{ 88013759Sgiacomo.gabrielli@arm.comtemplate <class _SElement, class _DElement> 88113759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 88213759Sgiacomo.gabrielli@arm.com{ 88313759Sgiacomo.gabrielli@arm.com protected: 88413759Sgiacomo.gabrielli@arm.com typedef _DElement Element; 88513759Sgiacomo.gabrielli@arm.com typedef _SElement SElement; 88613759Sgiacomo.gabrielli@arm.com typedef _DElement DElement; 88713759Sgiacomo.gabrielli@arm.com typedef _SElement TPSElem; 88813759Sgiacomo.gabrielli@arm.com typedef _DElement TPDElem; 88913759Sgiacomo.gabrielli@arm.com 89013759Sgiacomo.gabrielli@arm.com public: 89113759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 89213759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 89313759Sgiacomo.gabrielli@arm.com uint64_t _imm) 89413759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 89513759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _imm) 89613759Sgiacomo.gabrielli@arm.com { 89713759Sgiacomo.gabrielli@arm.com %(constructor)s; 89813759Sgiacomo.gabrielli@arm.com esize = sizeof(Element); 89913759Sgiacomo.gabrielli@arm.com } 90013759Sgiacomo.gabrielli@arm.com 90113759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 90213759Sgiacomo.gabrielli@arm.com}; 90313759Sgiacomo.gabrielli@arm.com}}; 90413759Sgiacomo.gabrielli@arm.com 90513759Sgiacomo.gabrielli@arm.comdef template SveWideningTerOpDeclare {{ 90613759Sgiacomo.gabrielli@arm.comtemplate <class _SElement, class _DElement> 90713759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 90813759Sgiacomo.gabrielli@arm.com{ 90913759Sgiacomo.gabrielli@arm.com protected: 91013759Sgiacomo.gabrielli@arm.com typedef _DElement Element; 91113759Sgiacomo.gabrielli@arm.com typedef _SElement SElement; 91213759Sgiacomo.gabrielli@arm.com typedef _DElement DElement; 91313759Sgiacomo.gabrielli@arm.com typedef _SElement TPSElem; 91413759Sgiacomo.gabrielli@arm.com typedef _DElement TPDElem; 91513759Sgiacomo.gabrielli@arm.com 91613759Sgiacomo.gabrielli@arm.com public: 91713759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 91813759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2) 91913759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 92013759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2) 92113759Sgiacomo.gabrielli@arm.com { 92213759Sgiacomo.gabrielli@arm.com %(constructor)s; 92313759Sgiacomo.gabrielli@arm.com esize = sizeof(Element); 92413759Sgiacomo.gabrielli@arm.com } 92513759Sgiacomo.gabrielli@arm.com 92613759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 92713759Sgiacomo.gabrielli@arm.com}; 92813759Sgiacomo.gabrielli@arm.com}}; 92913759Sgiacomo.gabrielli@arm.com 93013759Sgiacomo.gabrielli@arm.comdef template SveComplexOpDeclare {{ 93113759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 93213759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 93313759Sgiacomo.gabrielli@arm.com{ 93413759Sgiacomo.gabrielli@arm.com protected: 93513759Sgiacomo.gabrielli@arm.com typedef _Element Element; 93613759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 93713759Sgiacomo.gabrielli@arm.com public: 93813759Sgiacomo.gabrielli@arm.com // Constructor 93913759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 94013759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 94113759Sgiacomo.gabrielli@arm.com IntRegIndex _gp, uint8_t _rot) 94213759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 94313759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _gp, _rot) 94413759Sgiacomo.gabrielli@arm.com { 94513759Sgiacomo.gabrielli@arm.com %(constructor)s; 94613759Sgiacomo.gabrielli@arm.com } 94713759Sgiacomo.gabrielli@arm.com 94813759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 94913759Sgiacomo.gabrielli@arm.com}; 95013759Sgiacomo.gabrielli@arm.com}}; 95113759Sgiacomo.gabrielli@arm.com 95213759Sgiacomo.gabrielli@arm.comdef template SveComplexIndexOpDeclare {{ 95313759Sgiacomo.gabrielli@arm.comtemplate <class _Element> 95413759Sgiacomo.gabrielli@arm.comclass %(class_name)s : public %(base_class)s 95513759Sgiacomo.gabrielli@arm.com{ 95613759Sgiacomo.gabrielli@arm.com protected: 95713759Sgiacomo.gabrielli@arm.com typedef _Element Element; 95813759Sgiacomo.gabrielli@arm.com typedef _Element TPElem; 95913759Sgiacomo.gabrielli@arm.com public: 96013759Sgiacomo.gabrielli@arm.com // Constructor 96113759Sgiacomo.gabrielli@arm.com %(class_name)s(ExtMachInst machInst, 96213759Sgiacomo.gabrielli@arm.com IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 96313759Sgiacomo.gabrielli@arm.com uint8_t _rot, uint8_t _imm) 96413759Sgiacomo.gabrielli@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 96513759Sgiacomo.gabrielli@arm.com _dest, _op1, _op2, _rot, _imm) 96613759Sgiacomo.gabrielli@arm.com { 96713759Sgiacomo.gabrielli@arm.com %(constructor)s; 96813759Sgiacomo.gabrielli@arm.com } 96913759Sgiacomo.gabrielli@arm.com 97013759Sgiacomo.gabrielli@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const; 97113759Sgiacomo.gabrielli@arm.com}; 97213759Sgiacomo.gabrielli@arm.com}}; 97313759Sgiacomo.gabrielli@arm.com 97413759Sgiacomo.gabrielli@arm.comdef template SveWideningOpExecute {{ 97513759Sgiacomo.gabrielli@arm.com template <class SElement, class DElement> 97613759Sgiacomo.gabrielli@arm.com Fault %(class_name)s<SElement, DElement>::execute(ExecContext *xc, 97713759Sgiacomo.gabrielli@arm.com Trace::InstRecord *traceData) const 97813759Sgiacomo.gabrielli@arm.com { 97913759Sgiacomo.gabrielli@arm.com Fault fault = NoFault; 98013759Sgiacomo.gabrielli@arm.com %(op_decl)s; 98113759Sgiacomo.gabrielli@arm.com %(op_rd)s; 98213759Sgiacomo.gabrielli@arm.com 98313759Sgiacomo.gabrielli@arm.com %(code)s; 98413759Sgiacomo.gabrielli@arm.com if (fault == NoFault) 98513759Sgiacomo.gabrielli@arm.com { 98613759Sgiacomo.gabrielli@arm.com %(op_wb)s; 98713759Sgiacomo.gabrielli@arm.com } 98813759Sgiacomo.gabrielli@arm.com 98913759Sgiacomo.gabrielli@arm.com return fault; 99013759Sgiacomo.gabrielli@arm.com } 99113759Sgiacomo.gabrielli@arm.com}}; 99213759Sgiacomo.gabrielli@arm.com 99313759Sgiacomo.gabrielli@arm.comdef template SveNonTemplatedOpExecute {{ 99413759Sgiacomo.gabrielli@arm.com Fault %(class_name)s::execute(ExecContext *xc, 99513759Sgiacomo.gabrielli@arm.com Trace::InstRecord *traceData) const 99613759Sgiacomo.gabrielli@arm.com { 99713759Sgiacomo.gabrielli@arm.com Fault fault = NoFault; 99813759Sgiacomo.gabrielli@arm.com %(op_decl)s; 99913759Sgiacomo.gabrielli@arm.com %(op_rd)s; 100013759Sgiacomo.gabrielli@arm.com 100113759Sgiacomo.gabrielli@arm.com %(code)s; 100213759Sgiacomo.gabrielli@arm.com if (fault == NoFault) 100313759Sgiacomo.gabrielli@arm.com { 100413759Sgiacomo.gabrielli@arm.com %(op_wb)s; 100513759Sgiacomo.gabrielli@arm.com } 100613759Sgiacomo.gabrielli@arm.com 100713759Sgiacomo.gabrielli@arm.com return fault; 100813759Sgiacomo.gabrielli@arm.com } 100913759Sgiacomo.gabrielli@arm.com}}; 101013759Sgiacomo.gabrielli@arm.com 101113759Sgiacomo.gabrielli@arm.comdef template SveOpExecute {{ 101213759Sgiacomo.gabrielli@arm.com template <class Element> 101313759Sgiacomo.gabrielli@arm.com Fault %(class_name)s<Element>::execute(ExecContext *xc, 101413759Sgiacomo.gabrielli@arm.com Trace::InstRecord *traceData) const 101513759Sgiacomo.gabrielli@arm.com { 101613759Sgiacomo.gabrielli@arm.com Fault fault = NoFault; 101713759Sgiacomo.gabrielli@arm.com %(op_decl)s; 101813759Sgiacomo.gabrielli@arm.com %(op_rd)s; 101913759Sgiacomo.gabrielli@arm.com 102013759Sgiacomo.gabrielli@arm.com %(code)s; 102113759Sgiacomo.gabrielli@arm.com if (fault == NoFault) 102213759Sgiacomo.gabrielli@arm.com { 102313759Sgiacomo.gabrielli@arm.com %(op_wb)s; 102413759Sgiacomo.gabrielli@arm.com } 102513759Sgiacomo.gabrielli@arm.com 102613759Sgiacomo.gabrielli@arm.com return fault; 102713759Sgiacomo.gabrielli@arm.com } 102813759Sgiacomo.gabrielli@arm.com}}; 102913759Sgiacomo.gabrielli@arm.com 103013759Sgiacomo.gabrielli@arm.comdef template SveOpExecDeclare {{ 103113759Sgiacomo.gabrielli@arm.com template 103213759Sgiacomo.gabrielli@arm.com Fault %(class_name)s<%(targs)s>::execute( 103313759Sgiacomo.gabrielli@arm.com ExecContext *, Trace::InstRecord *) const; 103413759Sgiacomo.gabrielli@arm.com}}; 1035