
    UHj                        d Z ddlmZ ddlZddlZddlZddlmZ  ee      j                         j                  d   Zedz  ZddZddZdd	Zdd
ZddZddZedk(  r e        yy)zUApply the strongest predecessor secondary-state fill to the current blocker equation.    )annotationsN)Path   outc                    |dz  }t        d      D ]  }|r|dz
  nd}| |   s n t        d      D ]  }|dz   dk\  rdn|dz   }| |   s |S  |S )N      r      r   )range)tablestartslot_s       M/home/exedev/hwanse/tools/summarize_save_selector_predecessor_state_effect.pysimulate_opcode12_selected_slotr      sv    4<D2Y taxT; 2Y 1H$q$(;K	 K    c                     ddgdgdz  z   } g }t        d      D ]-  }t        | |      }|j                  ||| |   | |   dk(  d       / d}ddd	d
gddddd| |t        d |D              dg d|dS )Nr   r   
   r	   )	startSlotselectedSlotselectedValuefrontierReaderFallsThrougha  If predecessor 1:0 leaves the secondaryBranchState table as produced by opcode 0x10 value 0x00000210, then the current 2:0 opcode 0x12 writer selects slot 0 or 1 and the 0x00542b0c reader condition secondaryBranchState[selectionBuffer[0x20]] == 1 would pass for every possible 12-slot start value. This is still not enough to promote map1_01a->map2_02d: execution order/state persistence from 1:0 to 2:0 and a strict map1_01a source hotspot remain unproven.z1:0
0x00478364
0x004844d0
0x004844d8
0x00000210zopcode 0x10 uses secondaryBranchState and helper case 0; helper 0x00410de5 writes first 2 slots to 1 and remaining 10 slots to 0.z2:0
0x005428bc
0x00542b0cc              3  &   K   | ]	  }|d      yw)r   N .0rows     r   	<genexpr>z build_summary.<locals>.<genexpr>9   s     "Y3'C#D"Y   blocked)zPprove predecessor 1:0 actually executes before current selector 2:0 in the routezJprove secondaryBranchState is not overwritten before 0x005428bc/0x00542b0cz1find strict map1_01a source coordinate or hotspot)predecessorSelectorpredecessorRootHexpredecessorFillVasfillValueHexfillMeaningcurrentSelectorcurrentWriterVaHexcurrentReaderVaHexsecondaryBranchStateAfterFilloutcomesallStartsPassReaderpromotionStatusremainingBlockers
conclusion)r   r   appendall)r   r0   r   selectedr4   s        r   build_summaryr8      s    FaS2XEHr 25%@$"8_*//Q*>	
 		@   %*+\:$ [ **).""YPX"YY$

 !% r   c                   ddd| d    d| d    ddd	j                  d
 | d   D               d| d    dd| d    d| d    d| d    dd| d    d| d    d| d   dddddg}| d   D ]0  }|j                  d|d    d|d     d|d!    d|d"   rd#nd$ d%	       2 |j                  g d&       |j                  d' | d(   D               |j                  d       d)j                  |      S )*Nz(# Save Selector Predecessor State Effect z- predecessor: `r'   z` root `r(   `z- fill sites: , c              3  (   K   | ]
  }d | d   yw)r;   Nr    r"   vas     r   r$   zmarkdown.<locals>.<genexpr>I   s     "UQrd!9"Us   r)   z- fill value: `r*   z- fill meaning: r+   z- current writer/reader: `r-   z` / `r.   z- all starts pass reader: r1   z- promotion status: r2   r4   z## OutcomeszF| start slot | selected slot | selected value | reader falls through |z| ---: | ---: | ---: | --- |r0   z| r   z | r   r   r   yesnoz |)r:   z## Remaining Blockersr:   c              3  &   K   | ]	  }d |   yw)z- Nr    r"   items     r   r$   zmarkdown.<locals>.<genexpr>]   s     F2dVFr%   r3   
)joinr5   extend)summarylinesr#   s      r   markdownrJ   D   ss   2

