B
     \W                 @   s   d dl mZmZ d dlmZmZmZmZ edZ	dd Z
dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd deZd d! ZG d"d# d#eZd$d% ZG d&d' d'eZd(S ))    )print_functionabsolute_import)typesirtypingmacrozThis is a stub.c              O   s   t dS )z 
    OpenCL get_global_id()
    N)_stub_error)argskargs r   .lib/python3.7/site-packages/numba/roc/stubs.pyget_global_id   s    r   c              O   s   t dS )z
    OpenCL get_local_id()
    N)r   )r	   r
   r   r   r   get_local_id   s    r   c              O   s   t dS )z"
    OpenCL get_global_size()
    N)r   )r	   r
   r   r   r   get_global_size   s    r   c              O   s   t dS )z!
    OpenCL get_local_size()
    N)r   )r	   r
   r   r   r   get_local_size   s    r   c              O   s   t dS )z
    OpenCL get_group_id()
    N)r   )r	   r
   r   r   r   get_group_id$   s    r   c              O   s   t dS )z!
    OpenCL get_num_groups()
    N)r   )r	   r
   r   r   r   get_num_groups+   s    r   c              O   s   t dS )z
    OpenCL get_work_dim()
    N)r   )r	   r
   r   r   r   get_work_dim2   s    r   c              O   s   t dS )a0  
    OpenCL barrier()

    Example:

        # workgroup barrier + local memory fence
        hsa.barrier(hsa.CLK_LOCAL_MEM_FENCE)
        # workgroup barrier + global memory fence
        hsa.barrier(hsa.CLK_GLOBAL_MEM_FENCE)
        # workgroup barrier + global memory fence
        hsa.barrier()

    N)r   )r	   r
   r   r   r   barrier9   s    r   c              O   s   t dS )z
    OpenCL mem_fence()

    Example:

        # local memory fence
        hsa.mem_fence(hsa.CLK_LOCAL_MEM_FENCE)
        # global memory fence
        hsa.mem_fence(hsa.CLK_GLOBAL_MEM_FENCE)
    N)r   )r	   r
   r   r   r   	mem_fenceJ   s    r   c               C   s   t dS )z
    HSAIL wavebarrier
    N)r   r   r   r   r   wavebarrierX   s    r   c             C   s   t dS )z-
    HSAIL activelanepermute_wavewidth_*
    N)r   )srcZlaneidZidentityZuseidentityr   r   r   activelanepermute_wavewidth_   s    r   c             C   s   t dS )zG
    AMDGCN Data Share intrinsic forwards permute (push semantics)
    N)r   )src_lane	dest_laner   r   r   
ds_permutef   s    r   c             C   s   t dS )zH
    AMDGCN Data Share intrinsic backwards permute (pull semantics)
    N)r   )r   r   r   r   r   ds_bpermutem   s    r   c               @   s(   e Zd ZdZdZdZdd Zdd ZdS )	StubzkA stub object to represent special objects which is meaningless
    outside the context of HSA-python.
    z<ptx special value>r   c             C   s   t d|  d S )Nz%s is not instantiable)NotImplementedError)clsr   r   r   __new__{   s    zStub.__new__c             C   s   | j S )N)_description_)selfr   r   r   __repr__~   s    zStub.__repr__N)__name__
__module____qualname____doc__r!   	__slots__r    r#   r   r   r   r   r   t   s
   r   c             C   sP   t | } t| }d}t||d}t|ttj|tj}t	j
||| |fdS )Nzhsail.smem.allocC)r	   )_legalize_shapelenr   ZArrayr   Z	signatureZUniTupleZintpZAnyr   Z	Intrinsic)shapedtypendimfnameZrestypeZsigr   r   r   shared_array   s    r0   c               @   s*   e Zd ZdZdZejdedddgdZdS )	sharedzshared namespace
    z<shared>zshared.arrayTr,   r-   )callableZargnamesN)	r$   r%   r&   r'   r!   r   ZMacror0   Zarrayr   r   r   r   r1      s   
r1   c             C   s4   t | tr| S t | tr| fS tdt| d S )Nzinvalid type for shape; got {0})
isinstancetupleint	TypeErrorformattype)r,   r   r   r   r*      s
    

r*   c               @   s$   e Zd ZdZdZG dd deZdS )atomiczatomic namespace
    z<atomic>c               @   s   e Zd ZdZdS )z
atomic.addzCadd(ary, idx, val)

        Perform atomic ary[idx] += val
        N)r$   r%   r&   r'   r   r   r   r   add   s   r:   N)r$   r%   r&   r'   r!   r   r:   r   r   r   r   r9      s   r9   N)Z
__future__r   r   Znumbar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr   r0   r1   r*   r9   r   r   r   r   <module>   s(   		