a
    kh                     @   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--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   A/var/www/auris/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cubinZsassr   r   r   get_sassB   s    (r2   c                  C   s   ddl m}  | jjjS )Nr   knobs)Ztritonr4   Znvidia	cuobjdumpr1   r3   r   r   r   path_to_cuobjdumpN   s    r6   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   )r6   
subprocesscheck_output
splitlinesr    decodeFNAME_REr   r   r   appendr&   	enumerater   r   sub)	file_pathr/   r5   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_cacher2   r6   r,   r   r   r   r   <module>   s   



