microregop.hh revision 7087
14679Sgblack@eecs.umich.edu/* 24679Sgblack@eecs.umich.edu * Copyright (c) 2007 The Hewlett-Packard Development Company 34679Sgblack@eecs.umich.edu * All rights reserved. 44679Sgblack@eecs.umich.edu * 57087Snate@binkert.org * The license below extends only to copyright in the software and shall 67087Snate@binkert.org * not be construed as granting a license to any other intellectual 77087Snate@binkert.org * property including but not limited to intellectual property relating 87087Snate@binkert.org * to a hardware implementation of the functionality of the software 97087Snate@binkert.org * licensed hereunder. You may use the software subject to the license 107087Snate@binkert.org * terms below provided that you ensure that this notice is replicated 117087Snate@binkert.org * unmodified and in its entirety in all distributions of the software, 127087Snate@binkert.org * modified or unmodified, in source code or in binary form. 134679Sgblack@eecs.umich.edu * 147087Snate@binkert.org * Redistribution and use in source and binary forms, with or without 157087Snate@binkert.org * modification, are permitted provided that the following conditions are 167087Snate@binkert.org * met: redistributions of source code must retain the above copyright 177087Snate@binkert.org * notice, this list of conditions and the following disclaimer; 187087Snate@binkert.org * redistributions in binary form must reproduce the above copyright 197087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 207087Snate@binkert.org * documentation and/or other materials provided with the distribution; 217087Snate@binkert.org * neither the name of the copyright holders nor the names of its 224679Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 237087Snate@binkert.org * this software without specific prior written permission. 244679Sgblack@eecs.umich.edu * 254679Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 264679Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 274679Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 284679Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 294679Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 304679Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 314679Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 324679Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 334679Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 344679Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 354679Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 364679Sgblack@eecs.umich.edu * 374679Sgblack@eecs.umich.edu * Authors: Gabe Black 384679Sgblack@eecs.umich.edu */ 394679Sgblack@eecs.umich.edu 404679Sgblack@eecs.umich.edu#ifndef __ARCH_X86_INSTS_MICROREGOP_HH__ 414679Sgblack@eecs.umich.edu#define __ARCH_X86_INSTS_MICROREGOP_HH__ 424679Sgblack@eecs.umich.edu 434679Sgblack@eecs.umich.edu#include "arch/x86/insts/microop.hh" 444679Sgblack@eecs.umich.edu 454679Sgblack@eecs.umich.edunamespace X86ISA 464679Sgblack@eecs.umich.edu{ 474679Sgblack@eecs.umich.edu /** 484679Sgblack@eecs.umich.edu * Base classes for RegOps which provides a generateDisassembly method. 494679Sgblack@eecs.umich.edu */ 504688Sgblack@eecs.umich.edu class RegOpBase : public X86MicroopBase 514679Sgblack@eecs.umich.edu { 524679Sgblack@eecs.umich.edu protected: 534679Sgblack@eecs.umich.edu const RegIndex src1; 544688Sgblack@eecs.umich.edu const RegIndex dest; 554688Sgblack@eecs.umich.edu const uint8_t dataSize; 564688Sgblack@eecs.umich.edu const uint16_t ext; 574804Sgblack@eecs.umich.edu RegIndex foldOBit; 584688Sgblack@eecs.umich.edu 594688Sgblack@eecs.umich.edu // Constructor 604688Sgblack@eecs.umich.edu RegOpBase(ExtMachInst _machInst, 614688Sgblack@eecs.umich.edu const char *mnem, const char *_instMnem, 624688Sgblack@eecs.umich.edu bool isMicro, bool isDelayed, 634688Sgblack@eecs.umich.edu bool isFirst, bool isLast, 646345Sgblack@eecs.umich.edu InstRegIndex _src1, InstRegIndex _dest, 654688Sgblack@eecs.umich.edu uint8_t _dataSize, uint16_t _ext, 664688Sgblack@eecs.umich.edu OpClass __opClass) : 674688Sgblack@eecs.umich.edu X86MicroopBase(_machInst, mnem, _instMnem, 684688Sgblack@eecs.umich.edu isMicro, isDelayed, isFirst, isLast, 694688Sgblack@eecs.umich.edu __opClass), 706345Sgblack@eecs.umich.edu src1(_src1.idx), dest(_dest.idx), 714688Sgblack@eecs.umich.edu dataSize(_dataSize), ext(_ext) 724688Sgblack@eecs.umich.edu { 734804Sgblack@eecs.umich.edu foldOBit = (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0; 744688Sgblack@eecs.umich.edu } 754688Sgblack@eecs.umich.edu 764688Sgblack@eecs.umich.edu //Figure out what the condition code flags should be. 774688Sgblack@eecs.umich.edu uint64_t genFlags(uint64_t oldFlags, uint64_t flagMask, 784713Sgblack@eecs.umich.edu uint64_t _dest, uint64_t _src1, uint64_t _src2, 794713Sgblack@eecs.umich.edu bool subtract = false) const; 804688Sgblack@eecs.umich.edu }; 814688Sgblack@eecs.umich.edu 824688Sgblack@eecs.umich.edu class RegOp : public RegOpBase 834688Sgblack@eecs.umich.edu { 844688Sgblack@eecs.umich.edu protected: 854679Sgblack@eecs.umich.edu const RegIndex src2; 864679Sgblack@eecs.umich.edu 874679Sgblack@eecs.umich.edu // Constructor 884679Sgblack@eecs.umich.edu RegOp(ExtMachInst _machInst, 894679Sgblack@eecs.umich.edu const char *mnem, const char *_instMnem, 904679Sgblack@eecs.umich.edu bool isMicro, bool isDelayed, 914679Sgblack@eecs.umich.edu bool isFirst, bool isLast, 926345Sgblack@eecs.umich.edu InstRegIndex _src1, InstRegIndex _src2, InstRegIndex _dest, 934688Sgblack@eecs.umich.edu uint8_t _dataSize, uint16_t _ext, 944679Sgblack@eecs.umich.edu OpClass __opClass) : 954688Sgblack@eecs.umich.edu RegOpBase(_machInst, mnem, _instMnem, 964679Sgblack@eecs.umich.edu isMicro, isDelayed, isFirst, isLast, 974688Sgblack@eecs.umich.edu _src1, _dest, _dataSize, _ext, 984679Sgblack@eecs.umich.edu __opClass), 996345Sgblack@eecs.umich.edu src2(_src2.idx) 1004679Sgblack@eecs.umich.edu { 1014679Sgblack@eecs.umich.edu } 1024679Sgblack@eecs.umich.edu 1034679Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, 1044679Sgblack@eecs.umich.edu const SymbolTable *symtab) const; 1054679Sgblack@eecs.umich.edu }; 1064679Sgblack@eecs.umich.edu 1074688Sgblack@eecs.umich.edu class RegOpImm : public RegOpBase 1084679Sgblack@eecs.umich.edu { 1094679Sgblack@eecs.umich.edu protected: 1104679Sgblack@eecs.umich.edu const uint8_t imm8; 1114679Sgblack@eecs.umich.edu 1124679Sgblack@eecs.umich.edu // Constructor 1134679Sgblack@eecs.umich.edu RegOpImm(ExtMachInst _machInst, 1144679Sgblack@eecs.umich.edu const char * mnem, const char *_instMnem, 1154679Sgblack@eecs.umich.edu bool isMicro, bool isDelayed, 1164679Sgblack@eecs.umich.edu bool isFirst, bool isLast, 1176345Sgblack@eecs.umich.edu InstRegIndex _src1, uint8_t _imm8, InstRegIndex _dest, 1184688Sgblack@eecs.umich.edu uint8_t _dataSize, uint16_t _ext, 1194679Sgblack@eecs.umich.edu OpClass __opClass) : 1204688Sgblack@eecs.umich.edu RegOpBase(_machInst, mnem, _instMnem, 1214679Sgblack@eecs.umich.edu isMicro, isDelayed, isFirst, isLast, 1224688Sgblack@eecs.umich.edu _src1, _dest, _dataSize, _ext, 1234679Sgblack@eecs.umich.edu __opClass), 1244688Sgblack@eecs.umich.edu imm8(_imm8) 1254679Sgblack@eecs.umich.edu { 1264679Sgblack@eecs.umich.edu } 1274679Sgblack@eecs.umich.edu 1284679Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, 1294679Sgblack@eecs.umich.edu const SymbolTable *symtab) const; 1304679Sgblack@eecs.umich.edu }; 1314679Sgblack@eecs.umich.edu} 1324679Sgblack@eecs.umich.edu 1334679Sgblack@eecs.umich.edu#endif //__ARCH_X86_INSTS_MICROREGOP_HH__ 134