o
    پi                     @   s   d dl mZ d dlmZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZ d dlmZ ejded	efd
dZded	efddZeddddeded	efddZeG dd deZdS )    )Tuple)	dataclassN)Int32Uint32)Tdsl_user_op)llvm)
ParamsBasexreturnc                 C   s@   t d}d}tdD ]}dd| > | @ r|st |}d}q|S )N    F      T)r   cutlassrange)r
   resdonei r   C/home/ubuntu/.local/lib/python3.10/site-packages/quack/fast_math.pyclz   s   r   c                 C   s$   t dt|  }|| | d @ dk S )Nr   r   r   )r   r   )r
   ar   r   r   	find_log2   s   r   locipr   bc             
   C   sD   t tjt t| j||dt|j||dgddddtjjdS )Nr   zmul.hi.u32 $0, $1, $2;z=r,r,rF)has_side_effectsis_align_stackasm_dialect)	r   r   
inline_asmr   i32r   ir_value
AsmDialectAD_ATT)r   r   r   r   r   r   r   umulhi$   s   "r%   c                   @   sn   e Zd ZU eed< eed< eed< ededd fddZej	dedefdd	Z
dedeeef fd
dZdS )
FastDivmoddivisor
multipliershift_rightr   c                 C   sN   t dt|  }t | }t td|> | d | }t |d }t| ||S )zConstruct the FastDivmod object, in host code.
        This precomputes some values based on the divisor and is computationally expensive.
        r   r   r   )r   r   r   Uint64r&   )r'   pdivisor_u32r(   r)   r   r   r   create:   s
   zFastDivmod.createdividendc                 C   s$   | j dkrtt|| j| j? S |S )Nr   )r'   r   r%   r(   r)   )selfr.   r   r   r   divE   s
   
zFastDivmod.divc                 C   s    |  |}||| j  }||fS )N)r0   r'   )r/   r.   quotient	remainderr   r   r   divmodM   s   
zFastDivmod.divmodN)__name__
__module____qualname__r   __annotations__r   staticmethodr-   cutejitr0   r   r3   r   r   r   r   r&   3   s   
 
r&   )typingr   dataclassesr   r   cutlass.cuter9   r   r   cutlass.cutlass_dslr   r   cutlass._mlir.dialectsr   quack.cute_dsl_utilsr	   r:   r   r   r%   r&   r   r   r   r   <module>   s    