7#89:(7K_C`Baabc
"Uw?S7T"UUVW
'.12!4
7=123
$W-A%B$C5QeIfHgghi
$W-B%C$DE
w'89:;


P&!E$ z" 
[!"#c.&9%:#c/>R=SSV89utDBH	


 
LL23	LLF1D)EFF	LL99Ur   c                   dj                  d | d   D              }dj                  d | d   D              }dj                  ddd	d
| d    d| d    d| d    dddj                  d | d   D               dd| d    dt        j                  | d          ddt        j                  | d          ddt        j                  | d          dd|ddd | d!g      S )"NrE   c           
   3  Z   K   | ]#  }d |d    d|d    d|d    d|d   rdnd d	 % y	w)
z<tr><td>r   z	</td><td>r   r   r   r@   rA   z
</td></tr>Nr    r!   s     r   r$   zhtml_page.<locals>.<genexpr>c   se       	;  !>"# $?#$ %89utD E		s   )+r0   r:   c              3  N   K   | ]  }d t        j                  |       d  yw)z<li>z</li>NhtmlescaperC   s     r   r$   zhtml_page.<locals>.<genexpr>l   s#     `4dkk$/06`s   #%r3   zZ<!doctype html><meta charset="utf-8"><title>Save Selector Predecessor State Effect</title>z<style>body{font-family:system-ui,sans-serif;background:#111;color:#eee;max-width:1100px;margin:24px auto}table{border-collapse:collapse}td,th{border:1px solid #444;padding:6px 8px}code{color:#9bd4ff}</style>z/<h1>Save Selector Predecessor State Effect</h1>z<p>Predecessor <code>r'   z</code> root <code>r(   z</code>, fill value <code>r*   z</code>.</p>z<p>Fill sites: r<   c              3  R   K   | ]  }d t        j                  |      z   dz    ! yw)z<code>z</code>NrN   r>   s     r   r$   zhtml_page.<locals>.<genexpr>r   s"     #srHt{{2$>$J#ss   %'r)   z</p>z<p>all starts pass reader: r1   z; promotion status: r2   z<p>r+   r4   z<table><thead><tr><th>start slot</th><th>selected slot</th><th>selected value</th><th>reader falls through</th></tr></thead><tbody>z</tbody></table>z<h2>Remaining Blockers</h2>z<ul>z</ul>)rF   rO   rP   )rH   rowsblockerss      r   	html_pagerT   b   sf   99  :& D ww`7K^C_``H99f 	[9
(= >??RSZ[oSpRq  rL  MT  Uc  Md  Le  eq  	r
$))#sU\]qUr#ssttxy
%g.C&D%EEYZ^ZeZefmn  gA  [B  ZC  CG  	H
dkk'-012$7
dkk',/016 	N%
xj  r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_ok+save_selector_predecessor_state_effect.jsonF   )ensure_asciiindentrE   zutf-8)encoding)mkdir
write_textjsondumps)rH   out_dirs     r   write_outputsrb   ~   sD    MM$M.<<HH

7q9D@ I r   c                     t        j                         } | j                  dt        t               | j                         }t               }t        ||j                         t        d|j                  dz          y )Nz	--out-dir)typedefaultz"wrote predecessor state effect -> rX   )
argparseArgumentParseradd_argumentr   OUT
parse_argsr8   rb   ra   print)parserargsrH   s      r   mainrn      sc    $$&F
$<DoG'4<<(	.t||>k/k.l
mnr   __main__)r   z	list[int]r   intreturnrp   )rq   dict)rH   rr   rq   str)rH   rr   ra   r   rq   None)rq   rt   )__doc__
__future__r   rf   rO   r_   pathlibr   __file__resolverV   ROOTri   r   r8   rJ   rT   rb   rn   __name__r    r   r   <module>r|      ss    [ "     H~''*
Ul
%P<8o zF r   