a
    h                     @   s   d dl Z d dlZd dlZd dlZd dlZedZedZedZedZ	dd Z
dd	 Ze  dd
dZdd Zdd ZdS )    Nz1\s*/\*\w{4}\*/\s*([^;]*;)\s*/\* 0x(\w{16}) \*/\s*z\s*/\* 0x(\w{16}) \*/\s*z\s*Function : (\w+)\s*z(.*BRA(?:\.U)? )(0x\w+);c              
   C   s   t t| dd}|d? d@ }|d? d@ }|d? d@ }|d? d@ }|d	? d
@ }|dkr^dnd}|dkrndnt|}|dkrdnt|}	|dkrdn|d}
|
 d|	 d| d| d|d	S )N      )      -   .      1   4   ?   r   Y-z--02d:x)intSLINE_REmatchgroupstr)slineencZstallZyldZwrtdbZreadbZwatdbZyld_strZ	wrtdb_strZ	readb_strZ	watdb_str r   O/var/www/html/assistant/venv/lib/python3.9/site-packages/triton/tools/disasm.py	parseCtrl#   s    r   c                 C   sx   t | d}|dr*|d d d }t|}t|d urltt|dd}||v r`nt|||< | | fS )Nr   z ;;   r   )FLINE_REr   r   endswithr   BRA_REr   len)fliner   labelsasmctrltargetr   r   r   processSassLines2   s    
r'   c              	   C   sj   t  \}}zLt|d}||  W d    n1 s80    Y  t||}W t| nt| 0 |S )Nwb)tempfilemkstempopenwriteextractosremove)Z	cubin_asmfunfdpathZcubinsassr   r   r   get_sassB   s    (r4   c                  C   s   ddl m}  | jjjS )Nr   knobs)Ztritonr6   Znvidia	cuobjdumpr2   r5   r   r   r   path_to_cuobjdumpN   s    r8   c                 C   s  t  }|d u r t|d| g}nt|d|d| g}| }d}|t|k r||  }t|d u r|d7 }|t|k r||  }qZd S qZt|d}d}|d| d7 }|d7 }||  }i }	g }
t	|d ur(||  }|d7 }||  }|d7 }|

t|||	 ||  }qt|
D ]\}\}}|d	 }||	v rjd
|	|  }|| d7 }||d 7 }t|rtt|dd	}d
|	|  }td| d|}||d 7 }q0|d7 }|S d S )Nz-sassz-funr   r    z	Function:
r   r   ZLBBz:
	z\1r   )r8   
subprocesscheck_output
splitlinesr!   decodeFNAME_REr   r   r   appendr'   	enumerater    r   sub)	file_pathr0   r7   Zsass_strZ
sass_linesZline_idxlinefnameretr#   Z
asm_bufferr"   r   idxr%   r$   offsetZ
label_namer&   Ztarget_namer   r   r   r-   S   sP    
r-   )N)	functoolsr.   rer<   r)   compiler   r   r@   r    r   r'   	lru_cacher4   r8   r-   r   r   r   r   <module>   s   



