
    g%                         S SK r S SKJr  S SKJrJrJrJrJr  S SK	J
r
  S SKJr  S\4S jrS\4S jrS\S	\S
\S-  4S jrS\\
-  S-  S\S-  S
\S-  4S jrg)    N)Literal)ModRegRMAddressingModeScaleIndexByte	ThreeBitsget_register_code)Register)EffectiveAddresseffective_addressc                     [        [        R                  " U R                  5      5      nUS:X  d  US:X  d  US:X  d  US:X  a  U$ g )Nr            )roundmathlog2scale)r   r   s     //mnt/public/Repos/urclelf/./x86/encoding/sib.pycalculate_sib_scaler      s?    $))-3345EzUaZ5A:! 2<    c                     U R                   [        R                  :X  a  U R                  c  gU R                  c  g [	        U R                  5      nUS:X  a  g U$ N   )baser	   ESPindexr   )r   r   s     r   calculate_sib_indexr      sR    -2C2I2I2Q&/556EzLr   modreturnc                 H    U R                   c  g[        U R                   5      $ )N   )r   r   )r   r   s     r   calculate_sib_baser"      s#    %.3344r   
mod_reg_rmc                    Uc  g UR                   [        R                  :w  a  UR                  S:X  d  g [	        U [
        5      (       d  g [        U 5      n[        U 5      n[        XR                   5      nUb  Ub  Uc  g [        X#U5      $ r   )
r   r   DIRECTrm
isinstancer
   r   r   r"   r   )r   r#   r   r   r   s        r   calculate_sibr(   %   s    NNn333
8J')9:: 12E 12E/@D}%--r   )r   typingr   x86.encoding.machiner   r   r   r   r   x86.registerr	   x86.asmr
   r   r   r"   r(    r   r   <module>r.      s      g g ! $+; 
+; 
5*: 5 5T]`dTd 5.%5%@4%G .U]`dUd .iwz~i~ .r   