From 768e8bbfe2c8da353b743ab12955039b8eff1ed1 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Tue, 4 Jun 2024 22:08:18 -0700 Subject: [PATCH] make label/register assignment order deterministic --- src/QuestScript.cc | 14 +++++--------- tests/q058-gc-e.bin | Bin 1362 -> 1363 bytes 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/QuestScript.cc b/src/QuestScript.cc index 28664207..095d4d46 100644 --- a/src/QuestScript.cc +++ b/src/QuestScript.cc @@ -1871,18 +1871,14 @@ struct RegisterAssigner { void assign_all() { // TODO: Technically, we should assign the biggest blocks first to minimize // fragmentation. I am lazy and haven't implemented this yet. - unordered_set> unassigned; + vector> unassigned; for (auto it : this->named_regs) { if (it.second->number < 0) { - unassigned.emplace(it.second); + unassigned.emplace_back(it.second); } } - while (!unassigned.empty()) { - auto reg_it = unassigned.begin(); - auto reg = *reg_it; - unassigned.erase(reg_it); - + for (auto reg : unassigned) { // If this register is already assigned, skip it if (reg->number >= 0) { continue; @@ -1951,7 +1947,7 @@ struct RegisterAssigner { throw runtime_error("not enough space to assign registers"); } - unordered_map> named_regs; + map> named_regs; array, 0x100> numbered_regs; }; @@ -2030,7 +2026,7 @@ std::string assemble_quest_script(const std::string& text) { ssize_t index = -1; ssize_t offset = -1; }; - unordered_map> labels_by_name; + map> labels_by_name; map> labels_by_index; for (size_t line_num = 1; line_num <= lines.size(); line_num++) { const auto& line = lines[line_num - 1]; diff --git a/tests/q058-gc-e.bin b/tests/q058-gc-e.bin index a9a2bb96701ca9073151c913b478afc32dea46ff..6b8b34806d672a90ec74e5c38352eb706d2c59cf 100755 GIT binary patch delta 1194 zcmV;b1XcUe3eyUZxqk%!l}Z6i199JlJyyJ^DUQ`ai}) z#60E!+c5ta0xH8xDStKqe1re79RRTy009w) zG7vNSGjMYOEmIoO3;-zj5eriIBMyxC1NeUp08UwNbtkv+=wfA=?qPE8zhz_!F)%Q7 z?}sh`T4+_@UP@%{0kHlQH9at>{trut6X?`X{T7)15fCRjnEn?q{SufuXw&@o&;K9D z5ft{*Ee{|U0Dm_E3Gn0c@qO`#^6)M4f&ke{ArHOpWZDwiC;}6e{?N(c9svI-8vt-A z2mlb95^>=E7ZrxwDH`1q-f`>}08U8W3d@fWN)Z0SgDC-cMD@W5;OyQY4{K>`Y%!rB zK2GJ~J128++zKFO1O;vr5b0Ip!{cr4bZ8LJTRsj{UVi~jQxw4CIe&5->UiQZ&k zWS1akVQJa<#l;GAZ$63ME&$foG(r?+_z=Ae82~L2ocG~y#A$PL@o6t(Z*5_4cywjF zElL1Y3htvIcO3ccMg-g-vVe{AY=3WJVtEQ-X2*%zAbHzz4`pLzX^0f`at!k$+%6i2 z5ENdz%zuXwN^xJ3kb?h0f)I=T3iuC$sQ~a1QS|;I^h#t-Lt!oe|9&%JZmt}gY;X!5 zM?WASP=;?|bN2v$P)Se3ec@b#zL>V)>}>k@o=h3Rvw52=^S` z%}I1&^>P4{r0~^gZE$Zxa&&ZbL=Jffr%A%%VSn_6Zf^m1W3T*abP7+?R?|$nJrLV; z5YVO$w`y-<*Z|bdfMCr%A&&V9XJx_gP+?;MYr?#h9R3ghTzTWlvh0EP*ML;lShxys z@d`G~P4Q6t*=2HQVQ_Omqe24l?v*&B_wI9afM}lL?h9N2x%8^y(eBn|Z66^DRA^}f z(0_BFQVwWWh%6zo0O>*vYh&?try+Tqbr!-3%H2fSt^OQlWn}|!@Cyp#DT3MU!^v6K z-uz+V?X^4iQTKB7bMf^;68A@NLn-cQe`&wd@mvrQN)V~xqe}n#EADF1>lyBF_YQB{ zH~b1T{2(y=4hkaI`7Ia*Z0r)g0ccJ{X@6vf#OQVM^I>PfVe=C0PQh=z*~KoOARtC> zayBJlVp;MEP~B$%9K=^;dO9o@{%>Y<2Z6(EZ*M@h8V&00uly60#b=D|mt;uQ-VX{Q zbYVZRU@Rh;?Ua>kkFp;$3dt_N{?~9y0CGwp0sR8}{R48Cnty@; zhl87$?Q;^{}}=6p}qlt>Z$nu|IY(%Al)TO2EhI$ IwG`L@03_i%9RL6T delta 1193 zcmV;a1Xlag3epOYxqlP@l}Z6i4tV+kOCCJ>3rh|B`l1~G_y|+e2|U;dJ)HVJ)A~Qg z#5~aE0Wkj<0`@Tf7z>d776Ac3{{R9R02=@hG7xo>I@s;-{R&M14cPJj|8P`FJa%Z~ z{}}%YQcmO5+6n>_mHx>D;m+YH_;4u- zZvYSyap3+J5*pko40_!YaqJoZPCrQA3d;~m5dIFrDFS!~MD+>aKkVKhYiVq3gfSsL zPVVL5Cv$Mz3Ls_>1#UnS=~d$l<8AIkbZF39_zqNF0e?c?w}2W{KJ$c|Y57Wn*P&P>A$$F!LkaE*u&V z6kZ;>%zqI|aYA2`g8vGF1&b;Eiyx$e0Pqp|QS>78N@Pw$17R-z%zj~Ru5g=da0+-w zKOi7b7;j;7{`UY-PDvnPY*lSh(M9w*((#Pgl}UNIq}6F{4{&dCbaWAP4k3A`Nr=K>^nZm1Zf|#Ey!>f&3QyBAR@1scJ==6Z z(55)IYHwly*wg^dVD`-+j`<2_Wd!h02VrAt!tj+G{ty6MDtY6w?1A?K*HmKHxC+^D z@e0gM@lf#DWpZd?18{Sr2}1GimEfcI?sIeiXr30Z6OL&XlV@4 zbAO;n4rn1)EFl81=`=!XWAS!`r+J)pSi%a*-4NNW{+S$Q4P|if3ku_;g4ylE$z<2w z{9)DM?K}5T_j2`f3i0(4_eTwIDeh^1{b|$jTo4gT5RR$gO8@(+EAG+j8SZfR4sCBY z{0cPuAd4{k4hq-#Eno(0>;w1#Xih|FWPhTD#C7uX2VrMn^9K^`PH(+`*~Km(AVzO; z+9hFPS@H@%-DhzD#8+kLIxH9dZ)P2Ifx~QX0B^Q68tUz@`~(!0XN>J5mt@sF-U=dg zVZc9NEFw~w?Uidr&epC{bIR}1z2A9Ha52}n&DvC2q%H$O-oySD)i>^KMfaUuMU28jIU{IL)GS>evn zQT(dR;l@GEll(zA{169X$?)@x=rYW4G4%Zeh|p!^F$>&`#-qmMRT$ivNBC_4#2lP2 z12M$(i^lXLtok_IPz6-P|M>r=_#*%RyZHbA8G+~?0f6eM?)d-z&jTRcB}xWH!2Tt* H*Z}|lvV%9j