microregop.hh revision 7620
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, 617620Sgblack@eecs.umich.edu const char *mnem, const char *_instMnem, uint64_t setFlags, 626345Sgblack@eecs.umich.edu InstRegIndex _src1, InstRegIndex _dest, 634688Sgblack@eecs.umich.edu uint8_t _dataSize, uint16_t _ext, 644688Sgblack@eecs.umich.edu OpClass __opClass) : 657620Sgblack@eecs.umich.edu X86MicroopBase(_machInst, mnem, _instMnem, setFlags, 664688Sgblack@eecs.umich.edu __opClass), 676345Sgblack@eecs.umich.edu src1(_src1.idx), dest(_dest.idx), 684688Sgblack@eecs.umich.edu dataSize(_dataSize), ext(_ext) 694688Sgblack@eecs.umich.edu { 704804Sgblack@eecs.umich.edu foldOBit = (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0; 714688Sgblack@eecs.umich.edu } 724688Sgblack@eecs.umich.edu 734688Sgblack@eecs.umich.edu //Figure out what the condition code flags should be. 744688Sgblack@eecs.umich.edu uint64_t genFlags(uint64_t oldFlags, uint64_t flagMask, 754713Sgblack@eecs.umich.edu uint64_t _dest, uint64_t _src1, uint64_t _src2, 764713Sgblack@eecs.umich.edu bool subtract = false) const; 774688Sgblack@eecs.umich.edu }; 784688Sgblack@eecs.umich.edu 794688Sgblack@eecs.umich.edu class RegOp : public RegOpBase 804688Sgblack@eecs.umich.edu { 814688Sgblack@eecs.umich.edu protected: 824679Sgblack@eecs.umich.edu const RegIndex src2; 834679Sgblack@eecs.umich.edu 844679Sgblack@eecs.umich.edu // Constructor 854679Sgblack@eecs.umich.edu RegOp(ExtMachInst _machInst, 867620Sgblack@eecs.umich.edu const char *mnem, const char *_instMnem, uint64_t setFlags, 876345Sgblack@eecs.umich.edu InstRegIndex _src1, InstRegIndex _src2, InstRegIndex _dest, 884688Sgblack@eecs.umich.edu uint8_t _dataSize, uint16_t _ext, 894679Sgblack@eecs.umich.edu OpClass __opClass) : 907620Sgblack@eecs.umich.edu RegOpBase(_machInst, mnem, _instMnem, setFlags, 914688Sgblack@eecs.umich.edu _src1, _dest, _dataSize, _ext, 924679Sgblack@eecs.umich.edu __opClass), 936345Sgblack@eecs.umich.edu src2(_src2.idx) 944679Sgblack@eecs.umich.edu { 954679Sgblack@eecs.umich.edu } 964679Sgblack@eecs.umich.edu 974679Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, 984679Sgblack@eecs.umich.edu const SymbolTable *symtab) const; 994679Sgblack@eecs.umich.edu }; 1004679Sgblack@eecs.umich.edu 1014688Sgblack@eecs.umich.edu class RegOpImm : public RegOpBase 1024679Sgblack@eecs.umich.edu { 1034679Sgblack@eecs.umich.edu protected: 1044679Sgblack@eecs.umich.edu const uint8_t imm8; 1054679Sgblack@eecs.umich.edu 1064679Sgblack@eecs.umich.edu // Constructor 1074679Sgblack@eecs.umich.edu RegOpImm(ExtMachInst _machInst, 1087620Sgblack@eecs.umich.edu const char * mnem, const char *_instMnem, uint64_t setFlags, 1096345Sgblack@eecs.umich.edu InstRegIndex _src1, uint8_t _imm8, InstRegIndex _dest, 1104688Sgblack@eecs.umich.edu uint8_t _dataSize, uint16_t _ext, 1114679Sgblack@eecs.umich.edu OpClass __opClass) : 1127620Sgblack@eecs.umich.edu RegOpBase(_machInst, mnem, _instMnem, setFlags, 1134688Sgblack@eecs.umich.edu _src1, _dest, _dataSize, _ext, 1144679Sgblack@eecs.umich.edu __opClass), 1154688Sgblack@eecs.umich.edu imm8(_imm8) 1164679Sgblack@eecs.umich.edu { 1174679Sgblack@eecs.umich.edu } 1184679Sgblack@eecs.umich.edu 1194679Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, 1204679Sgblack@eecs.umich.edu const SymbolTable *symtab) const; 1214679Sgblack@eecs.umich.edu }; 1224679Sgblack@eecs.umich.edu} 1234679Sgblack@eecs.umich.edu 1244679Sgblack@eecs.umich.edu#endif //__ARCH_X86_INSTS_MICROREGOP_HH__ 125