17159Sgblack@eecs.umich.edu// -*- mode:c++ -*-
27159Sgblack@eecs.umich.edu
37159Sgblack@eecs.umich.edu// Copyright (c) 2010 ARM Limited
47159Sgblack@eecs.umich.edu// All rights reserved
57159Sgblack@eecs.umich.edu//
67159Sgblack@eecs.umich.edu// The license below extends only to copyright in the software and shall
77159Sgblack@eecs.umich.edu// not be construed as granting a license to any other intellectual
87159Sgblack@eecs.umich.edu// property including but not limited to intellectual property relating
97159Sgblack@eecs.umich.edu// to a hardware implementation of the functionality of the software
107159Sgblack@eecs.umich.edu// licensed hereunder.  You may use the software subject to the license
117159Sgblack@eecs.umich.edu// terms below provided that you ensure that this notice is replicated
127159Sgblack@eecs.umich.edu// unmodified and in its entirety in all distributions of the software,
137159Sgblack@eecs.umich.edu// modified or unmodified, in source code or in binary form.
147159Sgblack@eecs.umich.edu//
157159Sgblack@eecs.umich.edu// Redistribution and use in source and binary forms, with or without
167159Sgblack@eecs.umich.edu// modification, are permitted provided that the following conditions are
177159Sgblack@eecs.umich.edu// met: redistributions of source code must retain the above copyright
187159Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer;
197159Sgblack@eecs.umich.edu// redistributions in binary form must reproduce the above copyright
207159Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer in the
217159Sgblack@eecs.umich.edu// documentation and/or other materials provided with the distribution;
227159Sgblack@eecs.umich.edu// neither the name of the copyright holders nor the names of its
237159Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from
247159Sgblack@eecs.umich.edu// this software without specific prior written permission.
257159Sgblack@eecs.umich.edu//
267159Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
277159Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
287159Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
297159Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
307159Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
317159Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
327159Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
337159Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
347159Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
357159Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
367159Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
377159Sgblack@eecs.umich.edu//
387159Sgblack@eecs.umich.edu// Authors: Gabe Black
397159Sgblack@eecs.umich.edu
407159Sgblack@eecs.umich.edudef template Mult3Declare {{
417159Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
427159Sgblack@eecs.umich.edu{
437159Sgblack@eecs.umich.edu    public:
447159Sgblack@eecs.umich.edu        // Constructor
457159Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, IntRegIndex _reg0,
467159Sgblack@eecs.umich.edu                       IntRegIndex _reg1, IntRegIndex _reg2);
4712616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
487159Sgblack@eecs.umich.edu};
497159Sgblack@eecs.umich.edu}};
507159Sgblack@eecs.umich.edu
517159Sgblack@eecs.umich.edudef template Mult3Constructor {{
5210184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
537159Sgblack@eecs.umich.edu                                          IntRegIndex _reg0,
547159Sgblack@eecs.umich.edu                                          IntRegIndex _reg1,
557159Sgblack@eecs.umich.edu                                          IntRegIndex _reg2)
567159Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
577159Sgblack@eecs.umich.edu                         _reg0, _reg1, _reg2)
587159Sgblack@eecs.umich.edu    {
597159Sgblack@eecs.umich.edu        %(constructor)s;
607848SAli.Saidi@ARM.com        if (!(condCode == COND_AL || condCode == COND_UC)) {
617848SAli.Saidi@ARM.com            for (int x = 0; x < _numDestRegs; x++) {
627848SAli.Saidi@ARM.com                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
637848SAli.Saidi@ARM.com            }
647848SAli.Saidi@ARM.com        }
657159Sgblack@eecs.umich.edu    }
667159Sgblack@eecs.umich.edu}};
677159Sgblack@eecs.umich.edu
687159Sgblack@eecs.umich.edudef template Mult4Declare {{
697159Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
707159Sgblack@eecs.umich.edu{
717159Sgblack@eecs.umich.edu    public:
727159Sgblack@eecs.umich.edu        // Constructor
737159Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
747159Sgblack@eecs.umich.edu                       IntRegIndex _reg0, IntRegIndex _reg1,
757159Sgblack@eecs.umich.edu                       IntRegIndex _reg2, IntRegIndex _reg3);
7612616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
777159Sgblack@eecs.umich.edu};
787159Sgblack@eecs.umich.edu}};
797159Sgblack@eecs.umich.edu
807159Sgblack@eecs.umich.edudef template Mult4Constructor {{
8110184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
827159Sgblack@eecs.umich.edu                                          IntRegIndex _reg0,
837159Sgblack@eecs.umich.edu                                          IntRegIndex _reg1,
847159Sgblack@eecs.umich.edu                                          IntRegIndex _reg2,
857159Sgblack@eecs.umich.edu                                          IntRegIndex _reg3)
867159Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
877159Sgblack@eecs.umich.edu                         _reg0, _reg1, _reg2, _reg3)
887159Sgblack@eecs.umich.edu    {
897159Sgblack@eecs.umich.edu        %(constructor)s;
907848SAli.Saidi@ARM.com        if (!(condCode == COND_AL || condCode == COND_UC)) {
917848SAli.Saidi@ARM.com            for (int x = 0; x < _numDestRegs; x++) {
927848SAli.Saidi@ARM.com                _srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
937848SAli.Saidi@ARM.com            }
947848SAli.Saidi@ARM.com        }
957159Sgblack@eecs.umich.edu    }
967159Sgblack@eecs.umich.edu}};
97