| # Copyright (c) 2003-2005 The Regents of The University of Michigan |
| # Copyright (c) 2013 Advanced Micro Devices, Inc. |
| # All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are |
| # met: redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer; |
| # redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution; |
| # neither the name of the copyright holders nor the names of its |
| # contributors may be used to endorse or promote products derived from |
| # this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| # |
| # Authors: Steve Reinhardt |
| |
| from m5.params import * |
| |
| # Set of boolean static instruction properties. |
| # |
| # Notes: |
| # - The IsInteger and IsFloating flags are based on the class of registers |
| # accessed by the instruction. Although most instructions will have exactly |
| # one of these two flags set, it is possible for an instruction to have |
| # neither (e.g., direct unconditional branches, memory barriers) or both |
| # (e.g., an FP/int conversion). |
| # - If IsMemRef is set, then exactly one of IsLoad or IsStore will be set. |
| # - If IsControl is set, then exactly one of IsDirectControl or IsIndirect |
| # Control will be set, and exactly one of IsCondControl or IsUncondControl |
| # will be set. |
| # - IsSerializing, IsMemBarrier, and IsWriteBarrier are implemented as flags |
| # since in the current model there's no other way for instructions to inject |
| # behavior into the pipeline outside of fetch. Once we go to an exec-in-exec |
| # CPU model we should be able to get rid of these flags and implement this |
| # behavior via the execute() methods. |
| |
| class StaticInstFlags(Enum): |
| wrapper_name = 'StaticInstFlags' |
| wrapper_is_struct = True |
| enum_name = 'Flags' |
| |
| vals = [ |
| 'IsNop', # Is a no-op (no effect at all). |
| |
| 'IsInteger', # References integer regs. |
| 'IsFloating', # References FP regs. |
| 'IsCC', # References CC regs. |
| 'IsVector', # References Vector regs. |
| 'IsVectorElem', # References Vector reg elems. |
| |
| 'IsMemRef', # References memory (load, store, or prefetch) |
| 'IsLoad', # Reads from memory (load or prefetch). |
| 'IsStore', # Writes to memory. |
| 'IsAtomic', # Does atomic RMW to memory. |
| 'IsStoreConditional', # Store conditional instruction. |
| 'IsIndexed', # Accesses memory with an indexed address |
| # computation |
| 'IsInstPrefetch', # Instruction-cache prefetch. |
| 'IsDataPrefetch', # Data-cache prefetch. |
| |
| 'IsControl', # Control transfer instruction. |
| 'IsDirectControl', # PC relative control transfer. |
| 'IsIndirectControl',# Register indirect control transfer. |
| 'IsCondControl', # Conditional control transfer. |
| 'IsUncondControl', # Unconditional control transfer. |
| 'IsCall', # Subroutine call. |
| 'IsReturn', # Subroutine return. |
| |
| 'IsCondDelaySlot', # Conditional Delay-Slot Instruction |
| |
| 'IsThreadSync', # Thread synchronization operation. |
| |
| 'IsSerializing', # Serializes pipeline: won't execute until all |
| # older instructions have committed. |
| 'IsSerializeBefore', |
| 'IsSerializeAfter', |
| 'IsMemBarrier', # Is a memory barrier |
| 'IsWriteBarrier', # Is a write barrier |
| 'IsReadBarrier', # Is a read barrier |
| 'IsERET', # <- Causes the IFU to stall (MIPS ISA) |
| |
| 'IsNonSpeculative', # Should not be executed speculatively |
| 'IsQuiesce', # Is a quiesce instruction |
| |
| 'IsIprAccess', # Accesses IPRs |
| 'IsUnverifiable', # Can't be verified by a checker |
| |
| 'IsSyscall', # Causes a system call to be emulated in syscall |
| # emulation mode. |
| |
| # Flags for microcode |
| 'IsMacroop', # Is a macroop containing microops |
| 'IsMicroop', # Is a microop |
| 'IsDelayedCommit', # This microop doesn't commit right away |
| 'IsLastMicroop', # This microop ends a microop sequence |
| 'IsFirstMicroop', # This microop begins a microop sequence |
| # This flag doesn't do anything yet |
| 'IsMicroBranch', # This microop branches within the microcode for |
| # a macroop |
| 'IsDspOp', |
| 'IsSquashAfter' # Squash all uncommitted state after executed |
| ] |