
    h                        S SK Jr  S SKrS SKrS SKrS SKJrJrJrJrJ	r	J
r
Jr  / SQr/ SQr/ SQr\R                  S:H  r\R"                  " \R$                  5      S:H  r " S	 S
\R(                  5      r " S S\5      r\S:X  ac  S r\" SR7                  S S 5       5      R9                  5       5        \" 5        H(  u  rr\" S\-  SR7                  S \ 5       5      5        M*     gg)    )print_functionN)c_uint32c_longc_ulongc_size_tc_void_pPOINTER	CFUNCTYPE)S         r            r      r   _      r   O      r   W      [      )r   r      I   r      D   r      r   r   A   r      r   r   Y   r   r   r   r   r   r   r   Q   r   r   r   )r   r      |   $   r   r#   r   r%      r#   L   r%      r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ntr   c                   j    \ rS rSrSr\ V VVs/ s H
  o[
        4PM     snnn rS rS rSr	gs  snnn f )CPUID_structH   )eaxebxecxedxc                 L    XR                   ;  a  [        U5      e[        X5      $ )N)_register_namesKeyErrorgetattr)selfitems     ;lib/python3.13/site-packages/archspec/vendor/cpuid/cpuid.py__getitem__CPUID_struct.__getitem__L   s#    +++4. t""    c                 z    SR                  U R                  U R                  U R                  U R                  5      $ )Nz.eax=0x{:x}, ebx=0x{:x}, ecx=0x{:x}, edx=0x{:x})formatr-   r.   r/   r0   r5   s    r7   __repr__CPUID_struct.__repr__Q   s2    ?FFtxxQUQYQY[_[c[ceiememnnr:    N)
__name__
__module____qualname____firstlineno__r2   r   _fields_r8   r>   __static_attributes__).0rr   s   000r7   r+   r+   H   s-    2O'67!H7H#
o 8s   .r+   c                   4    \ rS rSrS rSS jrSS jrS rSrg)	CPUIDU   c                    [         R                  " 5       S;  a  [        S5      e[        (       aS  [        (       a"  [
        R                  " S5      U l        [        nO=[
        R                  R                  U l        [        nO[        (       a  [        O[        n[        U5      n[
        R                  U-  " U6 n[        (       a  [        U R                  R                   l        [
        R                  [
        R$                  [
        R&                  [
        R&                  /U R                  R                   l        U R                  R!                  S USS5      U l        U R*                  (       d  [-        S5      e[
        R.                  " U R*                  X25        OSSKJnJnJnJnJnJn	  U" S	UXV-  Xx-  U	-  S
9U l        U R<                  R?                  U5        [
        R@                  " [
        RB                  RE                  U R<                  5      5      U l        [G        S [I        [J        5      [L        [L        5      n
U
" U R*                  5      U l'        g )N)AMD64x86_64x86i686zOnly available for x86zkernel32.dlli   @   zCould not allocate RWX memoryr   )mmapMAP_PRIVATEMAP_ANONYMOUS
PROT_WRITE	PROT_READ	PROT_EXEC)flagsprot)(platformmachineSystemError
is_windowsis_64bitctypesCDLLwin_WINDOWS_64_OPCwindllkernel32_CDECL_32_OPC_POSIX_64_OPClenc_ubyter   VirtualAllocrestyper   r   argtypesaddrMemoryErrormemmoverR   rS   rT   rU   rV   rW   mmwrite	addressofc_intfrom_bufferr
   r	   r+   r   func_ptr)r5   opcsizecoderR   rS   rT   rU   rV   rW   	func_types              r7   __init__CPUID.__init__V   s   %GG677:x ";;~6%
 "==11##+8-C3x%,:,4DHH!!).4oovPVP^P^`f`n`n-oDHH!!*--dD&$GDI99!"ABBNN499d1  !1+i7	DG GGMM$(()A)A$'')JKDIdGL$98XN	!$)),r:   c                 |    U R                  XS9nUR                  UR                  UR                  UR                  4$ )N)r-   r/   )registers_forr-   r.   r/   r0   r5   r-   r/   structs       r7   __call__CPUID.__call__   s4    ###5zz6::vzz6::==r:   c                 >    [        5       nU R                  X1U5        U$ )ztCalls cpuid with eax and ecx set as the input arguments, and returns a structure
containing eax, ebx, ecx, and edx.
)r+   ru   r~   s       r7   r}   CPUID.registers_for   s     f3'r:   c                 0   [         (       aq  [        U R                  R                  l        [
        [        [        /U R                  R                  l        U R                  R                  U R                  SS5        g U R                  R                  5         g )Nr   i   )r^   r   rb   VirtualFreerk   r   r   r   rl   rm   rp   closer=   s    r7   __del__CPUID.__del__   sY    :+1DHH  (-5x,IDHH  )HH  Av6GGMMOr:   )rm   ru   rp   rb   N)r   )	rA   rB   rC   rD   rz   r   r}   r   rF   r@   r:   r7   rJ   rJ   U   s    1-f>r:   rJ   __main__c               #      #    [        5       n S H0  nU " U5      u  n    nX::  d  M  U " U5      nX4v   US-  nX::  a  M  M2     g 7f)N)r   l        r    )rJ   )cpuidr-   highest_regss        r7   valid_inputsr      sN     $C$SzGQ1.Szk!q . %s    AAA c              #   B   #    U  H  oR                  S 5      v   M     g7f)r   N)ljust)rG   xs     r7   	<genexpr>r      s     E'D!771::'Ds   )rJ   ABCD%08xc              #   ,   #    U  H
  nS U-  v   M     g7f)r   Nr@   )rG   regs     r7   r   r      s     $BTcVc\Ts   )
__future__r   r[   osr`   r   r   r   r   r   r	   r
   rg   rc   rf   namer^   sizeofc_voidpr_   	Structurer+   objectrJ   rA   r   printjoinstripr-   r   r@   r:   r7   <module>r      s    &  	  T T T  WW_
==(A-
o6## 
oFF FT z 
#((E'DE
E
K
K
MN!^	TfslCHH$BT$BBC $ r:   