vfp.hh revision 7375
17375Sgblack@eecs.umich.edu/*
27375Sgblack@eecs.umich.edu * Copyright (c) 2010 ARM Limited
37375Sgblack@eecs.umich.edu * All rights reserved
47375Sgblack@eecs.umich.edu *
57375Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall
67375Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual
77375Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating
87375Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software
97375Sgblack@eecs.umich.edu * licensed hereunder.  You may use the software subject to the license
107375Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated
117375Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software,
127375Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form.
137375Sgblack@eecs.umich.edu *
147375Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
157375Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
167375Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
177375Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
187375Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
197375Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
207375Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
217375Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
227375Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
237375Sgblack@eecs.umich.edu * this software without specific prior written permission.
247375Sgblack@eecs.umich.edu *
257375Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
267375Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
277375Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
287375Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
297375Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
307375Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
317375Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
327375Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
337375Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
347375Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
357375Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
367375Sgblack@eecs.umich.edu *
377375Sgblack@eecs.umich.edu * Authors: Gabe Black
387375Sgblack@eecs.umich.edu */
397375Sgblack@eecs.umich.edu
407375Sgblack@eecs.umich.edu#ifndef __ARCH_ARM_INSTS_VFP_HH__
417375Sgblack@eecs.umich.edu#define __ARCH_ARM_INSTS_VFP_HH__
427375Sgblack@eecs.umich.edu
437375Sgblack@eecs.umich.edu#include "arch/arm/insts/misc.hh"
447375Sgblack@eecs.umich.edu
457375Sgblack@eecs.umich.eduenum VfpMicroMode {
467375Sgblack@eecs.umich.edu    VfpNotAMicroop,
477375Sgblack@eecs.umich.edu    VfpMicroop,
487375Sgblack@eecs.umich.edu    VfpFirstMicroop,
497375Sgblack@eecs.umich.edu    VfpLastMicroop
507375Sgblack@eecs.umich.edu};
517375Sgblack@eecs.umich.edu
527375Sgblack@eecs.umich.edutemplate<class T>
537375Sgblack@eecs.umich.edustatic inline void
547375Sgblack@eecs.umich.edusetVfpMicroFlags(VfpMicroMode mode, T &flags)
557375Sgblack@eecs.umich.edu{
567375Sgblack@eecs.umich.edu    switch (mode) {
577375Sgblack@eecs.umich.edu      case VfpMicroop:
587375Sgblack@eecs.umich.edu        flags[StaticInst::IsMicroop] = true;
597375Sgblack@eecs.umich.edu        break;
607375Sgblack@eecs.umich.edu      case VfpFirstMicroop:
617375Sgblack@eecs.umich.edu        flags[StaticInst::IsMicroop] =
627375Sgblack@eecs.umich.edu            flags[StaticInst::IsFirstMicroop] = true;
637375Sgblack@eecs.umich.edu        break;
647375Sgblack@eecs.umich.edu      case VfpLastMicroop:
657375Sgblack@eecs.umich.edu        flags[StaticInst::IsMicroop] =
667375Sgblack@eecs.umich.edu            flags[StaticInst::IsLastMicroop] = true;
677375Sgblack@eecs.umich.edu        break;
687375Sgblack@eecs.umich.edu      case VfpNotAMicroop:
697375Sgblack@eecs.umich.edu        break;
707375Sgblack@eecs.umich.edu    }
717375Sgblack@eecs.umich.edu}
727375Sgblack@eecs.umich.edu
737375Sgblack@eecs.umich.educlass VfpRegRegOp : public RegRegOp
747375Sgblack@eecs.umich.edu{
757375Sgblack@eecs.umich.edu  protected:
767375Sgblack@eecs.umich.edu    VfpRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
777375Sgblack@eecs.umich.edu                IntRegIndex _dest, IntRegIndex _op1,
787375Sgblack@eecs.umich.edu                VfpMicroMode mode = VfpNotAMicroop) :
797375Sgblack@eecs.umich.edu        RegRegOp(mnem, _machInst, __opClass, _dest, _op1)
807375Sgblack@eecs.umich.edu    {
817375Sgblack@eecs.umich.edu        setVfpMicroFlags(mode, flags);
827375Sgblack@eecs.umich.edu    }
837375Sgblack@eecs.umich.edu};
847375Sgblack@eecs.umich.edu
857375Sgblack@eecs.umich.educlass VfpRegImmOp : public RegImmOp
867375Sgblack@eecs.umich.edu{
877375Sgblack@eecs.umich.edu  protected:
887375Sgblack@eecs.umich.edu    VfpRegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
897375Sgblack@eecs.umich.edu                IntRegIndex _dest, uint64_t _imm,
907375Sgblack@eecs.umich.edu                VfpMicroMode mode = VfpNotAMicroop) :
917375Sgblack@eecs.umich.edu        RegImmOp(mnem, _machInst, __opClass, _dest, _imm)
927375Sgblack@eecs.umich.edu    {
937375Sgblack@eecs.umich.edu        setVfpMicroFlags(mode, flags);
947375Sgblack@eecs.umich.edu    }
957375Sgblack@eecs.umich.edu};
967375Sgblack@eecs.umich.edu
977375Sgblack@eecs.umich.educlass VfpRegRegImmOp : public RegRegImmOp
987375Sgblack@eecs.umich.edu{
997375Sgblack@eecs.umich.edu  protected:
1007375Sgblack@eecs.umich.edu    VfpRegRegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1017375Sgblack@eecs.umich.edu                   IntRegIndex _dest, IntRegIndex _op1,
1027375Sgblack@eecs.umich.edu                   uint64_t _imm, VfpMicroMode mode = VfpNotAMicroop) :
1037375Sgblack@eecs.umich.edu        RegRegImmOp(mnem, _machInst, __opClass, _dest, _op1, _imm)
1047375Sgblack@eecs.umich.edu    {
1057375Sgblack@eecs.umich.edu        setVfpMicroFlags(mode, flags);
1067375Sgblack@eecs.umich.edu    }
1077375Sgblack@eecs.umich.edu};
1087375Sgblack@eecs.umich.edu
1097375Sgblack@eecs.umich.educlass VfpRegRegRegOp : public RegRegRegOp
1107375Sgblack@eecs.umich.edu{
1117375Sgblack@eecs.umich.edu  protected:
1127375Sgblack@eecs.umich.edu    VfpRegRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1137375Sgblack@eecs.umich.edu                   IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2,
1147375Sgblack@eecs.umich.edu                   VfpMicroMode mode = VfpNotAMicroop) :
1157375Sgblack@eecs.umich.edu        RegRegRegOp(mnem, _machInst, __opClass, _dest, _op1, _op2)
1167375Sgblack@eecs.umich.edu    {
1177375Sgblack@eecs.umich.edu        setVfpMicroFlags(mode, flags);
1187375Sgblack@eecs.umich.edu    }
1197375Sgblack@eecs.umich.edu};
1207375Sgblack@eecs.umich.edu
1217375Sgblack@eecs.umich.edu#endif //__ARCH_ARM_INSTS_VFP_HH__
122