o
    灛i                     @   s   d dl Z d dlZd dlZd dlZd dlZddlmZm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S )    N   )path_to_cuobjdumppath_to_nvdisasmz1\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r7dnt|}|dkrAdnt|}	|dkrKdn|d}
|
 d|	 d| d| d|d	S )N      )      -   .      1   4   ?   r   Y-z--02d:x)intSLINE_REmatchgroupstr)slineencstallyldwrtdbreadbwatdbyld_str	wrtdb_str	readb_str	watdb_str r$   U/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/triton/tools/disasm.py	parseCtrl%   s   "r&   c                 C   sx   t | d}|dr|d d d }t|}t|d ur6tt|dd}||v r0nt|||< | | fS )Nr   z ;;r   r   )FLINE_REr   r   endswithr&   BRA_REr   len)fliner   labelsasmctrltargetr$   r$   r%   processSassLines4   s   
r2   c              	   C   sh   t  \}}z't|d}||  W d    n1 sw   Y  t||}W t| |S t| w )Nwb)tempfilemkstempopenwriteextractosremove)	cubin_asmfunfdpathcubinsassr$   r$   r%   get_sassD   s   
rA   c                 C   s   t  \}}t \}}|tjd< |d u rt|d| g}n
t|d|d| g}| }d}|t|k r||  }t	
|d u rY|d7 }|t|k rP||  }nd S t	
|d u s?t	
|d}	d}
|
d|	 d7 }
|d	7 }||  }i }g }t
|d ur||  }|d7 }||  }|d7 }|t||| ||  }t
|d ust|D ]I\}\}}|d
 }||v rd||  }|
| d7 }
|
|d 7 }
t
|rtt
|d	d
}d||  }td| d|}|
|d 7 }
q|
d7 }
|
S d S )NNVDISASM_PATHz-sassz-funr   r    z	Function:
r   r   LBBz:
	z\1r(   )r   r   r9   environ
subprocesscheck_output
splitlinesr,   decodeFNAME_REr   r   r)   appendr2   	enumerater+   r   sub)	file_pathr<   	cuobjdump_nvdisasmsass_str
sass_linesline_idxlinefnameretr.   
asm_bufferr-   r   idxr0   r/   offset
label_namer1   target_namer$   r$   r%   r8   P   sZ   



r8   )N)	functoolsr9   rerH   r4   common.backendr   r   compiler)   r   rL   r+   r&   r2   	lru_cacherA   r8   r$   r$   r$   r%   <module>   s   



