§
    1@ÄjŽ  ã                   ó¤   — d Z ddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZ d„ Zd„ Zd„ Z G d	„ d
e¦  «        Z G d„ de¦  «        Z e¦   «         ZdS )zD
Register external C functions necessary for Numba code generation.
é    N)Úir)ÚutilsÚ
intrinsics)Ú
_helperlibc                 ó\   — t          j        | ¦  «        st          j        | |¦  «         dS dS )z1Add missing symbol into LLVM internal symtab
    N)ÚllÚaddress_of_symbolÚ
add_symbol)ÚsymbolÚaddrs     úEC:\Projects\Historical\venv\Lib\site-packages\numba/core/externals.pyÚ_add_missing_symbolr      s9   € õ Ô Ñ'Ô'ð $Ý
Œ�f˜dÑ#Ô#Ð#Ð#Ð#ð$ð $ó    c                 ób   — ddl m}m}m} t	          |j        | ¦  «        } |||¦  «        j        S )zr
    Under Windows, look up a symbol inside the C runtime
    and return the raw pointer value as an integer.
    r   )ÚcdllÚcastÚc_void_p)Úctypesr   r   r   ÚgetattrÚmsvcrtÚvalue)r   r   r   r   Úfs        r   Ú_get_msvcrt_symbolr      sH   € ð
 ,Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ý�”˜VÑ$Ô$€AØˆ4��8ÑÔÔ"Ð"r   c           
      ó	  — |                       ¦   «         }|                     d¦  «        }|                     d¦  «        }t          j        d¦  «        }t          j        d¦  «        }t          j        |d¦  «        }t          j        |d¦  «        }t          j        |d¦  «        }t          j        |||g¦  «        }	t          j        ||	d¬¦  «        }
|
j        \  }}|
 	                    ¦   «         }t          j
        |¦  «        }|                     ||¦  «        }|                     ||¦  «        }|                     |                     ||¦  «        |¦  «        }|                     |                     ||¦  «        |¦  «        }|                     |                     ||¦  «        |                     ||¦  «        ¦  «        }|                     ||¦  «        }|                     ||¦  «        }|                     ||                     |                     ||¦  «        |                     ||¦  «        ¦  «        ¦  «        }|                     ||                     ||¦  «        ¦  «        }|                     ||¦  «        }|                     ||¦  «        }|                     ||¦  «        }|                     ||                     |                     ||¦  «        |                     ||¦  «        ¦  «        ¦  «        }|                     ||                     ||¦  «        ¦  «        }|                     ||                     ||¦  «        ¦  «        }|                     ||                     |                     ||¦  «        |                     ||¦  «        ¦  «        ¦  «        }|                     ||                     ||¦  «        ¦  «        }|                     ||                     ||¦  «        ¦  «        }|                     ||¦  «        }|                     ||                     |                     ||¦  «        |¦  «        ¦  «        }|                     |¦  «         |                     |¦  «         |                     ¦   «          |S )zo
    Compile the multi3() helper function used by LLVM
    for 128-bit multiplication on 32-bit platforms.
    Úmulti3é@   é€   l   ÿÿ é    )Úname)ÚcodegenÚcreate_libraryÚcreate_ir_moduler   ÚIntTypeÚConstantÚFunctionTypeÚFunctionÚargsÚappend_basic_blockÚ	IRBuilderÚtruncÚashrÚmulÚand_ÚlshrÚaddÚshlÚzextÚretÚadd_ir_moduleÚfinalize)Úcontextr    ÚlibraryÚir_modÚi64Úi128Ú
lower_maskÚ_32Ú_64Úfn_typeÚfnÚaÚbÚbbÚbuilderÚalÚblÚahÚbhÚrlÚtÚrhÚrs                          r   Úcompile_multi3rK      sÙ  € ð
 �oŠoÑÔ€GØ×$Ò$ XÑ.Ô.€Gà×%Ò% hÑ/Ô/€Få
