# Copyright (c) 2016 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:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. 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.
#
# 3. Neither the name of the copyright holder 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 HOLDER 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.

from m5.params import *


class GPUStaticInstFlags(Enum):
    wrapper_name = "GPUStaticInstFlags"
    wrapper_is_struct = True
    enum_name = "Flags"

    vals = [
        # Op types
        "ALU",  # ALU op
        "Branch",  # Branch instruction
        "CondBranch",  # Conditinal Branch instruction
        "Nop",  # No-op (no effect at all)
        "Return",  # Subroutine return instruction
        "EndOfKernel",  # Kernel termination instruction
        "KernelLaunch",  # Kernel launch inst
        "UnconditionalJump",  #
        "SpecialOp",  # Special op
        "Waitcnt",  # Is a waitcnt instruction
        "Sleep",  # Is a sleep instruction
        # Memory ops
        "MemBarrier",  # Barrier instruction
        "MemSync",  # Synchronizing instruction
        "MemoryRef",  # References memory (load, store, or atomic)
        "Flat",  # Flat memory op
        "FlatGlobal",  # Global memory op
        "Load",  # Reads from memory
        "Store",  # Writes to memory
        # Atomic ops
        "AtomicReturn",  # Atomic instruction that returns data
        "AtomicNoReturn",  # Atomic instruction that doesn't return data
        # Instruction attributes
        "Scalar",  # A scalar (not vector) operation
        "ReadsSCC",  # The instruction reads SCC
        "WritesSCC",  # The instruction writes SCC
        "ReadsVCC",  # The instruction reads VCC
        "WritesVCC",  # The instruction writes VCC
        "ReadsEXEC",  # The instruction reads Exec Mask
        "WritesEXEC",  # The instruction writes Exec Mask
        "ReadsMode",  # The instruction reads Mode register
        "WritesMode",  # The instruction writes Mode register
        "IgnoreExec",  # The instruction ignores the Exec Mask
        "IsSDWA",  # The instruction is a SDWA instruction
        "IsDPP",  # The instruction is a DPP instruction
        # Atomic OP types
        "AtomicAnd",
        "AtomicOr",
        "AtomicXor",
        "AtomicCAS",
        "AtomicExch",
        "AtomicAdd",
        "AtomicSub",
        "AtomicInc",
        "AtomicDec",
        "AtomicMax",
        "AtomicMin",
        # Segment access flags
        "ArgSegment",  # Accesses the arg segment
        "GlobalSegment",  # Accesses global memory
        "GroupSegment",  # Accesses local memory (LDS), aka shared memory
        "KernArgSegment",  # Accesses the kernel argument segment
        "PrivateSegment",  # Accesses the private segment
        "ReadOnlySegment",  # Accesses read only memory
        "SpillSegment",  # Accesses the spill segment
        "NoSegment",  # Does not have an associated segment
        # Coherence flags
        "GloballyCoherent",  # Coherent with other work-items on same device
        "SystemCoherent",  # Coherent with a different device, or the host
        # Floating-point flags
        "F16",  # F16 operation
        "F32",  # F32 operation
        "F64",  # F64 operation
        # MAC, MAD, FMA
        "FMA",  # FMA
        "MAC",  # MAC
        "MAD",  # MAD
    ]
