GPU.py revision 11308
112531Sandreas.sandberg@arm.com#
212531Sandreas.sandberg@arm.com#  Copyright (c) 2015 Advanced Micro Devices, Inc.
312531Sandreas.sandberg@arm.com#  All rights reserved.
412531Sandreas.sandberg@arm.com#
512531Sandreas.sandberg@arm.com#  For use for simulation and test purposes only
612531Sandreas.sandberg@arm.com#
712531Sandreas.sandberg@arm.com#  Redistribution and use in source and binary forms, with or without
812531Sandreas.sandberg@arm.com#  modification, are permitted provided that the following conditions are met:
912531Sandreas.sandberg@arm.com#
1012531Sandreas.sandberg@arm.com#  1. Redistributions of source code must retain the above copyright notice,
1112531Sandreas.sandberg@arm.com#  this list of conditions and the following disclaimer.
1212531Sandreas.sandberg@arm.com#
1312531Sandreas.sandberg@arm.com#  2. Redistributions in binary form must reproduce the above copyright notice,
1412531Sandreas.sandberg@arm.com#  this list of conditions and the following disclaimer in the documentation
1512531Sandreas.sandberg@arm.com#  and/or other materials provided with the distribution.
1612531Sandreas.sandberg@arm.com#
1712531Sandreas.sandberg@arm.com#  3. Neither the name of the copyright holder nor the names of its contributors
1812531Sandreas.sandberg@arm.com#  may be used to endorse or promote products derived from this software
1912531Sandreas.sandberg@arm.com#  without specific prior written permission.
2012531Sandreas.sandberg@arm.com#
2112531Sandreas.sandberg@arm.com#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2212531Sandreas.sandberg@arm.com#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2312531Sandreas.sandberg@arm.com#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2412531Sandreas.sandberg@arm.com#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
2512531Sandreas.sandberg@arm.com#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2612531Sandreas.sandberg@arm.com#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2712531Sandreas.sandberg@arm.com#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2812531Sandreas.sandberg@arm.com#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2912531Sandreas.sandberg@arm.com#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3012531Sandreas.sandberg@arm.com#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3112531Sandreas.sandberg@arm.com#  POSSIBILITY OF SUCH DAMAGE.
3212531Sandreas.sandberg@arm.com#
3312531Sandreas.sandberg@arm.com#  Author: Steve Reinhardt
3412531Sandreas.sandberg@arm.com#
3512531Sandreas.sandberg@arm.com
3612531Sandreas.sandberg@arm.comfrom ClockedObject import ClockedObject
3712531Sandreas.sandberg@arm.comfrom Device import DmaDevice
3812531Sandreas.sandberg@arm.comfrom m5.defines import buildEnv
3912531Sandreas.sandberg@arm.comfrom m5.params import *
4012531Sandreas.sandberg@arm.comfrom m5.proxy import *
4112531Sandreas.sandberg@arm.comfrom m5.SimObject import SimObject
4212531Sandreas.sandberg@arm.comfrom MemObject import MemObject
4312531Sandreas.sandberg@arm.comfrom Process import EmulatedDriver
4412531Sandreas.sandberg@arm.comfrom Bridge import Bridge
4512531Sandreas.sandberg@arm.comfrom LdsState import LdsState
4612531Sandreas.sandberg@arm.com
4712531Sandreas.sandberg@arm.comclass PrefetchType(Enum): vals = [
4812531Sandreas.sandberg@arm.com    'PF_CU',
4912531Sandreas.sandberg@arm.com    'PF_PHASE',
5012531Sandreas.sandberg@arm.com    'PF_WF',
5112533Sandreas.sandberg@arm.com    'PF_STRIDE',
5212531Sandreas.sandberg@arm.com    'PF_END',
5312531Sandreas.sandberg@arm.com    ]
5412531Sandreas.sandberg@arm.com
5512531Sandreas.sandberg@arm.comclass VectorRegisterFile(SimObject):
5612531Sandreas.sandberg@arm.com    type = 'VectorRegisterFile'
5712531Sandreas.sandberg@arm.com    cxx_class = 'VectorRegisterFile'
5812531Sandreas.sandberg@arm.com    cxx_header = 'gpu-compute/vector_register_file.hh'
5912531Sandreas.sandberg@arm.com
6012531Sandreas.sandberg@arm.com    simd_id = Param.Int(0, 'SIMD ID associated with this VRF')
6112531Sandreas.sandberg@arm.com    num_regs_per_simd = Param.Int(2048, 'number of vector registers per SIMD')
6212531Sandreas.sandberg@arm.com    min_alloc = Param.Int(4, 'min number of VGPRs allocated per WF')
6312531Sandreas.sandberg@arm.com
6412531Sandreas.sandberg@arm.comclass Wavefront(SimObject):
6512531Sandreas.sandberg@arm.com    type = 'Wavefront'
6612531Sandreas.sandberg@arm.com    cxx_class = 'Wavefront'
6712531Sandreas.sandberg@arm.com    cxx_header = 'gpu-compute/wavefront.hh'
6812531Sandreas.sandberg@arm.com
6912531Sandreas.sandberg@arm.com    simdId = Param.Int('SIMD id (0-ComputeUnit.num_SIMDs)')
7012531Sandreas.sandberg@arm.com    wf_slot_id = Param.Int('wavefront id (0-ComputeUnit.max_wfs)')
7112531Sandreas.sandberg@arm.com
7212531Sandreas.sandberg@arm.comclass ComputeUnit(MemObject):
7312531Sandreas.sandberg@arm.com    type = 'ComputeUnit'
7412531Sandreas.sandberg@arm.com    cxx_class = 'ComputeUnit'
7512531Sandreas.sandberg@arm.com    cxx_header = 'gpu-compute/compute_unit.hh'
7612531Sandreas.sandberg@arm.com
7712531Sandreas.sandberg@arm.com    wavefronts = VectorParam.Wavefront('Number of wavefronts')
7812531Sandreas.sandberg@arm.com    wfSize = Param.Int(64, 'Wavefront size (in work items)')
7912531Sandreas.sandberg@arm.com    num_SIMDs = Param.Int(4, 'number of SIMD units per CU')
8012531Sandreas.sandberg@arm.com
8112531Sandreas.sandberg@arm.com    spbypass_pipe_length = Param.Int(4, 'vector ALU Single Precision bypass '\
8212531Sandreas.sandberg@arm.com                                        'latency')
8312531Sandreas.sandberg@arm.com
8412531Sandreas.sandberg@arm.com    dpbypass_pipe_length = Param.Int(8, 'vector ALU Double Precision bypass '\
8512531Sandreas.sandberg@arm.com                                        'latency')
8612531Sandreas.sandberg@arm.com
8712531Sandreas.sandberg@arm.com    issue_period = Param.Int(4, 'number of cycles per issue period')
8812531Sandreas.sandberg@arm.com    num_global_mem_pipes = Param.Int(1,'number of global memory pipes per CU')
8912531Sandreas.sandberg@arm.com    num_shared_mem_pipes = Param.Int(1,'number of shared memory pipes per CU')
9012531Sandreas.sandberg@arm.com    n_wf = Param.Int(1, 'Number of wavefront slots per SIMD')
9112531Sandreas.sandberg@arm.com    mem_req_latency = Param.Int(9, "Latency for request from the cu to ruby. "\
9212531Sandreas.sandberg@arm.com                                "Represents the pipeline to reach the TCP and "\
9312531Sandreas.sandberg@arm.com                                "specified in GPU clock cycles")
9412531Sandreas.sandberg@arm.com    mem_resp_latency = Param.Int(9, "Latency for responses from ruby to the "\
9512531Sandreas.sandberg@arm.com                                 "cu. Represents the pipeline between the TCP "\
9612531Sandreas.sandberg@arm.com                                 "and cu as well as TCP data array access. "\
9712531Sandreas.sandberg@arm.com                                 "Specified in GPU clock cycles")
9812531Sandreas.sandberg@arm.com    system = Param.System(Parent.any, "system object")
9912531Sandreas.sandberg@arm.com    cu_id = Param.Int('CU id')
10012531Sandreas.sandberg@arm.com    vrf_to_coalescer_bus_width = Param.Int(32, "VRF->Coalescer data bus width "\
10112531Sandreas.sandberg@arm.com                                           "in bytes")
10212531Sandreas.sandberg@arm.com    coalescer_to_vrf_bus_width = Param.Int(32, "Coalescer->VRF data bus width "\
10312531Sandreas.sandberg@arm.com                                           "in bytes")
10412531Sandreas.sandberg@arm.com
10512531Sandreas.sandberg@arm.com    memory_port = VectorMasterPort("Port to the memory system")
10612531Sandreas.sandberg@arm.com    translation_port = VectorMasterPort('Port to the TLB hierarchy')
10712531Sandreas.sandberg@arm.com    sqc_port = MasterPort("Port to the SQC (I-cache")
10812531Sandreas.sandberg@arm.com    sqc_tlb_port = MasterPort("Port to the TLB for the SQC (I-cache)")
10912531Sandreas.sandberg@arm.com    perLaneTLB = Param.Bool(False, "enable per-lane TLB")
11012531Sandreas.sandberg@arm.com    prefetch_depth = Param.Int(0, "Number of prefetches triggered at a time"\
11112531Sandreas.sandberg@arm.com                               "(0 turns off prefetching)")
11212531Sandreas.sandberg@arm.com    prefetch_stride = Param.Int(1, "Fixed Prefetch Stride (1 means next-page)")
11312531Sandreas.sandberg@arm.com    prefetch_prev_type = Param.PrefetchType('PF_PHASE', "Prefetch the stride "\
11412531Sandreas.sandberg@arm.com                                            "from last mem req in lane of "\
11512531Sandreas.sandberg@arm.com                                            "CU|Phase|Wavefront")
11612531Sandreas.sandberg@arm.com    execPolicy = Param.String("OLDEST-FIRST", "WF execution selection policy");
11712531Sandreas.sandberg@arm.com    xactCasMode = Param.Bool(False, "Behavior of xact_cas_load magic instr.");
11812531Sandreas.sandberg@arm.com    debugSegFault = Param.Bool(False, "enable debugging GPU seg faults")
11912531Sandreas.sandberg@arm.com    functionalTLB = Param.Bool(False, "Assume TLB causes no delay")
12012531Sandreas.sandberg@arm.com
12112531Sandreas.sandberg@arm.com    localMemBarrier = Param.Bool(False, "Assume Barriers do not wait on "\
12212531Sandreas.sandberg@arm.com                                        "kernel end")
12312531Sandreas.sandberg@arm.com
12412531Sandreas.sandberg@arm.com    countPages = Param.Bool(False, "Generate per-CU file of all pages touched "\
12512531Sandreas.sandberg@arm.com                                   "and how many times")
12612531Sandreas.sandberg@arm.com    global_mem_queue_size = Param.Int(256, "Number of entries in the global "
12712531Sandreas.sandberg@arm.com                                      "memory pipeline's queues")
12812531Sandreas.sandberg@arm.com    local_mem_queue_size = Param.Int(256, "Number of entries in the local "
12912531Sandreas.sandberg@arm.com                                      "memory pipeline's queues")
13012531Sandreas.sandberg@arm.com    ldsBus = Bridge() # the bridge between the CU and its LDS
13112531Sandreas.sandberg@arm.com    ldsPort = MasterPort("The port that goes to the LDS")
13212531Sandreas.sandberg@arm.com    localDataStore = Param.LdsState("the LDS for this CU")
13312531Sandreas.sandberg@arm.com
13412531Sandreas.sandberg@arm.com    vector_register_file = VectorParam.VectorRegisterFile("Vector register "\
13512531Sandreas.sandberg@arm.com                                                          "file")
13612531Sandreas.sandberg@arm.com
13712531Sandreas.sandberg@arm.comclass Shader(ClockedObject):
13812531Sandreas.sandberg@arm.com    type = 'Shader'
13912531Sandreas.sandberg@arm.com    cxx_class = 'Shader'
14012531Sandreas.sandberg@arm.com    cxx_header = 'gpu-compute/shader.hh'
14112531Sandreas.sandberg@arm.com
14212531Sandreas.sandberg@arm.com    CUs = VectorParam.ComputeUnit('Number of compute units')
14312531Sandreas.sandberg@arm.com    n_wf = Param.Int(1, 'Number of wavefront slots per SIMD')
14412531Sandreas.sandberg@arm.com    impl_kern_boundary_sync = Param.Bool(True, """Insert acq/rel packets into
14512531Sandreas.sandberg@arm.com                                                  ruby at kernel boundaries""")
14612531Sandreas.sandberg@arm.com    separate_acquire_release = Param.Bool(False,
14712531Sandreas.sandberg@arm.com        """Do ld_acquire/st_release generate separate requests for the
14812531Sandreas.sandberg@arm.com        acquire and release?""")
14912531Sandreas.sandberg@arm.com    globalmem = Param.MemorySize('64kB', 'Memory size')
15012531Sandreas.sandberg@arm.com    timing = Param.Bool(False, 'timing memory accesses')
15112531Sandreas.sandberg@arm.com
15212531Sandreas.sandberg@arm.com    cpu_pointer = Param.BaseCPU(NULL, "pointer to base CPU")
15312531Sandreas.sandberg@arm.com    translation = Param.Bool(False, "address translation");
15412531Sandreas.sandberg@arm.com
15512531Sandreas.sandberg@arm.comclass ClDriver(EmulatedDriver):
15612531Sandreas.sandberg@arm.com    type = 'ClDriver'
15712531Sandreas.sandberg@arm.com    cxx_header = 'gpu-compute/cl_driver.hh'
15812531Sandreas.sandberg@arm.com    codefile = VectorParam.String('code file name(s)')
15912531Sandreas.sandberg@arm.com
16012531Sandreas.sandberg@arm.comclass GpuDispatcher(DmaDevice):
16112531Sandreas.sandberg@arm.com    type = 'GpuDispatcher'
16212531Sandreas.sandberg@arm.com    cxx_header = 'gpu-compute/dispatcher.hh'
16312531Sandreas.sandberg@arm.com    # put at 8GB line for now
16412531Sandreas.sandberg@arm.com    pio_addr = Param.Addr(0x200000000, "Device Address")
16512531Sandreas.sandberg@arm.com    pio_latency = Param.Latency('1ns', "Programmed IO latency")
16612531Sandreas.sandberg@arm.com    shader_pointer = Param.Shader('pointer to shader')
16712531Sandreas.sandberg@arm.com    translation_port = MasterPort('Port to the dispatcher TLB')
16812531Sandreas.sandberg@arm.com    cpu = Param.BaseCPU("CPU to wake up on kernel completion")
16912531Sandreas.sandberg@arm.com
17012531Sandreas.sandberg@arm.com    cl_driver = Param.ClDriver('pointer to driver')
17112531Sandreas.sandberg@arm.com
17212531Sandreas.sandberg@arm.comclass OpType(Enum): vals = [
17312531Sandreas.sandberg@arm.com    'OT_NULL',
17412531Sandreas.sandberg@arm.com    'OT_ALU',
17512531Sandreas.sandberg@arm.com    'OT_SPECIAL',
17612531Sandreas.sandberg@arm.com    'OT_GLOBAL_READ',
17712531Sandreas.sandberg@arm.com    'OT_GLOBAL_WRITE',
17812531Sandreas.sandberg@arm.com    'OT_GLOBAL_ATOMIC',
17912531Sandreas.sandberg@arm.com    'OT_GLOBAL_HIST',
18012531Sandreas.sandberg@arm.com    'OT_GLOBAL_LDAS',
18112531Sandreas.sandberg@arm.com    'OT_SHARED_READ',
18212531Sandreas.sandberg@arm.com    'OT_SHARED_WRITE',
18312531Sandreas.sandberg@arm.com    'OT_SHARED_ATOMIC',
18412531Sandreas.sandberg@arm.com    'OT_SHARED_HIST',
18512531Sandreas.sandberg@arm.com    'OT_SHARED_LDAS',
18612531Sandreas.sandberg@arm.com    'OT_PRIVATE_READ',
18712531Sandreas.sandberg@arm.com    'OT_PRIVATE_WRITE',
18812531Sandreas.sandberg@arm.com    'OT_PRIVATE_ATOMIC',
18912531Sandreas.sandberg@arm.com    'OT_PRIVATE_HIST',
19012531Sandreas.sandberg@arm.com    'OT_PRIVATE_LDAS',
19112531Sandreas.sandberg@arm.com    'OT_SPILL_READ',
19212531Sandreas.sandberg@arm.com    'OT_SPILL_WRITE',
19312531Sandreas.sandberg@arm.com    'OT_SPILL_ATOMIC',
19412531Sandreas.sandberg@arm.com    'OT_SPILL_HIST',
19512531Sandreas.sandberg@arm.com    'OT_SPILL_LDAS',
19612531Sandreas.sandberg@arm.com    'OT_READONLY_READ',
19712531Sandreas.sandberg@arm.com    'OT_READONLY_WRITE',
19812531Sandreas.sandberg@arm.com    'OT_READONLY_ATOMIC',
19912531Sandreas.sandberg@arm.com    'OT_READONLY_HIST',
20012531Sandreas.sandberg@arm.com    'OT_READONLY_LDAS',
20112531Sandreas.sandberg@arm.com    'OT_FLAT_READ',
20212531Sandreas.sandberg@arm.com    'OT_FLAT_WRITE',
20312531Sandreas.sandberg@arm.com    'OT_FLAT_ATOMIC',
20412531Sandreas.sandberg@arm.com    'OT_FLAT_HIST',
20512531Sandreas.sandberg@arm.com    'OT_FLAT_LDAS',
20612531Sandreas.sandberg@arm.com    'OT_KERN_READ',
20712531Sandreas.sandberg@arm.com    'OT_BRANCH',
20812531Sandreas.sandberg@arm.com
20912531Sandreas.sandberg@arm.com    # note: Only the OT_BOTH_MEMFENCE seems to be supported in the 1.0F version
21012531Sandreas.sandberg@arm.com    #       of the compiler.
21112531Sandreas.sandberg@arm.com    'OT_SHARED_MEMFENCE',
21212531Sandreas.sandberg@arm.com    'OT_GLOBAL_MEMFENCE',
21312531Sandreas.sandberg@arm.com    'OT_BOTH_MEMFENCE',
21412531Sandreas.sandberg@arm.com
21512531Sandreas.sandberg@arm.com    'OT_BARRIER',
21612531Sandreas.sandberg@arm.com    'OT_PRINT',
21712531Sandreas.sandberg@arm.com    'OT_RET',
21812531Sandreas.sandberg@arm.com    'OT_NOP',
21912531Sandreas.sandberg@arm.com    'OT_ARG'
22012531Sandreas.sandberg@arm.com    ]
22112531Sandreas.sandberg@arm.com
22212531Sandreas.sandberg@arm.comclass MemType(Enum): vals = [
22312531Sandreas.sandberg@arm.com    'M_U8',
22412531Sandreas.sandberg@arm.com    'M_U16',
22512531Sandreas.sandberg@arm.com    'M_U32',
22612531Sandreas.sandberg@arm.com    'M_U64',
22712531Sandreas.sandberg@arm.com    'M_S8',
22812531Sandreas.sandberg@arm.com    'M_S16',
22912531Sandreas.sandberg@arm.com    'M_S32',
23012531Sandreas.sandberg@arm.com    'M_S64',
23112531Sandreas.sandberg@arm.com    'M_F16',
23212531Sandreas.sandberg@arm.com    'M_F32',
23312531Sandreas.sandberg@arm.com    'M_F64',
23412531Sandreas.sandberg@arm.com    ]
23512531Sandreas.sandberg@arm.com
23612531Sandreas.sandberg@arm.comclass MemOpType(Enum): vals = [
23712531Sandreas.sandberg@arm.com    'MO_LD',
23812531Sandreas.sandberg@arm.com    'MO_ST',
23912531Sandreas.sandberg@arm.com    'MO_LDAS',
24012531Sandreas.sandberg@arm.com    'MO_LDA',
24112531Sandreas.sandberg@arm.com    'MO_AAND',
24212531Sandreas.sandberg@arm.com    'MO_AOR',
24312531Sandreas.sandberg@arm.com    'MO_AXOR',
24412531Sandreas.sandberg@arm.com    'MO_ACAS',
24512531Sandreas.sandberg@arm.com    'MO_AEXCH',
24612531Sandreas.sandberg@arm.com    'MO_AADD',
24712698Sandreas.sandberg@arm.com    'MO_ASUB',
24812698Sandreas.sandberg@arm.com    'MO_AINC',
24912698Sandreas.sandberg@arm.com    'MO_ADEC',
25012531Sandreas.sandberg@arm.com    'MO_AMAX',
25112531Sandreas.sandberg@arm.com    'MO_AMIN',
25212531Sandreas.sandberg@arm.com    'MO_ANRAND',
25312531Sandreas.sandberg@arm.com    'MO_ANROR',
25412531Sandreas.sandberg@arm.com    'MO_ANRXOR',
25512531Sandreas.sandberg@arm.com    'MO_ANRCAS',
25612531Sandreas.sandberg@arm.com    'MO_ANREXCH',
25712531Sandreas.sandberg@arm.com    'MO_ANRADD',
25812531Sandreas.sandberg@arm.com    'MO_ANRSUB',
25912531Sandreas.sandberg@arm.com    'MO_ANRINC',
26012533Sandreas.sandberg@arm.com    'MO_ANRDEC',
26112531Sandreas.sandberg@arm.com    'MO_ANRMAX',
26212531Sandreas.sandberg@arm.com    'MO_ANRMIN',
26312533Sandreas.sandberg@arm.com    'MO_HAND',
26412533Sandreas.sandberg@arm.com    'MO_HOR',
26512531Sandreas.sandberg@arm.com    'MO_HXOR',
26612531Sandreas.sandberg@arm.com    'MO_HCAS',
26713452SMatteo.Andreozzi@arm.com    'MO_HEXCH',
26812531Sandreas.sandberg@arm.com    'MO_HADD',
26912531Sandreas.sandberg@arm.com    'MO_HSUB',
27012531Sandreas.sandberg@arm.com    'MO_HINC',
27113452SMatteo.Andreozzi@arm.com    'MO_HDEC',
27212531Sandreas.sandberg@arm.com    'MO_HMAX',
27312531Sandreas.sandberg@arm.com    'MO_HMIN',
27412531Sandreas.sandberg@arm.com    'MO_UNDEF'
27512531Sandreas.sandberg@arm.com    ]
27612531Sandreas.sandberg@arm.com
27712531Sandreas.sandberg@arm.comclass StorageClassType(Enum): vals = [
27812531Sandreas.sandberg@arm.com    'SC_SPILL',
27912531Sandreas.sandberg@arm.com    'SC_GLOBAL',
28012531Sandreas.sandberg@arm.com    'SC_SHARED',
28112531Sandreas.sandberg@arm.com    'SC_PRIVATE',
28212531Sandreas.sandberg@arm.com    'SC_READONLY',
28312531Sandreas.sandberg@arm.com    'SC_KERNARG',
28412531Sandreas.sandberg@arm.com    'SC_NONE',
28512531Sandreas.sandberg@arm.com    ]
28612531Sandreas.sandberg@arm.com
28712531Sandreas.sandberg@arm.comclass RegisterType(Enum): vals = [
28812531Sandreas.sandberg@arm.com    'RT_VECTOR',
28912531Sandreas.sandberg@arm.com    'RT_SCALAR',
29012531Sandreas.sandberg@arm.com    'RT_CONDITION',
29112531Sandreas.sandberg@arm.com    'RT_HARDWARE',
29212531Sandreas.sandberg@arm.com    'RT_NONE',
29312531Sandreas.sandberg@arm.com    ]
29412531Sandreas.sandberg@arm.com
29512531Sandreas.sandberg@arm.comclass GenericMemoryOrder(Enum): vals = [
29612531Sandreas.sandberg@arm.com    'MEMORY_ORDER_NONE',
29712531Sandreas.sandberg@arm.com    'MEMORY_ORDER_RELAXED',
29812531Sandreas.sandberg@arm.com    'MEMORY_ORDER_SC_ACQUIRE',
29912531Sandreas.sandberg@arm.com    'MEMORY_ORDER_SC_RELEASE',
30012531Sandreas.sandberg@arm.com    'MEMORY_ORDER_SC_ACQUIRE_RELEASE',
30112531Sandreas.sandberg@arm.com    ]
30212531Sandreas.sandberg@arm.com
30312531Sandreas.sandberg@arm.comclass GenericMemoryScope(Enum): vals = [
30412531Sandreas.sandberg@arm.com    'MEMORY_SCOPE_NONE',
30512531Sandreas.sandberg@arm.com    'MEMORY_SCOPE_WORKITEM',
30612531Sandreas.sandberg@arm.com    'MEMORY_SCOPE_WAVEFRONT',
30712531Sandreas.sandberg@arm.com    'MEMORY_SCOPE_WORKGROUP',
30812531Sandreas.sandberg@arm.com    'MEMORY_SCOPE_DEVICE',
30912531Sandreas.sandberg@arm.com    'MEMORY_SCOPE_SYSTEM',
31012531Sandreas.sandberg@arm.com    ]
31112531Sandreas.sandberg@arm.com