Œ*�R‰.Œ.€CÝŒ:�c‰?Œ?€DÝ”˜S *Ñ-Ô-€JÝ
Œ+�c˜2Ñ
Ô
€CÝ
Œ+�d˜BÑ
Ô
€CåŒo˜d T¨4 LÑ1Ô1€GÝ	Œ�V˜W¨8Ð	4Ñ	4Ô	4€BàŒ7�D€A€qØ	×	Ò	Ñ	 Ô	 €BÝŒl˜2ÑÔ€Gð 
�Š�q˜#Ñ	Ô	€BØ	�Š�q˜#Ñ	Ô	€BØ	�Š�w—|’| A sÑ+Ô+¨SÑ	1Ô	1€BØ	�Š�w—|’| A sÑ+Ô+¨SÑ	1Ô	1€Bð 
�Š�W—\’\ " jÑ1Ô1°7·<²<ÀÀJÑ3OÔ3OÑ	PÔ	P€Bà�Š�R˜ÑÔ€Aà	�Š�b˜*Ñ	%Ô	%€Bà�Š�A�w—{’{ 7§<¢<°°CÑ#8Ô#8Ø#*§<¢<°°JÑ#?Ô#?ñAô Añ 	Bô 	B€Að 
�Š�R˜Ÿš Q¨Ñ,Ô,Ñ	-Ô	-€Bà	�Š�a˜Ñ	Ô	€Bà�Š�R˜ÑÔ€Aà	�Š�b˜*Ñ	%Ô	%€Bà�Š�A�w—{’{ 7§<¢<°°CÑ#8Ô#8Ø#*§<¢<°°JÑ#?Ô#?ñAô Añ 	Bô 	B€Að 
�Š�R˜Ÿš Q¨Ñ,Ô,Ñ	-Ô	-€Bà	�Š�R˜Ÿš a¨Ñ-Ô-Ñ	.Ô	.€Bà	�Š�R˜Ÿš W§\¢\°"°cÑ%:Ô%:Ø%,§\¢\°"°cÑ%:Ô%:ñ<ô <ñ 
=ô 
=€Bð 
�Š�R˜Ÿš R¨Ñ,Ô,Ñ	-Ô	-€BØ	�Š�R˜Ÿš R¨Ñ,Ô,Ñ	-Ô	-€Bð 	�Š�R˜ÑÔ€AØ�Š�A�w—{’{ 7§<¢<°°DÑ#9Ô#9¸3Ñ?Ô?Ñ@Ô@€AØ‡K‚K��N„N€Nà×Ò˜&Ñ!Ô!Ð!Ø×ÒÑÔÐà€Nr   c                   ó   — e Zd ZdZd„ ZdS )Ú
_InstallerFc                 óP   — | j         s|                      |¦  «         d| _         dS dS )z˜
        Install the functions into LLVM.  This only needs to be done once,
        as the mappings are persistent during the process lifetime.
        TN)Ú
_installedÚ_do_install)Úselfr5   s     r   Úinstallz_Installer.installl   s7   € ð
 Œð 	#Ø×Ò˜WÑ%Ô%Ð%Ø"ˆDŒOˆOˆOð	#ð 	#r   N)Ú__name__Ú
__module__Ú__qualname__rO   rR   © r   r   rM   rM   h   s(   € € € € € à€Jð#ð #ð #ð #ð #r   rM   c                   ó   — e Zd ZdZd„ ZdS )Ú_ExternalMathFunctionszd
    Map the math functions from the C runtime library into the LLVM
    execution environment.
    c                 ó6  — t           j        dk    }t          j        }t          j                             d¦  «        r"|r t          d¦  «        }t          d|¦  «         nMt          j                             d¦  «        r.|r,t          d|d         ¦  «         t          d|d	         ¦  «         |rBt          |¦  «        | _
        | j
                             d
¦  «        }|sJ ‚t          d|¦  «         t          j        D ]}t          j        |||         ¦  «         Œd S )Nr   Úwin32Ú_ftolÚ_ftol2ÚlinuxÚ__fixunsdfdiÚfptouiÚ__fixunssfdiÚfptouifr   Ú__multi3)r   ÚMACHINE_BITSr   Ú	c_helpersÚsysÚplatformÚ
startswithr   r   rK   Ú_multi3_libÚget_pointer_to_functionr   Ú	INTR_MATHr   r
   )rQ   r5   Úis32bitrd   ÚftolÚptrÚfnames          r   rP   z"_ExternalMathFunctions._do_install|   s&  € ÝÔ$¨Ò*ˆÝÔ(ˆ	åŒ<×"Ò" 7Ñ+Ô+ð 		F°ð 		Fõ & gÑ.Ô.ˆDÝ ¨$Ñ/Ô/Ð/Ð/åŒ\×$Ò$ WÑ-Ô-ð 	F°'ð 	FÝ °	¸(Ô0CÑDÔDÐDÝ °	¸)Ô0DÑEÔEÐEàð 	1å-¨gÑ6Ô6ˆDÔØÔ"×:Ò:¸8ÑDÔDˆCØˆJˆJ�3Ý 
¨CÑ0Ô0Ð0õ  Ô)ð 	3ð 	3ˆEõ
 ŒM˜% ¨5Ô!1Ñ2Ô2Ð2Ð2ð	3ð 	3r   N)rS   rT   rU   Ú__doc__rP   rV   r   r   rX   rX   v   s-   € € € € € ðð ð
3ð 3ð 3ð 3ð 3r   rX   )ro   re   Úllvmliter   Úllvmlite.bindingÚbindingr   Ú
numba.corer   r   Únumbar   r   r   rK   ÚobjectrM   rX   Úc_math_functionsrV   r   r   ú<module>rw      s  ððð ð €
€
€
à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð ð$ð $ð $ð#ð #ð #ðFð Fð FðR#ð #ð #ð #ð #�ñ #ô #ð #ð"3ð "3ð "3ð "3ð "3˜Zñ "3ô "3ð "3ðJ *Ð)Ñ+Ô+Ð Ð Ð r   