114184Sgabeblack@google.com/* 214184Sgabeblack@google.com * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood 314184Sgabeblack@google.com * Copyright (c) 2011 Advanced Micro Devices, Inc. 414184Sgabeblack@google.com * All rights reserved. 514184Sgabeblack@google.com * 614184Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without 714184Sgabeblack@google.com * modification, are permitted provided that the following conditions are 814184Sgabeblack@google.com * met: redistributions of source code must retain the above copyright 914184Sgabeblack@google.com * notice, this list of conditions and the following disclaimer; 1014184Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright 1114184Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the 1214184Sgabeblack@google.com * documentation and/or other materials provided with the distribution; 1314184Sgabeblack@google.com * neither the name of the copyright holders nor the names of its 1414184Sgabeblack@google.com * contributors may be used to endorse or promote products derived from 1514184Sgabeblack@google.com * this software without specific prior written permission. 1614184Sgabeblack@google.com * 1714184Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1814184Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1914184Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2014184Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2114184Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2214184Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2314184Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2414184Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2514184Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2614184Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2714184Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2814184Sgabeblack@google.com */ 2914184Sgabeblack@google.com 3014184Sgabeblack@google.com// Declarations of external types that are common to all protocols 3114184Sgabeblack@google.comexternal_type(int, primitive="yes", default="0"); 3214184Sgabeblack@google.comexternal_type(bool, primitive="yes", default="false"); 3314184Sgabeblack@google.comexternal_type(std::string, primitive="yes"); 3414184Sgabeblack@google.comexternal_type(uint32_t, primitive="yes"); 3514184Sgabeblack@google.comexternal_type(uint64_t, primitive="yes"); 3614184Sgabeblack@google.comexternal_type(PacketPtr, primitive="yes"); 3714184Sgabeblack@google.comexternal_type(Packet, primitive="yes"); 3814184Sgabeblack@google.comexternal_type(Addr, primitive="yes"); 3914184Sgabeblack@google.comexternal_type(Cycles, primitive="yes", default="Cycles(0)"); 4014184Sgabeblack@google.comexternal_type(Tick, primitive="yes", default="0"); 4114184Sgabeblack@google.com 4214184Sgabeblack@google.comstructure(WriteMask, external="yes", desc="...") { 4314184Sgabeblack@google.com void clear(); 4414184Sgabeblack@google.com bool cmpMask(WriteMask); 4514184Sgabeblack@google.com bool isEmpty(); 4614184Sgabeblack@google.com bool isFull(); 4714184Sgabeblack@google.com bool isOverlap(WriteMask); 4814184Sgabeblack@google.com void orMask(WriteMask); 4914184Sgabeblack@google.com void fillMask(); 5014184Sgabeblack@google.com} 5114184Sgabeblack@google.com 5214184Sgabeblack@google.comstructure(DataBlock, external = "yes", desc="..."){ 5314184Sgabeblack@google.com void clear(); 5414184Sgabeblack@google.com void copyPartial(DataBlock, int, int); 5514184Sgabeblack@google.com void copyPartial(DataBlock, WriteMask); 5614184Sgabeblack@google.com void atomicPartial(DataBlock, WriteMask); 5714184Sgabeblack@google.com} 5814184Sgabeblack@google.com 5914184Sgabeblack@google.combool testAndRead(Addr addr, DataBlock datablk, Packet *pkt); 6014184Sgabeblack@google.combool testAndReadMask(Addr addr, DataBlock datablk, WriteMask mask, Packet *pkt); 6114184Sgabeblack@google.combool testAndWrite(Addr addr, DataBlock datablk, Packet *pkt); 6214184Sgabeblack@google.com 6314184Sgabeblack@google.com// AccessPermission 6414184Sgabeblack@google.com// The following five states define the access permission of all memory blocks. 6514184Sgabeblack@google.com// These permissions have multiple uses. They coordinate locking and 6614184Sgabeblack@google.com// synchronization primitives, as well as enable functional accesses. 6714184Sgabeblack@google.com// One should not need to add any additional permission values and it is very 6814184Sgabeblack@google.com// risky to do so. 6914184Sgabeblack@google.comenumeration(AccessPermission, desc="...", default="AccessPermission_NotPresent") { 7014184Sgabeblack@google.com // Valid data 7114184Sgabeblack@google.com Read_Only, desc="block is Read Only (modulo functional writes)"; 7214184Sgabeblack@google.com Read_Write, desc="block is Read/Write"; 7314184Sgabeblack@google.com 7414184Sgabeblack@google.com // Possibly Invalid data 7514184Sgabeblack@google.com // The maybe stale permission indicates that accordingly to the protocol, 7614184Sgabeblack@google.com // there is no guarantee the block contains valid data. However, functional 7714184Sgabeblack@google.com // writes should update the block because a dataless PUT request may 7814184Sgabeblack@google.com // revalidate the block's data. 7914184Sgabeblack@google.com Maybe_Stale, desc="block can be stale or revalidated by a dataless PUT"; 8014184Sgabeblack@google.com // In Broadcast/Snoop protocols, memory has no idea if it is exclusive owner 8114184Sgabeblack@google.com // or not of a block, making it hard to make the logic of having only one 8214184Sgabeblack@google.com // read_write block in the system impossible. This is to allow the memory to 8314184Sgabeblack@google.com // say, "I have the block" and for the RubyPort logic to know that this is a 8414184Sgabeblack@google.com // last-resort block if there are no writable copies in the caching hierarchy. 8514184Sgabeblack@google.com // This is not supposed to be used in directory or token protocols where 8614184Sgabeblack@google.com // memory/NB has an idea of what is going on in the whole system. 8714184Sgabeblack@google.com Backing_Store, desc="for memory in Broadcast/Snoop protocols"; 8814184Sgabeblack@google.com 8914184Sgabeblack@google.com // Invalid data 9014184Sgabeblack@google.com Invalid, desc="block is in an Invalid base state"; 9114184Sgabeblack@google.com NotPresent, desc="block is NotPresent"; 9214184Sgabeblack@google.com Busy, desc="block is in a transient state, currently invalid"; 9314184Sgabeblack@google.com} 9414184Sgabeblack@google.com//HSA scopes 9514184Sgabeblack@google.comenumeration(HSAScope, desc="...", default="HSAScope_UNSPECIFIED") { 9614184Sgabeblack@google.com UNSPECIFIED, desc="Unspecified scope"; 9714184Sgabeblack@google.com NOSCOPE, desc="Explictly unscoped"; 9814184Sgabeblack@google.com WAVEFRONT, desc="Wavefront scope"; 9914184Sgabeblack@google.com WORKGROUP, desc="Workgroup scope"; 10014184Sgabeblack@google.com DEVICE, desc="Device scope"; 10114184Sgabeblack@google.com SYSTEM, desc="System scope"; 10214184Sgabeblack@google.com} 10314184Sgabeblack@google.com 10414184Sgabeblack@google.com// HSA segment types 10514184Sgabeblack@google.comenumeration(HSASegment, desc="...", default="HSASegment_GLOBAL") { 10614184Sgabeblack@google.com GLOBAL, desc="Global segment"; 10714184Sgabeblack@google.com GROUP, desc="Group segment"; 10814184Sgabeblack@google.com PRIVATE, desc="Private segment"; 10914184Sgabeblack@google.com KERNARG, desc="Kernarg segment"; 11014184Sgabeblack@google.com READONLY, desc="Readonly segment"; 11114184Sgabeblack@google.com SPILL, desc="Spill segment"; 11214184Sgabeblack@google.com ARG, desc="Arg segment"; 11314184Sgabeblack@google.com} 11414184Sgabeblack@google.com 11514184Sgabeblack@google.com// TesterStatus 11614184Sgabeblack@google.comenumeration(TesterStatus, desc="...") { 11714184Sgabeblack@google.com Idle, desc="Idle"; 11814184Sgabeblack@google.com Action_Pending, desc="Action Pending"; 11914184Sgabeblack@google.com Ready, desc="Ready"; 12014184Sgabeblack@google.com Check_Pending, desc="Check Pending"; 12114184Sgabeblack@google.com} 12214184Sgabeblack@google.com 12314184Sgabeblack@google.com// InvalidateGeneratorStatus 12414184Sgabeblack@google.comenumeration(InvalidateGeneratorStatus, desc="...") { 12514184Sgabeblack@google.com Load_Waiting, desc="Load waiting to be issued"; 12614184Sgabeblack@google.com Load_Pending, desc="Load issued"; 12714184Sgabeblack@google.com Inv_Waiting, desc="Store (invalidate) waiting to be issued"; 12814184Sgabeblack@google.com Inv_Pending, desc="Store (invalidate) issued"; 12914184Sgabeblack@google.com} 13014184Sgabeblack@google.com 13114184Sgabeblack@google.com// SeriesRequestGeneratorStatus 13214184Sgabeblack@google.comenumeration(SeriesRequestGeneratorStatus, desc="...") { 13314184Sgabeblack@google.com Thinking, desc="Doing work before next action"; 13414184Sgabeblack@google.com Request_Pending, desc="Request pending"; 13514184Sgabeblack@google.com} 13614184Sgabeblack@google.com 13714184Sgabeblack@google.com// LockStatus 13814184Sgabeblack@google.comenumeration(LockStatus, desc="...") { 13914184Sgabeblack@google.com Unlocked, desc="Lock is not held"; 14014184Sgabeblack@google.com Locked, desc="Lock is held"; 14114184Sgabeblack@google.com} 14214184Sgabeblack@google.com 14314184Sgabeblack@google.com// SequencerStatus 14414184Sgabeblack@google.comenumeration(SequencerStatus, desc="...") { 14514184Sgabeblack@google.com Idle, desc="Idle"; 14614184Sgabeblack@google.com Pending, desc="Pending"; 14714184Sgabeblack@google.com} 14814184Sgabeblack@google.com 14914184Sgabeblack@google.comenumeration(TransitionResult, desc="...") { 15014184Sgabeblack@google.com Valid, desc="Valid transition"; 15114184Sgabeblack@google.com ResourceStall, desc="Stalled due to insufficient resources"; 15214184Sgabeblack@google.com ProtocolStall, desc="Protocol specified stall"; 15314184Sgabeblack@google.com Reject, desc="Rejected because of a type mismatch"; 15414184Sgabeblack@google.com} 15514184Sgabeblack@google.com 15614184Sgabeblack@google.com// RubyRequestType 15714184Sgabeblack@google.comenumeration(RubyRequestType, desc="...", default="RubyRequestType_NULL") { 15814184Sgabeblack@google.com LD, desc="Load"; 15914184Sgabeblack@google.com ST, desc="Store"; 16014184Sgabeblack@google.com ATOMIC, desc="Atomic Load/Store -- depricated. use ATOMIC_RETURN or ATOMIC_NO_RETURN"; 16114184Sgabeblack@google.com ATOMIC_RETURN, desc="Atomic Load/Store, return data"; 16214184Sgabeblack@google.com ATOMIC_NO_RETURN, desc="Atomic Load/Store, do not return data"; 16314184Sgabeblack@google.com IFETCH, desc="Instruction fetch"; 16414184Sgabeblack@google.com IO, desc="I/O"; 16514184Sgabeblack@google.com REPLACEMENT, desc="Replacement"; 16614184Sgabeblack@google.com Load_Linked, desc=""; 16714184Sgabeblack@google.com Store_Conditional, desc=""; 16814184Sgabeblack@google.com RMW_Read, desc=""; 16914184Sgabeblack@google.com RMW_Write, desc=""; 17014184Sgabeblack@google.com Locked_RMW_Read, desc=""; 17114184Sgabeblack@google.com Locked_RMW_Write, desc=""; 17214184Sgabeblack@google.com COMMIT, desc="Commit version"; 17314184Sgabeblack@google.com NULL, desc="Invalid request type"; 17414184Sgabeblack@google.com FLUSH, desc="Flush request type"; 17514184Sgabeblack@google.com Release, desc="Release operation"; 17614184Sgabeblack@google.com Acquire, desc="Acquire opertion"; 17714184Sgabeblack@google.com AcquireRelease, desc="Acquire and Release opertion"; 17814184Sgabeblack@google.com} 17914184Sgabeblack@google.com 18014184Sgabeblack@google.comenumeration(SequencerRequestType, desc="...", default="SequencerRequestType_NULL") { 18114184Sgabeblack@google.com Default, desc="Replace this with access_types passed to the DMA Ruby object"; 18214184Sgabeblack@google.com LD, desc="Load"; 18314184Sgabeblack@google.com ST, desc="Store"; 18414184Sgabeblack@google.com ATOMIC, desc="Atomic Load/Store"; 18514184Sgabeblack@google.com REPLACEMENT, desc="Replacement"; 18614184Sgabeblack@google.com FLUSH, desc="Flush request type"; 18714184Sgabeblack@google.com NULL, desc="Invalid request type"; 18814184Sgabeblack@google.com} 18914184Sgabeblack@google.com 19014184Sgabeblack@google.comenumeration(CacheRequestType, desc="...", default="CacheRequestType_NULL") { 19114184Sgabeblack@google.com DataArrayRead, desc="Read access to the cache's data array"; 19214184Sgabeblack@google.com DataArrayWrite, desc="Write access to the cache's data array"; 19314184Sgabeblack@google.com TagArrayRead, desc="Read access to the cache's tag array"; 19414184Sgabeblack@google.com TagArrayWrite, desc="Write access to the cache's tag array"; 19514184Sgabeblack@google.com} 19614184Sgabeblack@google.com 19714184Sgabeblack@google.comenumeration(CacheResourceType, desc="...", default="CacheResourceType_NULL") { 19814184Sgabeblack@google.com DataArray, desc="Access to the cache's data array"; 19914184Sgabeblack@google.com TagArray, desc="Access to the cache's tag array"; 20014184Sgabeblack@google.com} 20114184Sgabeblack@google.com 20214184Sgabeblack@google.comenumeration(DirectoryRequestType, desc="...", default="DirectoryRequestType_NULL") { 20314184Sgabeblack@google.com Default, desc="Replace this with access_types passed to the Directory Ruby object"; 20414184Sgabeblack@google.com} 20514184Sgabeblack@google.com 20614184Sgabeblack@google.comenumeration(DMASequencerRequestType, desc="...", default="DMASequencerRequestType_NULL") { 20714184Sgabeblack@google.com Default, desc="Replace this with access_types passed to the DMA Ruby object"; 20814184Sgabeblack@google.com} 20914184Sgabeblack@google.com 21014184Sgabeblack@google.comenumeration(MemoryControlRequestType, desc="...", default="MemoryControlRequestType_NULL") { 21114184Sgabeblack@google.com Default, desc="Replace this with access_types passed to the DMA Ruby object"; 21214184Sgabeblack@google.com} 21314184Sgabeblack@google.com 21414184Sgabeblack@google.com 21514184Sgabeblack@google.com// These are statically defined types of states machines that we can have. 21614184Sgabeblack@google.com// If you want to add a new machine type, edit this enum. It is not necessary 21714184Sgabeblack@google.com// for a protocol to have state machines defined for the all types here. But 21814184Sgabeblack@google.com// you cannot use anything other than the ones defined here. Also, a protocol 21914184Sgabeblack@google.com// can have only one state machine for a given type. 22014184Sgabeblack@google.comenumeration(MachineType, desc="...", default="MachineType_NULL") { 22114184Sgabeblack@google.com L0Cache, desc="L0 Cache Mach"; 22214184Sgabeblack@google.com L1Cache, desc="L1 Cache Mach"; 22314184Sgabeblack@google.com L2Cache, desc="L2 Cache Mach"; 22414184Sgabeblack@google.com L3Cache, desc="L3 Cache Mach"; 22514184Sgabeblack@google.com Directory, desc="Directory Mach"; 22614184Sgabeblack@google.com DMA, desc="DMA Mach"; 22714184Sgabeblack@google.com Collector, desc="Collector Mach"; 22814184Sgabeblack@google.com L1Cache_wCC, desc="L1 Cache Mach to track cache-to-cache transfer (used for miss latency profile)"; 22914184Sgabeblack@google.com L2Cache_wCC, desc="L2 Cache Mach to track cache-to-cache transfer (used for miss latency profile)"; 23014184Sgabeblack@google.com CorePair, desc="Cache Mach (2 cores, Private L1Ds, Shared L1I & L2)"; 23114184Sgabeblack@google.com TCP, desc="GPU L1 Data Cache (Texture Cache per Pipe)"; 23214184Sgabeblack@google.com TCC, desc="GPU L2 Shared Cache (Texture Cache per Channel)"; 23314184Sgabeblack@google.com TCCdir, desc="Directory at the GPU L2 Cache (TCC)"; 23414184Sgabeblack@google.com SQC, desc="GPU L1 Instr Cache (Sequencer Cache)"; 23514184Sgabeblack@google.com RegionDir, desc="Region-granular directory"; 23614184Sgabeblack@google.com RegionBuffer,desc="Region buffer for CPU and GPU"; 23714184Sgabeblack@google.com NULL, desc="null mach type"; 23814184Sgabeblack@google.com} 23914184Sgabeblack@google.com 24014184Sgabeblack@google.com// MessageSizeType 24114184Sgabeblack@google.comenumeration(MessageSizeType, desc="...") { 24214184Sgabeblack@google.com Control, desc="Control Message"; 24314184Sgabeblack@google.com Data, desc="Data Message"; 24414184Sgabeblack@google.com Request_Control, desc="Request"; 24514184Sgabeblack@google.com Reissue_Control, desc="Reissued request"; 24614184Sgabeblack@google.com Response_Data, desc="data response"; 24714184Sgabeblack@google.com ResponseL2hit_Data, desc="data response"; 24814184Sgabeblack@google.com ResponseLocal_Data, desc="data response"; 24914184Sgabeblack@google.com Response_Control, desc="non-data response"; 25014184Sgabeblack@google.com Writeback_Data, desc="Writeback data"; 25114184Sgabeblack@google.com Writeback_Control, desc="Writeback control"; 25214184Sgabeblack@google.com Broadcast_Control, desc="Broadcast control"; 25314184Sgabeblack@google.com Multicast_Control, desc="Multicast control"; 25414184Sgabeblack@google.com Forwarded_Control, desc="Forwarded control"; 25514184Sgabeblack@google.com Invalidate_Control, desc="Invalidate control"; 25614184Sgabeblack@google.com Unblock_Control, desc="Unblock control"; 25714184Sgabeblack@google.com Persistent_Control, desc="Persistent request activation messages"; 25814184Sgabeblack@google.com Completion_Control, desc="Completion messages"; 25914184Sgabeblack@google.com} 26014184Sgabeblack@google.com 26114184Sgabeblack@google.com// AccessType 26214184Sgabeblack@google.comenumeration(AccessType, desc="...") { 26314184Sgabeblack@google.com Read, desc="Reading from cache"; 26414184Sgabeblack@google.com Write, desc="Writing to cache"; 26514184Sgabeblack@google.com} 26614184Sgabeblack@google.com 26714184Sgabeblack@google.com// RubyAccessMode 26814184Sgabeblack@google.comenumeration(RubyAccessMode, default="RubyAccessMode_User", desc="...") { 26914184Sgabeblack@google.com Supervisor, desc="Supervisor mode"; 27014184Sgabeblack@google.com User, desc="User mode"; 27114184Sgabeblack@google.com Device, desc="Device mode"; 27214184Sgabeblack@google.com} 27314184Sgabeblack@google.com 27414184Sgabeblack@google.comenumeration(PrefetchBit, default="PrefetchBit_No", desc="...") { 27514184Sgabeblack@google.com No, desc="No, not a prefetch"; 27614184Sgabeblack@google.com Yes, desc="Yes, a prefetch"; 27714184Sgabeblack@google.com L1_HW, desc="This is a L1 hardware prefetch"; 27814184Sgabeblack@google.com L2_HW, desc="This is a L2 hardware prefetch"; 27914184Sgabeblack@google.com} 28014184Sgabeblack@google.com 28114184Sgabeblack@google.com// CacheMsg 28214184Sgabeblack@google.comstructure(SequencerMsg, desc="...", interface="Message") { 28314184Sgabeblack@google.com Addr LineAddress, desc="Line address for this request"; 28414184Sgabeblack@google.com Addr PhysicalAddress, desc="Physical address for this request"; 28514184Sgabeblack@google.com SequencerRequestType Type, desc="Type of request (LD, ST, etc)"; 28614184Sgabeblack@google.com Addr ProgramCounter, desc="Program counter of the instruction that caused the miss"; 28714184Sgabeblack@google.com RubyAccessMode AccessMode, desc="user/supervisor access type"; 28814184Sgabeblack@google.com DataBlock DataBlk, desc="Data"; 28914184Sgabeblack@google.com int Len, desc="size in bytes of access"; 29014184Sgabeblack@google.com PrefetchBit Prefetch, desc="Is this a prefetch request"; 29114184Sgabeblack@google.com MessageSizeType MessageSize, default="MessageSizeType_Request_Control"; 29214184Sgabeblack@google.com 29314184Sgabeblack@google.com bool functionalRead(Packet *pkt) { 29414184Sgabeblack@google.com return testAndRead(PhysicalAddress, DataBlk, pkt); 29514184Sgabeblack@google.com } 29614184Sgabeblack@google.com 29714184Sgabeblack@google.com bool functionalWrite(Packet *pkt) { 29814184Sgabeblack@google.com return testAndWrite(PhysicalAddress, DataBlk, pkt); 29914184Sgabeblack@google.com } 30014184Sgabeblack@google.com} 30114184Sgabeblack@google.com 30214184Sgabeblack@google.com// MaskPredictorType 30314184Sgabeblack@google.comenumeration(MaskPredictorType, "MaskPredictorType_Undefined", desc="...") { 30414184Sgabeblack@google.com Undefined, desc="Undefined"; 30514184Sgabeblack@google.com AlwaysUnicast, desc="AlwaysUnicast"; 30614184Sgabeblack@google.com TokenD, desc="TokenD"; 30714184Sgabeblack@google.com AlwaysBroadcast, desc="AlwaysBroadcast"; 30814184Sgabeblack@google.com TokenB, desc="TokenB"; 30914184Sgabeblack@google.com TokenNull, desc="TokenNull"; 31014184Sgabeblack@google.com Random, desc="Random"; 31114184Sgabeblack@google.com Pairwise, desc="Pairwise"; 31214184Sgabeblack@google.com Owner, desc="Owner"; 31314184Sgabeblack@google.com BroadcastIfShared, desc="Broadcast-If-Shared"; 31414184Sgabeblack@google.com BroadcastCounter, desc="Broadcast Counter"; 31514184Sgabeblack@google.com Group, desc="Group"; 31614184Sgabeblack@google.com Counter, desc="Counter"; 31714184Sgabeblack@google.com StickySpatial, desc="StickySpatial"; 31814184Sgabeblack@google.com OwnerBroadcast, desc="Owner/Broadcast Hybrid"; 31914184Sgabeblack@google.com OwnerGroup, desc="Owner/Group Hybrid"; 32014184Sgabeblack@google.com OwnerBroadcastMod, desc="Owner/Broadcast Hybrid-Mod"; 32114184Sgabeblack@google.com OwnerGroupMod, desc="Owner/Group Hybrid-Mod"; 32214184Sgabeblack@google.com LastNMasks, desc="Last N Masks"; 32314184Sgabeblack@google.com BandwidthAdaptive, desc="Bandwidth Adaptive"; 32414184Sgabeblack@google.com} 32514184Sgabeblack@google.com 32614184Sgabeblack@google.com// MaskPredictorIndex 32714184Sgabeblack@google.comenumeration(MaskPredictorIndex, "MaskPredictorIndex_Undefined", desc="...") { 32814184Sgabeblack@google.com Undefined, desc="Undefined"; 32914184Sgabeblack@google.com DataBlock, desc="Data Block"; 33014184Sgabeblack@google.com PC, desc="Program Counter"; 33114184Sgabeblack@google.com} 33214184Sgabeblack@google.com 33314184Sgabeblack@google.com// MaskPredictorTraining 33414184Sgabeblack@google.comenumeration(MaskPredictorTraining, "MaskPredictorTraining_Undefined", desc="...") { 33514184Sgabeblack@google.com Undefined, desc="Undefined"; 33614184Sgabeblack@google.com None, desc="None"; 33714184Sgabeblack@google.com Implicit, desc="Implicit"; 33814184Sgabeblack@google.com Explicit, desc="Explicit"; 33914184Sgabeblack@google.com Both, desc="Both"; 34014184Sgabeblack@google.com} 34114184Sgabeblack@google.com 34214184Sgabeblack@google.com// Request Status 34314184Sgabeblack@google.comenumeration(RequestStatus, desc="...", default="RequestStatus_NULL") { 34414184Sgabeblack@google.com Ready, desc="The sequencer is ready and the request does not alias"; 34514184Sgabeblack@google.com Issued, desc="The sequencer successfully issued the request"; 34614184Sgabeblack@google.com BufferFull, desc="Can not issue because the sequencer is full"; 34714184Sgabeblack@google.com Aliased, desc="This request aliased with a currently outstanding request"; 34814184Sgabeblack@google.com NULL, desc=""; 34914184Sgabeblack@google.com} 35014184Sgabeblack@google.com 35114184Sgabeblack@google.com// LinkDirection 35214184Sgabeblack@google.comenumeration(LinkDirection, desc="...") { 35314184Sgabeblack@google.com In, desc="Inward link direction"; 35414184Sgabeblack@google.com Out, desc="Outward link direction"; 35514184Sgabeblack@google.com} 356