microldstop.hh revision 10467
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_MICROLDSTOP_HH__ 414679Sgblack@eecs.umich.edu#define __ARCH_X86_INSTS_MICROLDSTOP_HH__ 424679Sgblack@eecs.umich.edu 434679Sgblack@eecs.umich.edu#include "arch/x86/insts/microop.hh" 4410467Sandreas.hansson@arm.com#include "arch/x86/ldstflags.hh" 455727Sgblack@eecs.umich.edu#include "mem/packet.hh" 465912Sgblack@eecs.umich.edu#include "mem/request.hh" 477678Sgblack@eecs.umich.edu#include "sim/faults.hh" 484679Sgblack@eecs.umich.edu 494679Sgblack@eecs.umich.edunamespace X86ISA 504679Sgblack@eecs.umich.edu{ 514679Sgblack@eecs.umich.edu /** 524679Sgblack@eecs.umich.edu * Base class for load and store ops 534679Sgblack@eecs.umich.edu */ 544679Sgblack@eecs.umich.edu class LdStOp : public X86MicroopBase 554679Sgblack@eecs.umich.edu { 564679Sgblack@eecs.umich.edu protected: 574679Sgblack@eecs.umich.edu const uint8_t scale; 584679Sgblack@eecs.umich.edu const RegIndex index; 594679Sgblack@eecs.umich.edu const RegIndex base; 604679Sgblack@eecs.umich.edu const uint64_t disp; 614679Sgblack@eecs.umich.edu const uint8_t segment; 624679Sgblack@eecs.umich.edu const RegIndex data; 634679Sgblack@eecs.umich.edu const uint8_t dataSize; 644679Sgblack@eecs.umich.edu const uint8_t addressSize; 655912Sgblack@eecs.umich.edu const Request::FlagsType memFlags; 664804Sgblack@eecs.umich.edu RegIndex foldOBit, foldABit; 674679Sgblack@eecs.umich.edu 684679Sgblack@eecs.umich.edu //Constructor 694679Sgblack@eecs.umich.edu LdStOp(ExtMachInst _machInst, 704679Sgblack@eecs.umich.edu const char * mnem, const char * _instMnem, 717620Sgblack@eecs.umich.edu uint64_t setFlags, 726345Sgblack@eecs.umich.edu uint8_t _scale, InstRegIndex _index, InstRegIndex _base, 736345Sgblack@eecs.umich.edu uint64_t _disp, InstRegIndex _segment, 746345Sgblack@eecs.umich.edu InstRegIndex _data, 754679Sgblack@eecs.umich.edu uint8_t _dataSize, uint8_t _addressSize, 765912Sgblack@eecs.umich.edu Request::FlagsType _memFlags, 774679Sgblack@eecs.umich.edu OpClass __opClass) : 788954Sgblack@eecs.umich.edu X86MicroopBase(_machInst, mnem, _instMnem, setFlags, __opClass), 796345Sgblack@eecs.umich.edu scale(_scale), index(_index.idx), base(_base.idx), 806345Sgblack@eecs.umich.edu disp(_disp), segment(_segment.idx), 816345Sgblack@eecs.umich.edu data(_data.idx), 825912Sgblack@eecs.umich.edu dataSize(_dataSize), addressSize(_addressSize), 836345Sgblack@eecs.umich.edu memFlags(_memFlags | _segment.idx) 844804Sgblack@eecs.umich.edu { 856345Sgblack@eecs.umich.edu assert(_segment.idx < NUM_SEGMENTREGS); 864804Sgblack@eecs.umich.edu foldOBit = (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0; 874804Sgblack@eecs.umich.edu foldABit = 884804Sgblack@eecs.umich.edu (addressSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0; 894804Sgblack@eecs.umich.edu } 904679Sgblack@eecs.umich.edu 914679Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, 924679Sgblack@eecs.umich.edu const SymbolTable *symtab) const; 934679Sgblack@eecs.umich.edu }; 944679Sgblack@eecs.umich.edu} 954679Sgblack@eecs.umich.edu 964679Sgblack@eecs.umich.edu#endif //__ARCH_X86_INSTS_MICROLDSTOP_HH__ 97