reset.bootstrap.S 323 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327
  1. exit:
  2. pushl %ebp
  3. movl %esp, %ebp
  4. movl $1, %eax
  5. pushl %eax
  6. movl 8(%ebp), %eax
  7. movl %eax, %ebx
  8. popl %eax
  9. int $0x80
  10. leave
  11. ret
  12. read:
  13. pushl %ebp
  14. movl %esp, %ebp
  15. movl $3, %eax
  16. pushl %eax
  17. movl 8(%ebp), %eax
  18. movl %eax, %ebx
  19. movl 12(%ebp), %eax
  20. movl %eax, %ecx
  21. movl 16(%ebp), %eax
  22. movl %eax, %edx
  23. popl %eax
  24. int $0x80
  25. leave
  26. ret
  27. write:
  28. pushl %ebp
  29. movl %esp, %ebp
  30. movl $4, %eax
  31. pushl %eax
  32. movl 8(%ebp), %eax
  33. movl %eax, %ebx
  34. movl 12(%ebp), %eax
  35. movl %eax, %ecx
  36. movl 16(%ebp), %eax
  37. movl %eax, %edx
  38. popl %eax
  39. int $0x80
  40. leave
  41. ret
  42. open:
  43. pushl %ebp
  44. movl %esp, %ebp
  45. movl $5, %eax
  46. pushl %eax
  47. movl 8(%ebp), %eax
  48. movl %eax, %ebx
  49. movl 12(%ebp), %eax
  50. movl %eax, %ecx
  51. movl 16(%ebp), %eax
  52. movl %eax, %edx
  53. popl %eax
  54. int $0x80
  55. leave
  56. ret
  57. close:
  58. pushl %ebp
  59. movl %esp, %ebp
  60. movl $6, %eax
  61. pushl %eax
  62. movl 8(%ebp), %eax
  63. movl %eax, %ebx
  64. popl %eax
  65. int $0x80
  66. leave
  67. ret
  68. brk:
  69. pushl %ebp
  70. movl %esp, %ebp
  71. movl $45, %eax
  72. pushl %eax
  73. movl 8(%ebp), %eax
  74. movl %eax, %ebx
  75. popl %eax
  76. int $0x80
  77. leave
  78. ret
  79. munmap:
  80. pushl %ebp
  81. movl %esp, %ebp
  82. movl $91, %eax
  83. pushl %eax
  84. movl 8(%ebp), %eax
  85. movl %eax, %ebx
  86. movl 12(%ebp), %eax
  87. movl %eax, %ecx
  88. popl %eax
  89. int $0x80
  90. leave
  91. ret
  92. mmap2:
  93. pushl %ebp
  94. movl %esp, %ebp
  95. pushl %ebp
  96. movl $192, %eax
  97. pushl %eax
  98. movl 8(%ebp), %eax
  99. movl %eax, %ebx
  100. movl 12(%ebp), %eax
  101. movl %eax, %ecx
  102. movl 16(%ebp), %eax
  103. movl %eax, %edx
  104. movl 20(%ebp), %eax
  105. movl %eax, %esi
  106. movl 24(%ebp), %eax
  107. movl %eax, %edi
  108. movl 28(%ebp), %eax
  109. movl %eax, %ebp
  110. popl %eax
  111. int $0x80
  112. popl %ebp
  113. leave
  114. ret
  115. getcwd:
  116. pushl %ebp
  117. movl %esp, %ebp
  118. movl $183, %eax
  119. pushl %eax
  120. movl 8(%ebp), %eax
  121. movl %eax, %ebx
  122. movl 12(%ebp), %eax
  123. movl %eax, %ecx
  124. popl %eax
  125. int $0x80
  126. leave
  127. ret
  128. align:
  129. pushl %ebp
  130. movl %esp, %ebp
  131. movl 8(%ebp), %eax
  132. movl %eax, %ebx
  133. movl 12(%ebp), %eax
  134. addl %ebx, %eax
  135. pushl %eax
  136. movl $1, %eax
  137. movl %eax, %ebx
  138. popl %eax
  139. subl %ebx, %eax
  140. movl %eax, %ebx
  141. movl 12(%ebp), %eax
  142. pushl %ebx
  143. pushl %eax
  144. movl $1, %eax
  145. movl %eax, %ebx
  146. popl %eax
  147. subl %ebx, %eax
  148. popl %ebx
  149. notl %eax
  150. andl %ebx, %eax
  151. leave
  152. ret
  153. align_down:
  154. pushl %ebp
  155. movl %esp, %ebp
  156. movl 8(%ebp), %eax
  157. pushl %eax
  158. movl 8(%ebp), %eax
  159. pushl %ebx
  160. movl %eax, %ebx
  161. movl 12(%ebp), %eax
  162. pushl %ebx
  163. pushl %eax
  164. movl $1, %eax
  165. movl %eax, %ebx
  166. popl %eax
  167. subl %ebx, %eax
  168. popl %ebx
  169. andl %ebx, %eax
  170. popl %ebx
  171. movl %eax, %ebx
  172. popl %eax
  173. subl %ebx, %eax
  174. leave
  175. ret
  176. .data
  177. utoa_digits:.long strbuf+0
  178. .text
  179. utoa:
  180. pushl %ebp
  181. movl %esp, %ebp
  182. subl $12, %esp
  183. movl $0, %eax
  184. movl %eax, -4(%ebp)
  185. movl $0, %eax
  186. movl %eax, -8(%ebp)
  187. movl 12(%ebp), %eax
  188. movl %eax, %edx
  189. movl -4(%ebp), %eax
  190. addl %eax, %edx
  191. movl utoa_digits, %eax
  192. pushl %edx
  193. movl %eax, %edx
  194. movl 8(%ebp), %eax
  195. pushl %edx
  196. pushl %eax
  197. movl 16(%ebp), %eax
  198. movl %eax, %ebx
  199. popl %eax
  200. movl $0, %edx
  201. divl %ebx
  202. movl %edx, %eax
  203. popl %edx
  204. addl %eax, %edx
  205. movsbl (%edx), %eax
  206. popl %edx
  207. movb %al, (%edx)
  208. movl 8(%ebp), %eax
  209. pushl %eax
  210. movl 16(%ebp), %eax
  211. movl %eax, %ebx
  212. popl %eax
  213. movl $0, %edx
  214. divl %ebx
  215. movl %eax, 8(%ebp)
  216. movl -4(%ebp), %eax
  217. movl %eax, %ebx
  218. movl $1, %eax
  219. addl %ebx, %eax
  220. movl %eax, -4(%ebp)
  221. _label0:
  222. movl 8(%ebp), %eax
  223. movl %eax, %edx
  224. movl $0, %eax
  225. cmpl %eax, %edx
  226. setne %al
  227. movzbl %al, %eax
  228. cmpl $0, %eax
  229. je _label1
  230. movl 12(%ebp), %eax
  231. movl %eax, %edx
  232. movl -4(%ebp), %eax
  233. addl %eax, %edx
  234. movl utoa_digits, %eax
  235. pushl %edx
  236. movl %eax, %edx
  237. movl 8(%ebp), %eax
  238. pushl %edx
  239. pushl %eax
  240. movl 16(%ebp), %eax
  241. movl %eax, %ebx
  242. popl %eax
  243. movl $0, %edx
  244. divl %ebx
  245. movl %edx, %eax
  246. popl %edx
  247. addl %eax, %edx
  248. movsbl (%edx), %eax
  249. popl %edx
  250. movb %al, (%edx)
  251. movl 8(%ebp), %eax
  252. pushl %eax
  253. movl 16(%ebp), %eax
  254. movl %eax, %ebx
  255. popl %eax
  256. movl $0, %edx
  257. divl %ebx
  258. movl %eax, 8(%ebp)
  259. movl -4(%ebp), %eax
  260. movl %eax, %ebx
  261. movl $1, %eax
  262. addl %ebx, %eax
  263. movl %eax, -4(%ebp)
  264. jmp _label0
  265. _label1:
  266. movl 12(%ebp), %eax
  267. movl %eax, %edx
  268. movl -4(%ebp), %eax
  269. addl %eax, %edx
  270. movl $0, %eax
  271. movb %al, (%edx)
  272. _label2:
  273. movl -8(%ebp), %eax
  274. movl %eax, %edx
  275. movl -4(%ebp), %eax
  276. cmpl %eax, %edx
  277. setl %al
  278. movzbl %al, %eax
  279. cmpl $0, %eax
  280. je _label3
  281. movl -4(%ebp), %eax
  282. pushl %eax
  283. movl $1, %eax
  284. movl %eax, %ebx
  285. popl %eax
  286. subl %ebx, %eax
  287. movl %eax, -4(%ebp)
  288. movl 12(%ebp), %eax
  289. movl %eax, %edx
  290. movl -8(%ebp), %eax
  291. addl %eax, %edx
  292. movsbl (%edx), %eax
  293. movl %eax, -12(%ebp)
  294. movl 12(%ebp), %eax
  295. movl %eax, %edx
  296. movl -8(%ebp), %eax
  297. addl %eax, %edx
  298. movl 12(%ebp), %eax
  299. pushl %edx
  300. movl %eax, %edx
  301. movl -4(%ebp), %eax
  302. addl %eax, %edx
  303. movsbl (%edx), %eax
  304. popl %edx
  305. movb %al, (%edx)
  306. movl 12(%ebp), %eax
  307. movl %eax, %edx
  308. movl -4(%ebp), %eax
  309. addl %eax, %edx
  310. movl -12(%ebp), %eax
  311. movb %al, (%edx)
  312. movl -8(%ebp), %eax
  313. movl %eax, %ebx
  314. movl $1, %eax
  315. addl %ebx, %eax
  316. movl %eax, -8(%ebp)
  317. jmp _label2
  318. _label3:
  319. movl 12(%ebp), %eax
  320. leave
  321. ret
  322. .data
  323. free_start:.long 0
  324. free_end:.long 0
  325. .text
  326. allocate_new_page:
  327. pushl %ebp
  328. movl %esp, %ebp
  329. movl free_end, %eax
  330. movl %eax, %edx
  331. movl $0, %eax
  332. cmpl %eax, %edx
  333. sete %al
  334. movzbl %al, %eax
  335. cmpl $0, %eax
  336. je _label4
  337. subl $4, %esp
  338. movl $0, %eax
  339. movl %eax, 0(%esp)
  340. call brk
  341. addl $4, %esp
  342. movl %eax, free_end
  343. movl free_end, %eax
  344. movl %eax, free_start
  345. _label4:
  346. subl $4, %esp
  347. movl free_end, %eax
  348. pushl %ebx
  349. movl %eax, %ebx
  350. movl $4096, %eax
  351. addl %ebx, %eax
  352. popl %ebx
  353. movl %eax, 0(%esp)
  354. call brk
  355. addl $4, %esp
  356. movl %eax, free_end
  357. leave
  358. ret
  359. malloc:
  360. pushl %ebp
  361. movl %esp, %ebp
  362. subl $4, %esp
  363. _label5:
  364. movl free_start, %eax
  365. movl %eax, %ebx
  366. movl 8(%ebp), %eax
  367. addl %ebx, %eax
  368. movl %eax, %edx
  369. movl free_end, %eax
  370. cmpl %eax, %edx
  371. setg %al
  372. movzbl %al, %eax
  373. cmpl $0, %eax
  374. je _label6
  375. call allocate_new_page
  376. jmp _label5
  377. _label6:
  378. movl free_start, %eax
  379. movl %eax, -4(%ebp)
  380. movl -4(%ebp), %eax
  381. movl %eax, %ebx
  382. movl 8(%ebp), %eax
  383. addl %ebx, %eax
  384. movl %eax, free_start
  385. movl -4(%ebp), %eax
  386. leave
  387. ret
  388. free:
  389. pushl %ebp
  390. movl %esp, %ebp
  391. leave
  392. ret
  393. calloc:
  394. pushl %ebp
  395. movl %esp, %ebp
  396. subl $4, %esp
  397. subl $4, %esp
  398. movl 8(%ebp), %eax
  399. movl %eax, 0(%esp)
  400. call malloc
  401. addl $4, %esp
  402. movl %eax, -4(%ebp)
  403. subl $12, %esp
  404. movl $0, %eax
  405. movl %eax, 0(%esp)
  406. movl -4(%ebp), %eax
  407. movl %eax, 4(%esp)
  408. movl 8(%ebp), %eax
  409. movl %eax, 8(%esp)
  410. call memset
  411. addl $12, %esp
  412. movl -4(%ebp), %eax
  413. leave
  414. ret
  415. realloc:
  416. pushl %ebp
  417. movl %esp, %ebp
  418. subl $8, %esp
  419. movl 12(%ebp), %eax
  420. movl %eax, -4(%ebp)
  421. movl 16(%ebp), %eax
  422. movl %eax, %edx
  423. movl 12(%ebp), %eax
  424. cmpl %eax, %edx
  425. setl %al
  426. movzbl %al, %eax
  427. cmpl $0, %eax
  428. je _label7
  429. movl 16(%ebp), %eax
  430. movl %eax, -4(%ebp)
  431. _label7:
  432. subl $4, %esp
  433. movl 16(%ebp), %eax
  434. movl %eax, 0(%esp)
  435. call calloc
  436. addl $4, %esp
  437. movl %eax, -8(%ebp)
  438. subl $12, %esp
  439. movl 8(%ebp), %eax
  440. movl %eax, 0(%esp)
  441. movl -8(%ebp), %eax
  442. movl %eax, 4(%esp)
  443. movl -4(%ebp), %eax
  444. movl %eax, 8(%esp)
  445. call memcpy
  446. addl $12, %esp
  447. subl $4, %esp
  448. movl 8(%ebp), %eax
  449. movl %eax, 0(%esp)
  450. call free
  451. addl $4, %esp
  452. movl -8(%ebp), %eax
  453. leave
  454. ret
  455. memset:
  456. pushl %ebp
  457. movl %esp, %ebp
  458. subl $4, %esp
  459. movl $0, %eax
  460. movl %eax, -4(%ebp)
  461. _label8:
  462. movl -4(%ebp), %eax
  463. movl %eax, %edx
  464. movl 16(%ebp), %eax
  465. cmpl %eax, %edx
  466. setl %al
  467. movzbl %al, %eax
  468. cmpl $0, %eax
  469. je _label9
  470. movl 12(%ebp), %eax
  471. movl %eax, %edx
  472. movl -4(%ebp), %eax
  473. addl %eax, %edx
  474. movl 8(%ebp), %eax
  475. movb %al, (%edx)
  476. movl -4(%ebp), %eax
  477. movl %eax, %ebx
  478. movl $1, %eax
  479. addl %ebx, %eax
  480. movl %eax, -4(%ebp)
  481. jmp _label8
  482. _label9:
  483. leave
  484. ret
  485. memcpy:
  486. pushl %ebp
  487. movl %esp, %ebp
  488. subl $4, %esp
  489. movl $0, %eax
  490. movl %eax, -4(%ebp)
  491. _label10:
  492. movl -4(%ebp), %eax
  493. movl %eax, %edx
  494. movl 16(%ebp), %eax
  495. cmpl %eax, %edx
  496. setl %al
  497. movzbl %al, %eax
  498. cmpl $0, %eax
  499. je _label11
  500. movl 12(%ebp), %eax
  501. movl %eax, %edx
  502. movl -4(%ebp), %eax
  503. addl %eax, %edx
  504. movl 8(%ebp), %eax
  505. pushl %edx
  506. movl %eax, %edx
  507. movl -4(%ebp), %eax
  508. addl %eax, %edx
  509. movsbl (%edx), %eax
  510. popl %edx
  511. movb %al, (%edx)
  512. movl -4(%ebp), %eax
  513. movl %eax, %ebx
  514. movl $1, %eax
  515. addl %ebx, %eax
  516. movl %eax, -4(%ebp)
  517. jmp _label10
  518. _label11:
  519. leave
  520. ret
  521. strlen:
  522. pushl %ebp
  523. movl %esp, %ebp
  524. subl $4, %esp
  525. movl $0, %eax
  526. movl %eax, -4(%ebp)
  527. _label12:
  528. movl 8(%ebp), %eax
  529. movl %eax, %edx
  530. movl -4(%ebp), %eax
  531. addl %eax, %edx
  532. movsbl (%edx), %eax
  533. movl %eax, %edx
  534. movl $0, %eax
  535. cmpl %eax, %edx
  536. setne %al
  537. movzbl %al, %eax
  538. cmpl $0, %eax
  539. je _label13
  540. movl -4(%ebp), %eax
  541. movl %eax, %ebx
  542. movl $1, %eax
  543. addl %ebx, %eax
  544. movl %eax, -4(%ebp)
  545. jmp _label12
  546. _label13:
  547. movl -4(%ebp), %eax
  548. leave
  549. ret
  550. stresclen:
  551. pushl %ebp
  552. movl %esp, %ebp
  553. subl $4, %esp
  554. movl $0, %eax
  555. movl %eax, -4(%ebp)
  556. _label14:
  557. movl 8(%ebp), %eax
  558. movl %eax, %edx
  559. movl $0, %eax
  560. addl %eax, %edx
  561. movsbl (%edx), %eax
  562. movl %eax, %edx
  563. movl $0, %eax
  564. cmpl %eax, %edx
  565. setne %al
  566. movzbl %al, %eax
  567. cmpl $0, %eax
  568. je _label15
  569. movl 8(%ebp), %eax
  570. movl %eax, %edx
  571. movl $0, %eax
  572. addl %eax, %edx
  573. movsbl (%edx), %eax
  574. movl %eax, %edx
  575. movl $92, %eax
  576. cmpl %eax, %edx
  577. sete %al
  578. movzbl %al, %eax
  579. cmpl $0, %eax
  580. je _label16
  581. movl 8(%ebp), %eax
  582. movl %eax, %ebx
  583. movl $1, %eax
  584. addl %ebx, %eax
  585. movl %eax, 8(%ebp)
  586. _label16:
  587. movl 8(%ebp), %eax
  588. movl %eax, %ebx
  589. movl $1, %eax
  590. addl %ebx, %eax
  591. movl %eax, 8(%ebp)
  592. movl -4(%ebp), %eax
  593. movl %eax, %ebx
  594. movl $1, %eax
  595. addl %ebx, %eax
  596. movl %eax, -4(%ebp)
  597. jmp _label14
  598. _label15:
  599. movl -4(%ebp), %eax
  600. leave
  601. ret
  602. strcpy:
  603. pushl %ebp
  604. movl %esp, %ebp
  605. subl $8, %esp
  606. movl $0, %eax
  607. movl %eax, -4(%ebp)
  608. movl 8(%ebp), %eax
  609. movl %eax, %edx
  610. movl -4(%ebp), %eax
  611. addl %eax, %edx
  612. movsbl (%edx), %eax
  613. movl %eax, -8(%ebp)
  614. _label17:
  615. movl -8(%ebp), %eax
  616. movl %eax, %edx
  617. movl $0, %eax
  618. cmpl %eax, %edx
  619. setne %al
  620. movzbl %al, %eax
  621. cmpl $0, %eax
  622. je _label18
  623. movl 12(%ebp), %eax
  624. movl %eax, %edx
  625. movl -4(%ebp), %eax
  626. addl %eax, %edx
  627. movl -8(%ebp), %eax
  628. movb %al, (%edx)
  629. movl -4(%ebp), %eax
  630. movl %eax, %ebx
  631. movl $1, %eax
  632. addl %ebx, %eax
  633. movl %eax, -4(%ebp)
  634. movl 8(%ebp), %eax
  635. movl %eax, %edx
  636. movl -4(%ebp), %eax
  637. addl %eax, %edx
  638. movsbl (%edx), %eax
  639. movl %eax, -8(%ebp)
  640. jmp _label17
  641. _label18:
  642. movl 12(%ebp), %eax
  643. movl %eax, %edx
  644. movl -4(%ebp), %eax
  645. addl %eax, %edx
  646. movl $0, %eax
  647. movb %al, (%edx)
  648. movl -4(%ebp), %eax
  649. leave
  650. ret
  651. strcmp:
  652. pushl %ebp
  653. movl %esp, %ebp
  654. subl $12, %esp
  655. movl $0, %eax
  656. movl %eax, -4(%ebp)
  657. movl 8(%ebp), %eax
  658. movl %eax, %edx
  659. movl -4(%ebp), %eax
  660. addl %eax, %edx
  661. movsbl (%edx), %eax
  662. movl %eax, -8(%ebp)
  663. movl 12(%ebp), %eax
  664. movl %eax, %edx
  665. movl -4(%ebp), %eax
  666. addl %eax, %edx
  667. movsbl (%edx), %eax
  668. movl %eax, -12(%ebp)
  669. _label19:
  670. movl -8(%ebp), %eax
  671. movl %eax, %edx
  672. movl $0, %eax
  673. cmpl %eax, %edx
  674. setne %al
  675. movzbl %al, %eax
  676. cmpl $0, %eax
  677. je _label20
  678. movl -8(%ebp), %eax
  679. movl %eax, %edx
  680. movl -12(%ebp), %eax
  681. cmpl %eax, %edx
  682. setne %al
  683. movzbl %al, %eax
  684. cmpl $0, %eax
  685. je _label21
  686. movl -8(%ebp), %eax
  687. pushl %eax
  688. movl -12(%ebp), %eax
  689. movl %eax, %ebx
  690. popl %eax
  691. subl %ebx, %eax
  692. leave
  693. ret
  694. _label21:
  695. movl -4(%ebp), %eax
  696. movl %eax, %ebx
  697. movl $1, %eax
  698. addl %ebx, %eax
  699. movl %eax, -4(%ebp)
  700. movl 8(%ebp), %eax
  701. movl %eax, %edx
  702. movl -4(%ebp), %eax
  703. addl %eax, %edx
  704. movsbl (%edx), %eax
  705. movl %eax, -8(%ebp)
  706. movl 12(%ebp), %eax
  707. movl %eax, %edx
  708. movl -4(%ebp), %eax
  709. addl %eax, %edx
  710. movsbl (%edx), %eax
  711. movl %eax, -12(%ebp)
  712. jmp _label19
  713. _label20:
  714. movl -8(%ebp), %eax
  715. pushl %eax
  716. movl -12(%ebp), %eax
  717. movl %eax, %ebx
  718. popl %eax
  719. subl %ebx, %eax
  720. leave
  721. ret
  722. strdup:
  723. pushl %ebp
  724. movl %esp, %ebp
  725. subl $8, %esp
  726. subl $4, %esp
  727. movl 8(%ebp), %eax
  728. movl %eax, 0(%esp)
  729. call strlen
  730. addl $4, %esp
  731. movl %eax, -4(%ebp)
  732. subl $4, %esp
  733. movl -4(%ebp), %eax
  734. pushl %ebx
  735. movl %eax, %ebx
  736. movl $1, %eax
  737. addl %ebx, %eax
  738. popl %ebx
  739. movl %eax, 0(%esp)
  740. call calloc
  741. addl $4, %esp
  742. movl %eax, -8(%ebp)
  743. subl $12, %esp
  744. movl 8(%ebp), %eax
  745. movl %eax, 0(%esp)
  746. movl -8(%ebp), %eax
  747. movl %eax, 4(%esp)
  748. movl -4(%ebp), %eax
  749. movl %eax, 8(%esp)
  750. call memcpy
  751. addl $12, %esp
  752. movl -8(%ebp), %eax
  753. leave
  754. ret
  755. strlitdup:
  756. pushl %ebp
  757. movl %esp, %ebp
  758. subl $8, %esp
  759. subl $4, %esp
  760. movl 8(%ebp), %eax
  761. movl %eax, 0(%esp)
  762. call strlen
  763. addl $4, %esp
  764. pushl %eax
  765. movl $2, %eax
  766. movl %eax, %ebx
  767. popl %eax
  768. subl %ebx, %eax
  769. movl %eax, -4(%ebp)
  770. subl $4, %esp
  771. movl -4(%ebp), %eax
  772. pushl %ebx
  773. movl %eax, %ebx
  774. movl $1, %eax
  775. addl %ebx, %eax
  776. popl %ebx
  777. movl %eax, 0(%esp)
  778. call calloc
  779. addl $4, %esp
  780. movl %eax, -8(%ebp)
  781. subl $12, %esp
  782. movl 8(%ebp), %eax
  783. pushl %ebx
  784. movl %eax, %ebx
  785. movl $1, %eax
  786. addl %ebx, %eax
  787. popl %ebx
  788. movl %eax, 0(%esp)
  789. movl -8(%ebp), %eax
  790. movl %eax, 4(%esp)
  791. movl -4(%ebp), %eax
  792. movl %eax, 8(%esp)
  793. call memcpy
  794. addl $12, %esp
  795. movl -8(%ebp), %eax
  796. leave
  797. ret
  798. allocate_tuple:
  799. pushl %ebp
  800. movl %esp, %ebp
  801. subl $4, %esp
  802. movl $4, %eax
  803. pushl %ebx
  804. movl %eax, %ebx
  805. movl 8(%ebp), %eax
  806. imull %ebx, %eax
  807. popl %ebx
  808. movl %eax, 0(%esp)
  809. call malloc
  810. addl $4, %esp
  811. leave
  812. ret
  813. tuple1:
  814. pushl %ebp
  815. movl %esp, %ebp
  816. subl $4, %esp
  817. subl $4, %esp
  818. movl $1, %eax
  819. movl %eax, 0(%esp)
  820. call allocate_tuple
  821. addl $4, %esp
  822. movl %eax, -4(%ebp)
  823. movl -4(%ebp), %eax
  824. movl %eax, %edx
  825. movl $0, %eax
  826. leal (%edx,%eax,4), %eax
  827. movl %eax, %ebx
  828. movl 8(%ebp), %eax
  829. movl %eax, (%ebx)
  830. movl -4(%ebp), %eax
  831. leave
  832. ret
  833. tuple2:
  834. pushl %ebp
  835. movl %esp, %ebp
  836. subl $4, %esp
  837. subl $4, %esp
  838. movl $2, %eax
  839. movl %eax, 0(%esp)
  840. call allocate_tuple
  841. addl $4, %esp
  842. movl %eax, -4(%ebp)
  843. movl -4(%ebp), %eax
  844. movl %eax, %edx
  845. movl $0, %eax
  846. leal (%edx,%eax,4), %eax
  847. movl %eax, %ebx
  848. movl 8(%ebp), %eax
  849. movl %eax, (%ebx)
  850. movl -4(%ebp), %eax
  851. movl %eax, %edx
  852. movl $1, %eax
  853. leal (%edx,%eax,4), %eax
  854. movl %eax, %ebx
  855. movl 12(%ebp), %eax
  856. movl %eax, (%ebx)
  857. movl -4(%ebp), %eax
  858. leave
  859. ret
  860. tuple3:
  861. pushl %ebp
  862. movl %esp, %ebp
  863. subl $4, %esp
  864. subl $4, %esp
  865. movl $3, %eax
  866. movl %eax, 0(%esp)
  867. call allocate_tuple
  868. addl $4, %esp
  869. movl %eax, -4(%ebp)
  870. movl -4(%ebp), %eax
  871. movl %eax, %edx
  872. movl $0, %eax
  873. leal (%edx,%eax,4), %eax
  874. movl %eax, %ebx
  875. movl 8(%ebp), %eax
  876. movl %eax, (%ebx)
  877. movl -4(%ebp), %eax
  878. movl %eax, %edx
  879. movl $1, %eax
  880. leal (%edx,%eax,4), %eax
  881. movl %eax, %ebx
  882. movl 12(%ebp), %eax
  883. movl %eax, (%ebx)
  884. movl -4(%ebp), %eax
  885. movl %eax, %edx
  886. movl $2, %eax
  887. leal (%edx,%eax,4), %eax
  888. movl %eax, %ebx
  889. movl 16(%ebp), %eax
  890. movl %eax, (%ebx)
  891. movl -4(%ebp), %eax
  892. leave
  893. ret
  894. tuple4:
  895. pushl %ebp
  896. movl %esp, %ebp
  897. subl $4, %esp
  898. subl $4, %esp
  899. movl $4, %eax
  900. movl %eax, 0(%esp)
  901. call allocate_tuple
  902. addl $4, %esp
  903. movl %eax, -4(%ebp)
  904. movl -4(%ebp), %eax
  905. movl %eax, %edx
  906. movl $0, %eax
  907. leal (%edx,%eax,4), %eax
  908. movl %eax, %ebx
  909. movl 8(%ebp), %eax
  910. movl %eax, (%ebx)
  911. movl -4(%ebp), %eax
  912. movl %eax, %edx
  913. movl $1, %eax
  914. leal (%edx,%eax,4), %eax
  915. movl %eax, %ebx
  916. movl 12(%ebp), %eax
  917. movl %eax, (%ebx)
  918. movl -4(%ebp), %eax
  919. movl %eax, %edx
  920. movl $2, %eax
  921. leal (%edx,%eax,4), %eax
  922. movl %eax, %ebx
  923. movl 16(%ebp), %eax
  924. movl %eax, (%ebx)
  925. movl -4(%ebp), %eax
  926. movl %eax, %edx
  927. movl $3, %eax
  928. leal (%edx,%eax,4), %eax
  929. movl %eax, %ebx
  930. movl 20(%ebp), %eax
  931. movl %eax, (%ebx)
  932. movl -4(%ebp), %eax
  933. leave
  934. ret
  935. tuple5:
  936. pushl %ebp
  937. movl %esp, %ebp
  938. subl $4, %esp
  939. subl $4, %esp
  940. movl $5, %eax
  941. movl %eax, 0(%esp)
  942. call allocate_tuple
  943. addl $4, %esp
  944. movl %eax, -4(%ebp)
  945. movl -4(%ebp), %eax
  946. movl %eax, %edx
  947. movl $0, %eax
  948. leal (%edx,%eax,4), %eax
  949. movl %eax, %ebx
  950. movl 8(%ebp), %eax
  951. movl %eax, (%ebx)
  952. movl -4(%ebp), %eax
  953. movl %eax, %edx
  954. movl $1, %eax
  955. leal (%edx,%eax,4), %eax
  956. movl %eax, %ebx
  957. movl 12(%ebp), %eax
  958. movl %eax, (%ebx)
  959. movl -4(%ebp), %eax
  960. movl %eax, %edx
  961. movl $2, %eax
  962. leal (%edx,%eax,4), %eax
  963. movl %eax, %ebx
  964. movl 16(%ebp), %eax
  965. movl %eax, (%ebx)
  966. movl -4(%ebp), %eax
  967. movl %eax, %edx
  968. movl $3, %eax
  969. leal (%edx,%eax,4), %eax
  970. movl %eax, %ebx
  971. movl 20(%ebp), %eax
  972. movl %eax, (%ebx)
  973. movl -4(%ebp), %eax
  974. movl %eax, %edx
  975. movl $4, %eax
  976. leal (%edx,%eax,4), %eax
  977. movl %eax, %ebx
  978. movl 24(%ebp), %eax
  979. movl %eax, (%ebx)
  980. movl -4(%ebp), %eax
  981. leave
  982. ret
  983. tuple6:
  984. pushl %ebp
  985. movl %esp, %ebp
  986. subl $4, %esp
  987. subl $4, %esp
  988. movl $6, %eax
  989. movl %eax, 0(%esp)
  990. call allocate_tuple
  991. addl $4, %esp
  992. movl %eax, -4(%ebp)
  993. movl -4(%ebp), %eax
  994. movl %eax, %edx
  995. movl $0, %eax
  996. leal (%edx,%eax,4), %eax
  997. movl %eax, %ebx
  998. movl 8(%ebp), %eax
  999. movl %eax, (%ebx)
  1000. movl -4(%ebp), %eax
  1001. movl %eax, %edx
  1002. movl $1, %eax
  1003. leal (%edx,%eax,4), %eax
  1004. movl %eax, %ebx
  1005. movl 12(%ebp), %eax
  1006. movl %eax, (%ebx)
  1007. movl -4(%ebp), %eax
  1008. movl %eax, %edx
  1009. movl $2, %eax
  1010. leal (%edx,%eax,4), %eax
  1011. movl %eax, %ebx
  1012. movl 16(%ebp), %eax
  1013. movl %eax, (%ebx)
  1014. movl -4(%ebp), %eax
  1015. movl %eax, %edx
  1016. movl $3, %eax
  1017. leal (%edx,%eax,4), %eax
  1018. movl %eax, %ebx
  1019. movl 20(%ebp), %eax
  1020. movl %eax, (%ebx)
  1021. movl -4(%ebp), %eax
  1022. movl %eax, %edx
  1023. movl $4, %eax
  1024. leal (%edx,%eax,4), %eax
  1025. movl %eax, %ebx
  1026. movl 24(%ebp), %eax
  1027. movl %eax, (%ebx)
  1028. movl -4(%ebp), %eax
  1029. movl %eax, %edx
  1030. movl $5, %eax
  1031. leal (%edx,%eax,4), %eax
  1032. movl %eax, %ebx
  1033. movl 28(%ebp), %eax
  1034. movl %eax, (%ebx)
  1035. movl -4(%ebp), %eax
  1036. leave
  1037. ret
  1038. tuple7:
  1039. pushl %ebp
  1040. movl %esp, %ebp
  1041. subl $4, %esp
  1042. subl $4, %esp
  1043. movl $7, %eax
  1044. movl %eax, 0(%esp)
  1045. call allocate_tuple
  1046. addl $4, %esp
  1047. movl %eax, -4(%ebp)
  1048. movl -4(%ebp), %eax
  1049. movl %eax, %edx
  1050. movl $0, %eax
  1051. leal (%edx,%eax,4), %eax
  1052. movl %eax, %ebx
  1053. movl 8(%ebp), %eax
  1054. movl %eax, (%ebx)
  1055. movl -4(%ebp), %eax
  1056. movl %eax, %edx
  1057. movl $1, %eax
  1058. leal (%edx,%eax,4), %eax
  1059. movl %eax, %ebx
  1060. movl 12(%ebp), %eax
  1061. movl %eax, (%ebx)
  1062. movl -4(%ebp), %eax
  1063. movl %eax, %edx
  1064. movl $2, %eax
  1065. leal (%edx,%eax,4), %eax
  1066. movl %eax, %ebx
  1067. movl 16(%ebp), %eax
  1068. movl %eax, (%ebx)
  1069. movl -4(%ebp), %eax
  1070. movl %eax, %edx
  1071. movl $3, %eax
  1072. leal (%edx,%eax,4), %eax
  1073. movl %eax, %ebx
  1074. movl 20(%ebp), %eax
  1075. movl %eax, (%ebx)
  1076. movl -4(%ebp), %eax
  1077. movl %eax, %edx
  1078. movl $4, %eax
  1079. leal (%edx,%eax,4), %eax
  1080. movl %eax, %ebx
  1081. movl 24(%ebp), %eax
  1082. movl %eax, (%ebx)
  1083. movl -4(%ebp), %eax
  1084. movl %eax, %edx
  1085. movl $5, %eax
  1086. leal (%edx,%eax,4), %eax
  1087. movl %eax, %ebx
  1088. movl 28(%ebp), %eax
  1089. movl %eax, (%ebx)
  1090. movl -4(%ebp), %eax
  1091. movl %eax, %edx
  1092. movl $6, %eax
  1093. leal (%edx,%eax,4), %eax
  1094. movl %eax, %ebx
  1095. movl 32(%ebp), %eax
  1096. movl %eax, (%ebx)
  1097. movl -4(%ebp), %eax
  1098. leave
  1099. ret
  1100. tuple8:
  1101. pushl %ebp
  1102. movl %esp, %ebp
  1103. subl $4, %esp
  1104. subl $4, %esp
  1105. movl $8, %eax
  1106. movl %eax, 0(%esp)
  1107. call allocate_tuple
  1108. addl $4, %esp
  1109. movl %eax, -4(%ebp)
  1110. movl -4(%ebp), %eax
  1111. movl %eax, %edx
  1112. movl $0, %eax
  1113. leal (%edx,%eax,4), %eax
  1114. movl %eax, %ebx
  1115. movl 8(%ebp), %eax
  1116. movl %eax, (%ebx)
  1117. movl -4(%ebp), %eax
  1118. movl %eax, %edx
  1119. movl $1, %eax
  1120. leal (%edx,%eax,4), %eax
  1121. movl %eax, %ebx
  1122. movl 12(%ebp), %eax
  1123. movl %eax, (%ebx)
  1124. movl -4(%ebp), %eax
  1125. movl %eax, %edx
  1126. movl $2, %eax
  1127. leal (%edx,%eax,4), %eax
  1128. movl %eax, %ebx
  1129. movl 16(%ebp), %eax
  1130. movl %eax, (%ebx)
  1131. movl -4(%ebp), %eax
  1132. movl %eax, %edx
  1133. movl $3, %eax
  1134. leal (%edx,%eax,4), %eax
  1135. movl %eax, %ebx
  1136. movl 20(%ebp), %eax
  1137. movl %eax, (%ebx)
  1138. movl -4(%ebp), %eax
  1139. movl %eax, %edx
  1140. movl $4, %eax
  1141. leal (%edx,%eax,4), %eax
  1142. movl %eax, %ebx
  1143. movl 24(%ebp), %eax
  1144. movl %eax, (%ebx)
  1145. movl -4(%ebp), %eax
  1146. movl %eax, %edx
  1147. movl $5, %eax
  1148. leal (%edx,%eax,4), %eax
  1149. movl %eax, %ebx
  1150. movl 28(%ebp), %eax
  1151. movl %eax, (%ebx)
  1152. movl -4(%ebp), %eax
  1153. movl %eax, %edx
  1154. movl $6, %eax
  1155. leal (%edx,%eax,4), %eax
  1156. movl %eax, %ebx
  1157. movl 32(%ebp), %eax
  1158. movl %eax, (%ebx)
  1159. movl -4(%ebp), %eax
  1160. movl %eax, %edx
  1161. movl $7, %eax
  1162. leal (%edx,%eax,4), %eax
  1163. movl %eax, %ebx
  1164. movl 36(%ebp), %eax
  1165. movl %eax, (%ebx)
  1166. movl -4(%ebp), %eax
  1167. leave
  1168. ret
  1169. list:
  1170. pushl %ebp
  1171. movl %esp, %ebp
  1172. subl $8, %esp
  1173. movl $0, %eax
  1174. movl %eax, 0(%esp)
  1175. movl 8(%ebp), %eax
  1176. movl %eax, 4(%esp)
  1177. call list_insert
  1178. addl $8, %esp
  1179. leave
  1180. ret
  1181. list_insert:
  1182. pushl %ebp
  1183. movl %esp, %ebp
  1184. subl $8, %esp
  1185. movl 8(%ebp), %eax
  1186. movl %eax, 0(%esp)
  1187. movl 12(%ebp), %eax
  1188. movl %eax, 4(%esp)
  1189. call tuple2
  1190. addl $8, %esp
  1191. leave
  1192. ret
  1193. list_next:
  1194. pushl %ebp
  1195. movl %esp, %ebp
  1196. movl 8(%ebp), %eax
  1197. movl %eax, %edx
  1198. movl $0, %eax
  1199. leal (%edx,%eax,4), %eax
  1200. movl (%eax), %eax
  1201. leave
  1202. ret
  1203. list_value:
  1204. pushl %ebp
  1205. movl %esp, %ebp
  1206. movl 8(%ebp), %eax
  1207. movl %eax, %edx
  1208. movl $1, %eax
  1209. leal (%edx,%eax,4), %eax
  1210. movl (%eax), %eax
  1211. leave
  1212. ret
  1213. list_pop:
  1214. pushl %ebp
  1215. movl %esp, %ebp
  1216. subl $4, %esp
  1217. subl $4, %esp
  1218. movl 8(%ebp), %eax
  1219. movl %eax, 0(%esp)
  1220. call list_next
  1221. addl $4, %esp
  1222. movl %eax, -4(%ebp)
  1223. subl $4, %esp
  1224. movl 8(%ebp), %eax
  1225. movl %eax, 0(%esp)
  1226. call free
  1227. addl $4, %esp
  1228. movl -4(%ebp), %eax
  1229. leave
  1230. ret
  1231. char_vector:
  1232. pushl %ebp
  1233. movl %esp, %ebp
  1234. subl $12, %esp
  1235. movl 8(%ebp), %eax
  1236. movl %eax, 0(%esp)
  1237. movl 12(%ebp), %eax
  1238. movl %eax, 4(%esp)
  1239. pushl %ebx
  1240. pushl %ecx
  1241. pushl %edx
  1242. pushl %esi
  1243. pushl %edi
  1244. subl $4, %esp
  1245. movl 12(%ebp), %eax
  1246. movl %eax, 0(%esp)
  1247. call calloc
  1248. addl $4, %esp
  1249. popl %edi
  1250. popl %esi
  1251. popl %edx
  1252. popl %ecx
  1253. popl %ebx
  1254. movl %eax, 8(%esp)
  1255. call tuple3
  1256. addl $12, %esp
  1257. leave
  1258. ret
  1259. vector:
  1260. pushl %ebp
  1261. movl %esp, %ebp
  1262. subl $12, %esp
  1263. movl 8(%ebp), %eax
  1264. movl %eax, 0(%esp)
  1265. movl 12(%ebp), %eax
  1266. movl %eax, 4(%esp)
  1267. pushl %ebx
  1268. pushl %ecx
  1269. pushl %edx
  1270. pushl %esi
  1271. pushl %edi
  1272. subl $4, %esp
  1273. movl $4, %eax
  1274. pushl %ebx
  1275. movl %eax, %ebx
  1276. movl 12(%ebp), %eax
  1277. imull %ebx, %eax
  1278. popl %ebx
  1279. movl %eax, 0(%esp)
  1280. call calloc
  1281. addl $4, %esp
  1282. popl %edi
  1283. popl %esi
  1284. popl %edx
  1285. popl %ecx
  1286. popl %ebx
  1287. movl %eax, 8(%esp)
  1288. call tuple3
  1289. addl $12, %esp
  1290. leave
  1291. ret
  1292. vector_buffer:
  1293. pushl %ebp
  1294. movl %esp, %ebp
  1295. movl 8(%ebp), %eax
  1296. movl %eax, %edx
  1297. movl $2, %eax
  1298. leal (%edx,%eax,4), %eax
  1299. movl (%eax), %eax
  1300. leave
  1301. ret
  1302. vector_size:
  1303. pushl %ebp
  1304. movl %esp, %ebp
  1305. movl 8(%ebp), %eax
  1306. movl %eax, %edx
  1307. movl $0, %eax
  1308. leal (%edx,%eax,4), %eax
  1309. movl (%eax), %eax
  1310. leave
  1311. ret
  1312. char_vector_reserve:
  1313. pushl %ebp
  1314. movl %esp, %ebp
  1315. movl 12(%ebp), %eax
  1316. movl %eax, %edx
  1317. movl 8(%ebp), %eax
  1318. pushl %edx
  1319. movl %eax, %edx
  1320. movl $1, %eax
  1321. leal (%edx,%eax,4), %eax
  1322. popl %edx
  1323. movl (%eax), %eax
  1324. cmpl %eax, %edx
  1325. setg %al
  1326. movzbl %al, %eax
  1327. cmpl $0, %eax
  1328. je _label22
  1329. movl 8(%ebp), %eax
  1330. movl %eax, %edx
  1331. movl $2, %eax
  1332. leal (%edx,%eax,4), %eax
  1333. movl %eax, %ebx
  1334. pushl %ebx
  1335. subl $12, %esp
  1336. movl 8(%ebp), %eax
  1337. pushl %edx
  1338. movl %eax, %edx
  1339. movl $2, %eax
  1340. leal (%edx,%eax,4), %eax
  1341. popl %edx
  1342. movl (%eax), %eax
  1343. movl %eax, 0(%esp)
  1344. movl 8(%ebp), %eax
  1345. pushl %edx
  1346. movl %eax, %edx
  1347. movl $1, %eax
  1348. leal (%edx,%eax,4), %eax
  1349. popl %edx
  1350. movl (%eax), %eax
  1351. movl %eax, 4(%esp)
  1352. movl 12(%ebp), %eax
  1353. movl %eax, 8(%esp)
  1354. call realloc
  1355. addl $12, %esp
  1356. popl %ebx
  1357. movl %eax, (%ebx)
  1358. movl 8(%ebp), %eax
  1359. movl %eax, %edx
  1360. movl $1, %eax
  1361. leal (%edx,%eax,4), %eax
  1362. movl %eax, %ebx
  1363. movl 12(%ebp), %eax
  1364. movl %eax, (%ebx)
  1365. _label22:
  1366. leave
  1367. ret
  1368. vector_reserve:
  1369. pushl %ebp
  1370. movl %esp, %ebp
  1371. movl 12(%ebp), %eax
  1372. movl %eax, %edx
  1373. movl 8(%ebp), %eax
  1374. pushl %edx
  1375. movl %eax, %edx
  1376. movl $1, %eax
  1377. leal (%edx,%eax,4), %eax
  1378. popl %edx
  1379. movl (%eax), %eax
  1380. cmpl %eax, %edx
  1381. setg %al
  1382. movzbl %al, %eax
  1383. cmpl $0, %eax
  1384. je _label23
  1385. movl 8(%ebp), %eax
  1386. movl %eax, %edx
  1387. movl $2, %eax
  1388. leal (%edx,%eax,4), %eax
  1389. movl %eax, %ebx
  1390. pushl %ebx
  1391. subl $12, %esp
  1392. movl 8(%ebp), %eax
  1393. pushl %edx
  1394. movl %eax, %edx
  1395. movl $2, %eax
  1396. leal (%edx,%eax,4), %eax
  1397. popl %edx
  1398. movl (%eax), %eax
  1399. movl %eax, 0(%esp)
  1400. movl $4, %eax
  1401. pushl %ebx
  1402. movl %eax, %ebx
  1403. movl 8(%ebp), %eax
  1404. pushl %edx
  1405. movl %eax, %edx
  1406. movl $1, %eax
  1407. leal (%edx,%eax,4), %eax
  1408. popl %edx
  1409. movl (%eax), %eax
  1410. imull %ebx, %eax
  1411. popl %ebx
  1412. movl %eax, 4(%esp)
  1413. movl $4, %eax
  1414. pushl %ebx
  1415. movl %eax, %ebx
  1416. movl 12(%ebp), %eax
  1417. imull %ebx, %eax
  1418. popl %ebx
  1419. movl %eax, 8(%esp)
  1420. call realloc
  1421. addl $12, %esp
  1422. popl %ebx
  1423. movl %eax, (%ebx)
  1424. movl 8(%ebp), %eax
  1425. movl %eax, %edx
  1426. movl $1, %eax
  1427. leal (%edx,%eax,4), %eax
  1428. movl %eax, %ebx
  1429. movl 12(%ebp), %eax
  1430. movl %eax, (%ebx)
  1431. _label23:
  1432. leave
  1433. ret
  1434. char_vector_resize:
  1435. pushl %ebp
  1436. movl %esp, %ebp
  1437. movl 12(%ebp), %eax
  1438. movl %eax, %edx
  1439. movl 8(%ebp), %eax
  1440. pushl %edx
  1441. movl %eax, %edx
  1442. movl $0, %eax
  1443. leal (%edx,%eax,4), %eax
  1444. popl %edx
  1445. movl (%eax), %eax
  1446. cmpl %eax, %edx
  1447. setg %al
  1448. movzbl %al, %eax
  1449. cmpl $0, %eax
  1450. je _label24
  1451. subl $8, %esp
  1452. movl 8(%ebp), %eax
  1453. movl %eax, 0(%esp)
  1454. movl 12(%ebp), %eax
  1455. movl %eax, 4(%esp)
  1456. call char_vector_reserve
  1457. addl $8, %esp
  1458. _label24:
  1459. movl 8(%ebp), %eax
  1460. movl %eax, %edx
  1461. movl $0, %eax
  1462. leal (%edx,%eax,4), %eax
  1463. movl %eax, %ebx
  1464. movl 12(%ebp), %eax
  1465. movl %eax, (%ebx)
  1466. leave
  1467. ret
  1468. vector_resize:
  1469. pushl %ebp
  1470. movl %esp, %ebp
  1471. movl 12(%ebp), %eax
  1472. movl %eax, %edx
  1473. movl 8(%ebp), %eax
  1474. pushl %edx
  1475. movl %eax, %edx
  1476. movl $0, %eax
  1477. leal (%edx,%eax,4), %eax
  1478. popl %edx
  1479. movl (%eax), %eax
  1480. cmpl %eax, %edx
  1481. setg %al
  1482. movzbl %al, %eax
  1483. cmpl $0, %eax
  1484. je _label25
  1485. subl $8, %esp
  1486. movl 8(%ebp), %eax
  1487. movl %eax, 0(%esp)
  1488. movl 12(%ebp), %eax
  1489. movl %eax, 4(%esp)
  1490. call vector_reserve
  1491. addl $8, %esp
  1492. _label25:
  1493. movl 8(%ebp), %eax
  1494. movl %eax, %edx
  1495. movl $0, %eax
  1496. leal (%edx,%eax,4), %eax
  1497. movl %eax, %ebx
  1498. movl 12(%ebp), %eax
  1499. movl %eax, (%ebx)
  1500. leave
  1501. ret
  1502. char_vector_get:
  1503. pushl %ebp
  1504. movl %esp, %ebp
  1505. movl 8(%ebp), %eax
  1506. movl %eax, %edx
  1507. movl $2, %eax
  1508. leal (%edx,%eax,4), %eax
  1509. movl (%eax), %eax
  1510. movl %eax, %edx
  1511. movl 12(%ebp), %eax
  1512. addl %eax, %edx
  1513. movsbl (%edx), %eax
  1514. leave
  1515. ret
  1516. vector_get:
  1517. pushl %ebp
  1518. movl %esp, %ebp
  1519. movl 8(%ebp), %eax
  1520. movl %eax, %edx
  1521. movl $2, %eax
  1522. leal (%edx,%eax,4), %eax
  1523. movl (%eax), %edx
  1524. movl 12(%ebp), %eax
  1525. leal (%edx,%eax,4), %eax
  1526. movl (%eax), %eax
  1527. leave
  1528. ret
  1529. char_vector_set:
  1530. pushl %ebp
  1531. movl %esp, %ebp
  1532. movl 8(%ebp), %eax
  1533. movl %eax, %edx
  1534. movl $2, %eax
  1535. leal (%edx,%eax,4), %eax
  1536. movl (%eax), %eax
  1537. movl %eax, %edx
  1538. movl 12(%ebp), %eax
  1539. addl %eax, %edx
  1540. movl 16(%ebp), %eax
  1541. movb %al, (%edx)
  1542. leave
  1543. ret
  1544. vector_set:
  1545. pushl %ebp
  1546. movl %esp, %ebp
  1547. subl $4, %esp
  1548. movl 8(%ebp), %eax
  1549. movl %eax, %edx
  1550. movl $2, %eax
  1551. leal (%edx,%eax,4), %eax
  1552. movl (%eax), %eax
  1553. movl %eax, -4(%ebp)
  1554. movl -4(%ebp), %eax
  1555. movl %eax, %edx
  1556. movl 12(%ebp), %eax
  1557. leal (%edx,%eax,4), %eax
  1558. movl %eax, %ebx
  1559. movl 16(%ebp), %eax
  1560. movl %eax, (%ebx)
  1561. leave
  1562. ret
  1563. char_vector_push:
  1564. pushl %ebp
  1565. movl %esp, %ebp
  1566. movl 8(%ebp), %eax
  1567. movl %eax, %edx
  1568. movl $0, %eax
  1569. leal (%edx,%eax,4), %eax
  1570. movl (%eax), %eax
  1571. movl %eax, %edx
  1572. movl 8(%ebp), %eax
  1573. pushl %edx
  1574. movl %eax, %edx
  1575. movl $1, %eax
  1576. leal (%edx,%eax,4), %eax
  1577. popl %edx
  1578. movl (%eax), %eax
  1579. cmpl %eax, %edx
  1580. sete %al
  1581. movzbl %al, %eax
  1582. cmpl $0, %eax
  1583. je _label26
  1584. subl $8, %esp
  1585. movl 8(%ebp), %eax
  1586. movl %eax, 0(%esp)
  1587. movl 8(%ebp), %eax
  1588. pushl %edx
  1589. movl %eax, %edx
  1590. movl $1, %eax
  1591. leal (%edx,%eax,4), %eax
  1592. popl %edx
  1593. movl (%eax), %eax
  1594. pushl %ebx
  1595. movl %eax, %ebx
  1596. movl $2, %eax
  1597. imull %ebx, %eax
  1598. popl %ebx
  1599. movl %eax, 4(%esp)
  1600. call char_vector_reserve
  1601. addl $8, %esp
  1602. _label26:
  1603. subl $12, %esp
  1604. movl 8(%ebp), %eax
  1605. movl %eax, 0(%esp)
  1606. movl 8(%ebp), %eax
  1607. pushl %edx
  1608. movl %eax, %edx
  1609. movl $0, %eax
  1610. leal (%edx,%eax,4), %eax
  1611. popl %edx
  1612. movl (%eax), %eax
  1613. movl %eax, 4(%esp)
  1614. movl 12(%ebp), %eax
  1615. movl %eax, 8(%esp)
  1616. call char_vector_set
  1617. addl $12, %esp
  1618. movl 8(%ebp), %eax
  1619. movl %eax, %edx
  1620. movl $0, %eax
  1621. leal (%edx,%eax,4), %eax
  1622. movl %eax, %ebx
  1623. movl 8(%ebp), %eax
  1624. movl %eax, %edx
  1625. movl $0, %eax
  1626. leal (%edx,%eax,4), %eax
  1627. movl (%eax), %eax
  1628. pushl %ebx
  1629. movl %eax, %ebx
  1630. movl $1, %eax
  1631. addl %ebx, %eax
  1632. popl %ebx
  1633. movl %eax, (%ebx)
  1634. leave
  1635. ret
  1636. vector_push:
  1637. pushl %ebp
  1638. movl %esp, %ebp
  1639. movl 8(%ebp), %eax
  1640. movl %eax, %edx
  1641. movl $0, %eax
  1642. leal (%edx,%eax,4), %eax
  1643. movl (%eax), %eax
  1644. movl %eax, %edx
  1645. movl 8(%ebp), %eax
  1646. pushl %edx
  1647. movl %eax, %edx
  1648. movl $1, %eax
  1649. leal (%edx,%eax,4), %eax
  1650. popl %edx
  1651. movl (%eax), %eax
  1652. cmpl %eax, %edx
  1653. sete %al
  1654. movzbl %al, %eax
  1655. cmpl $0, %eax
  1656. je _label27
  1657. subl $8, %esp
  1658. movl 8(%ebp), %eax
  1659. movl %eax, 0(%esp)
  1660. movl 8(%ebp), %eax
  1661. pushl %edx
  1662. movl %eax, %edx
  1663. movl $1, %eax
  1664. leal (%edx,%eax,4), %eax
  1665. popl %edx
  1666. movl (%eax), %eax
  1667. pushl %ebx
  1668. movl %eax, %ebx
  1669. movl $2, %eax
  1670. imull %ebx, %eax
  1671. popl %ebx
  1672. movl %eax, 4(%esp)
  1673. call vector_reserve
  1674. addl $8, %esp
  1675. _label27:
  1676. subl $12, %esp
  1677. movl 8(%ebp), %eax
  1678. movl %eax, 0(%esp)
  1679. movl 8(%ebp), %eax
  1680. pushl %edx
  1681. movl %eax, %edx
  1682. movl $0, %eax
  1683. leal (%edx,%eax,4), %eax
  1684. popl %edx
  1685. movl (%eax), %eax
  1686. movl %eax, 4(%esp)
  1687. movl 12(%ebp), %eax
  1688. movl %eax, 8(%esp)
  1689. call vector_set
  1690. addl $12, %esp
  1691. movl 8(%ebp), %eax
  1692. movl %eax, %edx
  1693. movl $0, %eax
  1694. leal (%edx,%eax,4), %eax
  1695. movl %eax, %ebx
  1696. movl 8(%ebp), %eax
  1697. movl %eax, %edx
  1698. movl $0, %eax
  1699. leal (%edx,%eax,4), %eax
  1700. movl (%eax), %eax
  1701. pushl %ebx
  1702. movl %eax, %ebx
  1703. movl $1, %eax
  1704. addl %ebx, %eax
  1705. popl %ebx
  1706. movl %eax, (%ebx)
  1707. leave
  1708. ret
  1709. char_vector_pop:
  1710. pushl %ebp
  1711. movl %esp, %ebp
  1712. movl 8(%ebp), %eax
  1713. movl %eax, %edx
  1714. movl $0, %eax
  1715. leal (%edx,%eax,4), %eax
  1716. movl %eax, %ebx
  1717. movl 8(%ebp), %eax
  1718. movl %eax, %edx
  1719. movl $0, %eax
  1720. leal (%edx,%eax,4), %eax
  1721. movl (%eax), %eax
  1722. pushl %ebx
  1723. pushl %eax
  1724. movl $1, %eax
  1725. movl %eax, %ebx
  1726. popl %eax
  1727. subl %ebx, %eax
  1728. popl %ebx
  1729. movl %eax, (%ebx)
  1730. subl $8, %esp
  1731. movl 8(%ebp), %eax
  1732. movl %eax, 0(%esp)
  1733. movl 8(%ebp), %eax
  1734. pushl %edx
  1735. movl %eax, %edx
  1736. movl $0, %eax
  1737. leal (%edx,%eax,4), %eax
  1738. popl %edx
  1739. movl (%eax), %eax
  1740. movl %eax, 4(%esp)
  1741. call char_vector_get
  1742. addl $8, %esp
  1743. leave
  1744. ret
  1745. vector_pop:
  1746. pushl %ebp
  1747. movl %esp, %ebp
  1748. movl 8(%ebp), %eax
  1749. movl %eax, %edx
  1750. movl $0, %eax
  1751. leal (%edx,%eax,4), %eax
  1752. movl %eax, %ebx
  1753. movl 8(%ebp), %eax
  1754. movl %eax, %edx
  1755. movl $0, %eax
  1756. leal (%edx,%eax,4), %eax
  1757. movl (%eax), %eax
  1758. pushl %ebx
  1759. pushl %eax
  1760. movl $1, %eax
  1761. movl %eax, %ebx
  1762. popl %eax
  1763. subl %ebx, %eax
  1764. popl %ebx
  1765. movl %eax, (%ebx)
  1766. subl $8, %esp
  1767. movl 8(%ebp), %eax
  1768. movl %eax, 0(%esp)
  1769. movl 8(%ebp), %eax
  1770. pushl %edx
  1771. movl %eax, %edx
  1772. movl $0, %eax
  1773. leal (%edx,%eax,4), %eax
  1774. popl %edx
  1775. movl (%eax), %eax
  1776. movl %eax, 4(%esp)
  1777. call vector_get
  1778. addl $8, %esp
  1779. leave
  1780. ret
  1781. vector_destroy:
  1782. pushl %ebp
  1783. movl %esp, %ebp
  1784. subl $4, %esp
  1785. movl 8(%ebp), %eax
  1786. pushl %edx
  1787. movl %eax, %edx
  1788. movl $2, %eax
  1789. leal (%edx,%eax,4), %eax
  1790. popl %edx
  1791. movl (%eax), %eax
  1792. movl %eax, 0(%esp)
  1793. call free
  1794. addl $4, %esp
  1795. subl $4, %esp
  1796. movl 8(%ebp), %eax
  1797. movl %eax, 0(%esp)
  1798. call free
  1799. addl $4, %esp
  1800. leave
  1801. ret
  1802. .data
  1803. stdin:.long 0
  1804. stdout:.long 0
  1805. stderr:.long 0
  1806. .text
  1807. input_chan:
  1808. pushl %ebp
  1809. movl %esp, %ebp
  1810. subl $4, %esp
  1811. subl $4, %esp
  1812. movl $512, %eax
  1813. movl %eax, 0(%esp)
  1814. call malloc
  1815. addl $4, %esp
  1816. movl %eax, -4(%ebp)
  1817. subl $20, %esp
  1818. movl 8(%ebp), %eax
  1819. movl %eax, 0(%esp)
  1820. movl -4(%ebp), %eax
  1821. movl %eax, 4(%esp)
  1822. movl $0, %eax
  1823. movl %eax, 8(%esp)
  1824. movl $0, %eax
  1825. movl %eax, 12(%esp)
  1826. movl $0, %eax
  1827. movl %eax, 16(%esp)
  1828. call tuple5
  1829. addl $20, %esp
  1830. movl %eax, -4(%ebp)
  1831. movl -4(%ebp), %eax
  1832. leave
  1833. ret
  1834. input_chan_file:
  1835. pushl %ebp
  1836. movl %esp, %ebp
  1837. subl $4, %esp
  1838. subl $12, %esp
  1839. movl 8(%ebp), %eax
  1840. movl %eax, 0(%esp)
  1841. movl $0, %eax
  1842. movl %eax, 4(%esp)
  1843. movl $0, %eax
  1844. movl %eax, 8(%esp)
  1845. call open
  1846. addl $12, %esp
  1847. movl %eax, -4(%ebp)
  1848. subl $8, %esp
  1849. movl -4(%ebp), %eax
  1850. pushl %edx
  1851. movl %eax, %edx
  1852. movl $0, %eax
  1853. cmpl %eax, %edx
  1854. popl %edx
  1855. setg %al
  1856. movzbl %al, %eax
  1857. movl %eax, 0(%esp)
  1858. movl $strbuf+37, %eax
  1859. movl %eax, 4(%esp)
  1860. call assert
  1861. addl $8, %esp
  1862. subl $4, %esp
  1863. movl -4(%ebp), %eax
  1864. movl %eax, 0(%esp)
  1865. call input_chan
  1866. addl $4, %esp
  1867. leave
  1868. ret
  1869. input_chan_close:
  1870. pushl %ebp
  1871. movl %esp, %ebp
  1872. subl $4, %esp
  1873. movl 8(%ebp), %eax
  1874. pushl %edx
  1875. movl %eax, %edx
  1876. movl $0, %eax
  1877. leal (%edx,%eax,4), %eax
  1878. popl %edx
  1879. movl (%eax), %eax
  1880. movl %eax, 0(%esp)
  1881. call close
  1882. addl $4, %esp
  1883. subl $4, %esp
  1884. movl 8(%ebp), %eax
  1885. pushl %edx
  1886. movl %eax, %edx
  1887. movl $1, %eax
  1888. leal (%edx,%eax,4), %eax
  1889. popl %edx
  1890. movl (%eax), %eax
  1891. movl %eax, 0(%esp)
  1892. call free
  1893. addl $4, %esp
  1894. subl $4, %esp
  1895. movl 8(%ebp), %eax
  1896. movl %eax, 0(%esp)
  1897. call free
  1898. addl $4, %esp
  1899. leave
  1900. ret
  1901. output_chan:
  1902. pushl %ebp
  1903. movl %esp, %ebp
  1904. subl $4, %esp
  1905. subl $4, %esp
  1906. movl $512, %eax
  1907. movl %eax, 0(%esp)
  1908. call malloc
  1909. addl $4, %esp
  1910. movl %eax, -4(%ebp)
  1911. subl $12, %esp
  1912. movl 8(%ebp), %eax
  1913. movl %eax, 0(%esp)
  1914. movl -4(%ebp), %eax
  1915. movl %eax, 4(%esp)
  1916. movl $0, %eax
  1917. movl %eax, 8(%esp)
  1918. call tuple3
  1919. addl $12, %esp
  1920. movl %eax, -4(%ebp)
  1921. movl -4(%ebp), %eax
  1922. leave
  1923. ret
  1924. output_chan_file:
  1925. pushl %ebp
  1926. movl %esp, %ebp
  1927. subl $4, %esp
  1928. subl $12, %esp
  1929. movl 8(%ebp), %eax
  1930. movl %eax, 0(%esp)
  1931. movl $1, %eax
  1932. pushl %ebx
  1933. movl %eax, %ebx
  1934. movl $64, %eax
  1935. orl %ebx, %eax
  1936. popl %ebx
  1937. pushl %ebx
  1938. movl %eax, %ebx
  1939. movl $512, %eax
  1940. orl %ebx, %eax
  1941. popl %ebx
  1942. movl %eax, 4(%esp)
  1943. movl $420, %eax
  1944. movl %eax, 8(%esp)
  1945. call open
  1946. addl $12, %esp
  1947. movl %eax, -4(%ebp)
  1948. subl $8, %esp
  1949. movl -4(%ebp), %eax
  1950. pushl %edx
  1951. movl %eax, %edx
  1952. movl $0, %eax
  1953. cmpl %eax, %edx
  1954. popl %edx
  1955. setg %al
  1956. movzbl %al, %eax
  1957. movl %eax, 0(%esp)
  1958. movl $strbuf+70, %eax
  1959. movl %eax, 4(%esp)
  1960. call assert
  1961. addl $8, %esp
  1962. subl $4, %esp
  1963. movl -4(%ebp), %eax
  1964. movl %eax, 0(%esp)
  1965. call output_chan
  1966. addl $4, %esp
  1967. leave
  1968. ret
  1969. output_chan_close:
  1970. pushl %ebp
  1971. movl %esp, %ebp
  1972. subl $4, %esp
  1973. movl 8(%ebp), %eax
  1974. movl %eax, 0(%esp)
  1975. call flush
  1976. addl $4, %esp
  1977. subl $4, %esp
  1978. movl 8(%ebp), %eax
  1979. pushl %edx
  1980. movl %eax, %edx
  1981. movl $0, %eax
  1982. leal (%edx,%eax,4), %eax
  1983. popl %edx
  1984. movl (%eax), %eax
  1985. movl %eax, 0(%esp)
  1986. call close
  1987. addl $4, %esp
  1988. subl $4, %esp
  1989. movl 8(%ebp), %eax
  1990. pushl %edx
  1991. movl %eax, %edx
  1992. movl $1, %eax
  1993. leal (%edx,%eax,4), %eax
  1994. popl %edx
  1995. movl (%eax), %eax
  1996. movl %eax, 0(%esp)
  1997. call free
  1998. addl $4, %esp
  1999. subl $4, %esp
  2000. movl 8(%ebp), %eax
  2001. movl %eax, 0(%esp)
  2002. call free
  2003. addl $4, %esp
  2004. leave
  2005. ret
  2006. initialize_io:
  2007. pushl %ebp
  2008. movl %esp, %ebp
  2009. subl $4, %esp
  2010. movl $0, %eax
  2011. movl %eax, 0(%esp)
  2012. call input_chan
  2013. addl $4, %esp
  2014. movl %eax, stdin
  2015. subl $4, %esp
  2016. movl $1, %eax
  2017. movl %eax, 0(%esp)
  2018. call output_chan
  2019. addl $4, %esp
  2020. movl %eax, stdout
  2021. subl $4, %esp
  2022. movl $2, %eax
  2023. movl %eax, 0(%esp)
  2024. call output_chan
  2025. addl $4, %esp
  2026. movl %eax, stderr
  2027. leave
  2028. ret
  2029. fill:
  2030. pushl %ebp
  2031. movl %esp, %ebp
  2032. subl $4, %esp
  2033. movl 8(%ebp), %eax
  2034. movl %eax, %edx
  2035. movl $4, %eax
  2036. leal (%edx,%eax,4), %eax
  2037. movl (%eax), %eax
  2038. cmpl $0, %eax
  2039. je _label28
  2040. leave
  2041. ret
  2042. _label28:
  2043. movl 8(%ebp), %eax
  2044. movl %eax, %edx
  2045. movl $2, %eax
  2046. leal (%edx,%eax,4), %eax
  2047. movl (%eax), %eax
  2048. movl %eax, %edx
  2049. movl 8(%ebp), %eax
  2050. pushl %edx
  2051. movl %eax, %edx
  2052. movl $3, %eax
  2053. leal (%edx,%eax,4), %eax
  2054. popl %edx
  2055. movl (%eax), %eax
  2056. cmpl %eax, %edx
  2057. sete %al
  2058. movzbl %al, %eax
  2059. cmpl $0, %eax
  2060. je _label29
  2061. subl $12, %esp
  2062. movl 8(%ebp), %eax
  2063. pushl %edx
  2064. movl %eax, %edx
  2065. movl $0, %eax
  2066. leal (%edx,%eax,4), %eax
  2067. popl %edx
  2068. movl (%eax), %eax
  2069. movl %eax, 0(%esp)
  2070. movl 8(%ebp), %eax
  2071. pushl %edx
  2072. movl %eax, %edx
  2073. movl $1, %eax
  2074. leal (%edx,%eax,4), %eax
  2075. popl %edx
  2076. movl (%eax), %eax
  2077. movl %eax, 4(%esp)
  2078. movl $512, %eax
  2079. movl %eax, 8(%esp)
  2080. call read
  2081. addl $12, %esp
  2082. movl %eax, -4(%ebp)
  2083. movl 8(%ebp), %eax
  2084. movl %eax, %edx
  2085. movl $2, %eax
  2086. leal (%edx,%eax,4), %eax
  2087. movl %eax, %ebx
  2088. movl $0, %eax
  2089. movl %eax, (%ebx)
  2090. movl 8(%ebp), %eax
  2091. movl %eax, %edx
  2092. movl $3, %eax
  2093. leal (%edx,%eax,4), %eax
  2094. movl %eax, %ebx
  2095. movl -4(%ebp), %eax
  2096. movl %eax, (%ebx)
  2097. movl 8(%ebp), %eax
  2098. movl %eax, %edx
  2099. movl $3, %eax
  2100. leal (%edx,%eax,4), %eax
  2101. movl (%eax), %eax
  2102. movl %eax, %edx
  2103. movl $0, %eax
  2104. cmpl %eax, %edx
  2105. sete %al
  2106. movzbl %al, %eax
  2107. cmpl $0, %eax
  2108. je _label30
  2109. movl 8(%ebp), %eax
  2110. movl %eax, %edx
  2111. movl $4, %eax
  2112. leal (%edx,%eax,4), %eax
  2113. movl %eax, %ebx
  2114. movl $1, %eax
  2115. movl %eax, (%ebx)
  2116. _label30:
  2117. _label29:
  2118. leave
  2119. ret
  2120. fgetc:
  2121. pushl %ebp
  2122. movl %esp, %ebp
  2123. subl $4, %esp
  2124. subl $4, %esp
  2125. movl 8(%ebp), %eax
  2126. movl %eax, 0(%esp)
  2127. call fill
  2128. addl $4, %esp
  2129. movl 8(%ebp), %eax
  2130. movl %eax, %edx
  2131. movl $2, %eax
  2132. leal (%edx,%eax,4), %eax
  2133. movl (%eax), %eax
  2134. movl %eax, %edx
  2135. movl 8(%ebp), %eax
  2136. pushl %edx
  2137. movl %eax, %edx
  2138. movl $3, %eax
  2139. leal (%edx,%eax,4), %eax
  2140. popl %edx
  2141. movl (%eax), %eax
  2142. cmpl %eax, %edx
  2143. sete %al
  2144. movzbl %al, %eax
  2145. cmpl $0, %eax
  2146. je _label31
  2147. movl $1, %eax
  2148. negl %eax
  2149. leave
  2150. ret
  2151. _label31:
  2152. movl 8(%ebp), %eax
  2153. movl %eax, %edx
  2154. movl $1, %eax
  2155. leal (%edx,%eax,4), %eax
  2156. movl (%eax), %eax
  2157. movl %eax, %edx
  2158. movl 8(%ebp), %eax
  2159. pushl %edx
  2160. movl %eax, %edx
  2161. movl $2, %eax
  2162. leal (%edx,%eax,4), %eax
  2163. popl %edx
  2164. movl (%eax), %eax
  2165. addl %eax, %edx
  2166. movsbl (%edx), %eax
  2167. movl %eax, -4(%ebp)
  2168. movl 8(%ebp), %eax
  2169. movl %eax, %edx
  2170. movl $2, %eax
  2171. leal (%edx,%eax,4), %eax
  2172. movl %eax, %ebx
  2173. movl 8(%ebp), %eax
  2174. movl %eax, %edx
  2175. movl $2, %eax
  2176. leal (%edx,%eax,4), %eax
  2177. movl (%eax), %eax
  2178. pushl %ebx
  2179. movl %eax, %ebx
  2180. movl $1, %eax
  2181. addl %ebx, %eax
  2182. popl %ebx
  2183. movl %eax, (%ebx)
  2184. movl -4(%ebp), %eax
  2185. leave
  2186. ret
  2187. getc:
  2188. pushl %ebp
  2189. movl %esp, %ebp
  2190. subl $4, %esp
  2191. movl stdin, %eax
  2192. movl %eax, 0(%esp)
  2193. call fgetc
  2194. addl $4, %esp
  2195. leave
  2196. ret
  2197. fnextc:
  2198. pushl %ebp
  2199. movl %esp, %ebp
  2200. subl $4, %esp
  2201. movl 8(%ebp), %eax
  2202. movl %eax, 0(%esp)
  2203. call fill
  2204. addl $4, %esp
  2205. movl 8(%ebp), %eax
  2206. movl %eax, %edx
  2207. movl $2, %eax
  2208. leal (%edx,%eax,4), %eax
  2209. movl (%eax), %eax
  2210. movl %eax, %ebx
  2211. movl 12(%ebp), %eax
  2212. addl %ebx, %eax
  2213. movl %eax, %edx
  2214. movl 8(%ebp), %eax
  2215. pushl %edx
  2216. movl %eax, %edx
  2217. movl $3, %eax
  2218. leal (%edx,%eax,4), %eax
  2219. popl %edx
  2220. movl (%eax), %eax
  2221. cmpl %eax, %edx
  2222. setge %al
  2223. movzbl %al, %eax
  2224. cmpl $0, %eax
  2225. je _label32
  2226. movl $1, %eax
  2227. negl %eax
  2228. leave
  2229. ret
  2230. _label32:
  2231. movl 8(%ebp), %eax
  2232. movl %eax, %edx
  2233. movl $1, %eax
  2234. leal (%edx,%eax,4), %eax
  2235. movl (%eax), %eax
  2236. movl %eax, %edx
  2237. movl 8(%ebp), %eax
  2238. pushl %edx
  2239. movl %eax, %edx
  2240. movl $2, %eax
  2241. leal (%edx,%eax,4), %eax
  2242. popl %edx
  2243. movl (%eax), %eax
  2244. movl %eax, %ebx
  2245. movl 12(%ebp), %eax
  2246. addl %ebx, %eax
  2247. addl %eax, %edx
  2248. movsbl (%edx), %eax
  2249. leave
  2250. ret
  2251. nextc:
  2252. pushl %ebp
  2253. movl %esp, %ebp
  2254. subl $8, %esp
  2255. movl stdin, %eax
  2256. movl %eax, 0(%esp)
  2257. movl 8(%ebp), %eax
  2258. movl %eax, 4(%esp)
  2259. call fnextc
  2260. addl $8, %esp
  2261. leave
  2262. ret
  2263. flush:
  2264. pushl %ebp
  2265. movl %esp, %ebp
  2266. movl 8(%ebp), %eax
  2267. movl %eax, %edx
  2268. movl $2, %eax
  2269. leal (%edx,%eax,4), %eax
  2270. movl (%eax), %eax
  2271. movl %eax, %edx
  2272. movl $0, %eax
  2273. cmpl %eax, %edx
  2274. setg %al
  2275. movzbl %al, %eax
  2276. cmpl $0, %eax
  2277. je _label33
  2278. subl $12, %esp
  2279. movl 8(%ebp), %eax
  2280. pushl %edx
  2281. movl %eax, %edx
  2282. movl $0, %eax
  2283. leal (%edx,%eax,4), %eax
  2284. popl %edx
  2285. movl (%eax), %eax
  2286. movl %eax, 0(%esp)
  2287. movl 8(%ebp), %eax
  2288. pushl %edx
  2289. movl %eax, %edx
  2290. movl $1, %eax
  2291. leal (%edx,%eax,4), %eax
  2292. popl %edx
  2293. movl (%eax), %eax
  2294. movl %eax, 4(%esp)
  2295. movl 8(%ebp), %eax
  2296. pushl %edx
  2297. movl %eax, %edx
  2298. movl $2, %eax
  2299. leal (%edx,%eax,4), %eax
  2300. popl %edx
  2301. movl (%eax), %eax
  2302. movl %eax, 8(%esp)
  2303. call write
  2304. addl $12, %esp
  2305. movl 8(%ebp), %eax
  2306. movl %eax, %edx
  2307. movl $2, %eax
  2308. leal (%edx,%eax,4), %eax
  2309. movl %eax, %ebx
  2310. movl $0, %eax
  2311. movl %eax, (%ebx)
  2312. _label33:
  2313. leave
  2314. ret
  2315. fputc:
  2316. pushl %ebp
  2317. movl %esp, %ebp
  2318. movl 8(%ebp), %eax
  2319. movl %eax, %edx
  2320. movl $1, %eax
  2321. leal (%edx,%eax,4), %eax
  2322. movl (%eax), %eax
  2323. movl %eax, %edx
  2324. movl 8(%ebp), %eax
  2325. pushl %edx
  2326. movl %eax, %edx
  2327. movl $2, %eax
  2328. leal (%edx,%eax,4), %eax
  2329. popl %edx
  2330. movl (%eax), %eax
  2331. addl %eax, %edx
  2332. movl 12(%ebp), %eax
  2333. movb %al, (%edx)
  2334. movl 8(%ebp), %eax
  2335. movl %eax, %edx
  2336. movl $2, %eax
  2337. leal (%edx,%eax,4), %eax
  2338. movl %eax, %ebx
  2339. movl 8(%ebp), %eax
  2340. movl %eax, %edx
  2341. movl $2, %eax
  2342. leal (%edx,%eax,4), %eax
  2343. movl (%eax), %eax
  2344. pushl %ebx
  2345. movl %eax, %ebx
  2346. movl $1, %eax
  2347. addl %ebx, %eax
  2348. popl %ebx
  2349. movl %eax, (%ebx)
  2350. movl 8(%ebp), %eax
  2351. movl %eax, %edx
  2352. movl $2, %eax
  2353. leal (%edx,%eax,4), %eax
  2354. movl (%eax), %eax
  2355. movl %eax, %edx
  2356. movl $512, %eax
  2357. cmpl %eax, %edx
  2358. sete %al
  2359. movzbl %al, %eax
  2360. cmpl $0, %eax
  2361. je _label34
  2362. subl $4, %esp
  2363. movl 8(%ebp), %eax
  2364. movl %eax, 0(%esp)
  2365. call flush
  2366. addl $4, %esp
  2367. leave
  2368. ret
  2369. _label34:
  2370. movl 12(%ebp), %eax
  2371. movl %eax, %edx
  2372. movl $10, %eax
  2373. cmpl %eax, %edx
  2374. sete %al
  2375. movzbl %al, %eax
  2376. cmpl $0, %eax
  2377. je _label35
  2378. subl $4, %esp
  2379. movl 8(%ebp), %eax
  2380. movl %eax, 0(%esp)
  2381. call flush
  2382. addl $4, %esp
  2383. leave
  2384. ret
  2385. _label35:
  2386. leave
  2387. ret
  2388. putc:
  2389. pushl %ebp
  2390. movl %esp, %ebp
  2391. subl $8, %esp
  2392. movl stdout, %eax
  2393. movl %eax, 0(%esp)
  2394. movl 8(%ebp), %eax
  2395. movl %eax, 4(%esp)
  2396. call fputc
  2397. addl $8, %esp
  2398. leave
  2399. ret
  2400. eputc:
  2401. pushl %ebp
  2402. movl %esp, %ebp
  2403. subl $8, %esp
  2404. movl stderr, %eax
  2405. movl %eax, 0(%esp)
  2406. movl 8(%ebp), %eax
  2407. movl %eax, 4(%esp)
  2408. call fputc
  2409. addl $8, %esp
  2410. leave
  2411. ret
  2412. fputs:
  2413. pushl %ebp
  2414. movl %esp, %ebp
  2415. subl $4, %esp
  2416. movl 12(%ebp), %eax
  2417. movl %eax, %edx
  2418. movl $0, %eax
  2419. addl %eax, %edx
  2420. movsbl (%edx), %eax
  2421. movl %eax, -4(%ebp)
  2422. _label36:
  2423. movl -4(%ebp), %eax
  2424. movl %eax, %edx
  2425. movl $0, %eax
  2426. cmpl %eax, %edx
  2427. setne %al
  2428. movzbl %al, %eax
  2429. cmpl $0, %eax
  2430. je _label37
  2431. subl $8, %esp
  2432. movl 8(%ebp), %eax
  2433. movl %eax, 0(%esp)
  2434. movl -4(%ebp), %eax
  2435. movl %eax, 4(%esp)
  2436. call fputc
  2437. addl $8, %esp
  2438. movl 12(%ebp), %eax
  2439. movl %eax, %ebx
  2440. movl $1, %eax
  2441. addl %ebx, %eax
  2442. movl %eax, 12(%ebp)
  2443. movl 12(%ebp), %eax
  2444. movl %eax, %edx
  2445. movl $0, %eax
  2446. addl %eax, %edx
  2447. movsbl (%edx), %eax
  2448. movl %eax, -4(%ebp)
  2449. jmp _label36
  2450. _label37:
  2451. leave
  2452. ret
  2453. puts:
  2454. pushl %ebp
  2455. movl %esp, %ebp
  2456. subl $8, %esp
  2457. movl stdout, %eax
  2458. movl %eax, 0(%esp)
  2459. movl 8(%ebp), %eax
  2460. movl %eax, 4(%esp)
  2461. call fputs
  2462. addl $8, %esp
  2463. leave
  2464. ret
  2465. eputs:
  2466. pushl %ebp
  2467. movl %esp, %ebp
  2468. subl $8, %esp
  2469. movl stderr, %eax
  2470. movl %eax, 0(%esp)
  2471. movl 8(%ebp), %eax
  2472. movl %eax, 4(%esp)
  2473. call fputs
  2474. addl $8, %esp
  2475. leave
  2476. ret
  2477. .data
  2478. fputn_buffer:.long 0
  2479. .text
  2480. fputn:
  2481. pushl %ebp
  2482. movl %esp, %ebp
  2483. movl fputn_buffer, %eax
  2484. movl %eax, %edx
  2485. movl $0, %eax
  2486. cmpl %eax, %edx
  2487. sete %al
  2488. movzbl %al, %eax
  2489. cmpl $0, %eax
  2490. je _label38
  2491. subl $4, %esp
  2492. movl $33, %eax
  2493. movl %eax, 0(%esp)
  2494. call malloc
  2495. addl $4, %esp
  2496. movl %eax, fputn_buffer
  2497. _label38:
  2498. subl $12, %esp
  2499. movl $0, %eax
  2500. movl %eax, 0(%esp)
  2501. movl fputn_buffer, %eax
  2502. movl %eax, 4(%esp)
  2503. movl $33, %eax
  2504. movl %eax, 8(%esp)
  2505. call memset
  2506. addl $12, %esp
  2507. subl $12, %esp
  2508. movl 12(%ebp), %eax
  2509. movl %eax, 0(%esp)
  2510. movl fputn_buffer, %eax
  2511. movl %eax, 4(%esp)
  2512. movl 16(%ebp), %eax
  2513. movl %eax, 8(%esp)
  2514. call utoa
  2515. addl $12, %esp
  2516. subl $8, %esp
  2517. movl 8(%ebp), %eax
  2518. movl %eax, 0(%esp)
  2519. movl fputn_buffer, %eax
  2520. movl %eax, 4(%esp)
  2521. call fputs
  2522. addl $8, %esp
  2523. leave
  2524. ret
  2525. fputd:
  2526. pushl %ebp
  2527. movl %esp, %ebp
  2528. subl $12, %esp
  2529. movl 8(%ebp), %eax
  2530. movl %eax, 0(%esp)
  2531. movl 12(%ebp), %eax
  2532. movl %eax, 4(%esp)
  2533. movl $10, %eax
  2534. movl %eax, 8(%esp)
  2535. call fputn
  2536. addl $12, %esp
  2537. leave
  2538. ret
  2539. fputx:
  2540. pushl %ebp
  2541. movl %esp, %ebp
  2542. subl $12, %esp
  2543. movl 8(%ebp), %eax
  2544. movl %eax, 0(%esp)
  2545. movl 12(%ebp), %eax
  2546. movl %eax, 4(%esp)
  2547. movl $16, %eax
  2548. movl %eax, 8(%esp)
  2549. call fputn
  2550. addl $12, %esp
  2551. leave
  2552. ret
  2553. putd:
  2554. pushl %ebp
  2555. movl %esp, %ebp
  2556. subl $12, %esp
  2557. movl stdout, %eax
  2558. movl %eax, 0(%esp)
  2559. movl 8(%ebp), %eax
  2560. movl %eax, 4(%esp)
  2561. movl $10, %eax
  2562. movl %eax, 8(%esp)
  2563. call fputn
  2564. addl $12, %esp
  2565. leave
  2566. ret
  2567. putx:
  2568. pushl %ebp
  2569. movl %esp, %ebp
  2570. subl $12, %esp
  2571. movl stdout, %eax
  2572. movl %eax, 0(%esp)
  2573. movl 8(%ebp), %eax
  2574. movl %eax, 4(%esp)
  2575. movl $16, %eax
  2576. movl %eax, 8(%esp)
  2577. call fputn
  2578. addl $12, %esp
  2579. leave
  2580. ret
  2581. eputd:
  2582. pushl %ebp
  2583. movl %esp, %ebp
  2584. subl $12, %esp
  2585. movl stderr, %eax
  2586. movl %eax, 0(%esp)
  2587. movl 8(%ebp), %eax
  2588. movl %eax, 4(%esp)
  2589. movl $10, %eax
  2590. movl %eax, 8(%esp)
  2591. call fputn
  2592. addl $12, %esp
  2593. leave
  2594. ret
  2595. eputx:
  2596. pushl %ebp
  2597. movl %esp, %ebp
  2598. subl $12, %esp
  2599. movl stderr, %eax
  2600. movl %eax, 0(%esp)
  2601. movl 8(%ebp), %eax
  2602. movl %eax, 4(%esp)
  2603. movl $16, %eax
  2604. movl %eax, 8(%esp)
  2605. call fputn
  2606. addl $12, %esp
  2607. leave
  2608. ret
  2609. assert:
  2610. pushl %ebp
  2611. movl %esp, %ebp
  2612. movl 8(%ebp), %eax
  2613. cmpl $0, %eax
  2614. je _label39
  2615. leave
  2616. ret
  2617. _label39:
  2618. subl $4, %esp
  2619. movl $strbuf+104, %eax
  2620. movl %eax, 0(%esp)
  2621. call eputs
  2622. addl $4, %esp
  2623. movl 12(%ebp), %eax
  2624. cmpl $0, %eax
  2625. je _label41
  2626. subl $4, %esp
  2627. movl 12(%ebp), %eax
  2628. movl %eax, 0(%esp)
  2629. call eputs
  2630. addl $4, %esp
  2631. jmp _label40
  2632. _label41:
  2633. subl $4, %esp
  2634. movl $strbuf+113, %eax
  2635. movl %eax, 0(%esp)
  2636. call eputs
  2637. addl $4, %esp
  2638. _label40:
  2639. subl $4, %esp
  2640. movl $10, %eax
  2641. movl %eax, 0(%esp)
  2642. call eputc
  2643. addl $4, %esp
  2644. subl $4, %esp
  2645. movl $1, %eax
  2646. movl %eax, 0(%esp)
  2647. call exit
  2648. addl $4, %esp
  2649. leave
  2650. ret
  2651. .data
  2652. char_table:.long 0,1,1,1,1,1,1,1,1,2,3,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,14,12,14,14,14,14,11,14,14,14,14,14,14,14,14,4,5,5,5,5,5,5,5,6,6,14,14,14,14,14,14,14,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,14,13,14,14,7,14,9,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,8,8,14,14,14,14,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  2653. char_to_escape:.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,0,7,8,0,0,27,12,0,0,0,0,0,0,0,10,0,0,0,13,0,9,0,11,0,0,0,0,0,0,0,0,0
  2654. reserved_keywords:.long strbuf+130,strbuf+133,strbuf+138,strbuf+144,strbuf+153,strbuf+156,strbuf+160,strbuf+166,strbuf+175,strbuf+179,strbuf+186,strbuf+194,strbuf+201,strbuf+206,strbuf+212,strbuf+221,strbuf+231,strbuf+236,strbuf+240,strbuf+248,0
  2655. lx00n:.long lx01,le00,lx00,lx00,lx02,lx06,lx06,lx07,lx07,lx09,lx09,lx11,lx15,le00,lx18
  2656. lx02n:.long lx99,le00,lx99,lx99,le01,lx03,le02,le03,le00,le03,lx04,le00,le00,le00,lx99
  2657. lx03n:.long lx99,le00,lx99,lx99,lx03,lx03,le02,le03,le00,le03,le00,le00,le00,le00,lx99
  2658. lx04n:.long le04,le00,le04,le04,lx05,lx05,lx05,lx05,le00,lx05,le00,le00,le00,le00,le00
  2659. lx05n:.long lx99,le00,lx99,lx99,lx05,lx05,lx05,lx05,le00,lx05,le00,le00,le00,le00,lx99
  2660. lx06n:.long lx99,le00,lx99,lx99,lx06,lx06,lx06,le05,le00,le05,le00,le00,le00,le00,lx99
  2661. lx07n:.long lx08,le00,lx08,lx08,lx07,lx07,lx07,lx07,lx07,lx07,lx07,le00,le00,le00,lx08
  2662. lx09n:.long lx08,le00,lx08,lx08,lx10,lx10,lx10,lx07,lx07,lx07,lx07,le00,le00,le00,lx08
  2663. lx10n:.long lx99,le00,lx99,lx99,lx10,lx10,lx10,lx07,lx07,lx07,lx07,le00,le00,le00,lx99
  2664. lx11n:.long le06,le00,lx12,le06,lx12,lx12,lx12,lx12,lx12,lx12,lx12,lx12,lx12,lx13,lx12
  2665. lx15n:.long le07,le00,lx15,le07,lx15,lx15,lx15,lx15,lx15,lx15,lx15,lx15,lx17,lx16,lx15
  2666. lx16n:.long le07,le00,lx15,le07,lx15,lx15,lx15,lx15,lx15,lx15,lx15,lx15,lx17,lx16,lx15
  2667. .text
  2668. lexer:
  2669. pushl %ebp
  2670. movl %esp, %ebp
  2671. subl $8, %esp
  2672. subl $8, %esp
  2673. movl $0, %eax
  2674. movl %eax, 0(%esp)
  2675. movl $1, %eax
  2676. movl %eax, 4(%esp)
  2677. call char_vector
  2678. addl $8, %esp
  2679. movl %eax, -4(%ebp)
  2680. subl $8, %esp
  2681. movl -4(%ebp), %eax
  2682. movl %eax, 0(%esp)
  2683. movl $0, %eax
  2684. movl %eax, 4(%esp)
  2685. call char_vector_push
  2686. addl $8, %esp
  2687. subl $32, %esp
  2688. movl 8(%ebp), %eax
  2689. movl %eax, 0(%esp)
  2690. movl 12(%ebp), %eax
  2691. movl %eax, 4(%esp)
  2692. movl $1, %eax
  2693. movl %eax, 8(%esp)
  2694. movl $1, %eax
  2695. movl %eax, 12(%esp)
  2696. movl $0, %eax
  2697. movl %eax, 16(%esp)
  2698. movl $0, %eax
  2699. movl %eax, 20(%esp)
  2700. movl $0, %eax
  2701. movl %eax, 24(%esp)
  2702. movl -4(%ebp), %eax
  2703. movl %eax, 28(%esp)
  2704. call tuple8
  2705. addl $32, %esp
  2706. movl %eax, -8(%ebp)
  2707. movl -8(%ebp), %eax
  2708. leave
  2709. ret
  2710. lexer_file:
  2711. pushl %ebp
  2712. movl %esp, %ebp
  2713. subl $8, %esp
  2714. pushl %ebx
  2715. pushl %ecx
  2716. pushl %edx
  2717. pushl %esi
  2718. pushl %edi
  2719. subl $4, %esp
  2720. movl 8(%ebp), %eax
  2721. movl %eax, 0(%esp)
  2722. call input_chan_file
  2723. addl $4, %esp
  2724. popl %edi
  2725. popl %esi
  2726. popl %edx
  2727. popl %ecx
  2728. popl %ebx
  2729. movl %eax, 0(%esp)
  2730. movl 8(%ebp), %eax
  2731. movl %eax, 4(%esp)
  2732. call lexer
  2733. addl $8, %esp
  2734. leave
  2735. ret
  2736. lexer_destroy:
  2737. pushl %ebp
  2738. movl %esp, %ebp
  2739. subl $4, %esp
  2740. movl 8(%ebp), %eax
  2741. pushl %edx
  2742. movl %eax, %edx
  2743. movl $7, %eax
  2744. leal (%edx,%eax,4), %eax
  2745. popl %edx
  2746. movl (%eax), %eax
  2747. movl %eax, 0(%esp)
  2748. call vector_destroy
  2749. addl $4, %esp
  2750. subl $4, %esp
  2751. movl 8(%ebp), %eax
  2752. pushl %edx
  2753. movl %eax, %edx
  2754. movl $0, %eax
  2755. leal (%edx,%eax,4), %eax
  2756. popl %edx
  2757. movl (%eax), %eax
  2758. movl %eax, 0(%esp)
  2759. call input_chan_close
  2760. addl $4, %esp
  2761. subl $4, %esp
  2762. movl 8(%ebp), %eax
  2763. pushl %edx
  2764. movl %eax, %edx
  2765. movl $1, %eax
  2766. leal (%edx,%eax,4), %eax
  2767. popl %edx
  2768. movl (%eax), %eax
  2769. movl %eax, 0(%esp)
  2770. call free
  2771. addl $4, %esp
  2772. subl $4, %esp
  2773. movl 8(%ebp), %eax
  2774. movl %eax, 0(%esp)
  2775. call free
  2776. addl $4, %esp
  2777. leave
  2778. ret
  2779. lexer_look:
  2780. pushl %ebp
  2781. movl %esp, %ebp
  2782. subl $4, %esp
  2783. subl $8, %esp
  2784. movl 8(%ebp), %eax
  2785. pushl %edx
  2786. movl %eax, %edx
  2787. movl $0, %eax
  2788. leal (%edx,%eax,4), %eax
  2789. popl %edx
  2790. movl (%eax), %eax
  2791. movl %eax, 0(%esp)
  2792. movl $0, %eax
  2793. movl %eax, 4(%esp)
  2794. call fnextc
  2795. addl $8, %esp
  2796. movl %eax, -4(%ebp)
  2797. movl -4(%ebp), %eax
  2798. movl %eax, %edx
  2799. movl $1, %eax
  2800. negl %eax
  2801. cmpl %eax, %edx
  2802. sete %al
  2803. movzbl %al, %eax
  2804. cmpl $0, %eax
  2805. je _label42
  2806. movl $0, %eax
  2807. leave
  2808. ret
  2809. _label42:
  2810. movl -4(%ebp), %eax
  2811. leal char_table(,%eax,4), %eax
  2812. movl (%eax), %eax
  2813. leave
  2814. ret
  2815. lexer_consume:
  2816. pushl %ebp
  2817. movl %esp, %ebp
  2818. subl $4, %esp
  2819. subl $4, %esp
  2820. movl 8(%ebp), %eax
  2821. pushl %edx
  2822. movl %eax, %edx
  2823. movl $0, %eax
  2824. leal (%edx,%eax,4), %eax
  2825. popl %edx
  2826. movl (%eax), %eax
  2827. movl %eax, 0(%esp)
  2828. call fgetc
  2829. addl $4, %esp
  2830. movl %eax, -4(%ebp)
  2831. movl -4(%ebp), %eax
  2832. movl %eax, %edx
  2833. movl $10, %eax
  2834. cmpl %eax, %edx
  2835. sete %al
  2836. movzbl %al, %eax
  2837. cmpl $0, %eax
  2838. je _label43
  2839. movl 8(%ebp), %eax
  2840. movl %eax, %edx
  2841. movl $2, %eax
  2842. leal (%edx,%eax,4), %eax
  2843. movl %eax, %ebx
  2844. movl 8(%ebp), %eax
  2845. movl %eax, %edx
  2846. movl $2, %eax
  2847. leal (%edx,%eax,4), %eax
  2848. movl (%eax), %eax
  2849. pushl %ebx
  2850. movl %eax, %ebx
  2851. movl $1, %eax
  2852. addl %ebx, %eax
  2853. popl %ebx
  2854. movl %eax, (%ebx)
  2855. movl 8(%ebp), %eax
  2856. movl %eax, %edx
  2857. movl $3, %eax
  2858. leal (%edx,%eax,4), %eax
  2859. movl %eax, %ebx
  2860. movl $0, %eax
  2861. movl %eax, (%ebx)
  2862. _label43:
  2863. movl 8(%ebp), %eax
  2864. movl %eax, %edx
  2865. movl $3, %eax
  2866. leal (%edx,%eax,4), %eax
  2867. movl %eax, %ebx
  2868. movl 8(%ebp), %eax
  2869. movl %eax, %edx
  2870. movl $3, %eax
  2871. leal (%edx,%eax,4), %eax
  2872. movl (%eax), %eax
  2873. pushl %ebx
  2874. movl %eax, %ebx
  2875. movl $1, %eax
  2876. addl %ebx, %eax
  2877. popl %ebx
  2878. movl %eax, (%ebx)
  2879. subl $12, %esp
  2880. movl 8(%ebp), %eax
  2881. pushl %edx
  2882. movl %eax, %edx
  2883. movl $7, %eax
  2884. leal (%edx,%eax,4), %eax
  2885. popl %edx
  2886. movl (%eax), %eax
  2887. movl %eax, 0(%esp)
  2888. pushl %ebx
  2889. pushl %ecx
  2890. pushl %edx
  2891. pushl %esi
  2892. pushl %edi
  2893. subl $4, %esp
  2894. movl 8(%ebp), %eax
  2895. movl %eax, 0(%esp)
  2896. call lexer_token_length
  2897. addl $4, %esp
  2898. popl %edi
  2899. popl %esi
  2900. popl %edx
  2901. popl %ecx
  2902. popl %ebx
  2903. pushl %ebx
  2904. pushl %eax
  2905. movl $1, %eax
  2906. movl %eax, %ebx
  2907. popl %eax
  2908. subl %ebx, %eax
  2909. popl %ebx
  2910. movl %eax, 4(%esp)
  2911. movl -4(%ebp), %eax
  2912. movl %eax, 8(%esp)
  2913. call char_vector_set
  2914. addl $12, %esp
  2915. subl $8, %esp
  2916. movl 8(%ebp), %eax
  2917. pushl %edx
  2918. movl %eax, %edx
  2919. movl $7, %eax
  2920. leal (%edx,%eax,4), %eax
  2921. popl %edx
  2922. movl (%eax), %eax
  2923. movl %eax, 0(%esp)
  2924. movl $0, %eax
  2925. movl %eax, 4(%esp)
  2926. call char_vector_push
  2927. addl $8, %esp
  2928. movl -4(%ebp), %eax
  2929. leave
  2930. ret
  2931. lexer_token_set:
  2932. pushl %ebp
  2933. movl %esp, %ebp
  2934. movl 8(%ebp), %eax
  2935. movl %eax, %edx
  2936. movl $5, %eax
  2937. leal (%edx,%eax,4), %eax
  2938. movl %eax, %ebx
  2939. movl 12(%ebp), %eax
  2940. movl %eax, (%ebx)
  2941. leave
  2942. ret
  2943. lexer_token_get:
  2944. pushl %ebp
  2945. movl %esp, %ebp
  2946. movl 8(%ebp), %eax
  2947. movl %eax, %edx
  2948. movl $5, %eax
  2949. leal (%edx,%eax,4), %eax
  2950. movl (%eax), %eax
  2951. leave
  2952. ret
  2953. lexer_token_text:
  2954. pushl %ebp
  2955. movl %esp, %ebp
  2956. subl $4, %esp
  2957. movl 8(%ebp), %eax
  2958. pushl %edx
  2959. movl %eax, %edx
  2960. movl $7, %eax
  2961. leal (%edx,%eax,4), %eax
  2962. popl %edx
  2963. movl (%eax), %eax
  2964. movl %eax, 0(%esp)
  2965. call vector_buffer
  2966. addl $4, %esp
  2967. leave
  2968. ret
  2969. lexer_token_length:
  2970. pushl %ebp
  2971. movl %esp, %ebp
  2972. subl $4, %esp
  2973. movl 8(%ebp), %eax
  2974. pushl %edx
  2975. movl %eax, %edx
  2976. movl $7, %eax
  2977. leal (%edx,%eax,4), %eax
  2978. popl %edx
  2979. movl (%eax), %eax
  2980. movl %eax, 0(%esp)
  2981. call vector_size
  2982. addl $4, %esp
  2983. leave
  2984. ret
  2985. lexer_token_value:
  2986. pushl %ebp
  2987. movl %esp, %ebp
  2988. movl 8(%ebp), %eax
  2989. movl %eax, %edx
  2990. movl $6, %eax
  2991. leal (%edx,%eax,4), %eax
  2992. movl (%eax), %eax
  2993. leave
  2994. ret
  2995. lexer_token_location:
  2996. pushl %ebp
  2997. movl %esp, %ebp
  2998. subl $12, %esp
  2999. movl 8(%ebp), %eax
  3000. pushl %edx
  3001. movl %eax, %edx
  3002. movl $1, %eax
  3003. leal (%edx,%eax,4), %eax
  3004. popl %edx
  3005. movl (%eax), %eax
  3006. movl %eax, 0(%esp)
  3007. movl 8(%ebp), %eax
  3008. pushl %edx
  3009. movl %eax, %edx
  3010. movl $2, %eax
  3011. leal (%edx,%eax,4), %eax
  3012. popl %edx
  3013. movl (%eax), %eax
  3014. movl %eax, 4(%esp)
  3015. movl 8(%ebp), %eax
  3016. pushl %edx
  3017. movl %eax, %edx
  3018. movl $3, %eax
  3019. leal (%edx,%eax,4), %eax
  3020. popl %edx
  3021. movl (%eax), %eax
  3022. movl %eax, 8(%esp)
  3023. call tuple3
  3024. addl $12, %esp
  3025. leave
  3026. ret
  3027. lexer_hold:
  3028. pushl %ebp
  3029. movl %esp, %ebp
  3030. subl $8, %esp
  3031. movl 8(%ebp), %eax
  3032. pushl %edx
  3033. movl %eax, %edx
  3034. movl $4, %eax
  3035. leal (%edx,%eax,4), %eax
  3036. popl %edx
  3037. movl (%eax), %eax
  3038. pushl %edx
  3039. movl %eax, %edx
  3040. movl $0, %eax
  3041. cmpl %eax, %edx
  3042. popl %edx
  3043. sete %al
  3044. movzbl %al, %eax
  3045. movl %eax, 0(%esp)
  3046. movl $strbuf+261, %eax
  3047. movl %eax, 4(%esp)
  3048. call assert
  3049. addl $8, %esp
  3050. movl 8(%ebp), %eax
  3051. movl %eax, %edx
  3052. movl $4, %eax
  3053. leal (%edx,%eax,4), %eax
  3054. movl %eax, %ebx
  3055. movl $1, %eax
  3056. movl %eax, (%ebx)
  3057. leave
  3058. ret
  3059. lexer_reset_token:
  3060. pushl %ebp
  3061. movl %esp, %ebp
  3062. movl 8(%ebp), %eax
  3063. movl %eax, %edx
  3064. movl $5, %eax
  3065. leal (%edx,%eax,4), %eax
  3066. movl %eax, %ebx
  3067. movl $0, %eax
  3068. movl %eax, (%ebx)
  3069. movl 8(%ebp), %eax
  3070. movl %eax, %edx
  3071. movl $6, %eax
  3072. leal (%edx,%eax,4), %eax
  3073. movl %eax, %ebx
  3074. movl $0, %eax
  3075. movl %eax, (%ebx)
  3076. subl $8, %esp
  3077. movl 8(%ebp), %eax
  3078. pushl %edx
  3079. movl %eax, %edx
  3080. movl $7, %eax
  3081. leal (%edx,%eax,4), %eax
  3082. popl %edx
  3083. movl (%eax), %eax
  3084. movl %eax, 0(%esp)
  3085. movl $0, %eax
  3086. movl %eax, 4(%esp)
  3087. call char_vector_resize
  3088. addl $8, %esp
  3089. subl $8, %esp
  3090. movl 8(%ebp), %eax
  3091. pushl %edx
  3092. movl %eax, %edx
  3093. movl $7, %eax
  3094. leal (%edx,%eax,4), %eax
  3095. popl %edx
  3096. movl (%eax), %eax
  3097. movl %eax, 0(%esp)
  3098. movl $0, %eax
  3099. movl %eax, 4(%esp)
  3100. call char_vector_push
  3101. addl $8, %esp
  3102. leave
  3103. ret
  3104. fputloc:
  3105. pushl %ebp
  3106. movl %esp, %ebp
  3107. subl $8, %esp
  3108. movl 12(%ebp), %eax
  3109. movl %eax, 0(%esp)
  3110. movl 8(%ebp), %eax
  3111. pushl %edx
  3112. movl %eax, %edx
  3113. movl $0, %eax
  3114. leal (%edx,%eax,4), %eax
  3115. popl %edx
  3116. movl (%eax), %eax
  3117. movl %eax, 4(%esp)
  3118. call fputs
  3119. addl $8, %esp
  3120. subl $8, %esp
  3121. movl 12(%ebp), %eax
  3122. movl %eax, 0(%esp)
  3123. movl $58, %eax
  3124. movl %eax, 4(%esp)
  3125. call fputc
  3126. addl $8, %esp
  3127. subl $12, %esp
  3128. movl 12(%ebp), %eax
  3129. movl %eax, 0(%esp)
  3130. movl 8(%ebp), %eax
  3131. pushl %edx
  3132. movl %eax, %edx
  3133. movl $1, %eax
  3134. leal (%edx,%eax,4), %eax
  3135. popl %edx
  3136. movl (%eax), %eax
  3137. movl %eax, 4(%esp)
  3138. movl $10, %eax
  3139. movl %eax, 8(%esp)
  3140. call fputn
  3141. addl $12, %esp
  3142. subl $8, %esp
  3143. movl 12(%ebp), %eax
  3144. movl %eax, 0(%esp)
  3145. movl $58, %eax
  3146. movl %eax, 4(%esp)
  3147. call fputc
  3148. addl $8, %esp
  3149. subl $12, %esp
  3150. movl 12(%ebp), %eax
  3151. movl %eax, 0(%esp)
  3152. movl 8(%ebp), %eax
  3153. pushl %edx
  3154. movl %eax, %edx
  3155. movl $2, %eax
  3156. leal (%edx,%eax,4), %eax
  3157. popl %edx
  3158. movl (%eax), %eax
  3159. movl %eax, 4(%esp)
  3160. movl $10, %eax
  3161. movl %eax, 8(%esp)
  3162. call fputn
  3163. addl $12, %esp
  3164. leave
  3165. ret
  3166. lexer_error:
  3167. pushl %ebp
  3168. movl %esp, %ebp
  3169. subl $8, %esp
  3170. pushl %ebx
  3171. pushl %ecx
  3172. pushl %edx
  3173. pushl %esi
  3174. pushl %edi
  3175. subl $4, %esp
  3176. movl 8(%ebp), %eax
  3177. movl %eax, 0(%esp)
  3178. call lexer_token_location
  3179. addl $4, %esp
  3180. popl %edi
  3181. popl %esi
  3182. popl %edx
  3183. popl %ecx
  3184. popl %ebx
  3185. movl %eax, 0(%esp)
  3186. movl stderr, %eax
  3187. movl %eax, 4(%esp)
  3188. call fputloc
  3189. addl $8, %esp
  3190. subl $4, %esp
  3191. movl $strbuf+294, %eax
  3192. movl %eax, 0(%esp)
  3193. call eputs
  3194. addl $4, %esp
  3195. subl $4, %esp
  3196. movl 12(%ebp), %eax
  3197. movl %eax, 0(%esp)
  3198. call eputs
  3199. addl $4, %esp
  3200. subl $4, %esp
  3201. movl $10, %eax
  3202. movl %eax, 0(%esp)
  3203. call eputc
  3204. addl $4, %esp
  3205. subl $4, %esp
  3206. movl $1, %eax
  3207. movl %eax, 0(%esp)
  3208. call exit
  3209. addl $4, %esp
  3210. leave
  3211. ret
  3212. lexer_lex:
  3213. pushl %ebp
  3214. movl %esp, %ebp
  3215. subl $12, %esp
  3216. movl 8(%ebp), %eax
  3217. movl %eax, %edx
  3218. movl $4, %eax
  3219. leal (%edx,%eax,4), %eax
  3220. movl (%eax), %eax
  3221. cmpl $0, %eax
  3222. je _label44
  3223. movl 8(%ebp), %eax
  3224. movl %eax, %edx
  3225. movl $4, %eax
  3226. leal (%edx,%eax,4), %eax
  3227. movl %eax, %ebx
  3228. movl $0, %eax
  3229. movl %eax, (%ebx)
  3230. movl 8(%ebp), %eax
  3231. movl %eax, %edx
  3232. movl $5, %eax
  3233. leal (%edx,%eax,4), %eax
  3234. movl (%eax), %eax
  3235. leave
  3236. ret
  3237. _label44:
  3238. lx00:
  3239. subl $4, %esp
  3240. movl 8(%ebp), %eax
  3241. movl %eax, 0(%esp)
  3242. call lexer_look
  3243. addl $4, %esp
  3244. movl %eax, %edx
  3245. movl $2, %eax
  3246. cmpl %eax, %edx
  3247. sete %al
  3248. movzbl %al, %eax
  3249. cmpl $0, %eax
  3250. jne _label46
  3251. subl $4, %esp
  3252. movl 8(%ebp), %eax
  3253. movl %eax, 0(%esp)
  3254. call lexer_look
  3255. addl $4, %esp
  3256. movl %eax, %edx
  3257. movl $3, %eax
  3258. cmpl %eax, %edx
  3259. sete %al
  3260. movzbl %al, %eax
  3261. cmpl $0, %eax
  3262. jne _label46
  3263. movl $0, %eax
  3264. jmp _label47
  3265. _label46:
  3266. movl $1, %eax
  3267. _label47:
  3268. cmpl $0, %eax
  3269. je _label45
  3270. subl $4, %esp
  3271. movl 8(%ebp), %eax
  3272. movl %eax, 0(%esp)
  3273. call lexer_consume
  3274. addl $4, %esp
  3275. movl $lx00, %eax
  3276. jmp *%eax
  3277. _label45:
  3278. subl $4, %esp
  3279. movl 8(%ebp), %eax
  3280. movl %eax, 0(%esp)
  3281. call lexer_reset_token
  3282. addl $4, %esp
  3283. subl $4, %esp
  3284. movl 8(%ebp), %eax
  3285. movl %eax, 0(%esp)
  3286. call lexer_look
  3287. addl $4, %esp
  3288. leal lx00n(,%eax,4), %eax
  3289. movl (%eax), %eax
  3290. jmp *%eax
  3291. lx01:
  3292. movl $256, %eax
  3293. leave
  3294. ret
  3295. lx02:
  3296. subl $4, %esp
  3297. movl 8(%ebp), %eax
  3298. movl %eax, 0(%esp)
  3299. call lexer_consume
  3300. addl $4, %esp
  3301. subl $8, %esp
  3302. movl 8(%ebp), %eax
  3303. movl %eax, 0(%esp)
  3304. movl $257, %eax
  3305. movl %eax, 4(%esp)
  3306. call lexer_token_set
  3307. addl $8, %esp
  3308. subl $4, %esp
  3309. movl 8(%ebp), %eax
  3310. movl %eax, 0(%esp)
  3311. call lexer_look
  3312. addl $4, %esp
  3313. leal lx02n(,%eax,4), %eax
  3314. movl (%eax), %eax
  3315. jmp *%eax
  3316. lx03:
  3317. subl $4, %esp
  3318. movl 8(%ebp), %eax
  3319. movl %eax, 0(%esp)
  3320. call lexer_consume
  3321. addl $4, %esp
  3322. movl %eax, -4(%ebp)
  3323. movl 8(%ebp), %eax
  3324. movl %eax, %edx
  3325. movl $6, %eax
  3326. leal (%edx,%eax,4), %eax
  3327. movl %eax, %ebx
  3328. movl 8(%ebp), %eax
  3329. movl %eax, %edx
  3330. movl $6, %eax
  3331. leal (%edx,%eax,4), %eax
  3332. movl (%eax), %eax
  3333. pushl %ebx
  3334. movl %eax, %ebx
  3335. movl $8, %eax
  3336. imull %ebx, %eax
  3337. popl %ebx
  3338. pushl %ebx
  3339. movl %eax, %ebx
  3340. movl -4(%ebp), %eax
  3341. pushl %ebx
  3342. pushl %eax
  3343. movl $48, %eax
  3344. movl %eax, %ebx
  3345. popl %eax
  3346. subl %ebx, %eax
  3347. popl %ebx
  3348. addl %ebx, %eax
  3349. popl %ebx
  3350. movl %eax, (%ebx)
  3351. subl $4, %esp
  3352. movl 8(%ebp), %eax
  3353. movl %eax, 0(%esp)
  3354. call lexer_look
  3355. addl $4, %esp
  3356. leal lx03n(,%eax,4), %eax
  3357. movl (%eax), %eax
  3358. jmp *%eax
  3359. lx04:
  3360. subl $4, %esp
  3361. movl 8(%ebp), %eax
  3362. movl %eax, 0(%esp)
  3363. call lexer_consume
  3364. addl $4, %esp
  3365. subl $4, %esp
  3366. movl 8(%ebp), %eax
  3367. movl %eax, 0(%esp)
  3368. call lexer_look
  3369. addl $4, %esp
  3370. leal lx04n(,%eax,4), %eax
  3371. movl (%eax), %eax
  3372. jmp *%eax
  3373. lx05:
  3374. subl $4, %esp
  3375. movl 8(%ebp), %eax
  3376. movl %eax, 0(%esp)
  3377. call lexer_consume
  3378. addl $4, %esp
  3379. movl %eax, -4(%ebp)
  3380. movl -4(%ebp), %eax
  3381. movl %eax, %edx
  3382. movl $97, %eax
  3383. cmpl %eax, %edx
  3384. setge %al
  3385. movzbl %al, %eax
  3386. cmpl $0, %eax
  3387. je _label49
  3388. movl -4(%ebp), %eax
  3389. pushl %eax
  3390. movl $97, %eax
  3391. movl %eax, %ebx
  3392. popl %eax
  3393. subl %ebx, %eax
  3394. movl %eax, %ebx
  3395. movl $10, %eax
  3396. addl %ebx, %eax
  3397. movl %eax, -4(%ebp)
  3398. jmp _label48
  3399. _label49:
  3400. movl -4(%ebp), %eax
  3401. movl %eax, %edx
  3402. movl $65, %eax
  3403. cmpl %eax, %edx
  3404. setge %al
  3405. movzbl %al, %eax
  3406. cmpl $0, %eax
  3407. je _label51
  3408. movl -4(%ebp), %eax
  3409. pushl %eax
  3410. movl $65, %eax
  3411. movl %eax, %ebx
  3412. popl %eax
  3413. subl %ebx, %eax
  3414. movl %eax, %ebx
  3415. movl $10, %eax
  3416. addl %ebx, %eax
  3417. movl %eax, -4(%ebp)
  3418. jmp _label50
  3419. _label51:
  3420. movl -4(%ebp), %eax
  3421. pushl %eax
  3422. movl $48, %eax
  3423. movl %eax, %ebx
  3424. popl %eax
  3425. subl %ebx, %eax
  3426. movl %eax, -4(%ebp)
  3427. _label50:
  3428. _label48:
  3429. movl 8(%ebp), %eax
  3430. movl %eax, %edx
  3431. movl $6, %eax
  3432. leal (%edx,%eax,4), %eax
  3433. movl %eax, %ebx
  3434. movl 8(%ebp), %eax
  3435. movl %eax, %edx
  3436. movl $6, %eax
  3437. leal (%edx,%eax,4), %eax
  3438. movl (%eax), %eax
  3439. pushl %ebx
  3440. movl %eax, %ebx
  3441. movl $16, %eax
  3442. imull %ebx, %eax
  3443. popl %ebx
  3444. pushl %ebx
  3445. movl %eax, %ebx
  3446. movl -4(%ebp), %eax
  3447. addl %ebx, %eax
  3448. popl %ebx
  3449. movl %eax, (%ebx)
  3450. subl $4, %esp
  3451. movl 8(%ebp), %eax
  3452. movl %eax, 0(%esp)
  3453. call lexer_look
  3454. addl $4, %esp
  3455. leal lx05n(,%eax,4), %eax
  3456. movl (%eax), %eax
  3457. jmp *%eax
  3458. lx06:
  3459. subl $8, %esp
  3460. movl 8(%ebp), %eax
  3461. movl %eax, 0(%esp)
  3462. movl $257, %eax
  3463. movl %eax, 4(%esp)
  3464. call lexer_token_set
  3465. addl $8, %esp
  3466. subl $4, %esp
  3467. movl 8(%ebp), %eax
  3468. movl %eax, 0(%esp)
  3469. call lexer_consume
  3470. addl $4, %esp
  3471. movl %eax, -4(%ebp)
  3472. movl 8(%ebp), %eax
  3473. movl %eax, %edx
  3474. movl $6, %eax
  3475. leal (%edx,%eax,4), %eax
  3476. movl %eax, %ebx
  3477. movl 8(%ebp), %eax
  3478. movl %eax, %edx
  3479. movl $6, %eax
  3480. leal (%edx,%eax,4), %eax
  3481. movl (%eax), %eax
  3482. pushl %ebx
  3483. movl %eax, %ebx
  3484. movl $10, %eax
  3485. imull %ebx, %eax
  3486. popl %ebx
  3487. pushl %ebx
  3488. movl %eax, %ebx
  3489. movl -4(%ebp), %eax
  3490. pushl %ebx
  3491. pushl %eax
  3492. movl $48, %eax
  3493. movl %eax, %ebx
  3494. popl %eax
  3495. subl %ebx, %eax
  3496. popl %ebx
  3497. addl %ebx, %eax
  3498. popl %ebx
  3499. movl %eax, (%ebx)
  3500. subl $4, %esp
  3501. movl 8(%ebp), %eax
  3502. movl %eax, 0(%esp)
  3503. call lexer_look
  3504. addl $4, %esp
  3505. leal lx06n(,%eax,4), %eax
  3506. movl (%eax), %eax
  3507. jmp *%eax
  3508. lx07:
  3509. subl $8, %esp
  3510. movl 8(%ebp), %eax
  3511. movl %eax, 0(%esp)
  3512. movl $258, %eax
  3513. movl %eax, 4(%esp)
  3514. call lexer_token_set
  3515. addl $8, %esp
  3516. subl $4, %esp
  3517. movl 8(%ebp), %eax
  3518. movl %eax, 0(%esp)
  3519. call lexer_consume
  3520. addl $4, %esp
  3521. subl $4, %esp
  3522. movl 8(%ebp), %eax
  3523. movl %eax, 0(%esp)
  3524. call lexer_look
  3525. addl $4, %esp
  3526. leal lx07n(,%eax,4), %eax
  3527. movl (%eax), %eax
  3528. jmp *%eax
  3529. lx08:
  3530. movl $0, %eax
  3531. movl %eax, -8(%ebp)
  3532. _label52:
  3533. movl -8(%ebp), %eax
  3534. leal reserved_keywords(,%eax,4), %eax
  3535. movl (%eax), %eax
  3536. movl %eax, %edx
  3537. movl $0, %eax
  3538. cmpl %eax, %edx
  3539. setne %al
  3540. movzbl %al, %eax
  3541. cmpl $0, %eax
  3542. je _label53
  3543. subl $8, %esp
  3544. movl -8(%ebp), %eax
  3545. leal reserved_keywords(,%eax,4), %eax
  3546. movl (%eax), %eax
  3547. movl %eax, 0(%esp)
  3548. pushl %ebx
  3549. pushl %ecx
  3550. pushl %edx
  3551. pushl %esi
  3552. pushl %edi
  3553. subl $4, %esp
  3554. movl 8(%ebp), %eax
  3555. movl %eax, 0(%esp)
  3556. call lexer_token_text
  3557. addl $4, %esp
  3558. popl %edi
  3559. popl %esi
  3560. popl %edx
  3561. popl %ecx
  3562. popl %ebx
  3563. movl %eax, 4(%esp)
  3564. call strcmp
  3565. addl $8, %esp
  3566. movl %eax, %edx
  3567. movl $0, %eax
  3568. cmpl %eax, %edx
  3569. sete %al
  3570. movzbl %al, %eax
  3571. cmpl $0, %eax
  3572. je _label54
  3573. subl $8, %esp
  3574. movl 8(%ebp), %eax
  3575. movl %eax, 0(%esp)
  3576. movl $270, %eax
  3577. pushl %ebx
  3578. movl %eax, %ebx
  3579. movl -8(%ebp), %eax
  3580. addl %ebx, %eax
  3581. popl %ebx
  3582. movl %eax, 4(%esp)
  3583. call lexer_token_set
  3584. addl $8, %esp
  3585. movl $lx99, %eax
  3586. jmp *%eax
  3587. _label54:
  3588. movl -8(%ebp), %eax
  3589. movl %eax, %ebx
  3590. movl $1, %eax
  3591. addl %ebx, %eax
  3592. movl %eax, -8(%ebp)
  3593. jmp _label52
  3594. _label53:
  3595. movl $lx99, %eax
  3596. jmp *%eax
  3597. lx09:
  3598. subl $4, %esp
  3599. movl 8(%ebp), %eax
  3600. movl %eax, 0(%esp)
  3601. call lexer_consume
  3602. addl $4, %esp
  3603. movl %eax, -4(%ebp)
  3604. movl $261, %eax
  3605. movl %eax, -8(%ebp)
  3606. movl -4(%ebp), %eax
  3607. movl %eax, %edx
  3608. movl $97, %eax
  3609. cmpl %eax, %edx
  3610. sete %al
  3611. movzbl %al, %eax
  3612. cmpl $0, %eax
  3613. je _label55
  3614. movl $260, %eax
  3615. movl %eax, -8(%ebp)
  3616. _label55:
  3617. subl $8, %esp
  3618. movl 8(%ebp), %eax
  3619. movl %eax, 0(%esp)
  3620. movl -8(%ebp), %eax
  3621. movl %eax, 4(%esp)
  3622. call lexer_token_set
  3623. addl $8, %esp
  3624. subl $4, %esp
  3625. movl 8(%ebp), %eax
  3626. movl %eax, 0(%esp)
  3627. call lexer_look
  3628. addl $4, %esp
  3629. leal lx09n(,%eax,4), %eax
  3630. movl (%eax), %eax
  3631. jmp *%eax
  3632. lx10:
  3633. subl $4, %esp
  3634. movl 8(%ebp), %eax
  3635. movl %eax, 0(%esp)
  3636. call lexer_consume
  3637. addl $4, %esp
  3638. movl %eax, -4(%ebp)
  3639. movl 8(%ebp), %eax
  3640. movl %eax, %edx
  3641. movl $6, %eax
  3642. leal (%edx,%eax,4), %eax
  3643. movl %eax, %ebx
  3644. movl 8(%ebp), %eax
  3645. movl %eax, %edx
  3646. movl $6, %eax
  3647. leal (%edx,%eax,4), %eax
  3648. movl (%eax), %eax
  3649. pushl %ebx
  3650. movl %eax, %ebx
  3651. movl $10, %eax
  3652. imull %ebx, %eax
  3653. popl %ebx
  3654. pushl %ebx
  3655. movl %eax, %ebx
  3656. movl -4(%ebp), %eax
  3657. pushl %ebx
  3658. pushl %eax
  3659. movl $48, %eax
  3660. movl %eax, %ebx
  3661. popl %eax
  3662. subl %ebx, %eax
  3663. popl %ebx
  3664. addl %ebx, %eax
  3665. popl %ebx
  3666. movl %eax, (%ebx)
  3667. subl $4, %esp
  3668. movl 8(%ebp), %eax
  3669. movl %eax, 0(%esp)
  3670. call lexer_look
  3671. addl $4, %esp
  3672. leal lx10n(,%eax,4), %eax
  3673. movl (%eax), %eax
  3674. jmp *%eax
  3675. lx11:
  3676. subl $8, %esp
  3677. movl 8(%ebp), %eax
  3678. movl %eax, 0(%esp)
  3679. movl $257, %eax
  3680. movl %eax, 4(%esp)
  3681. call lexer_token_set
  3682. addl $8, %esp
  3683. subl $4, %esp
  3684. movl 8(%ebp), %eax
  3685. movl %eax, 0(%esp)
  3686. call lexer_consume
  3687. addl $4, %esp
  3688. subl $4, %esp
  3689. movl 8(%ebp), %eax
  3690. movl %eax, 0(%esp)
  3691. call lexer_look
  3692. addl $4, %esp
  3693. leal lx11n(,%eax,4), %eax
  3694. movl (%eax), %eax
  3695. jmp *%eax
  3696. lx12:
  3697. subl $4, %esp
  3698. movl 8(%ebp), %eax
  3699. movl %eax, 0(%esp)
  3700. call lexer_consume
  3701. addl $4, %esp
  3702. movl %eax, -4(%ebp)
  3703. movl 8(%ebp), %eax
  3704. movl %eax, %edx
  3705. movl $6, %eax
  3706. leal (%edx,%eax,4), %eax
  3707. movl %eax, %ebx
  3708. movl -4(%ebp), %eax
  3709. movl %eax, (%ebx)
  3710. movl $lx14, %eax
  3711. jmp *%eax
  3712. lx13:
  3713. subl $4, %esp
  3714. movl 8(%ebp), %eax
  3715. movl %eax, 0(%esp)
  3716. call lexer_consume
  3717. addl $4, %esp
  3718. subl $4, %esp
  3719. movl 8(%ebp), %eax
  3720. movl %eax, 0(%esp)
  3721. call lexer_consume
  3722. addl $4, %esp
  3723. movl %eax, -4(%ebp)
  3724. movl 8(%ebp), %eax
  3725. movl %eax, %edx
  3726. movl $6, %eax
  3727. leal (%edx,%eax,4), %eax
  3728. movl %eax, %ebx
  3729. movl -4(%ebp), %eax
  3730. leal char_to_escape(,%eax,4), %eax
  3731. movl (%eax), %eax
  3732. movl %eax, (%ebx)
  3733. lx14:
  3734. subl $4, %esp
  3735. movl 8(%ebp), %eax
  3736. movl %eax, 0(%esp)
  3737. call lexer_look
  3738. addl $4, %esp
  3739. movl %eax, %edx
  3740. movl $11, %eax
  3741. cmpl %eax, %edx
  3742. setne %al
  3743. movzbl %al, %eax
  3744. cmpl $0, %eax
  3745. je _label56
  3746. movl $le06, %eax
  3747. jmp *%eax
  3748. _label56:
  3749. subl $4, %esp
  3750. movl 8(%ebp), %eax
  3751. movl %eax, 0(%esp)
  3752. call lexer_consume
  3753. addl $4, %esp
  3754. movl $lx99, %eax
  3755. jmp *%eax
  3756. lx15:
  3757. subl $4, %esp
  3758. movl 8(%ebp), %eax
  3759. movl %eax, 0(%esp)
  3760. call lexer_consume
  3761. addl $4, %esp
  3762. subl $4, %esp
  3763. movl 8(%ebp), %eax
  3764. movl %eax, 0(%esp)
  3765. call lexer_look
  3766. addl $4, %esp
  3767. leal lx15n(,%eax,4), %eax
  3768. movl (%eax), %eax
  3769. jmp *%eax
  3770. lx16:
  3771. subl $4, %esp
  3772. movl 8(%ebp), %eax
  3773. movl %eax, 0(%esp)
  3774. call lexer_consume
  3775. addl $4, %esp
  3776. subl $4, %esp
  3777. movl 8(%ebp), %eax
  3778. movl %eax, 0(%esp)
  3779. call lexer_consume
  3780. addl $4, %esp
  3781. subl $4, %esp
  3782. movl 8(%ebp), %eax
  3783. movl %eax, 0(%esp)
  3784. call lexer_look
  3785. addl $4, %esp
  3786. leal lx16n(,%eax,4), %eax
  3787. movl (%eax), %eax
  3788. jmp *%eax
  3789. lx17:
  3790. subl $4, %esp
  3791. movl 8(%ebp), %eax
  3792. movl %eax, 0(%esp)
  3793. call lexer_consume
  3794. addl $4, %esp
  3795. subl $8, %esp
  3796. movl 8(%ebp), %eax
  3797. movl %eax, 0(%esp)
  3798. movl $259, %eax
  3799. movl %eax, 4(%esp)
  3800. call lexer_token_set
  3801. addl $8, %esp
  3802. movl $lx99, %eax
  3803. jmp *%eax
  3804. lx18:
  3805. subl $4, %esp
  3806. movl 8(%ebp), %eax
  3807. movl %eax, 0(%esp)
  3808. call lexer_consume
  3809. addl $4, %esp
  3810. movl %eax, -4(%ebp)
  3811. subl $8, %esp
  3812. movl 8(%ebp), %eax
  3813. movl %eax, 0(%esp)
  3814. movl -4(%ebp), %eax
  3815. movl %eax, 4(%esp)
  3816. call lexer_token_set
  3817. addl $8, %esp
  3818. subl $8, %esp
  3819. movl 8(%ebp), %eax
  3820. pushl %edx
  3821. movl %eax, %edx
  3822. movl $0, %eax
  3823. leal (%edx,%eax,4), %eax
  3824. popl %edx
  3825. movl (%eax), %eax
  3826. movl %eax, 0(%esp)
  3827. movl $0, %eax
  3828. movl %eax, 4(%esp)
  3829. call fnextc
  3830. addl $8, %esp
  3831. movl %eax, -8(%ebp)
  3832. subl $8, %esp
  3833. movl 8(%ebp), %eax
  3834. pushl %edx
  3835. movl %eax, %edx
  3836. movl $0, %eax
  3837. leal (%edx,%eax,4), %eax
  3838. popl %edx
  3839. movl (%eax), %eax
  3840. movl %eax, 0(%esp)
  3841. movl $1, %eax
  3842. movl %eax, 4(%esp)
  3843. call fnextc
  3844. addl $8, %esp
  3845. movl %eax, -12(%ebp)
  3846. movl -4(%ebp), %eax
  3847. movl %eax, %edx
  3848. movl $61, %eax
  3849. cmpl %eax, %edx
  3850. sete %al
  3851. movzbl %al, %eax
  3852. cmpl $0, %eax
  3853. je _label58
  3854. movl -8(%ebp), %eax
  3855. movl %eax, %edx
  3856. movl $61, %eax
  3857. cmpl %eax, %edx
  3858. sete %al
  3859. movzbl %al, %eax
  3860. cmpl $0, %eax
  3861. je _label60
  3862. subl $4, %esp
  3863. movl 8(%ebp), %eax
  3864. movl %eax, 0(%esp)
  3865. call lexer_consume
  3866. addl $4, %esp
  3867. subl $8, %esp
  3868. movl 8(%ebp), %eax
  3869. movl %eax, 0(%esp)
  3870. movl $300, %eax
  3871. movl %eax, 4(%esp)
  3872. call lexer_token_set
  3873. addl $8, %esp
  3874. jmp _label59
  3875. _label60:
  3876. movl -8(%ebp), %eax
  3877. movl %eax, %edx
  3878. movl $62, %eax
  3879. cmpl %eax, %edx
  3880. sete %al
  3881. movzbl %al, %eax
  3882. cmpl $0, %eax
  3883. je _label59
  3884. subl $4, %esp
  3885. movl 8(%ebp), %eax
  3886. movl %eax, 0(%esp)
  3887. call lexer_consume
  3888. addl $4, %esp
  3889. subl $8, %esp
  3890. movl 8(%ebp), %eax
  3891. movl %eax, 0(%esp)
  3892. movl $304, %eax
  3893. movl %eax, 4(%esp)
  3894. call lexer_token_set
  3895. addl $8, %esp
  3896. _label59:
  3897. jmp _label57
  3898. _label58:
  3899. movl -4(%ebp), %eax
  3900. movl %eax, %edx
  3901. movl $33, %eax
  3902. cmpl %eax, %edx
  3903. sete %al
  3904. movzbl %al, %eax
  3905. cmpl $0, %eax
  3906. je _label61
  3907. movl -8(%ebp), %eax
  3908. movl %eax, %edx
  3909. movl $61, %eax
  3910. cmpl %eax, %edx
  3911. sete %al
  3912. movzbl %al, %eax
  3913. cmpl $0, %eax
  3914. je _label62
  3915. subl $4, %esp
  3916. movl 8(%ebp), %eax
  3917. movl %eax, 0(%esp)
  3918. call lexer_consume
  3919. addl $4, %esp
  3920. subl $8, %esp
  3921. movl 8(%ebp), %eax
  3922. movl %eax, 0(%esp)
  3923. movl $301, %eax
  3924. movl %eax, 4(%esp)
  3925. call lexer_token_set
  3926. addl $8, %esp
  3927. _label62:
  3928. jmp _label57
  3929. _label61:
  3930. movl -4(%ebp), %eax
  3931. movl %eax, %edx
  3932. movl $43, %eax
  3933. cmpl %eax, %edx
  3934. sete %al
  3935. movzbl %al, %eax
  3936. cmpl $0, %eax
  3937. je _label63
  3938. movl -8(%ebp), %eax
  3939. movl %eax, %edx
  3940. movl $61, %eax
  3941. cmpl %eax, %edx
  3942. sete %al
  3943. movzbl %al, %eax
  3944. cmpl $0, %eax
  3945. je _label65
  3946. subl $4, %esp
  3947. movl 8(%ebp), %eax
  3948. movl %eax, 0(%esp)
  3949. call lexer_consume
  3950. addl $4, %esp
  3951. subl $8, %esp
  3952. movl 8(%ebp), %eax
  3953. movl %eax, 0(%esp)
  3954. movl $309, %eax
  3955. movl %eax, 4(%esp)
  3956. call lexer_token_set
  3957. addl $8, %esp
  3958. jmp _label64
  3959. _label65:
  3960. movl -8(%ebp), %eax
  3961. movl %eax, %edx
  3962. movl $43, %eax
  3963. cmpl %eax, %edx
  3964. sete %al
  3965. movzbl %al, %eax
  3966. cmpl $0, %eax
  3967. je _label64
  3968. subl $4, %esp
  3969. movl 8(%ebp), %eax
  3970. movl %eax, 0(%esp)
  3971. call lexer_consume
  3972. addl $4, %esp
  3973. subl $8, %esp
  3974. movl 8(%ebp), %eax
  3975. movl %eax, 0(%esp)
  3976. movl $319, %eax
  3977. movl %eax, 4(%esp)
  3978. call lexer_token_set
  3979. addl $8, %esp
  3980. _label64:
  3981. jmp _label57
  3982. _label63:
  3983. movl -4(%ebp), %eax
  3984. movl %eax, %edx
  3985. movl $45, %eax
  3986. cmpl %eax, %edx
  3987. sete %al
  3988. movzbl %al, %eax
  3989. cmpl $0, %eax
  3990. je _label66
  3991. movl -8(%ebp), %eax
  3992. movl %eax, %edx
  3993. movl $61, %eax
  3994. cmpl %eax, %edx
  3995. sete %al
  3996. movzbl %al, %eax
  3997. cmpl $0, %eax
  3998. je _label68
  3999. subl $4, %esp
  4000. movl 8(%ebp), %eax
  4001. movl %eax, 0(%esp)
  4002. call lexer_consume
  4003. addl $4, %esp
  4004. subl $8, %esp
  4005. movl 8(%ebp), %eax
  4006. movl %eax, 0(%esp)
  4007. movl $310, %eax
  4008. movl %eax, 4(%esp)
  4009. call lexer_token_set
  4010. addl $8, %esp
  4011. jmp _label67
  4012. _label68:
  4013. movl -8(%ebp), %eax
  4014. movl %eax, %edx
  4015. movl $45, %eax
  4016. cmpl %eax, %edx
  4017. sete %al
  4018. movzbl %al, %eax
  4019. cmpl $0, %eax
  4020. je _label67
  4021. subl $4, %esp
  4022. movl 8(%ebp), %eax
  4023. movl %eax, 0(%esp)
  4024. call lexer_consume
  4025. addl $4, %esp
  4026. subl $8, %esp
  4027. movl 8(%ebp), %eax
  4028. movl %eax, 0(%esp)
  4029. movl $320, %eax
  4030. movl %eax, 4(%esp)
  4031. call lexer_token_set
  4032. addl $8, %esp
  4033. _label67:
  4034. jmp _label57
  4035. _label66:
  4036. movl -4(%ebp), %eax
  4037. movl %eax, %edx
  4038. movl $42, %eax
  4039. cmpl %eax, %edx
  4040. sete %al
  4041. movzbl %al, %eax
  4042. cmpl $0, %eax
  4043. je _label69
  4044. movl -8(%ebp), %eax
  4045. movl %eax, %edx
  4046. movl $61, %eax
  4047. cmpl %eax, %edx
  4048. sete %al
  4049. movzbl %al, %eax
  4050. cmpl $0, %eax
  4051. je _label70
  4052. subl $4, %esp
  4053. movl 8(%ebp), %eax
  4054. movl %eax, 0(%esp)
  4055. call lexer_consume
  4056. addl $4, %esp
  4057. subl $8, %esp
  4058. movl 8(%ebp), %eax
  4059. movl %eax, 0(%esp)
  4060. movl $311, %eax
  4061. movl %eax, 4(%esp)
  4062. call lexer_token_set
  4063. addl $8, %esp
  4064. _label70:
  4065. jmp _label57
  4066. _label69:
  4067. movl -4(%ebp), %eax
  4068. movl %eax, %edx
  4069. movl $47, %eax
  4070. cmpl %eax, %edx
  4071. sete %al
  4072. movzbl %al, %eax
  4073. cmpl $0, %eax
  4074. je _label71
  4075. movl -8(%ebp), %eax
  4076. movl %eax, %edx
  4077. movl $61, %eax
  4078. cmpl %eax, %edx
  4079. sete %al
  4080. movzbl %al, %eax
  4081. cmpl $0, %eax
  4082. je _label72
  4083. subl $4, %esp
  4084. movl 8(%ebp), %eax
  4085. movl %eax, 0(%esp)
  4086. call lexer_consume
  4087. addl $4, %esp
  4088. subl $8, %esp
  4089. movl 8(%ebp), %eax
  4090. movl %eax, 0(%esp)
  4091. movl $312, %eax
  4092. movl %eax, 4(%esp)
  4093. call lexer_token_set
  4094. addl $8, %esp
  4095. _label72:
  4096. jmp _label57
  4097. _label71:
  4098. movl -4(%ebp), %eax
  4099. movl %eax, %edx
  4100. movl $37, %eax
  4101. cmpl %eax, %edx
  4102. sete %al
  4103. movzbl %al, %eax
  4104. cmpl $0, %eax
  4105. je _label73
  4106. movl -8(%ebp), %eax
  4107. movl %eax, %edx
  4108. movl $61, %eax
  4109. cmpl %eax, %edx
  4110. sete %al
  4111. movzbl %al, %eax
  4112. cmpl $0, %eax
  4113. je _label74
  4114. subl $4, %esp
  4115. movl 8(%ebp), %eax
  4116. movl %eax, 0(%esp)
  4117. call lexer_consume
  4118. addl $4, %esp
  4119. subl $8, %esp
  4120. movl 8(%ebp), %eax
  4121. movl %eax, 0(%esp)
  4122. movl $313, %eax
  4123. movl %eax, 4(%esp)
  4124. call lexer_token_set
  4125. addl $8, %esp
  4126. _label74:
  4127. jmp _label57
  4128. _label73:
  4129. movl -4(%ebp), %eax
  4130. movl %eax, %edx
  4131. movl $60, %eax
  4132. cmpl %eax, %edx
  4133. sete %al
  4134. movzbl %al, %eax
  4135. cmpl $0, %eax
  4136. je _label75
  4137. movl -8(%ebp), %eax
  4138. movl %eax, %edx
  4139. movl $61, %eax
  4140. cmpl %eax, %edx
  4141. sete %al
  4142. movzbl %al, %eax
  4143. cmpl $0, %eax
  4144. je _label77
  4145. subl $4, %esp
  4146. movl 8(%ebp), %eax
  4147. movl %eax, 0(%esp)
  4148. call lexer_consume
  4149. addl $4, %esp
  4150. subl $8, %esp
  4151. movl 8(%ebp), %eax
  4152. movl %eax, 0(%esp)
  4153. movl $302, %eax
  4154. movl %eax, 4(%esp)
  4155. call lexer_token_set
  4156. addl $8, %esp
  4157. jmp _label76
  4158. _label77:
  4159. movl -8(%ebp), %eax
  4160. movl %eax, %edx
  4161. movl $60, %eax
  4162. cmpl %eax, %edx
  4163. sete %al
  4164. movzbl %al, %eax
  4165. cmpl $0, %eax
  4166. je _label76
  4167. movl -12(%ebp), %eax
  4168. movl %eax, %edx
  4169. movl $61, %eax
  4170. cmpl %eax, %edx
  4171. sete %al
  4172. movzbl %al, %eax
  4173. cmpl $0, %eax
  4174. je _label79
  4175. subl $4, %esp
  4176. movl 8(%ebp), %eax
  4177. movl %eax, 0(%esp)
  4178. call lexer_consume
  4179. addl $4, %esp
  4180. subl $4, %esp
  4181. movl 8(%ebp), %eax
  4182. movl %eax, 0(%esp)
  4183. call lexer_consume
  4184. addl $4, %esp
  4185. subl $8, %esp
  4186. movl 8(%ebp), %eax
  4187. movl %eax, 0(%esp)
  4188. movl $317, %eax
  4189. movl %eax, 4(%esp)
  4190. call lexer_token_set
  4191. addl $8, %esp
  4192. jmp _label78
  4193. _label79:
  4194. subl $4, %esp
  4195. movl 8(%ebp), %eax
  4196. movl %eax, 0(%esp)
  4197. call lexer_consume
  4198. addl $4, %esp
  4199. subl $8, %esp
  4200. movl 8(%ebp), %eax
  4201. movl %eax, 0(%esp)
  4202. movl $305, %eax
  4203. movl %eax, 4(%esp)
  4204. call lexer_token_set
  4205. addl $8, %esp
  4206. _label78:
  4207. _label76:
  4208. jmp _label57
  4209. _label75:
  4210. movl -4(%ebp), %eax
  4211. movl %eax, %edx
  4212. movl $62, %eax
  4213. cmpl %eax, %edx
  4214. sete %al
  4215. movzbl %al, %eax
  4216. cmpl $0, %eax
  4217. je _label80
  4218. movl -8(%ebp), %eax
  4219. movl %eax, %edx
  4220. movl $61, %eax
  4221. cmpl %eax, %edx
  4222. sete %al
  4223. movzbl %al, %eax
  4224. cmpl $0, %eax
  4225. je _label82
  4226. subl $4, %esp
  4227. movl 8(%ebp), %eax
  4228. movl %eax, 0(%esp)
  4229. call lexer_consume
  4230. addl $4, %esp
  4231. subl $8, %esp
  4232. movl 8(%ebp), %eax
  4233. movl %eax, 0(%esp)
  4234. movl $303, %eax
  4235. movl %eax, 4(%esp)
  4236. call lexer_token_set
  4237. addl $8, %esp
  4238. jmp _label81
  4239. _label82:
  4240. movl -8(%ebp), %eax
  4241. movl %eax, %edx
  4242. movl $62, %eax
  4243. cmpl %eax, %edx
  4244. sete %al
  4245. movzbl %al, %eax
  4246. cmpl $0, %eax
  4247. je _label81
  4248. movl -12(%ebp), %eax
  4249. movl %eax, %edx
  4250. movl $61, %eax
  4251. cmpl %eax, %edx
  4252. sete %al
  4253. movzbl %al, %eax
  4254. cmpl $0, %eax
  4255. je _label84
  4256. subl $4, %esp
  4257. movl 8(%ebp), %eax
  4258. movl %eax, 0(%esp)
  4259. call lexer_consume
  4260. addl $4, %esp
  4261. subl $4, %esp
  4262. movl 8(%ebp), %eax
  4263. movl %eax, 0(%esp)
  4264. call lexer_consume
  4265. addl $4, %esp
  4266. subl $8, %esp
  4267. movl 8(%ebp), %eax
  4268. movl %eax, 0(%esp)
  4269. movl $318, %eax
  4270. movl %eax, 4(%esp)
  4271. call lexer_token_set
  4272. addl $8, %esp
  4273. jmp _label83
  4274. _label84:
  4275. subl $4, %esp
  4276. movl 8(%ebp), %eax
  4277. movl %eax, 0(%esp)
  4278. call lexer_consume
  4279. addl $4, %esp
  4280. subl $8, %esp
  4281. movl 8(%ebp), %eax
  4282. movl %eax, 0(%esp)
  4283. movl $306, %eax
  4284. movl %eax, 4(%esp)
  4285. call lexer_token_set
  4286. addl $8, %esp
  4287. _label83:
  4288. _label81:
  4289. jmp _label57
  4290. _label80:
  4291. movl -4(%ebp), %eax
  4292. movl %eax, %edx
  4293. movl $94, %eax
  4294. cmpl %eax, %edx
  4295. sete %al
  4296. movzbl %al, %eax
  4297. cmpl $0, %eax
  4298. je _label85
  4299. movl -8(%ebp), %eax
  4300. movl %eax, %edx
  4301. movl $61, %eax
  4302. cmpl %eax, %edx
  4303. sete %al
  4304. movzbl %al, %eax
  4305. cmpl $0, %eax
  4306. je _label86
  4307. subl $4, %esp
  4308. movl 8(%ebp), %eax
  4309. movl %eax, 0(%esp)
  4310. call lexer_consume
  4311. addl $4, %esp
  4312. subl $8, %esp
  4313. movl 8(%ebp), %eax
  4314. movl %eax, 0(%esp)
  4315. movl $315, %eax
  4316. movl %eax, 4(%esp)
  4317. call lexer_token_set
  4318. addl $8, %esp
  4319. _label86:
  4320. jmp _label57
  4321. _label85:
  4322. movl -4(%ebp), %eax
  4323. movl %eax, %edx
  4324. movl $38, %eax
  4325. cmpl %eax, %edx
  4326. sete %al
  4327. movzbl %al, %eax
  4328. cmpl $0, %eax
  4329. je _label87
  4330. movl -8(%ebp), %eax
  4331. movl %eax, %edx
  4332. movl $38, %eax
  4333. cmpl %eax, %edx
  4334. sete %al
  4335. movzbl %al, %eax
  4336. cmpl $0, %eax
  4337. je _label89
  4338. subl $4, %esp
  4339. movl 8(%ebp), %eax
  4340. movl %eax, 0(%esp)
  4341. call lexer_consume
  4342. addl $4, %esp
  4343. subl $8, %esp
  4344. movl 8(%ebp), %eax
  4345. movl %eax, 0(%esp)
  4346. movl $307, %eax
  4347. movl %eax, 4(%esp)
  4348. call lexer_token_set
  4349. addl $8, %esp
  4350. jmp _label88
  4351. _label89:
  4352. movl -8(%ebp), %eax
  4353. movl %eax, %edx
  4354. movl $61, %eax
  4355. cmpl %eax, %edx
  4356. sete %al
  4357. movzbl %al, %eax
  4358. cmpl $0, %eax
  4359. je _label88
  4360. subl $4, %esp
  4361. movl 8(%ebp), %eax
  4362. movl %eax, 0(%esp)
  4363. call lexer_consume
  4364. addl $4, %esp
  4365. subl $8, %esp
  4366. movl 8(%ebp), %eax
  4367. movl %eax, 0(%esp)
  4368. movl $314, %eax
  4369. movl %eax, 4(%esp)
  4370. call lexer_token_set
  4371. addl $8, %esp
  4372. _label88:
  4373. jmp _label57
  4374. _label87:
  4375. movl -4(%ebp), %eax
  4376. movl %eax, %edx
  4377. movl $124, %eax
  4378. cmpl %eax, %edx
  4379. sete %al
  4380. movzbl %al, %eax
  4381. cmpl $0, %eax
  4382. je _label90
  4383. movl -8(%ebp), %eax
  4384. movl %eax, %edx
  4385. movl $124, %eax
  4386. cmpl %eax, %edx
  4387. sete %al
  4388. movzbl %al, %eax
  4389. cmpl $0, %eax
  4390. je _label92
  4391. subl $4, %esp
  4392. movl 8(%ebp), %eax
  4393. movl %eax, 0(%esp)
  4394. call lexer_consume
  4395. addl $4, %esp
  4396. subl $8, %esp
  4397. movl 8(%ebp), %eax
  4398. movl %eax, 0(%esp)
  4399. movl $308, %eax
  4400. movl %eax, 4(%esp)
  4401. call lexer_token_set
  4402. addl $8, %esp
  4403. jmp _label91
  4404. _label92:
  4405. movl -8(%ebp), %eax
  4406. movl %eax, %edx
  4407. movl $61, %eax
  4408. cmpl %eax, %edx
  4409. sete %al
  4410. movzbl %al, %eax
  4411. cmpl $0, %eax
  4412. je _label91
  4413. subl $4, %esp
  4414. movl 8(%ebp), %eax
  4415. movl %eax, 0(%esp)
  4416. call lexer_consume
  4417. addl $4, %esp
  4418. subl $8, %esp
  4419. movl 8(%ebp), %eax
  4420. movl %eax, 0(%esp)
  4421. movl $316, %eax
  4422. movl %eax, 4(%esp)
  4423. call lexer_token_set
  4424. addl $8, %esp
  4425. _label91:
  4426. jmp _label57
  4427. _label90:
  4428. movl -4(%ebp), %eax
  4429. movl %eax, %edx
  4430. movl $35, %eax
  4431. cmpl %eax, %edx
  4432. sete %al
  4433. movzbl %al, %eax
  4434. cmpl $0, %eax
  4435. je _label93
  4436. _label94:
  4437. movl -4(%ebp), %eax
  4438. movl %eax, %edx
  4439. movl $10, %eax
  4440. cmpl %eax, %edx
  4441. setne %al
  4442. movzbl %al, %eax
  4443. cmpl $0, %eax
  4444. je _label96
  4445. movl -4(%ebp), %eax
  4446. movl %eax, %edx
  4447. movl $0, %eax
  4448. cmpl %eax, %edx
  4449. setne %al
  4450. movzbl %al, %eax
  4451. cmpl $0, %eax
  4452. je _label96
  4453. movl $1, %eax
  4454. jmp _label97
  4455. _label96:
  4456. movl $0, %eax
  4457. _label97:
  4458. cmpl $0, %eax
  4459. je _label95
  4460. subl $4, %esp
  4461. movl 8(%ebp), %eax
  4462. pushl %edx
  4463. movl %eax, %edx
  4464. movl $0, %eax
  4465. leal (%edx,%eax,4), %eax
  4466. popl %edx
  4467. movl (%eax), %eax
  4468. movl %eax, 0(%esp)
  4469. call fgetc
  4470. addl $4, %esp
  4471. movl %eax, -4(%ebp)
  4472. jmp _label94
  4473. _label95:
  4474. movl 8(%ebp), %eax
  4475. movl %eax, %edx
  4476. movl $2, %eax
  4477. leal (%edx,%eax,4), %eax
  4478. movl %eax, %ebx
  4479. movl 8(%ebp), %eax
  4480. movl %eax, %edx
  4481. movl $2, %eax
  4482. leal (%edx,%eax,4), %eax
  4483. movl (%eax), %eax
  4484. pushl %ebx
  4485. movl %eax, %ebx
  4486. movl $1, %eax
  4487. addl %ebx, %eax
  4488. popl %ebx
  4489. movl %eax, (%ebx)
  4490. movl 8(%ebp), %eax
  4491. movl %eax, %edx
  4492. movl $3, %eax
  4493. leal (%edx,%eax,4), %eax
  4494. movl %eax, %ebx
  4495. movl $1, %eax
  4496. movl %eax, (%ebx)
  4497. movl $lx00, %eax
  4498. jmp *%eax
  4499. jmp _label57
  4500. _label93:
  4501. movl -4(%ebp), %eax
  4502. movl %eax, %edx
  4503. movl $46, %eax
  4504. cmpl %eax, %edx
  4505. sete %al
  4506. movzbl %al, %eax
  4507. cmpl $0, %eax
  4508. je _label57
  4509. movl -8(%ebp), %eax
  4510. movl %eax, %edx
  4511. movl $46, %eax
  4512. cmpl %eax, %edx
  4513. sete %al
  4514. movzbl %al, %eax
  4515. cmpl $0, %eax
  4516. je _label98
  4517. movl -12(%ebp), %eax
  4518. movl %eax, %edx
  4519. movl $46, %eax
  4520. cmpl %eax, %edx
  4521. sete %al
  4522. movzbl %al, %eax
  4523. cmpl $0, %eax
  4524. je _label99
  4525. subl $4, %esp
  4526. movl 8(%ebp), %eax
  4527. movl %eax, 0(%esp)
  4528. call lexer_consume
  4529. addl $4, %esp
  4530. subl $4, %esp
  4531. movl 8(%ebp), %eax
  4532. movl %eax, 0(%esp)
  4533. call lexer_consume
  4534. addl $4, %esp
  4535. subl $8, %esp
  4536. movl 8(%ebp), %eax
  4537. movl %eax, 0(%esp)
  4538. movl $321, %eax
  4539. movl %eax, 4(%esp)
  4540. call lexer_token_set
  4541. addl $8, %esp
  4542. _label99:
  4543. _label98:
  4544. _label57:
  4545. lx99:
  4546. movl 8(%ebp), %eax
  4547. movl %eax, %edx
  4548. movl $5, %eax
  4549. leal (%edx,%eax,4), %eax
  4550. movl (%eax), %eax
  4551. leave
  4552. ret
  4553. le00:
  4554. subl $8, %esp
  4555. movl 8(%ebp), %eax
  4556. movl %eax, 0(%esp)
  4557. movl $strbuf+297, %eax
  4558. movl %eax, 4(%esp)
  4559. call lexer_error
  4560. addl $8, %esp
  4561. le01:
  4562. subl $8, %esp
  4563. movl 8(%ebp), %eax
  4564. movl %eax, 0(%esp)
  4565. movl $strbuf+315, %eax
  4566. movl %eax, 4(%esp)
  4567. call lexer_error
  4568. addl $8, %esp
  4569. le02:
  4570. subl $8, %esp
  4571. movl 8(%ebp), %eax
  4572. movl %eax, 0(%esp)
  4573. movl $strbuf+340, %eax
  4574. movl %eax, 4(%esp)
  4575. call lexer_error
  4576. addl $8, %esp
  4577. le03:
  4578. subl $8, %esp
  4579. movl 8(%ebp), %eax
  4580. movl %eax, 0(%esp)
  4581. movl $strbuf+382, %eax
  4582. movl %eax, 4(%esp)
  4583. call lexer_error
  4584. addl $8, %esp
  4585. le04:
  4586. subl $8, %esp
  4587. movl 8(%ebp), %eax
  4588. movl %eax, 0(%esp)
  4589. movl $strbuf+428, %eax
  4590. movl %eax, 4(%esp)
  4591. call lexer_error
  4592. addl $8, %esp
  4593. le05:
  4594. subl $8, %esp
  4595. movl 8(%ebp), %eax
  4596. movl %eax, 0(%esp)
  4597. movl $strbuf+458, %eax
  4598. movl %eax, 4(%esp)
  4599. call lexer_error
  4600. addl $8, %esp
  4601. le06:
  4602. subl $8, %esp
  4603. movl 8(%ebp), %eax
  4604. movl %eax, 0(%esp)
  4605. movl $strbuf+506, %eax
  4606. movl %eax, 4(%esp)
  4607. call lexer_error
  4608. addl $8, %esp
  4609. le07:
  4610. subl $8, %esp
  4611. movl 8(%ebp), %eax
  4612. movl %eax, 0(%esp)
  4613. movl $strbuf+537, %eax
  4614. movl %eax, 4(%esp)
  4615. call lexer_error
  4616. addl $8, %esp
  4617. leave
  4618. ret
  4619. lexer_lex_asm:
  4620. pushl %ebp
  4621. movl %esp, %ebp
  4622. subl $12, %esp
  4623. lax00:
  4624. subl $4, %esp
  4625. movl 8(%ebp), %eax
  4626. movl %eax, 0(%esp)
  4627. call lexer_look
  4628. addl $4, %esp
  4629. movl %eax, %edx
  4630. movl $2, %eax
  4631. cmpl %eax, %edx
  4632. sete %al
  4633. movzbl %al, %eax
  4634. cmpl $0, %eax
  4635. jne _label101
  4636. subl $4, %esp
  4637. movl 8(%ebp), %eax
  4638. movl %eax, 0(%esp)
  4639. call lexer_look
  4640. addl $4, %esp
  4641. movl %eax, %edx
  4642. movl $3, %eax
  4643. cmpl %eax, %edx
  4644. sete %al
  4645. movzbl %al, %eax
  4646. cmpl $0, %eax
  4647. jne _label101
  4648. movl $0, %eax
  4649. jmp _label102
  4650. _label101:
  4651. movl $1, %eax
  4652. _label102:
  4653. cmpl $0, %eax
  4654. je _label100
  4655. subl $4, %esp
  4656. movl 8(%ebp), %eax
  4657. movl %eax, 0(%esp)
  4658. call lexer_consume
  4659. addl $4, %esp
  4660. movl $lax00, %eax
  4661. jmp *%eax
  4662. _label100:
  4663. subl $4, %esp
  4664. movl 8(%ebp), %eax
  4665. movl %eax, 0(%esp)
  4666. call lexer_reset_token
  4667. addl $4, %esp
  4668. subl $4, %esp
  4669. movl 8(%ebp), %eax
  4670. movl %eax, 0(%esp)
  4671. call lexer_consume
  4672. addl $4, %esp
  4673. movl %eax, -4(%ebp)
  4674. lax01:
  4675. movl -4(%ebp), %eax
  4676. movl %eax, %edx
  4677. movl $125, %eax
  4678. cmpl %eax, %edx
  4679. sete %al
  4680. movzbl %al, %eax
  4681. cmpl $0, %eax
  4682. je _label103
  4683. movl $lae00, %eax
  4684. jmp *%eax
  4685. _label103:
  4686. lax02:
  4687. subl $8, %esp
  4688. movl 8(%ebp), %eax
  4689. pushl %edx
  4690. movl %eax, %edx
  4691. movl $0, %eax
  4692. leal (%edx,%eax,4), %eax
  4693. popl %edx
  4694. movl (%eax), %eax
  4695. movl %eax, 0(%esp)
  4696. movl $0, %eax
  4697. movl %eax, 4(%esp)
  4698. call fnextc
  4699. addl $8, %esp
  4700. movl %eax, -4(%ebp)
  4701. movl -4(%ebp), %eax
  4702. movl %eax, %edx
  4703. movl $125, %eax
  4704. cmpl %eax, %edx
  4705. sete %al
  4706. movzbl %al, %eax
  4707. cmpl $0, %eax
  4708. je _label104
  4709. movl $lae00, %eax
  4710. jmp *%eax
  4711. _label104:
  4712. movl -4(%ebp), %eax
  4713. movl %eax, %edx
  4714. movl $59, %eax
  4715. cmpl %eax, %edx
  4716. sete %al
  4717. movzbl %al, %eax
  4718. cmpl $0, %eax
  4719. je _label105
  4720. movl $lax03, %eax
  4721. jmp *%eax
  4722. _label105:
  4723. subl $4, %esp
  4724. movl 8(%ebp), %eax
  4725. movl %eax, 0(%esp)
  4726. call lexer_consume
  4727. addl $4, %esp
  4728. movl $lax02, %eax
  4729. jmp *%eax
  4730. lax03:
  4731. movl $1, %eax
  4732. movl %eax, -12(%ebp)
  4733. _label106:
  4734. subl $8, %esp
  4735. movl 8(%ebp), %eax
  4736. pushl %edx
  4737. movl %eax, %edx
  4738. movl $0, %eax
  4739. leal (%edx,%eax,4), %eax
  4740. popl %edx
  4741. movl (%eax), %eax
  4742. movl %eax, 0(%esp)
  4743. movl -12(%ebp), %eax
  4744. pushl %edx
  4745. leal 1(%eax), %edx
  4746. movl %edx, -12(%ebp)
  4747. popl %edx
  4748. movl %eax, 4(%esp)
  4749. call fnextc
  4750. addl $8, %esp
  4751. movl %eax, -4(%ebp)
  4752. movl -4(%ebp), %eax
  4753. movl %eax, %edx
  4754. movl $1, %eax
  4755. negl %eax
  4756. cmpl %eax, %edx
  4757. sete %al
  4758. movzbl %al, %eax
  4759. cmpl $0, %eax
  4760. je _label108
  4761. movl $lae01, %eax
  4762. jmp *%eax
  4763. _label108:
  4764. movl -4(%ebp), %eax
  4765. leal char_table(,%eax,4), %eax
  4766. movl (%eax), %eax
  4767. movl %eax, -8(%ebp)
  4768. movl -8(%ebp), %eax
  4769. movl %eax, %edx
  4770. movl $2, %eax
  4771. cmpl %eax, %edx
  4772. sete %al
  4773. movzbl %al, %eax
  4774. cmpl $0, %eax
  4775. jne _label109
  4776. movl -8(%ebp), %eax
  4777. movl %eax, %edx
  4778. movl $3, %eax
  4779. cmpl %eax, %edx
  4780. sete %al
  4781. movzbl %al, %eax
  4782. cmpl $0, %eax
  4783. jne _label109
  4784. movl $0, %eax
  4785. jmp _label110
  4786. _label109:
  4787. movl $1, %eax
  4788. _label110:
  4789. cmpl $0, %eax
  4790. jne _label106
  4791. _label107:
  4792. movl -4(%ebp), %eax
  4793. movl %eax, %edx
  4794. movl $125, %eax
  4795. cmpl %eax, %edx
  4796. sete %al
  4797. movzbl %al, %eax
  4798. leave
  4799. ret
  4800. lae00:
  4801. subl $8, %esp
  4802. movl 8(%ebp), %eax
  4803. movl %eax, 0(%esp)
  4804. movl $strbuf+565, %eax
  4805. movl %eax, 4(%esp)
  4806. call lexer_error
  4807. addl $8, %esp
  4808. lae01:
  4809. subl $8, %esp
  4810. movl 8(%ebp), %eax
  4811. movl %eax, 0(%esp)
  4812. movl $strbuf+597, %eax
  4813. movl %eax, 4(%esp)
  4814. call lexer_error
  4815. addl $8, %esp
  4816. leave
  4817. ret
  4818. parser:
  4819. pushl %ebp
  4820. movl %esp, %ebp
  4821. subl $16, %esp
  4822. pushl %ebx
  4823. pushl %ecx
  4824. pushl %edx
  4825. pushl %esi
  4826. pushl %edi
  4827. subl $4, %esp
  4828. movl 8(%ebp), %eax
  4829. movl %eax, 0(%esp)
  4830. call list
  4831. addl $4, %esp
  4832. popl %edi
  4833. popl %esi
  4834. popl %edx
  4835. popl %ecx
  4836. popl %ebx
  4837. movl %eax, 0(%esp)
  4838. movl 12(%ebp), %eax
  4839. movl %eax, 4(%esp)
  4840. movl $0, %eax
  4841. movl %eax, 8(%esp)
  4842. pushl %ebx
  4843. pushl %ecx
  4844. pushl %edx
  4845. pushl %esi
  4846. pushl %edi
  4847. subl $8, %esp
  4848. movl $0, %eax
  4849. movl %eax, 0(%esp)
  4850. movl $1, %eax
  4851. movl %eax, 4(%esp)
  4852. call vector
  4853. addl $8, %esp
  4854. popl %edi
  4855. popl %esi
  4856. popl %edx
  4857. popl %ecx
  4858. popl %ebx
  4859. movl %eax, 12(%esp)
  4860. call tuple4
  4861. addl $16, %esp
  4862. leave
  4863. ret
  4864. parser_lexer:
  4865. pushl %ebp
  4866. movl %esp, %ebp
  4867. subl $4, %esp
  4868. movl 8(%ebp), %eax
  4869. pushl %edx
  4870. movl %eax, %edx
  4871. movl $0, %eax
  4872. leal (%edx,%eax,4), %eax
  4873. popl %edx
  4874. movl (%eax), %eax
  4875. movl %eax, 0(%esp)
  4876. call list_value
  4877. addl $4, %esp
  4878. leave
  4879. ret
  4880. parser_buffer:
  4881. pushl %ebp
  4882. movl %esp, %ebp
  4883. movl 8(%ebp), %eax
  4884. movl %eax, %edx
  4885. movl $1, %eax
  4886. leal (%edx,%eax,4), %eax
  4887. movl (%eax), %eax
  4888. leave
  4889. ret
  4890. parser_token_location:
  4891. pushl %ebp
  4892. movl %esp, %ebp
  4893. subl $4, %esp
  4894. subl $4, %esp
  4895. pushl %ebx
  4896. pushl %ecx
  4897. pushl %edx
  4898. pushl %esi
  4899. pushl %edi
  4900. subl $4, %esp
  4901. movl 8(%ebp), %eax
  4902. movl %eax, 0(%esp)
  4903. call parser_lexer
  4904. addl $4, %esp
  4905. popl %edi
  4906. popl %esi
  4907. popl %edx
  4908. popl %ecx
  4909. popl %ebx
  4910. movl %eax, 0(%esp)
  4911. call lexer_token_location
  4912. addl $4, %esp
  4913. movl %eax, -4(%ebp)
  4914. movl -4(%ebp), %eax
  4915. movl %eax, %edx
  4916. movl $2, %eax
  4917. leal (%edx,%eax,4), %eax
  4918. movl %eax, %ebx
  4919. movl -4(%ebp), %eax
  4920. movl %eax, %edx
  4921. movl $2, %eax
  4922. leal (%edx,%eax,4), %eax
  4923. movl (%eax), %eax
  4924. pushl %ebx
  4925. pushl %eax
  4926. pushl %ebx
  4927. subl $4, %esp
  4928. pushl %ebx
  4929. pushl %ecx
  4930. pushl %edx
  4931. pushl %esi
  4932. pushl %edi
  4933. subl $4, %esp
  4934. movl 8(%ebp), %eax
  4935. movl %eax, 0(%esp)
  4936. call parser_lexer
  4937. addl $4, %esp
  4938. popl %edi
  4939. popl %esi
  4940. popl %edx
  4941. popl %ecx
  4942. popl %ebx
  4943. movl %eax, 0(%esp)
  4944. call lexer_token_length
  4945. addl $4, %esp
  4946. popl %ebx
  4947. movl %eax, %ebx
  4948. popl %eax
  4949. subl %ebx, %eax
  4950. popl %ebx
  4951. pushl %ebx
  4952. movl %eax, %ebx
  4953. movl $1, %eax
  4954. addl %ebx, %eax
  4955. popl %ebx
  4956. movl %eax, (%ebx)
  4957. movl -4(%ebp), %eax
  4958. leave
  4959. ret
  4960. parser_include_search:
  4961. pushl %ebp
  4962. movl %esp, %ebp
  4963. subl $8, %esp
  4964. movl 8(%ebp), %eax
  4965. movl %eax, %edx
  4966. movl $3, %eax
  4967. leal (%edx,%eax,4), %eax
  4968. movl (%eax), %eax
  4969. movl %eax, -4(%ebp)
  4970. movl $0, %eax
  4971. movl %eax, -8(%ebp)
  4972. _label111:
  4973. movl -8(%ebp), %eax
  4974. movl %eax, %edx
  4975. pushl %edx
  4976. subl $4, %esp
  4977. movl -4(%ebp), %eax
  4978. movl %eax, 0(%esp)
  4979. call vector_size
  4980. addl $4, %esp
  4981. popl %edx
  4982. cmpl %eax, %edx
  4983. setl %al
  4984. movzbl %al, %eax
  4985. cmpl $0, %eax
  4986. je _label112
  4987. subl $8, %esp
  4988. pushl %ebx
  4989. pushl %ecx
  4990. pushl %edx
  4991. pushl %esi
  4992. pushl %edi
  4993. subl $8, %esp
  4994. movl -4(%ebp), %eax
  4995. movl %eax, 0(%esp)
  4996. movl -8(%ebp), %eax
  4997. movl %eax, 4(%esp)
  4998. call vector_get
  4999. addl $8, %esp
  5000. popl %edi
  5001. popl %esi
  5002. popl %edx
  5003. popl %ecx
  5004. popl %ebx
  5005. movl %eax, 0(%esp)
  5006. movl 12(%ebp), %eax
  5007. movl %eax, 4(%esp)
  5008. call strcmp
  5009. addl $8, %esp
  5010. cmpl $0, %eax
  5011. sete %al
  5012. movzbl %al, %eax
  5013. cmpl $0, %eax
  5014. je _label113
  5015. movl $1, %eax
  5016. leave
  5017. ret
  5018. _label113:
  5019. movl -8(%ebp), %eax
  5020. movl %eax, %ebx
  5021. movl $1, %eax
  5022. addl %ebx, %eax
  5023. movl %eax, -8(%ebp)
  5024. jmp _label111
  5025. _label112:
  5026. movl $0, %eax
  5027. leave
  5028. ret
  5029. parser_include_add:
  5030. pushl %ebp
  5031. movl %esp, %ebp
  5032. movl 16(%ebp), %eax
  5033. cmpl $0, %eax
  5034. je _label115
  5035. subl $8, %esp
  5036. movl 8(%ebp), %eax
  5037. movl %eax, 0(%esp)
  5038. movl 12(%ebp), %eax
  5039. movl %eax, 4(%esp)
  5040. call parser_include_search
  5041. addl $8, %esp
  5042. cmpl $0, %eax
  5043. je _label115
  5044. movl $1, %eax
  5045. jmp _label116
  5046. _label115:
  5047. movl $0, %eax
  5048. _label116:
  5049. cmpl $0, %eax
  5050. sete %al
  5051. movzbl %al, %eax
  5052. cmpl $0, %eax
  5053. je _label114
  5054. movl 8(%ebp), %eax
  5055. movl %eax, %edx
  5056. movl $0, %eax
  5057. leal (%edx,%eax,4), %eax
  5058. movl %eax, %ebx
  5059. pushl %ebx
  5060. subl $8, %esp
  5061. movl 8(%ebp), %eax
  5062. pushl %edx
  5063. movl %eax, %edx
  5064. movl $0, %eax
  5065. leal (%edx,%eax,4), %eax
  5066. popl %edx
  5067. movl (%eax), %eax
  5068. movl %eax, 0(%esp)
  5069. pushl %ebx
  5070. pushl %ecx
  5071. pushl %edx
  5072. pushl %esi
  5073. pushl %edi
  5074. subl $4, %esp
  5075. movl 12(%ebp), %eax
  5076. movl %eax, 0(%esp)
  5077. call lexer_file
  5078. addl $4, %esp
  5079. popl %edi
  5080. popl %esi
  5081. popl %edx
  5082. popl %ecx
  5083. popl %ebx
  5084. movl %eax, 4(%esp)
  5085. call list_insert
  5086. addl $8, %esp
  5087. popl %ebx
  5088. movl %eax, (%ebx)
  5089. movl 16(%ebp), %eax
  5090. cmpl $0, %eax
  5091. je _label117
  5092. subl $8, %esp
  5093. movl 8(%ebp), %eax
  5094. pushl %edx
  5095. movl %eax, %edx
  5096. movl $3, %eax
  5097. leal (%edx,%eax,4), %eax
  5098. popl %edx
  5099. movl (%eax), %eax
  5100. movl %eax, 0(%esp)
  5101. movl 12(%ebp), %eax
  5102. movl %eax, 4(%esp)
  5103. call vector_push
  5104. addl $8, %esp
  5105. _label117:
  5106. _label114:
  5107. leave
  5108. ret
  5109. parser_lexer_hold:
  5110. pushl %ebp
  5111. movl %esp, %ebp
  5112. subl $4, %esp
  5113. pushl %ebx
  5114. pushl %ecx
  5115. pushl %edx
  5116. pushl %esi
  5117. pushl %edi
  5118. subl $4, %esp
  5119. movl 8(%ebp), %eax
  5120. movl %eax, 0(%esp)
  5121. call parser_lexer
  5122. addl $4, %esp
  5123. popl %edi
  5124. popl %esi
  5125. popl %edx
  5126. popl %ecx
  5127. popl %ebx
  5128. movl %eax, 0(%esp)
  5129. call lexer_hold
  5130. addl $4, %esp
  5131. leave
  5132. ret
  5133. parser_lex:
  5134. pushl %ebp
  5135. movl %esp, %ebp
  5136. subl $4, %esp
  5137. pushl %ebx
  5138. pushl %ecx
  5139. pushl %edx
  5140. pushl %esi
  5141. pushl %edi
  5142. subl $4, %esp
  5143. movl 8(%ebp), %eax
  5144. movl %eax, 0(%esp)
  5145. call parser_lexer
  5146. addl $4, %esp
  5147. popl %edi
  5148. popl %esi
  5149. popl %edx
  5150. popl %ecx
  5151. popl %ebx
  5152. movl %eax, 0(%esp)
  5153. call lexer_lex
  5154. addl $4, %esp
  5155. leave
  5156. ret
  5157. parser_lex_asm:
  5158. pushl %ebp
  5159. movl %esp, %ebp
  5160. subl $4, %esp
  5161. pushl %ebx
  5162. pushl %ecx
  5163. pushl %edx
  5164. pushl %esi
  5165. pushl %edi
  5166. subl $4, %esp
  5167. movl 8(%ebp), %eax
  5168. movl %eax, 0(%esp)
  5169. call parser_lexer
  5170. addl $4, %esp
  5171. popl %edi
  5172. popl %esi
  5173. popl %edx
  5174. popl %ecx
  5175. popl %ebx
  5176. movl %eax, 0(%esp)
  5177. call lexer_lex_asm
  5178. addl $4, %esp
  5179. leave
  5180. ret
  5181. parser_error:
  5182. pushl %ebp
  5183. movl %esp, %ebp
  5184. subl $8, %esp
  5185. movl 12(%ebp), %eax
  5186. movl %eax, 0(%esp)
  5187. movl stderr, %eax
  5188. movl %eax, 4(%esp)
  5189. call fputloc
  5190. addl $8, %esp
  5191. subl $4, %esp
  5192. movl $strbuf+294, %eax
  5193. movl %eax, 0(%esp)
  5194. call eputs
  5195. addl $4, %esp
  5196. subl $4, %esp
  5197. movl 16(%ebp), %eax
  5198. movl %eax, 0(%esp)
  5199. call eputs
  5200. addl $4, %esp
  5201. subl $4, %esp
  5202. movl $10, %eax
  5203. movl %eax, 0(%esp)
  5204. call eputc
  5205. addl $4, %esp
  5206. subl $4, %esp
  5207. movl $1, %eax
  5208. movl %eax, 0(%esp)
  5209. call exit
  5210. addl $4, %esp
  5211. leave
  5212. ret
  5213. parser_parse:
  5214. pushl %ebp
  5215. movl %esp, %ebp
  5216. subl $16, %esp
  5217. subl $8, %esp
  5218. movl $0, %eax
  5219. movl %eax, 0(%esp)
  5220. movl $1, %eax
  5221. movl %eax, 4(%esp)
  5222. call vector
  5223. addl $8, %esp
  5224. movl %eax, -4(%ebp)
  5225. parser_parse_continue:
  5226. subl $4, %esp
  5227. movl 8(%ebp), %eax
  5228. movl %eax, 0(%esp)
  5229. call parser_lex
  5230. addl $4, %esp
  5231. movl %eax, -8(%ebp)
  5232. _label118:
  5233. movl -8(%ebp), %eax
  5234. movl %eax, %edx
  5235. movl $256, %eax
  5236. cmpl %eax, %edx
  5237. setne %al
  5238. movzbl %al, %eax
  5239. cmpl $0, %eax
  5240. je _label119
  5241. subl $4, %esp
  5242. movl 8(%ebp), %eax
  5243. movl %eax, 0(%esp)
  5244. call parser_token_location
  5245. addl $4, %esp
  5246. movl %eax, -16(%ebp)
  5247. subl $12, %esp
  5248. movl 8(%ebp), %eax
  5249. movl %eax, 0(%esp)
  5250. movl -8(%ebp), %eax
  5251. movl %eax, 4(%esp)
  5252. movl -16(%ebp), %eax
  5253. movl %eax, 8(%esp)
  5254. call top_level_statement
  5255. addl $12, %esp
  5256. movl %eax, -12(%ebp)
  5257. movl -12(%ebp), %eax
  5258. cmpl $0, %eax
  5259. je _label120
  5260. subl $8, %esp
  5261. movl -4(%ebp), %eax
  5262. movl %eax, 0(%esp)
  5263. movl -12(%ebp), %eax
  5264. movl %eax, 4(%esp)
  5265. call vector_push
  5266. addl $8, %esp
  5267. _label120:
  5268. subl $4, %esp
  5269. movl 8(%ebp), %eax
  5270. movl %eax, 0(%esp)
  5271. call parser_lex
  5272. addl $4, %esp
  5273. movl %eax, -8(%ebp)
  5274. jmp _label118
  5275. _label119:
  5276. subl $4, %esp
  5277. pushl %ebx
  5278. pushl %ecx
  5279. pushl %edx
  5280. pushl %esi
  5281. pushl %edi
  5282. subl $4, %esp
  5283. movl 8(%ebp), %eax
  5284. movl %eax, 0(%esp)
  5285. call parser_lexer
  5286. addl $4, %esp
  5287. popl %edi
  5288. popl %esi
  5289. popl %edx
  5290. popl %ecx
  5291. popl %ebx
  5292. movl %eax, 0(%esp)
  5293. call lexer_destroy
  5294. addl $4, %esp
  5295. movl 8(%ebp), %eax
  5296. movl %eax, %edx
  5297. movl $0, %eax
  5298. leal (%edx,%eax,4), %eax
  5299. movl %eax, %ebx
  5300. pushl %ebx
  5301. subl $4, %esp
  5302. movl 8(%ebp), %eax
  5303. pushl %edx
  5304. movl %eax, %edx
  5305. movl $0, %eax
  5306. leal (%edx,%eax,4), %eax
  5307. popl %edx
  5308. movl (%eax), %eax
  5309. movl %eax, 0(%esp)
  5310. call list_next
  5311. addl $4, %esp
  5312. popl %ebx
  5313. movl %eax, (%ebx)
  5314. movl 8(%ebp), %eax
  5315. movl %eax, %edx
  5316. movl $0, %eax
  5317. leal (%edx,%eax,4), %eax
  5318. movl (%eax), %eax
  5319. movl %eax, %edx
  5320. movl $0, %eax
  5321. cmpl %eax, %edx
  5322. setne %al
  5323. movzbl %al, %eax
  5324. cmpl $0, %eax
  5325. je _label121
  5326. movl $parser_parse_continue, %eax
  5327. jmp *%eax
  5328. _label121:
  5329. movl -4(%ebp), %eax
  5330. leave
  5331. ret
  5332. top_level_statement:
  5333. pushl %ebp
  5334. movl %esp, %ebp
  5335. subl $8, %esp
  5336. movl 12(%ebp), %eax
  5337. movl %eax, %edx
  5338. movl $281, %eax
  5339. cmpl %eax, %edx
  5340. sete %al
  5341. movzbl %al, %eax
  5342. cmpl $0, %eax
  5343. je _label122
  5344. subl $8, %esp
  5345. movl 8(%ebp), %eax
  5346. movl %eax, 0(%esp)
  5347. movl 16(%ebp), %eax
  5348. movl %eax, 4(%esp)
  5349. call global_statement
  5350. addl $8, %esp
  5351. leave
  5352. ret
  5353. _label122:
  5354. movl 12(%ebp), %eax
  5355. movl %eax, %edx
  5356. movl $288, %eax
  5357. cmpl %eax, %edx
  5358. sete %al
  5359. movzbl %al, %eax
  5360. cmpl $0, %eax
  5361. je _label123
  5362. subl $12, %esp
  5363. movl 8(%ebp), %eax
  5364. movl %eax, 0(%esp)
  5365. movl 16(%ebp), %eax
  5366. movl %eax, 4(%esp)
  5367. movl $0, %eax
  5368. movl %eax, 8(%esp)
  5369. call include_statement
  5370. addl $12, %esp
  5371. leave
  5372. ret
  5373. _label123:
  5374. movl 12(%ebp), %eax
  5375. movl %eax, %edx
  5376. movl $289, %eax
  5377. cmpl %eax, %edx
  5378. sete %al
  5379. movzbl %al, %eax
  5380. cmpl $0, %eax
  5381. je _label124
  5382. subl $12, %esp
  5383. movl 8(%ebp), %eax
  5384. movl %eax, 0(%esp)
  5385. movl 16(%ebp), %eax
  5386. movl %eax, 4(%esp)
  5387. movl $1, %eax
  5388. movl %eax, 8(%esp)
  5389. call include_statement
  5390. addl $12, %esp
  5391. leave
  5392. ret
  5393. _label124:
  5394. movl 12(%ebp), %eax
  5395. movl %eax, %edx
  5396. movl $258, %eax
  5397. cmpl %eax, %edx
  5398. sete %al
  5399. movzbl %al, %eax
  5400. cmpl $0, %eax
  5401. je _label125
  5402. subl $4, %esp
  5403. pushl %ebx
  5404. pushl %ecx
  5405. pushl %edx
  5406. pushl %esi
  5407. pushl %edi
  5408. subl $4, %esp
  5409. pushl %ebx
  5410. pushl %ecx
  5411. pushl %edx
  5412. pushl %esi
  5413. pushl %edi
  5414. subl $4, %esp
  5415. movl 8(%ebp), %eax
  5416. movl %eax, 0(%esp)
  5417. call parser_lexer
  5418. addl $4, %esp
  5419. popl %edi
  5420. popl %esi
  5421. popl %edx
  5422. popl %ecx
  5423. popl %ebx
  5424. movl %eax, 0(%esp)
  5425. call lexer_token_text
  5426. addl $4, %esp
  5427. popl %edi
  5428. popl %esi
  5429. popl %edx
  5430. popl %ecx
  5431. popl %ebx
  5432. movl %eax, 0(%esp)
  5433. call strdup
  5434. addl $4, %esp
  5435. movl %eax, -8(%ebp)
  5436. subl $4, %esp
  5437. movl 8(%ebp), %eax
  5438. movl %eax, 0(%esp)
  5439. call parser_lex
  5440. addl $4, %esp
  5441. movl %eax, -4(%ebp)
  5442. movl -4(%ebp), %eax
  5443. movl %eax, %edx
  5444. movl $304, %eax
  5445. cmpl %eax, %edx
  5446. sete %al
  5447. movzbl %al, %eax
  5448. cmpl $0, %eax
  5449. je _label126
  5450. subl $12, %esp
  5451. movl 8(%ebp), %eax
  5452. movl %eax, 0(%esp)
  5453. movl -8(%ebp), %eax
  5454. movl %eax, 4(%esp)
  5455. movl 16(%ebp), %eax
  5456. movl %eax, 8(%esp)
  5457. call macro_declaration
  5458. addl $12, %esp
  5459. leave
  5460. ret
  5461. _label126:
  5462. movl -4(%ebp), %eax
  5463. movl %eax, %edx
  5464. movl $58, %eax
  5465. cmpl %eax, %edx
  5466. sete %al
  5467. movzbl %al, %eax
  5468. cmpl $0, %eax
  5469. je _label127
  5470. subl $4, %esp
  5471. movl 8(%ebp), %eax
  5472. movl %eax, 0(%esp)
  5473. call parser_lex
  5474. addl $4, %esp
  5475. movl %eax, -4(%ebp)
  5476. movl -4(%ebp), %eax
  5477. movl %eax, %edx
  5478. movl $40, %eax
  5479. cmpl %eax, %edx
  5480. sete %al
  5481. movzbl %al, %eax
  5482. cmpl $0, %eax
  5483. je _label128
  5484. subl $12, %esp
  5485. movl 8(%ebp), %eax
  5486. movl %eax, 0(%esp)
  5487. movl -8(%ebp), %eax
  5488. movl %eax, 4(%esp)
  5489. movl 16(%ebp), %eax
  5490. movl %eax, 8(%esp)
  5491. call function_declaration
  5492. addl $12, %esp
  5493. leave
  5494. ret
  5495. _label128:
  5496. movl -4(%ebp), %eax
  5497. movl %eax, %edx
  5498. movl $91, %eax
  5499. cmpl %eax, %edx
  5500. sete %al
  5501. movzbl %al, %eax
  5502. cmpl $0, %eax
  5503. je _label129
  5504. subl $12, %esp
  5505. movl 8(%ebp), %eax
  5506. movl %eax, 0(%esp)
  5507. movl -8(%ebp), %eax
  5508. movl %eax, 4(%esp)
  5509. movl 16(%ebp), %eax
  5510. movl %eax, 8(%esp)
  5511. call array_declaration
  5512. addl $12, %esp
  5513. leave
  5514. ret
  5515. _label129:
  5516. movl -4(%ebp), %eax
  5517. movl %eax, %edx
  5518. movl $286, %eax
  5519. cmpl %eax, %edx
  5520. sete %al
  5521. movzbl %al, %eax
  5522. cmpl $0, %eax
  5523. je _label130
  5524. subl $16, %esp
  5525. movl 8(%ebp), %eax
  5526. movl %eax, 0(%esp)
  5527. movl -8(%ebp), %eax
  5528. movl %eax, 4(%esp)
  5529. movl $66, %eax
  5530. movl %eax, 8(%esp)
  5531. movl 16(%ebp), %eax
  5532. movl %eax, 12(%esp)
  5533. call type_array_declaration
  5534. addl $16, %esp
  5535. leave
  5536. ret
  5537. _label130:
  5538. movl -4(%ebp), %eax
  5539. movl %eax, %edx
  5540. movl $287, %eax
  5541. cmpl %eax, %edx
  5542. sete %al
  5543. movzbl %al, %eax
  5544. cmpl $0, %eax
  5545. je _label131
  5546. subl $16, %esp
  5547. movl 8(%ebp), %eax
  5548. movl %eax, 0(%esp)
  5549. movl -8(%ebp), %eax
  5550. movl %eax, 4(%esp)
  5551. movl $67, %eax
  5552. movl %eax, 8(%esp)
  5553. movl 16(%ebp), %eax
  5554. movl %eax, 12(%esp)
  5555. call type_array_declaration
  5556. addl $16, %esp
  5557. leave
  5558. ret
  5559. _label131:
  5560. subl $16, %esp
  5561. movl 8(%ebp), %eax
  5562. movl %eax, 0(%esp)
  5563. movl -8(%ebp), %eax
  5564. movl %eax, 4(%esp)
  5565. movl -4(%ebp), %eax
  5566. movl %eax, 8(%esp)
  5567. movl 16(%ebp), %eax
  5568. movl %eax, 12(%esp)
  5569. call variable_declaration
  5570. addl $16, %esp
  5571. leave
  5572. ret
  5573. _label127:
  5574. _label125:
  5575. subl $12, %esp
  5576. movl 8(%ebp), %eax
  5577. movl %eax, 0(%esp)
  5578. movl 16(%ebp), %eax
  5579. movl %eax, 4(%esp)
  5580. movl $strbuf+620, %eax
  5581. movl %eax, 8(%esp)
  5582. call parser_error
  5583. addl $12, %esp
  5584. leave
  5585. ret
  5586. global_statement:
  5587. pushl %ebp
  5588. movl %esp, %ebp
  5589. subl $12, %esp
  5590. subl $8, %esp
  5591. movl $0, %eax
  5592. movl %eax, 0(%esp)
  5593. movl $1, %eax
  5594. movl %eax, 4(%esp)
  5595. call vector
  5596. addl $8, %esp
  5597. movl %eax, -4(%ebp)
  5598. subl $4, %esp
  5599. movl 8(%ebp), %eax
  5600. movl %eax, 0(%esp)
  5601. call parser_lex
  5602. addl $4, %esp
  5603. movl %eax, -8(%ebp)
  5604. movl -8(%ebp), %eax
  5605. movl %eax, %edx
  5606. movl $258, %eax
  5607. cmpl %eax, %edx
  5608. sete %al
  5609. movzbl %al, %eax
  5610. cmpl $0, %eax
  5611. je _label133
  5612. subl $4, %esp
  5613. pushl %ebx
  5614. pushl %ecx
  5615. pushl %edx
  5616. pushl %esi
  5617. pushl %edi
  5618. subl $4, %esp
  5619. pushl %ebx
  5620. pushl %ecx
  5621. pushl %edx
  5622. pushl %esi
  5623. pushl %edi
  5624. subl $4, %esp
  5625. movl 8(%ebp), %eax
  5626. movl %eax, 0(%esp)
  5627. call parser_lexer
  5628. addl $4, %esp
  5629. popl %edi
  5630. popl %esi
  5631. popl %edx
  5632. popl %ecx
  5633. popl %ebx
  5634. movl %eax, 0(%esp)
  5635. call lexer_token_text
  5636. addl $4, %esp
  5637. popl %edi
  5638. popl %esi
  5639. popl %edx
  5640. popl %ecx
  5641. popl %ebx
  5642. movl %eax, 0(%esp)
  5643. call strdup
  5644. addl $4, %esp
  5645. movl %eax, -12(%ebp)
  5646. subl $8, %esp
  5647. movl -4(%ebp), %eax
  5648. movl %eax, 0(%esp)
  5649. movl -12(%ebp), %eax
  5650. movl %eax, 4(%esp)
  5651. call vector_push
  5652. addl $8, %esp
  5653. jmp _label132
  5654. _label133:
  5655. movl -8(%ebp), %eax
  5656. movl %eax, %edx
  5657. movl $40, %eax
  5658. cmpl %eax, %edx
  5659. sete %al
  5660. movzbl %al, %eax
  5661. cmpl $0, %eax
  5662. je _label135
  5663. global_statement_next:
  5664. subl $4, %esp
  5665. movl 8(%ebp), %eax
  5666. movl %eax, 0(%esp)
  5667. call parser_lex
  5668. addl $4, %esp
  5669. movl %eax, -8(%ebp)
  5670. movl -8(%ebp), %eax
  5671. movl %eax, %edx
  5672. movl $258, %eax
  5673. cmpl %eax, %edx
  5674. setne %al
  5675. movzbl %al, %eax
  5676. cmpl $0, %eax
  5677. je _label136
  5678. movl $global_statement_invalid, %eax
  5679. jmp *%eax
  5680. _label136:
  5681. subl $4, %esp
  5682. pushl %ebx
  5683. pushl %ecx
  5684. pushl %edx
  5685. pushl %esi
  5686. pushl %edi
  5687. subl $4, %esp
  5688. pushl %ebx
  5689. pushl %ecx
  5690. pushl %edx
  5691. pushl %esi
  5692. pushl %edi
  5693. subl $4, %esp
  5694. movl 8(%ebp), %eax
  5695. movl %eax, 0(%esp)
  5696. call parser_lexer
  5697. addl $4, %esp
  5698. popl %edi
  5699. popl %esi
  5700. popl %edx
  5701. popl %ecx
  5702. popl %ebx
  5703. movl %eax, 0(%esp)
  5704. call lexer_token_text
  5705. addl $4, %esp
  5706. popl %edi
  5707. popl %esi
  5708. popl %edx
  5709. popl %ecx
  5710. popl %ebx
  5711. movl %eax, 0(%esp)
  5712. call strdup
  5713. addl $4, %esp
  5714. movl %eax, -12(%ebp)
  5715. subl $8, %esp
  5716. movl -4(%ebp), %eax
  5717. movl %eax, 0(%esp)
  5718. movl -12(%ebp), %eax
  5719. movl %eax, 4(%esp)
  5720. call vector_push
  5721. addl $8, %esp
  5722. subl $4, %esp
  5723. movl 8(%ebp), %eax
  5724. movl %eax, 0(%esp)
  5725. call parser_lex
  5726. addl $4, %esp
  5727. movl %eax, -8(%ebp)
  5728. movl -8(%ebp), %eax
  5729. movl %eax, %edx
  5730. movl $44, %eax
  5731. cmpl %eax, %edx
  5732. sete %al
  5733. movzbl %al, %eax
  5734. cmpl $0, %eax
  5735. je _label137
  5736. movl $global_statement_next, %eax
  5737. jmp *%eax
  5738. _label137:
  5739. movl -8(%ebp), %eax
  5740. movl %eax, %edx
  5741. movl $41, %eax
  5742. cmpl %eax, %edx
  5743. setne %al
  5744. movzbl %al, %eax
  5745. cmpl $0, %eax
  5746. je _label138
  5747. movl $global_statement_invalid, %eax
  5748. jmp *%eax
  5749. _label138:
  5750. jmp _label134
  5751. _label135:
  5752. movl $global_statement_invalid, %eax
  5753. jmp *%eax
  5754. _label134:
  5755. _label132:
  5756. subl $4, %esp
  5757. movl 8(%ebp), %eax
  5758. movl %eax, 0(%esp)
  5759. call parser_lex
  5760. addl $4, %esp
  5761. movl %eax, -8(%ebp)
  5762. movl -8(%ebp), %eax
  5763. movl %eax, %edx
  5764. movl $59, %eax
  5765. cmpl %eax, %edx
  5766. setne %al
  5767. movzbl %al, %eax
  5768. cmpl $0, %eax
  5769. je _label139
  5770. movl $global_statement_end_error, %eax
  5771. jmp *%eax
  5772. _label139:
  5773. subl $12, %esp
  5774. movl $62, %eax
  5775. movl %eax, 0(%esp)
  5776. movl 12(%ebp), %eax
  5777. movl %eax, 4(%esp)
  5778. movl -4(%ebp), %eax
  5779. movl %eax, 8(%esp)
  5780. call tuple3
  5781. addl $12, %esp
  5782. leave
  5783. ret
  5784. global_statement_invalid:
  5785. subl $12, %esp
  5786. movl 8(%ebp), %eax
  5787. movl %eax, 0(%esp)
  5788. movl 12(%ebp), %eax
  5789. movl %eax, 4(%esp)
  5790. movl $strbuf+682, %eax
  5791. movl %eax, 8(%esp)
  5792. call parser_error
  5793. addl $12, %esp
  5794. global_statement_end_error:
  5795. subl $12, %esp
  5796. movl 8(%ebp), %eax
  5797. movl %eax, 0(%esp)
  5798. movl 12(%ebp), %eax
  5799. movl %eax, 4(%esp)
  5800. movl $strbuf+707, %eax
  5801. movl %eax, 8(%esp)
  5802. call parser_error
  5803. addl $12, %esp
  5804. leave
  5805. ret
  5806. include_statement:
  5807. pushl %ebp
  5808. movl %esp, %ebp
  5809. subl $12, %esp
  5810. subl $8, %esp
  5811. movl $0, %eax
  5812. movl %eax, 0(%esp)
  5813. movl $1, %eax
  5814. movl %eax, 4(%esp)
  5815. call vector
  5816. addl $8, %esp
  5817. movl %eax, -4(%ebp)
  5818. subl $4, %esp
  5819. movl 8(%ebp), %eax
  5820. movl %eax, 0(%esp)
  5821. call parser_lex
  5822. addl $4, %esp
  5823. movl %eax, -8(%ebp)
  5824. movl -8(%ebp), %eax
  5825. movl %eax, %edx
  5826. movl $259, %eax
  5827. cmpl %eax, %edx
  5828. sete %al
  5829. movzbl %al, %eax
  5830. cmpl $0, %eax
  5831. je _label141
  5832. subl $4, %esp
  5833. pushl %ebx
  5834. pushl %ecx
  5835. pushl %edx
  5836. pushl %esi
  5837. pushl %edi
  5838. subl $4, %esp
  5839. pushl %ebx
  5840. pushl %ecx
  5841. pushl %edx
  5842. pushl %esi
  5843. pushl %edi
  5844. subl $4, %esp
  5845. movl 8(%ebp), %eax
  5846. movl %eax, 0(%esp)
  5847. call parser_lexer
  5848. addl $4, %esp
  5849. popl %edi
  5850. popl %esi
  5851. popl %edx
  5852. popl %ecx
  5853. popl %ebx
  5854. movl %eax, 0(%esp)
  5855. call lexer_token_text
  5856. addl $4, %esp
  5857. popl %edi
  5858. popl %esi
  5859. popl %edx
  5860. popl %ecx
  5861. popl %ebx
  5862. movl %eax, 0(%esp)
  5863. call strlitdup
  5864. addl $4, %esp
  5865. movl %eax, -12(%ebp)
  5866. subl $8, %esp
  5867. movl -4(%ebp), %eax
  5868. movl %eax, 0(%esp)
  5869. movl -12(%ebp), %eax
  5870. movl %eax, 4(%esp)
  5871. call vector_push
  5872. addl $8, %esp
  5873. jmp _label140
  5874. _label141:
  5875. movl -8(%ebp), %eax
  5876. movl %eax, %edx
  5877. movl $40, %eax
  5878. cmpl %eax, %edx
  5879. sete %al
  5880. movzbl %al, %eax
  5881. cmpl $0, %eax
  5882. je _label143
  5883. include_statement_next:
  5884. subl $4, %esp
  5885. movl 8(%ebp), %eax
  5886. movl %eax, 0(%esp)
  5887. call parser_lex
  5888. addl $4, %esp
  5889. movl %eax, -8(%ebp)
  5890. movl -8(%ebp), %eax
  5891. movl %eax, %edx
  5892. movl $259, %eax
  5893. cmpl %eax, %edx
  5894. setne %al
  5895. movzbl %al, %eax
  5896. cmpl $0, %eax
  5897. je _label144
  5898. movl $include_statement_invalid, %eax
  5899. jmp *%eax
  5900. _label144:
  5901. subl $4, %esp
  5902. pushl %ebx
  5903. pushl %ecx
  5904. pushl %edx
  5905. pushl %esi
  5906. pushl %edi
  5907. subl $4, %esp
  5908. pushl %ebx
  5909. pushl %ecx
  5910. pushl %edx
  5911. pushl %esi
  5912. pushl %edi
  5913. subl $4, %esp
  5914. movl 8(%ebp), %eax
  5915. movl %eax, 0(%esp)
  5916. call parser_lexer
  5917. addl $4, %esp
  5918. popl %edi
  5919. popl %esi
  5920. popl %edx
  5921. popl %ecx
  5922. popl %ebx
  5923. movl %eax, 0(%esp)
  5924. call lexer_token_text
  5925. addl $4, %esp
  5926. popl %edi
  5927. popl %esi
  5928. popl %edx
  5929. popl %ecx
  5930. popl %ebx
  5931. movl %eax, 0(%esp)
  5932. call strlitdup
  5933. addl $4, %esp
  5934. movl %eax, -12(%ebp)
  5935. subl $8, %esp
  5936. movl -4(%ebp), %eax
  5937. movl %eax, 0(%esp)
  5938. movl -12(%ebp), %eax
  5939. movl %eax, 4(%esp)
  5940. call vector_push
  5941. addl $8, %esp
  5942. subl $4, %esp
  5943. movl 8(%ebp), %eax
  5944. movl %eax, 0(%esp)
  5945. call parser_lex
  5946. addl $4, %esp
  5947. movl %eax, -8(%ebp)
  5948. movl -8(%ebp), %eax
  5949. movl %eax, %edx
  5950. movl $44, %eax
  5951. cmpl %eax, %edx
  5952. sete %al
  5953. movzbl %al, %eax
  5954. cmpl $0, %eax
  5955. je _label145
  5956. movl $include_statement_next, %eax
  5957. jmp *%eax
  5958. _label145:
  5959. movl -8(%ebp), %eax
  5960. movl %eax, %edx
  5961. movl $41, %eax
  5962. cmpl %eax, %edx
  5963. setne %al
  5964. movzbl %al, %eax
  5965. cmpl $0, %eax
  5966. je _label146
  5967. movl $include_statement_invalid, %eax
  5968. jmp *%eax
  5969. _label146:
  5970. jmp _label142
  5971. _label143:
  5972. movl $include_statement_invalid, %eax
  5973. jmp *%eax
  5974. _label142:
  5975. _label140:
  5976. subl $4, %esp
  5977. movl 8(%ebp), %eax
  5978. movl %eax, 0(%esp)
  5979. call parser_lex
  5980. addl $4, %esp
  5981. movl %eax, -8(%ebp)
  5982. movl -8(%ebp), %eax
  5983. movl %eax, %edx
  5984. movl $59, %eax
  5985. cmpl %eax, %edx
  5986. setne %al
  5987. movzbl %al, %eax
  5988. cmpl $0, %eax
  5989. je _label147
  5990. movl $include_statement_end_error, %eax
  5991. jmp *%eax
  5992. _label147:
  5993. movl $0, %eax
  5994. movl %eax, -8(%ebp)
  5995. _label148:
  5996. movl -8(%ebp), %eax
  5997. movl %eax, %edx
  5998. pushl %edx
  5999. subl $4, %esp
  6000. movl -4(%ebp), %eax
  6001. movl %eax, 0(%esp)
  6002. call vector_size
  6003. addl $4, %esp
  6004. popl %edx
  6005. cmpl %eax, %edx
  6006. setl %al
  6007. movzbl %al, %eax
  6008. cmpl $0, %eax
  6009. je _label149
  6010. subl $8, %esp
  6011. movl -4(%ebp), %eax
  6012. movl %eax, 0(%esp)
  6013. movl -8(%ebp), %eax
  6014. movl %eax, 4(%esp)
  6015. call vector_get
  6016. addl $8, %esp
  6017. movl %eax, -12(%ebp)
  6018. subl $12, %esp
  6019. movl 8(%ebp), %eax
  6020. movl %eax, 0(%esp)
  6021. movl -12(%ebp), %eax
  6022. movl %eax, 4(%esp)
  6023. movl 16(%ebp), %eax
  6024. movl %eax, 8(%esp)
  6025. call parser_include_add
  6026. addl $12, %esp
  6027. movl -8(%ebp), %eax
  6028. movl %eax, %ebx
  6029. movl $1, %eax
  6030. addl %ebx, %eax
  6031. movl %eax, -8(%ebp)
  6032. jmp _label148
  6033. _label149:
  6034. movl 8(%ebp), %eax
  6035. movl %eax, %edx
  6036. movl $2, %eax
  6037. leal (%edx,%eax,4), %eax
  6038. movl %eax, %ebx
  6039. movl $1, %eax
  6040. movl %eax, (%ebx)
  6041. movl $0, %eax
  6042. leave
  6043. ret
  6044. include_statement_invalid:
  6045. subl $12, %esp
  6046. movl 8(%ebp), %eax
  6047. movl %eax, 0(%esp)
  6048. movl 12(%ebp), %eax
  6049. movl %eax, 4(%esp)
  6050. movl $strbuf+752, %eax
  6051. movl %eax, 8(%esp)
  6052. call parser_error
  6053. addl $12, %esp
  6054. include_statement_end_error:
  6055. subl $12, %esp
  6056. movl 8(%ebp), %eax
  6057. movl %eax, 0(%esp)
  6058. movl 12(%ebp), %eax
  6059. movl %eax, 4(%esp)
  6060. movl $strbuf+778, %eax
  6061. movl %eax, 8(%esp)
  6062. call parser_error
  6063. addl $12, %esp
  6064. leave
  6065. ret
  6066. macro_declaration:
  6067. pushl %ebp
  6068. movl %esp, %ebp
  6069. subl $8, %esp
  6070. subl $4, %esp
  6071. movl 8(%ebp), %eax
  6072. movl %eax, 0(%esp)
  6073. call parser_lex
  6074. addl $4, %esp
  6075. movl %eax, -4(%ebp)
  6076. subl $8, %esp
  6077. movl 8(%ebp), %eax
  6078. movl %eax, 0(%esp)
  6079. movl -4(%ebp), %eax
  6080. movl %eax, 4(%esp)
  6081. call expression
  6082. addl $8, %esp
  6083. movl %eax, -8(%ebp)
  6084. subl $4, %esp
  6085. movl 8(%ebp), %eax
  6086. movl %eax, 0(%esp)
  6087. call parser_lex
  6088. addl $4, %esp
  6089. movl %eax, -4(%ebp)
  6090. movl -4(%ebp), %eax
  6091. movl %eax, %edx
  6092. movl $59, %eax
  6093. cmpl %eax, %edx
  6094. setne %al
  6095. movzbl %al, %eax
  6096. cmpl $0, %eax
  6097. je _label150
  6098. movl $macro_declaration_end_error, %eax
  6099. jmp *%eax
  6100. _label150:
  6101. subl $16, %esp
  6102. movl $63, %eax
  6103. movl %eax, 0(%esp)
  6104. movl 16(%ebp), %eax
  6105. movl %eax, 4(%esp)
  6106. movl 12(%ebp), %eax
  6107. movl %eax, 8(%esp)
  6108. movl -8(%ebp), %eax
  6109. movl %eax, 12(%esp)
  6110. call tuple4
  6111. addl $16, %esp
  6112. leave
  6113. ret
  6114. macro_declaration_end_error:
  6115. subl $12, %esp
  6116. movl 8(%ebp), %eax
  6117. movl %eax, 0(%esp)
  6118. movl 12(%ebp), %eax
  6119. movl %eax, 4(%esp)
  6120. movl $strbuf+824, %eax
  6121. movl %eax, 8(%esp)
  6122. call parser_error
  6123. addl $12, %esp
  6124. leave
  6125. ret
  6126. function_declaration:
  6127. pushl %ebp
  6128. movl %esp, %ebp
  6129. subl $12, %esp
  6130. movl $0, %eax
  6131. movl %eax, -4(%ebp)
  6132. function_declaration_arg_loop:
  6133. subl $4, %esp
  6134. movl 8(%ebp), %eax
  6135. movl %eax, 0(%esp)
  6136. call parser_lex
  6137. addl $4, %esp
  6138. movl %eax, -8(%ebp)
  6139. movl -8(%ebp), %eax
  6140. movl %eax, %edx
  6141. movl $41, %eax
  6142. cmpl %eax, %edx
  6143. sete %al
  6144. movzbl %al, %eax
  6145. cmpl $0, %eax
  6146. je _label151
  6147. movl $function_declaration_arg_end, %eax
  6148. jmp *%eax
  6149. _label151:
  6150. movl -8(%ebp), %eax
  6151. movl %eax, %edx
  6152. movl $321, %eax
  6153. cmpl %eax, %edx
  6154. sete %al
  6155. movzbl %al, %eax
  6156. cmpl $0, %eax
  6157. je _label152
  6158. subl $4, %esp
  6159. movl 8(%ebp), %eax
  6160. movl %eax, 0(%esp)
  6161. call parser_lex
  6162. addl $4, %esp
  6163. movl %eax, -8(%ebp)
  6164. movl $function_declaration_arg_end, %eax
  6165. jmp *%eax
  6166. _label152:
  6167. movl -8(%ebp), %eax
  6168. movl %eax, %edx
  6169. movl $260, %eax
  6170. cmpl %eax, %edx
  6171. setne %al
  6172. movzbl %al, %eax
  6173. cmpl $0, %eax
  6174. je _label153
  6175. movl $function_declaration_arg_invalid, %eax
  6176. jmp *%eax
  6177. _label153:
  6178. movl -4(%ebp), %eax
  6179. movl %eax, %edx
  6180. pushl %edx
  6181. subl $4, %esp
  6182. pushl %ebx
  6183. pushl %ecx
  6184. pushl %edx
  6185. pushl %esi
  6186. pushl %edi
  6187. subl $4, %esp
  6188. movl 8(%ebp), %eax
  6189. movl %eax, 0(%esp)
  6190. call parser_lexer
  6191. addl $4, %esp
  6192. popl %edi
  6193. popl %esi
  6194. popl %edx
  6195. popl %ecx
  6196. popl %ebx
  6197. movl %eax, 0(%esp)
  6198. call lexer_token_value
  6199. addl $4, %esp
  6200. popl %edx
  6201. cmpl %eax, %edx
  6202. setne %al
  6203. movzbl %al, %eax
  6204. cmpl $0, %eax
  6205. je _label154
  6206. movl $function_declaration_arg_invalid, %eax
  6207. jmp *%eax
  6208. _label154:
  6209. movl -4(%ebp), %eax
  6210. movl %eax, %ebx
  6211. movl $1, %eax
  6212. addl %ebx, %eax
  6213. movl %eax, -4(%ebp)
  6214. subl $4, %esp
  6215. movl 8(%ebp), %eax
  6216. movl %eax, 0(%esp)
  6217. call parser_lex
  6218. addl $4, %esp
  6219. movl %eax, -8(%ebp)
  6220. movl -8(%ebp), %eax
  6221. movl %eax, %edx
  6222. movl $44, %eax
  6223. cmpl %eax, %edx
  6224. sete %al
  6225. movzbl %al, %eax
  6226. cmpl $0, %eax
  6227. je _label155
  6228. movl $function_declaration_arg_loop, %eax
  6229. jmp *%eax
  6230. _label155:
  6231. function_declaration_arg_end:
  6232. movl -8(%ebp), %eax
  6233. movl %eax, %edx
  6234. movl $41, %eax
  6235. cmpl %eax, %edx
  6236. setne %al
  6237. movzbl %al, %eax
  6238. cmpl $0, %eax
  6239. je _label156
  6240. movl $function_declaration_arg_invalid, %eax
  6241. jmp *%eax
  6242. _label156:
  6243. subl $4, %esp
  6244. movl 8(%ebp), %eax
  6245. movl %eax, 0(%esp)
  6246. call parser_lex
  6247. addl $4, %esp
  6248. movl %eax, -8(%ebp)
  6249. subl $12, %esp
  6250. movl 8(%ebp), %eax
  6251. movl %eax, 0(%esp)
  6252. movl -8(%ebp), %eax
  6253. movl %eax, 4(%esp)
  6254. movl $1, %eax
  6255. movl %eax, 8(%esp)
  6256. call block_statement
  6257. addl $12, %esp
  6258. movl %eax, -12(%ebp)
  6259. subl $20, %esp
  6260. movl $64, %eax
  6261. movl %eax, 0(%esp)
  6262. movl 16(%ebp), %eax
  6263. movl %eax, 4(%esp)
  6264. movl 12(%ebp), %eax
  6265. movl %eax, 8(%esp)
  6266. movl -4(%ebp), %eax
  6267. movl %eax, 12(%esp)
  6268. movl -12(%ebp), %eax
  6269. movl %eax, 16(%esp)
  6270. call tuple5
  6271. addl $20, %esp
  6272. leave
  6273. ret
  6274. function_declaration_arg_invalid:
  6275. subl $12, %esp
  6276. movl 8(%ebp), %eax
  6277. movl %eax, 0(%esp)
  6278. movl 16(%ebp), %eax
  6279. movl %eax, 4(%esp)
  6280. movl $strbuf+870, %eax
  6281. movl %eax, 8(%esp)
  6282. call parser_error
  6283. addl $12, %esp
  6284. leave
  6285. ret
  6286. array_declaration:
  6287. pushl %ebp
  6288. movl %esp, %ebp
  6289. subl $12, %esp
  6290. subl $8, %esp
  6291. movl $0, %eax
  6292. movl %eax, 0(%esp)
  6293. movl $1, %eax
  6294. movl %eax, 4(%esp)
  6295. call vector
  6296. addl $8, %esp
  6297. movl %eax, -4(%ebp)
  6298. array_declaration_loop:
  6299. subl $4, %esp
  6300. movl 8(%ebp), %eax
  6301. movl %eax, 0(%esp)
  6302. call parser_lex
  6303. addl $4, %esp
  6304. movl %eax, -8(%ebp)
  6305. subl $8, %esp
  6306. movl 8(%ebp), %eax
  6307. movl %eax, 0(%esp)
  6308. movl -8(%ebp), %eax
  6309. movl %eax, 4(%esp)
  6310. call expression
  6311. addl $8, %esp
  6312. movl %eax, -12(%ebp)
  6313. subl $8, %esp
  6314. movl -4(%ebp), %eax
  6315. movl %eax, 0(%esp)
  6316. movl -12(%ebp), %eax
  6317. movl %eax, 4(%esp)
  6318. call vector_push
  6319. addl $8, %esp
  6320. subl $4, %esp
  6321. movl 8(%ebp), %eax
  6322. movl %eax, 0(%esp)
  6323. call parser_lex
  6324. addl $4, %esp
  6325. movl %eax, -8(%ebp)
  6326. movl -8(%ebp), %eax
  6327. movl %eax, %edx
  6328. movl $44, %eax
  6329. cmpl %eax, %edx
  6330. sete %al
  6331. movzbl %al, %eax
  6332. cmpl $0, %eax
  6333. je _label157
  6334. movl $array_declaration_loop, %eax
  6335. jmp *%eax
  6336. _label157:
  6337. movl -8(%ebp), %eax
  6338. movl %eax, %edx
  6339. movl $93, %eax
  6340. cmpl %eax, %edx
  6341. setne %al
  6342. movzbl %al, %eax
  6343. cmpl $0, %eax
  6344. je _label158
  6345. movl $array_declaration_invalid, %eax
  6346. jmp *%eax
  6347. _label158:
  6348. subl $4, %esp
  6349. movl 8(%ebp), %eax
  6350. movl %eax, 0(%esp)
  6351. call parser_lex
  6352. addl $4, %esp
  6353. movl %eax, -8(%ebp)
  6354. movl -8(%ebp), %eax
  6355. movl %eax, %edx
  6356. movl $59, %eax
  6357. cmpl %eax, %edx
  6358. setne %al
  6359. movzbl %al, %eax
  6360. cmpl $0, %eax
  6361. je _label159
  6362. movl $array_declaration_end_error, %eax
  6363. jmp *%eax
  6364. _label159:
  6365. subl $16, %esp
  6366. movl $65, %eax
  6367. movl %eax, 0(%esp)
  6368. movl 16(%ebp), %eax
  6369. movl %eax, 4(%esp)
  6370. movl 12(%ebp), %eax
  6371. movl %eax, 8(%esp)
  6372. movl -4(%ebp), %eax
  6373. movl %eax, 12(%esp)
  6374. call tuple4
  6375. addl $16, %esp
  6376. leave
  6377. ret
  6378. array_declaration_invalid:
  6379. subl $12, %esp
  6380. movl 8(%ebp), %eax
  6381. movl %eax, 0(%esp)
  6382. movl 16(%ebp), %eax
  6383. movl %eax, 4(%esp)
  6384. movl $strbuf+916, %eax
  6385. movl %eax, 8(%esp)
  6386. call parser_error
  6387. addl $12, %esp
  6388. array_declaration_end_error:
  6389. subl $12, %esp
  6390. movl 8(%ebp), %eax
  6391. movl %eax, 0(%esp)
  6392. movl 12(%ebp), %eax
  6393. movl %eax, 4(%esp)
  6394. movl $strbuf+949, %eax
  6395. movl %eax, 8(%esp)
  6396. call parser_error
  6397. addl $12, %esp
  6398. leave
  6399. ret
  6400. type_array_declaration:
  6401. pushl %ebp
  6402. movl %esp, %ebp
  6403. subl $8, %esp
  6404. subl $4, %esp
  6405. movl 8(%ebp), %eax
  6406. movl %eax, 0(%esp)
  6407. call parser_lex
  6408. addl $4, %esp
  6409. movl %eax, -4(%ebp)
  6410. movl -4(%ebp), %eax
  6411. movl %eax, %edx
  6412. movl $91, %eax
  6413. cmpl %eax, %edx
  6414. setne %al
  6415. movzbl %al, %eax
  6416. cmpl $0, %eax
  6417. je _label160
  6418. movl $type_array_declaration_invalid, %eax
  6419. jmp *%eax
  6420. _label160:
  6421. subl $4, %esp
  6422. movl 8(%ebp), %eax
  6423. movl %eax, 0(%esp)
  6424. call parser_lex
  6425. addl $4, %esp
  6426. movl %eax, -4(%ebp)
  6427. subl $8, %esp
  6428. movl 8(%ebp), %eax
  6429. movl %eax, 0(%esp)
  6430. movl -4(%ebp), %eax
  6431. movl %eax, 4(%esp)
  6432. call expression
  6433. addl $8, %esp
  6434. movl %eax, -8(%ebp)
  6435. subl $4, %esp
  6436. movl 8(%ebp), %eax
  6437. movl %eax, 0(%esp)
  6438. call parser_lex
  6439. addl $4, %esp
  6440. movl %eax, -4(%ebp)
  6441. movl -4(%ebp), %eax
  6442. movl %eax, %edx
  6443. movl $93, %eax
  6444. cmpl %eax, %edx
  6445. setne %al
  6446. movzbl %al, %eax
  6447. cmpl $0, %eax
  6448. je _label161
  6449. movl $type_array_declaration_invalid, %eax
  6450. jmp *%eax
  6451. _label161:
  6452. subl $4, %esp
  6453. movl 8(%ebp), %eax
  6454. movl %eax, 0(%esp)
  6455. call parser_lex
  6456. addl $4, %esp
  6457. movl %eax, -4(%ebp)
  6458. movl -4(%ebp), %eax
  6459. movl %eax, %edx
  6460. movl $59, %eax
  6461. cmpl %eax, %edx
  6462. setne %al
  6463. movzbl %al, %eax
  6464. cmpl $0, %eax
  6465. je _label162
  6466. movl $type_array_declaration_end_error, %eax
  6467. jmp *%eax
  6468. _label162:
  6469. subl $16, %esp
  6470. movl 16(%ebp), %eax
  6471. movl %eax, 0(%esp)
  6472. movl 20(%ebp), %eax
  6473. movl %eax, 4(%esp)
  6474. movl 12(%ebp), %eax
  6475. movl %eax, 8(%esp)
  6476. movl -8(%ebp), %eax
  6477. movl %eax, 12(%esp)
  6478. call tuple4
  6479. addl $16, %esp
  6480. leave
  6481. ret
  6482. type_array_declaration_invalid:
  6483. subl $12, %esp
  6484. movl 8(%ebp), %eax
  6485. movl %eax, 0(%esp)
  6486. movl 20(%ebp), %eax
  6487. movl %eax, 4(%esp)
  6488. movl $strbuf+993, %eax
  6489. movl %eax, 8(%esp)
  6490. call parser_error
  6491. addl $12, %esp
  6492. type_array_declaration_end_error:
  6493. subl $12, %esp
  6494. movl 8(%ebp), %eax
  6495. movl %eax, 0(%esp)
  6496. movl 12(%ebp), %eax
  6497. movl %eax, 4(%esp)
  6498. movl $strbuf+1031, %eax
  6499. movl %eax, 8(%esp)
  6500. call parser_error
  6501. addl $12, %esp
  6502. leave
  6503. ret
  6504. variable_declaration:
  6505. pushl %ebp
  6506. movl %esp, %ebp
  6507. subl $8, %esp
  6508. subl $8, %esp
  6509. movl 8(%ebp), %eax
  6510. movl %eax, 0(%esp)
  6511. movl 16(%ebp), %eax
  6512. movl %eax, 4(%esp)
  6513. call expression
  6514. addl $8, %esp
  6515. movl %eax, -4(%ebp)
  6516. subl $4, %esp
  6517. movl 8(%ebp), %eax
  6518. movl %eax, 0(%esp)
  6519. call parser_lex
  6520. addl $4, %esp
  6521. movl %eax, -8(%ebp)
  6522. movl -8(%ebp), %eax
  6523. movl %eax, %edx
  6524. movl $59, %eax
  6525. cmpl %eax, %edx
  6526. setne %al
  6527. movzbl %al, %eax
  6528. cmpl $0, %eax
  6529. je _label163
  6530. movl $variable_declaration_end_error, %eax
  6531. jmp *%eax
  6532. _label163:
  6533. subl $16, %esp
  6534. movl $68, %eax
  6535. movl %eax, 0(%esp)
  6536. movl 20(%ebp), %eax
  6537. movl %eax, 4(%esp)
  6538. movl 12(%ebp), %eax
  6539. movl %eax, 8(%esp)
  6540. movl -4(%ebp), %eax
  6541. movl %eax, 12(%esp)
  6542. call tuple4
  6543. addl $16, %esp
  6544. leave
  6545. ret
  6546. variable_declaration_end_error:
  6547. subl $12, %esp
  6548. movl 8(%ebp), %eax
  6549. movl %eax, 0(%esp)
  6550. movl 12(%ebp), %eax
  6551. movl %eax, 4(%esp)
  6552. movl $strbuf+1080, %eax
  6553. movl %eax, 8(%esp)
  6554. call parser_error
  6555. addl $12, %esp
  6556. leave
  6557. ret
  6558. block_statement:
  6559. pushl %ebp
  6560. movl %esp, %ebp
  6561. subl $20, %esp
  6562. subl $8, %esp
  6563. movl $0, %eax
  6564. movl %eax, 0(%esp)
  6565. movl $1, %eax
  6566. movl %eax, 4(%esp)
  6567. call vector
  6568. addl $8, %esp
  6569. movl %eax, -4(%ebp)
  6570. subl $4, %esp
  6571. movl 8(%ebp), %eax
  6572. movl %eax, 0(%esp)
  6573. call parser_token_location
  6574. addl $4, %esp
  6575. movl %eax, -16(%ebp)
  6576. movl 12(%ebp), %eax
  6577. movl %eax, %edx
  6578. movl $123, %eax
  6579. cmpl %eax, %edx
  6580. setne %al
  6581. movzbl %al, %eax
  6582. cmpl $0, %eax
  6583. je _label164
  6584. movl 16(%ebp), %eax
  6585. cmpl $0, %eax
  6586. sete %al
  6587. movzbl %al, %eax
  6588. cmpl $0, %eax
  6589. je _label166
  6590. subl $12, %esp
  6591. movl 8(%ebp), %eax
  6592. movl %eax, 0(%esp)
  6593. movl 12(%ebp), %eax
  6594. movl %eax, 4(%esp)
  6595. movl -16(%ebp), %eax
  6596. movl %eax, 8(%esp)
  6597. call statement
  6598. addl $12, %esp
  6599. movl %eax, -12(%ebp)
  6600. movl -12(%ebp), %eax
  6601. movl %eax, %edx
  6602. movl $0, %eax
  6603. leal (%edx,%eax,4), %eax
  6604. movl (%eax), %eax
  6605. movl %eax, %edx
  6606. movl $49, %eax
  6607. cmpl %eax, %edx
  6608. setl %al
  6609. movzbl %al, %eax
  6610. cmpl $0, %eax
  6611. je _label167
  6612. subl $4, %esp
  6613. movl 8(%ebp), %eax
  6614. movl %eax, 0(%esp)
  6615. call parser_lex
  6616. addl $4, %esp
  6617. movl %eax, -8(%ebp)
  6618. movl -8(%ebp), %eax
  6619. movl %eax, %edx
  6620. movl $59, %eax
  6621. cmpl %eax, %edx
  6622. setne %al
  6623. movzbl %al, %eax
  6624. cmpl $0, %eax
  6625. je _label168
  6626. movl $block_statement_content_invalid, %eax
  6627. jmp *%eax
  6628. _label168:
  6629. _label167:
  6630. subl $8, %esp
  6631. movl -4(%ebp), %eax
  6632. movl %eax, 0(%esp)
  6633. movl -12(%ebp), %eax
  6634. movl %eax, 4(%esp)
  6635. call vector_push
  6636. addl $8, %esp
  6637. movl $block_statement_end, %eax
  6638. jmp *%eax
  6639. jmp _label165
  6640. _label166:
  6641. movl $block_statement_invalid, %eax
  6642. jmp *%eax
  6643. _label165:
  6644. _label164:
  6645. block_statement_loop:
  6646. subl $4, %esp
  6647. movl 8(%ebp), %eax
  6648. movl %eax, 0(%esp)
  6649. call parser_lex
  6650. addl $4, %esp
  6651. movl %eax, -8(%ebp)
  6652. subl $4, %esp
  6653. movl 8(%ebp), %eax
  6654. movl %eax, 0(%esp)
  6655. call parser_token_location
  6656. addl $4, %esp
  6657. movl %eax, -20(%ebp)
  6658. movl -8(%ebp), %eax
  6659. movl %eax, %edx
  6660. movl $125, %eax
  6661. cmpl %eax, %edx
  6662. sete %al
  6663. movzbl %al, %eax
  6664. cmpl $0, %eax
  6665. je _label169
  6666. movl $block_statement_end, %eax
  6667. jmp *%eax
  6668. _label169:
  6669. movl -8(%ebp), %eax
  6670. movl %eax, %edx
  6671. movl $123, %eax
  6672. cmpl %eax, %edx
  6673. sete %al
  6674. movzbl %al, %eax
  6675. cmpl $0, %eax
  6676. je _label171
  6677. subl $12, %esp
  6678. movl 8(%ebp), %eax
  6679. movl %eax, 0(%esp)
  6680. movl -8(%ebp), %eax
  6681. movl %eax, 4(%esp)
  6682. movl $1, %eax
  6683. movl %eax, 8(%esp)
  6684. call block_statement
  6685. addl $12, %esp
  6686. movl %eax, -12(%ebp)
  6687. jmp _label170
  6688. _label171:
  6689. subl $12, %esp
  6690. movl 8(%ebp), %eax
  6691. movl %eax, 0(%esp)
  6692. movl -8(%ebp), %eax
  6693. movl %eax, 4(%esp)
  6694. movl -20(%ebp), %eax
  6695. movl %eax, 8(%esp)
  6696. call statement
  6697. addl $12, %esp
  6698. movl %eax, -12(%ebp)
  6699. _label170:
  6700. subl $8, %esp
  6701. movl -4(%ebp), %eax
  6702. movl %eax, 0(%esp)
  6703. movl -12(%ebp), %eax
  6704. movl %eax, 4(%esp)
  6705. call vector_push
  6706. addl $8, %esp
  6707. movl -12(%ebp), %eax
  6708. movl %eax, %edx
  6709. movl $0, %eax
  6710. leal (%edx,%eax,4), %eax
  6711. movl (%eax), %eax
  6712. movl %eax, %edx
  6713. movl $49, %eax
  6714. cmpl %eax, %edx
  6715. setl %al
  6716. movzbl %al, %eax
  6717. cmpl $0, %eax
  6718. je _label172
  6719. subl $4, %esp
  6720. movl 8(%ebp), %eax
  6721. movl %eax, 0(%esp)
  6722. call parser_lex
  6723. addl $4, %esp
  6724. movl %eax, -8(%ebp)
  6725. movl -8(%ebp), %eax
  6726. movl %eax, %edx
  6727. movl $59, %eax
  6728. cmpl %eax, %edx
  6729. setne %al
  6730. movzbl %al, %eax
  6731. cmpl $0, %eax
  6732. je _label173
  6733. movl $block_statement_content_invalid, %eax
  6734. jmp *%eax
  6735. _label173:
  6736. _label172:
  6737. movl $block_statement_loop, %eax
  6738. jmp *%eax
  6739. block_statement_end:
  6740. subl $12, %esp
  6741. movl $61, %eax
  6742. movl %eax, 0(%esp)
  6743. movl -16(%ebp), %eax
  6744. movl %eax, 4(%esp)
  6745. movl -4(%ebp), %eax
  6746. movl %eax, 8(%esp)
  6747. call tuple3
  6748. addl $12, %esp
  6749. leave
  6750. ret
  6751. block_statement_invalid:
  6752. subl $12, %esp
  6753. movl 8(%ebp), %eax
  6754. movl %eax, 0(%esp)
  6755. movl -16(%ebp), %eax
  6756. movl %eax, 4(%esp)
  6757. movl $strbuf+1127, %eax
  6758. movl %eax, 8(%esp)
  6759. call parser_error
  6760. addl $12, %esp
  6761. block_statement_content_invalid:
  6762. subl $12, %esp
  6763. movl 8(%ebp), %eax
  6764. movl %eax, 0(%esp)
  6765. movl -20(%ebp), %eax
  6766. movl %eax, 4(%esp)
  6767. movl $strbuf+1158, %eax
  6768. movl %eax, 8(%esp)
  6769. call parser_error
  6770. addl $12, %esp
  6771. leave
  6772. ret
  6773. statement:
  6774. pushl %ebp
  6775. movl %esp, %ebp
  6776. movl 12(%ebp), %eax
  6777. movl %eax, %edx
  6778. movl $270, %eax
  6779. cmpl %eax, %edx
  6780. sete %al
  6781. movzbl %al, %eax
  6782. cmpl $0, %eax
  6783. je _label175
  6784. subl $8, %esp
  6785. movl 8(%ebp), %eax
  6786. movl %eax, 0(%esp)
  6787. movl 16(%ebp), %eax
  6788. movl %eax, 4(%esp)
  6789. call if_statement
  6790. addl $8, %esp
  6791. leave
  6792. ret
  6793. jmp _label174
  6794. _label175:
  6795. movl 12(%ebp), %eax
  6796. movl %eax, %edx
  6797. movl $275, %eax
  6798. cmpl %eax, %edx
  6799. sete %al
  6800. movzbl %al, %eax
  6801. cmpl $0, %eax
  6802. je _label176
  6803. subl $8, %esp
  6804. movl 8(%ebp), %eax
  6805. movl %eax, 0(%esp)
  6806. movl 16(%ebp), %eax
  6807. movl %eax, 4(%esp)
  6808. call for_statement
  6809. addl $8, %esp
  6810. leave
  6811. ret
  6812. jmp _label174
  6813. _label176:
  6814. movl 12(%ebp), %eax
  6815. movl %eax, %edx
  6816. movl $274, %eax
  6817. cmpl %eax, %edx
  6818. sete %al
  6819. movzbl %al, %eax
  6820. cmpl $0, %eax
  6821. je _label177
  6822. subl $8, %esp
  6823. movl 8(%ebp), %eax
  6824. movl %eax, 0(%esp)
  6825. movl 16(%ebp), %eax
  6826. movl %eax, 4(%esp)
  6827. call do_while_statement
  6828. addl $8, %esp
  6829. leave
  6830. ret
  6831. jmp _label174
  6832. _label177:
  6833. movl 12(%ebp), %eax
  6834. movl %eax, %edx
  6835. movl $276, %eax
  6836. cmpl %eax, %edx
  6837. sete %al
  6838. movzbl %al, %eax
  6839. cmpl $0, %eax
  6840. je _label178
  6841. subl $8, %esp
  6842. movl 8(%ebp), %eax
  6843. movl %eax, 0(%esp)
  6844. movl 16(%ebp), %eax
  6845. movl %eax, 4(%esp)
  6846. call while_statement
  6847. addl $8, %esp
  6848. leave
  6849. ret
  6850. jmp _label174
  6851. _label178:
  6852. movl 12(%ebp), %eax
  6853. movl %eax, %edx
  6854. movl $277, %eax
  6855. cmpl %eax, %edx
  6856. sete %al
  6857. movzbl %al, %eax
  6858. cmpl $0, %eax
  6859. je _label179
  6860. subl $8, %esp
  6861. movl 8(%ebp), %eax
  6862. movl %eax, 0(%esp)
  6863. movl 16(%ebp), %eax
  6864. movl %eax, 4(%esp)
  6865. call allocate_statement
  6866. addl $8, %esp
  6867. leave
  6868. ret
  6869. jmp _label174
  6870. _label179:
  6871. movl 12(%ebp), %eax
  6872. movl %eax, %edx
  6873. movl $278, %eax
  6874. cmpl %eax, %edx
  6875. sete %al
  6876. movzbl %al, %eax
  6877. cmpl $0, %eax
  6878. je _label180
  6879. subl $8, %esp
  6880. movl 8(%ebp), %eax
  6881. movl %eax, 0(%esp)
  6882. movl 16(%ebp), %eax
  6883. movl %eax, 4(%esp)
  6884. call assembly_statement
  6885. addl $8, %esp
  6886. leave
  6887. ret
  6888. jmp _label174
  6889. _label180:
  6890. movl 12(%ebp), %eax
  6891. movl %eax, %edx
  6892. movl $279, %eax
  6893. cmpl %eax, %edx
  6894. sete %al
  6895. movzbl %al, %eax
  6896. cmpl $0, %eax
  6897. je _label181
  6898. subl $8, %esp
  6899. movl 8(%ebp), %eax
  6900. movl %eax, 0(%esp)
  6901. movl 16(%ebp), %eax
  6902. movl %eax, 4(%esp)
  6903. call return_statement
  6904. addl $8, %esp
  6905. leave
  6906. ret
  6907. jmp _label174
  6908. _label181:
  6909. movl 12(%ebp), %eax
  6910. movl %eax, %edx
  6911. movl $272, %eax
  6912. cmpl %eax, %edx
  6913. sete %al
  6914. movzbl %al, %eax
  6915. cmpl $0, %eax
  6916. jne _label182
  6917. movl 12(%ebp), %eax
  6918. movl %eax, %edx
  6919. movl $273, %eax
  6920. cmpl %eax, %edx
  6921. sete %al
  6922. movzbl %al, %eax
  6923. cmpl $0, %eax
  6924. jne _label182
  6925. movl $0, %eax
  6926. jmp _label183
  6927. _label182:
  6928. movl $1, %eax
  6929. _label183:
  6930. cmpl $0, %eax
  6931. je _label184
  6932. subl $12, %esp
  6933. movl 8(%ebp), %eax
  6934. movl %eax, 0(%esp)
  6935. movl 16(%ebp), %eax
  6936. movl %eax, 4(%esp)
  6937. movl 12(%ebp), %eax
  6938. movl %eax, 8(%esp)
  6939. call loop_jump_statement
  6940. addl $12, %esp
  6941. leave
  6942. ret
  6943. jmp _label174
  6944. _label184:
  6945. movl 12(%ebp), %eax
  6946. movl %eax, %edx
  6947. movl $285, %eax
  6948. cmpl %eax, %edx
  6949. sete %al
  6950. movzbl %al, %eax
  6951. cmpl $0, %eax
  6952. je _label185
  6953. subl $8, %esp
  6954. movl 8(%ebp), %eax
  6955. movl %eax, 0(%esp)
  6956. movl 16(%ebp), %eax
  6957. movl %eax, 4(%esp)
  6958. call writechar_statement
  6959. addl $8, %esp
  6960. leave
  6961. ret
  6962. jmp _label174
  6963. _label185:
  6964. movl 12(%ebp), %eax
  6965. movl %eax, %edx
  6966. movl $283, %eax
  6967. cmpl %eax, %edx
  6968. sete %al
  6969. movzbl %al, %eax
  6970. cmpl $0, %eax
  6971. je _label186
  6972. subl $8, %esp
  6973. movl 8(%ebp), %eax
  6974. movl %eax, 0(%esp)
  6975. movl 16(%ebp), %eax
  6976. movl %eax, 4(%esp)
  6977. call label_statement
  6978. addl $8, %esp
  6979. leave
  6980. ret
  6981. jmp _label174
  6982. _label186:
  6983. movl 12(%ebp), %eax
  6984. movl %eax, %edx
  6985. movl $282, %eax
  6986. cmpl %eax, %edx
  6987. sete %al
  6988. movzbl %al, %eax
  6989. cmpl $0, %eax
  6990. je _label187
  6991. subl $8, %esp
  6992. movl 8(%ebp), %eax
  6993. movl %eax, 0(%esp)
  6994. movl 16(%ebp), %eax
  6995. movl %eax, 4(%esp)
  6996. call goto_statement
  6997. addl $8, %esp
  6998. leave
  6999. ret
  7000. jmp _label174
  7001. _label187:
  7002. subl $8, %esp
  7003. movl 8(%ebp), %eax
  7004. movl %eax, 0(%esp)
  7005. movl 12(%ebp), %eax
  7006. movl %eax, 4(%esp)
  7007. call expression
  7008. addl $8, %esp
  7009. leave
  7010. ret
  7011. _label174:
  7012. leave
  7013. ret
  7014. if_statement:
  7015. pushl %ebp
  7016. movl %esp, %ebp
  7017. subl $12, %esp
  7018. subl $8, %esp
  7019. movl $0, %eax
  7020. movl %eax, 0(%esp)
  7021. movl $3, %eax
  7022. movl %eax, 4(%esp)
  7023. call vector
  7024. addl $8, %esp
  7025. movl %eax, -4(%ebp)
  7026. if_statement_parse:
  7027. subl $4, %esp
  7028. movl 8(%ebp), %eax
  7029. movl %eax, 0(%esp)
  7030. call parser_lex
  7031. addl $4, %esp
  7032. movl %eax, -8(%ebp)
  7033. movl -8(%ebp), %eax
  7034. movl %eax, %edx
  7035. movl $40, %eax
  7036. cmpl %eax, %edx
  7037. setne %al
  7038. movzbl %al, %eax
  7039. cmpl $0, %eax
  7040. je _label188
  7041. movl $if_statement_invalid, %eax
  7042. jmp *%eax
  7043. _label188:
  7044. subl $4, %esp
  7045. movl 8(%ebp), %eax
  7046. movl %eax, 0(%esp)
  7047. call parser_lex
  7048. addl $4, %esp
  7049. movl %eax, -8(%ebp)
  7050. subl $8, %esp
  7051. movl 8(%ebp), %eax
  7052. movl %eax, 0(%esp)
  7053. movl -8(%ebp), %eax
  7054. movl %eax, 4(%esp)
  7055. call expression
  7056. addl $8, %esp
  7057. movl %eax, -12(%ebp)
  7058. subl $8, %esp
  7059. movl -4(%ebp), %eax
  7060. movl %eax, 0(%esp)
  7061. movl -12(%ebp), %eax
  7062. movl %eax, 4(%esp)
  7063. call vector_push
  7064. addl $8, %esp
  7065. subl $4, %esp
  7066. movl 8(%ebp), %eax
  7067. movl %eax, 0(%esp)
  7068. call parser_lex
  7069. addl $4, %esp
  7070. movl %eax, -8(%ebp)
  7071. movl -8(%ebp), %eax
  7072. movl %eax, %edx
  7073. movl $41, %eax
  7074. cmpl %eax, %edx
  7075. setne %al
  7076. movzbl %al, %eax
  7077. cmpl $0, %eax
  7078. je _label189
  7079. movl $if_statement_invalid, %eax
  7080. jmp *%eax
  7081. _label189:
  7082. subl $4, %esp
  7083. movl 8(%ebp), %eax
  7084. movl %eax, 0(%esp)
  7085. call parser_lex
  7086. addl $4, %esp
  7087. movl %eax, -8(%ebp)
  7088. subl $12, %esp
  7089. movl 8(%ebp), %eax
  7090. movl %eax, 0(%esp)
  7091. movl -8(%ebp), %eax
  7092. movl %eax, 4(%esp)
  7093. movl $0, %eax
  7094. movl %eax, 8(%esp)
  7095. call block_statement
  7096. addl $12, %esp
  7097. movl %eax, -12(%ebp)
  7098. subl $8, %esp
  7099. movl -4(%ebp), %eax
  7100. movl %eax, 0(%esp)
  7101. movl -12(%ebp), %eax
  7102. movl %eax, 4(%esp)
  7103. call vector_push
  7104. addl $8, %esp
  7105. subl $4, %esp
  7106. movl 8(%ebp), %eax
  7107. movl %eax, 0(%esp)
  7108. call parser_lex
  7109. addl $4, %esp
  7110. movl %eax, -8(%ebp)
  7111. movl -8(%ebp), %eax
  7112. movl %eax, %edx
  7113. movl $271, %eax
  7114. cmpl %eax, %edx
  7115. setne %al
  7116. movzbl %al, %eax
  7117. cmpl $0, %eax
  7118. je _label190
  7119. subl $4, %esp
  7120. movl 8(%ebp), %eax
  7121. movl %eax, 0(%esp)
  7122. call parser_lexer_hold
  7123. addl $4, %esp
  7124. movl $if_statement_end, %eax
  7125. jmp *%eax
  7126. _label190:
  7127. subl $4, %esp
  7128. movl 8(%ebp), %eax
  7129. movl %eax, 0(%esp)
  7130. call parser_lex
  7131. addl $4, %esp
  7132. movl %eax, -8(%ebp)
  7133. movl -8(%ebp), %eax
  7134. movl %eax, %edx
  7135. movl $270, %eax
  7136. cmpl %eax, %edx
  7137. sete %al
  7138. movzbl %al, %eax
  7139. cmpl $0, %eax
  7140. je _label191
  7141. movl $if_statement_parse, %eax
  7142. jmp *%eax
  7143. _label191:
  7144. subl $12, %esp
  7145. movl 8(%ebp), %eax
  7146. movl %eax, 0(%esp)
  7147. movl -8(%ebp), %eax
  7148. movl %eax, 4(%esp)
  7149. movl $0, %eax
  7150. movl %eax, 8(%esp)
  7151. call block_statement
  7152. addl $12, %esp
  7153. movl %eax, -12(%ebp)
  7154. subl $8, %esp
  7155. movl -4(%ebp), %eax
  7156. movl %eax, 0(%esp)
  7157. movl -12(%ebp), %eax
  7158. movl %eax, 4(%esp)
  7159. call vector_push
  7160. addl $8, %esp
  7161. subl $4, %esp
  7162. movl 8(%ebp), %eax
  7163. movl %eax, 0(%esp)
  7164. call parser_lex
  7165. addl $4, %esp
  7166. movl %eax, -8(%ebp)
  7167. movl -8(%ebp), %eax
  7168. movl %eax, %edx
  7169. movl $271, %eax
  7170. cmpl %eax, %edx
  7171. sete %al
  7172. movzbl %al, %eax
  7173. cmpl $0, %eax
  7174. je _label192
  7175. movl $if_statement_else_invalid, %eax
  7176. jmp *%eax
  7177. _label192:
  7178. subl $4, %esp
  7179. movl 8(%ebp), %eax
  7180. movl %eax, 0(%esp)
  7181. call parser_lexer_hold
  7182. addl $4, %esp
  7183. if_statement_end:
  7184. subl $12, %esp
  7185. movl $49, %eax
  7186. movl %eax, 0(%esp)
  7187. movl 12(%ebp), %eax
  7188. movl %eax, 4(%esp)
  7189. movl -4(%ebp), %eax
  7190. movl %eax, 8(%esp)
  7191. call tuple3
  7192. addl $12, %esp
  7193. leave
  7194. ret
  7195. if_statement_invalid:
  7196. subl $12, %esp
  7197. movl 8(%ebp), %eax
  7198. movl %eax, 0(%esp)
  7199. movl 12(%ebp), %eax
  7200. movl %eax, 4(%esp)
  7201. movl $strbuf+1210, %eax
  7202. movl %eax, 8(%esp)
  7203. call parser_error
  7204. addl $12, %esp
  7205. if_statement_else_invalid:
  7206. subl $12, %esp
  7207. movl 8(%ebp), %eax
  7208. movl %eax, 0(%esp)
  7209. movl 12(%ebp), %eax
  7210. movl %eax, 4(%esp)
  7211. movl $strbuf+1238, %eax
  7212. movl %eax, 8(%esp)
  7213. call parser_error
  7214. addl $12, %esp
  7215. leave
  7216. ret
  7217. for_statement:
  7218. pushl %ebp
  7219. movl %esp, %ebp
  7220. subl $24, %esp
  7221. subl $8, %esp
  7222. movl $0, %eax
  7223. movl %eax, 0(%esp)
  7224. movl $1, %eax
  7225. movl %eax, 4(%esp)
  7226. call vector
  7227. addl $8, %esp
  7228. movl %eax, -16(%ebp)
  7229. subl $4, %esp
  7230. movl 8(%ebp), %eax
  7231. movl %eax, 0(%esp)
  7232. call parser_lex
  7233. addl $4, %esp
  7234. movl %eax, -4(%ebp)
  7235. movl -4(%ebp), %eax
  7236. movl %eax, %edx
  7237. movl $40, %eax
  7238. cmpl %eax, %edx
  7239. setne %al
  7240. movzbl %al, %eax
  7241. cmpl $0, %eax
  7242. je _label193
  7243. movl $for_statement_invalid, %eax
  7244. jmp *%eax
  7245. _label193:
  7246. subl $4, %esp
  7247. movl 8(%ebp), %eax
  7248. movl %eax, 0(%esp)
  7249. call parser_lex
  7250. addl $4, %esp
  7251. movl %eax, -4(%ebp)
  7252. movl -4(%ebp), %eax
  7253. movl %eax, %edx
  7254. movl $59, %eax
  7255. cmpl %eax, %edx
  7256. sete %al
  7257. movzbl %al, %eax
  7258. cmpl $0, %eax
  7259. je _label194
  7260. movl $0, %eax
  7261. movl %eax, -8(%ebp)
  7262. movl $for_statement_skip_init, %eax
  7263. jmp *%eax
  7264. _label194:
  7265. subl $8, %esp
  7266. movl 8(%ebp), %eax
  7267. movl %eax, 0(%esp)
  7268. movl -4(%ebp), %eax
  7269. movl %eax, 4(%esp)
  7270. call expression
  7271. addl $8, %esp
  7272. movl %eax, -8(%ebp)
  7273. subl $4, %esp
  7274. movl 8(%ebp), %eax
  7275. movl %eax, 0(%esp)
  7276. call parser_lex
  7277. addl $4, %esp
  7278. movl %eax, -4(%ebp)
  7279. movl -4(%ebp), %eax
  7280. movl %eax, %edx
  7281. movl $59, %eax
  7282. cmpl %eax, %edx
  7283. setne %al
  7284. movzbl %al, %eax
  7285. cmpl $0, %eax
  7286. je _label195
  7287. movl $for_statement_invalid, %eax
  7288. jmp *%eax
  7289. _label195:
  7290. for_statement_skip_init:
  7291. subl $4, %esp
  7292. movl 8(%ebp), %eax
  7293. movl %eax, 0(%esp)
  7294. call parser_lex
  7295. addl $4, %esp
  7296. movl %eax, -4(%ebp)
  7297. movl -4(%ebp), %eax
  7298. movl %eax, %edx
  7299. movl $59, %eax
  7300. cmpl %eax, %edx
  7301. sete %al
  7302. movzbl %al, %eax
  7303. cmpl $0, %eax
  7304. je _label196
  7305. movl $0, %eax
  7306. movl %eax, -12(%ebp)
  7307. movl $for_statement_skip_cond, %eax
  7308. jmp *%eax
  7309. _label196:
  7310. subl $8, %esp
  7311. movl 8(%ebp), %eax
  7312. movl %eax, 0(%esp)
  7313. movl -4(%ebp), %eax
  7314. movl %eax, 4(%esp)
  7315. call expression
  7316. addl $8, %esp
  7317. movl %eax, -12(%ebp)
  7318. subl $4, %esp
  7319. movl 8(%ebp), %eax
  7320. movl %eax, 0(%esp)
  7321. call parser_lex
  7322. addl $4, %esp
  7323. movl %eax, -4(%ebp)
  7324. movl -4(%ebp), %eax
  7325. movl %eax, %edx
  7326. movl $59, %eax
  7327. cmpl %eax, %edx
  7328. setne %al
  7329. movzbl %al, %eax
  7330. cmpl $0, %eax
  7331. je _label197
  7332. movl $for_statement_invalid, %eax
  7333. jmp *%eax
  7334. _label197:
  7335. for_statement_skip_cond:
  7336. subl $4, %esp
  7337. movl 8(%ebp), %eax
  7338. movl %eax, 0(%esp)
  7339. call parser_lex
  7340. addl $4, %esp
  7341. movl %eax, -4(%ebp)
  7342. movl -4(%ebp), %eax
  7343. movl %eax, %edx
  7344. movl $41, %eax
  7345. cmpl %eax, %edx
  7346. sete %al
  7347. movzbl %al, %eax
  7348. cmpl $0, %eax
  7349. je _label198
  7350. movl $for_statement_iter_end, %eax
  7351. jmp *%eax
  7352. _label198:
  7353. subl $4, %esp
  7354. movl 8(%ebp), %eax
  7355. movl %eax, 0(%esp)
  7356. call parser_lexer_hold
  7357. addl $4, %esp
  7358. for_statement_iter_loop:
  7359. subl $4, %esp
  7360. movl 8(%ebp), %eax
  7361. movl %eax, 0(%esp)
  7362. call parser_lex
  7363. addl $4, %esp
  7364. movl %eax, -4(%ebp)
  7365. movl -4(%ebp), %eax
  7366. movl %eax, %edx
  7367. movl $41, %eax
  7368. cmpl %eax, %edx
  7369. sete %al
  7370. movzbl %al, %eax
  7371. cmpl $0, %eax
  7372. je _label199
  7373. movl $for_statement_invalid, %eax
  7374. jmp *%eax
  7375. _label199:
  7376. subl $8, %esp
  7377. movl 8(%ebp), %eax
  7378. movl %eax, 0(%esp)
  7379. movl -4(%ebp), %eax
  7380. movl %eax, 4(%esp)
  7381. call expression
  7382. addl $8, %esp
  7383. movl %eax, -24(%ebp)
  7384. subl $8, %esp
  7385. movl -16(%ebp), %eax
  7386. movl %eax, 0(%esp)
  7387. movl -24(%ebp), %eax
  7388. movl %eax, 4(%esp)
  7389. call vector_push
  7390. addl $8, %esp
  7391. subl $4, %esp
  7392. movl 8(%ebp), %eax
  7393. movl %eax, 0(%esp)
  7394. call parser_lex
  7395. addl $4, %esp
  7396. movl %eax, -4(%ebp)
  7397. movl -4(%ebp), %eax
  7398. movl %eax, %edx
  7399. movl $44, %eax
  7400. cmpl %eax, %edx
  7401. sete %al
  7402. movzbl %al, %eax
  7403. cmpl $0, %eax
  7404. je _label200
  7405. movl $for_statement_iter_loop, %eax
  7406. jmp *%eax
  7407. _label200:
  7408. for_statement_iter_end:
  7409. movl -4(%ebp), %eax
  7410. movl %eax, %edx
  7411. movl $41, %eax
  7412. cmpl %eax, %edx
  7413. setne %al
  7414. movzbl %al, %eax
  7415. cmpl $0, %eax
  7416. je _label201
  7417. movl $for_statement_invalid, %eax
  7418. jmp *%eax
  7419. _label201:
  7420. subl $4, %esp
  7421. movl 8(%ebp), %eax
  7422. movl %eax, 0(%esp)
  7423. call parser_lex
  7424. addl $4, %esp
  7425. movl %eax, -4(%ebp)
  7426. subl $12, %esp
  7427. movl 8(%ebp), %eax
  7428. movl %eax, 0(%esp)
  7429. movl -4(%ebp), %eax
  7430. movl %eax, 4(%esp)
  7431. movl $0, %eax
  7432. movl %eax, 8(%esp)
  7433. call block_statement
  7434. addl $12, %esp
  7435. movl %eax, -20(%ebp)
  7436. subl $24, %esp
  7437. movl $50, %eax
  7438. movl %eax, 0(%esp)
  7439. movl 12(%ebp), %eax
  7440. movl %eax, 4(%esp)
  7441. movl -8(%ebp), %eax
  7442. movl %eax, 8(%esp)
  7443. movl -12(%ebp), %eax
  7444. movl %eax, 12(%esp)
  7445. movl -16(%ebp), %eax
  7446. movl %eax, 16(%esp)
  7447. movl -20(%ebp), %eax
  7448. movl %eax, 20(%esp)
  7449. call tuple6
  7450. addl $24, %esp
  7451. leave
  7452. ret
  7453. for_statement_invalid:
  7454. subl $12, %esp
  7455. movl 8(%ebp), %eax
  7456. movl %eax, 0(%esp)
  7457. movl 12(%ebp), %eax
  7458. movl %eax, 4(%esp)
  7459. movl $strbuf+1296, %eax
  7460. movl %eax, 8(%esp)
  7461. call parser_error
  7462. addl $12, %esp
  7463. leave
  7464. ret
  7465. do_while_statement:
  7466. pushl %ebp
  7467. movl %esp, %ebp
  7468. subl $12, %esp
  7469. subl $4, %esp
  7470. movl 8(%ebp), %eax
  7471. movl %eax, 0(%esp)
  7472. call parser_lex
  7473. addl $4, %esp
  7474. movl %eax, -4(%ebp)
  7475. subl $12, %esp
  7476. movl 8(%ebp), %eax
  7477. movl %eax, 0(%esp)
  7478. movl -4(%ebp), %eax
  7479. movl %eax, 4(%esp)
  7480. movl $0, %eax
  7481. movl %eax, 8(%esp)
  7482. call block_statement
  7483. addl $12, %esp
  7484. movl %eax, -12(%ebp)
  7485. subl $4, %esp
  7486. movl 8(%ebp), %eax
  7487. movl %eax, 0(%esp)
  7488. call parser_lex
  7489. addl $4, %esp
  7490. movl %eax, -4(%ebp)
  7491. movl -4(%ebp), %eax
  7492. movl %eax, %edx
  7493. movl $276, %eax
  7494. cmpl %eax, %edx
  7495. setne %al
  7496. movzbl %al, %eax
  7497. cmpl $0, %eax
  7498. je _label202
  7499. movl $do_while_statement_invalid, %eax
  7500. jmp *%eax
  7501. _label202:
  7502. subl $4, %esp
  7503. movl 8(%ebp), %eax
  7504. movl %eax, 0(%esp)
  7505. call parser_lex
  7506. addl $4, %esp
  7507. movl %eax, -4(%ebp)
  7508. movl -4(%ebp), %eax
  7509. movl %eax, %edx
  7510. movl $40, %eax
  7511. cmpl %eax, %edx
  7512. setne %al
  7513. movzbl %al, %eax
  7514. cmpl $0, %eax
  7515. je _label203
  7516. movl $do_while_statement_invalid, %eax
  7517. jmp *%eax
  7518. _label203:
  7519. subl $4, %esp
  7520. movl 8(%ebp), %eax
  7521. movl %eax, 0(%esp)
  7522. call parser_lex
  7523. addl $4, %esp
  7524. movl %eax, -4(%ebp)
  7525. subl $8, %esp
  7526. movl 8(%ebp), %eax
  7527. movl %eax, 0(%esp)
  7528. movl -4(%ebp), %eax
  7529. movl %eax, 4(%esp)
  7530. call expression
  7531. addl $8, %esp
  7532. movl %eax, -8(%ebp)
  7533. subl $4, %esp
  7534. movl 8(%ebp), %eax
  7535. movl %eax, 0(%esp)
  7536. call parser_lex
  7537. addl $4, %esp
  7538. movl %eax, -4(%ebp)
  7539. movl -4(%ebp), %eax
  7540. movl %eax, %edx
  7541. movl $41, %eax
  7542. cmpl %eax, %edx
  7543. setne %al
  7544. movzbl %al, %eax
  7545. cmpl $0, %eax
  7546. je _label204
  7547. movl $do_while_statement_invalid, %eax
  7548. jmp *%eax
  7549. _label204:
  7550. subl $4, %esp
  7551. movl 8(%ebp), %eax
  7552. movl %eax, 0(%esp)
  7553. call parser_lex
  7554. addl $4, %esp
  7555. movl %eax, -4(%ebp)
  7556. movl -4(%ebp), %eax
  7557. movl %eax, %edx
  7558. movl $59, %eax
  7559. cmpl %eax, %edx
  7560. setne %al
  7561. movzbl %al, %eax
  7562. cmpl $0, %eax
  7563. je _label205
  7564. movl $do_while_statement_end_error, %eax
  7565. jmp *%eax
  7566. _label205:
  7567. subl $16, %esp
  7568. movl $51, %eax
  7569. movl %eax, 0(%esp)
  7570. movl 12(%ebp), %eax
  7571. movl %eax, 4(%esp)
  7572. movl -8(%ebp), %eax
  7573. movl %eax, 8(%esp)
  7574. movl -12(%ebp), %eax
  7575. movl %eax, 12(%esp)
  7576. call tuple4
  7577. addl $16, %esp
  7578. leave
  7579. ret
  7580. do_while_statement_invalid:
  7581. subl $12, %esp
  7582. movl 8(%ebp), %eax
  7583. movl %eax, 0(%esp)
  7584. movl 12(%ebp), %eax
  7585. movl %eax, 4(%esp)
  7586. movl $strbuf+1325, %eax
  7587. movl %eax, 8(%esp)
  7588. call parser_error
  7589. addl $12, %esp
  7590. do_while_statement_end_error:
  7591. subl $12, %esp
  7592. movl 8(%ebp), %eax
  7593. movl %eax, 0(%esp)
  7594. movl 12(%ebp), %eax
  7595. movl %eax, 4(%esp)
  7596. movl $strbuf+1359, %eax
  7597. movl %eax, 8(%esp)
  7598. call parser_error
  7599. addl $12, %esp
  7600. leave
  7601. ret
  7602. while_statement:
  7603. pushl %ebp
  7604. movl %esp, %ebp
  7605. subl $12, %esp
  7606. subl $4, %esp
  7607. movl 8(%ebp), %eax
  7608. movl %eax, 0(%esp)
  7609. call parser_lex
  7610. addl $4, %esp
  7611. movl %eax, -4(%ebp)
  7612. movl -4(%ebp), %eax
  7613. movl %eax, %edx
  7614. movl $40, %eax
  7615. cmpl %eax, %edx
  7616. setne %al
  7617. movzbl %al, %eax
  7618. cmpl $0, %eax
  7619. je _label206
  7620. movl $while_statement_invalid, %eax
  7621. jmp *%eax
  7622. _label206:
  7623. subl $4, %esp
  7624. movl 8(%ebp), %eax
  7625. movl %eax, 0(%esp)
  7626. call parser_lex
  7627. addl $4, %esp
  7628. movl %eax, -4(%ebp)
  7629. subl $8, %esp
  7630. movl 8(%ebp), %eax
  7631. movl %eax, 0(%esp)
  7632. movl -4(%ebp), %eax
  7633. movl %eax, 4(%esp)
  7634. call expression
  7635. addl $8, %esp
  7636. movl %eax, -8(%ebp)
  7637. subl $4, %esp
  7638. movl 8(%ebp), %eax
  7639. movl %eax, 0(%esp)
  7640. call parser_lex
  7641. addl $4, %esp
  7642. movl %eax, -4(%ebp)
  7643. movl -4(%ebp), %eax
  7644. movl %eax, %edx
  7645. movl $41, %eax
  7646. cmpl %eax, %edx
  7647. setne %al
  7648. movzbl %al, %eax
  7649. cmpl $0, %eax
  7650. je _label207
  7651. movl $while_statement_invalid, %eax
  7652. jmp *%eax
  7653. _label207:
  7654. subl $4, %esp
  7655. movl 8(%ebp), %eax
  7656. movl %eax, 0(%esp)
  7657. call parser_lex
  7658. addl $4, %esp
  7659. movl %eax, -4(%ebp)
  7660. subl $12, %esp
  7661. movl 8(%ebp), %eax
  7662. movl %eax, 0(%esp)
  7663. movl -4(%ebp), %eax
  7664. movl %eax, 4(%esp)
  7665. movl $0, %eax
  7666. movl %eax, 8(%esp)
  7667. call block_statement
  7668. addl $12, %esp
  7669. movl %eax, -12(%ebp)
  7670. subl $16, %esp
  7671. movl $52, %eax
  7672. movl %eax, 0(%esp)
  7673. movl 12(%ebp), %eax
  7674. movl %eax, 4(%esp)
  7675. movl -8(%ebp), %eax
  7676. movl %eax, 8(%esp)
  7677. movl -12(%ebp), %eax
  7678. movl %eax, 12(%esp)
  7679. call tuple4
  7680. addl $16, %esp
  7681. leave
  7682. ret
  7683. while_statement_invalid:
  7684. subl $12, %esp
  7685. movl 8(%ebp), %eax
  7686. movl %eax, 0(%esp)
  7687. movl 12(%ebp), %eax
  7688. movl %eax, 4(%esp)
  7689. movl $strbuf+1406, %eax
  7690. movl %eax, 8(%esp)
  7691. call parser_error
  7692. addl $12, %esp
  7693. leave
  7694. ret
  7695. allocate_statement:
  7696. pushl %ebp
  7697. movl %esp, %ebp
  7698. subl $8, %esp
  7699. subl $4, %esp
  7700. movl 8(%ebp), %eax
  7701. movl %eax, 0(%esp)
  7702. call parser_lex
  7703. addl $4, %esp
  7704. movl %eax, -4(%ebp)
  7705. movl -4(%ebp), %eax
  7706. movl %eax, %edx
  7707. movl $40, %eax
  7708. cmpl %eax, %edx
  7709. setne %al
  7710. movzbl %al, %eax
  7711. cmpl $0, %eax
  7712. je _label208
  7713. movl $allocate_statement_invalid, %eax
  7714. jmp *%eax
  7715. _label208:
  7716. subl $4, %esp
  7717. movl 8(%ebp), %eax
  7718. movl %eax, 0(%esp)
  7719. call parser_lex
  7720. addl $4, %esp
  7721. movl %eax, -4(%ebp)
  7722. subl $8, %esp
  7723. movl 8(%ebp), %eax
  7724. movl %eax, 0(%esp)
  7725. movl -4(%ebp), %eax
  7726. movl %eax, 4(%esp)
  7727. call expression
  7728. addl $8, %esp
  7729. movl %eax, -8(%ebp)
  7730. subl $4, %esp
  7731. movl 8(%ebp), %eax
  7732. movl %eax, 0(%esp)
  7733. call parser_lex
  7734. addl $4, %esp
  7735. movl %eax, -4(%ebp)
  7736. movl -4(%ebp), %eax
  7737. movl %eax, %edx
  7738. movl $41, %eax
  7739. cmpl %eax, %edx
  7740. setne %al
  7741. movzbl %al, %eax
  7742. cmpl $0, %eax
  7743. je _label209
  7744. movl $allocate_statement_invalid, %eax
  7745. jmp *%eax
  7746. _label209:
  7747. subl $4, %esp
  7748. movl 8(%ebp), %eax
  7749. movl %eax, 0(%esp)
  7750. call parser_lex
  7751. addl $4, %esp
  7752. movl %eax, -4(%ebp)
  7753. movl -4(%ebp), %eax
  7754. movl %eax, %edx
  7755. movl $59, %eax
  7756. cmpl %eax, %edx
  7757. setne %al
  7758. movzbl %al, %eax
  7759. cmpl $0, %eax
  7760. je _label210
  7761. movl $loop_jump_statement_end_error, %eax
  7762. jmp *%eax
  7763. _label210:
  7764. subl $12, %esp
  7765. movl $53, %eax
  7766. movl %eax, 0(%esp)
  7767. movl 12(%ebp), %eax
  7768. movl %eax, 4(%esp)
  7769. movl -8(%ebp), %eax
  7770. movl %eax, 8(%esp)
  7771. call tuple3
  7772. addl $12, %esp
  7773. leave
  7774. ret
  7775. allocate_statement_invalid:
  7776. subl $12, %esp
  7777. movl 8(%ebp), %eax
  7778. movl %eax, 0(%esp)
  7779. movl 12(%ebp), %eax
  7780. movl %eax, 4(%esp)
  7781. movl $strbuf+1437, %eax
  7782. movl %eax, 8(%esp)
  7783. call parser_error
  7784. addl $12, %esp
  7785. allocate_statement_end_error:
  7786. subl $12, %esp
  7787. movl 8(%ebp), %eax
  7788. movl %eax, 0(%esp)
  7789. movl 12(%ebp), %eax
  7790. movl %eax, 4(%esp)
  7791. movl $strbuf+1471, %eax
  7792. movl %eax, 8(%esp)
  7793. call parser_error
  7794. addl $12, %esp
  7795. leave
  7796. ret
  7797. assembly_statement:
  7798. pushl %ebp
  7799. movl %esp, %ebp
  7800. subl $12, %esp
  7801. subl $8, %esp
  7802. movl $0, %eax
  7803. movl %eax, 0(%esp)
  7804. movl $1, %eax
  7805. movl %eax, 4(%esp)
  7806. call vector
  7807. addl $8, %esp
  7808. movl %eax, -4(%ebp)
  7809. subl $4, %esp
  7810. movl 8(%ebp), %eax
  7811. movl %eax, 0(%esp)
  7812. call parser_lex
  7813. addl $4, %esp
  7814. movl %eax, -8(%ebp)
  7815. movl -8(%ebp), %eax
  7816. movl %eax, %edx
  7817. movl $123, %eax
  7818. cmpl %eax, %edx
  7819. setne %al
  7820. movzbl %al, %eax
  7821. cmpl $0, %eax
  7822. je _label211
  7823. movl $assembly_statement_invalid, %eax
  7824. jmp *%eax
  7825. _label211:
  7826. assembly_statement_loop:
  7827. subl $4, %esp
  7828. movl 8(%ebp), %eax
  7829. movl %eax, 0(%esp)
  7830. call parser_lex_asm
  7831. addl $4, %esp
  7832. movl %eax, -12(%ebp)
  7833. subl $4, %esp
  7834. pushl %ebx
  7835. pushl %ecx
  7836. pushl %edx
  7837. pushl %esi
  7838. pushl %edi
  7839. subl $4, %esp
  7840. pushl %ebx
  7841. pushl %ecx
  7842. pushl %edx
  7843. pushl %esi
  7844. pushl %edi
  7845. subl $4, %esp
  7846. movl 8(%ebp), %eax
  7847. movl %eax, 0(%esp)
  7848. call parser_lexer
  7849. addl $4, %esp
  7850. popl %edi
  7851. popl %esi
  7852. popl %edx
  7853. popl %ecx
  7854. popl %ebx
  7855. movl %eax, 0(%esp)
  7856. call lexer_token_text
  7857. addl $4, %esp
  7858. popl %edi
  7859. popl %esi
  7860. popl %edx
  7861. popl %ecx
  7862. popl %ebx
  7863. movl %eax, 0(%esp)
  7864. call strdup
  7865. addl $4, %esp
  7866. movl %eax, -8(%ebp)
  7867. subl $8, %esp
  7868. movl -4(%ebp), %eax
  7869. movl %eax, 0(%esp)
  7870. movl -8(%ebp), %eax
  7871. movl %eax, 4(%esp)
  7872. call vector_push
  7873. addl $8, %esp
  7874. subl $4, %esp
  7875. movl 8(%ebp), %eax
  7876. movl %eax, 0(%esp)
  7877. call parser_lex
  7878. addl $4, %esp
  7879. movl %eax, -8(%ebp)
  7880. movl -8(%ebp), %eax
  7881. movl %eax, %edx
  7882. movl $59, %eax
  7883. cmpl %eax, %edx
  7884. setne %al
  7885. movzbl %al, %eax
  7886. cmpl $0, %eax
  7887. je _label212
  7888. movl $assembly_statement_invalid, %eax
  7889. jmp *%eax
  7890. _label212:
  7891. movl -12(%ebp), %eax
  7892. cmpl $0, %eax
  7893. sete %al
  7894. movzbl %al, %eax
  7895. cmpl $0, %eax
  7896. je _label213
  7897. movl $assembly_statement_loop, %eax
  7898. jmp *%eax
  7899. _label213:
  7900. subl $4, %esp
  7901. movl 8(%ebp), %eax
  7902. movl %eax, 0(%esp)
  7903. call parser_lex
  7904. addl $4, %esp
  7905. movl %eax, -8(%ebp)
  7906. movl -8(%ebp), %eax
  7907. movl %eax, %edx
  7908. movl $125, %eax
  7909. cmpl %eax, %edx
  7910. setne %al
  7911. movzbl %al, %eax
  7912. cmpl $0, %eax
  7913. je _label214
  7914. movl $assembly_statement_invalid, %eax
  7915. jmp *%eax
  7916. _label214:
  7917. subl $12, %esp
  7918. movl $54, %eax
  7919. movl %eax, 0(%esp)
  7920. movl 12(%ebp), %eax
  7921. movl %eax, 4(%esp)
  7922. movl -4(%ebp), %eax
  7923. movl %eax, 8(%esp)
  7924. call tuple3
  7925. addl $12, %esp
  7926. leave
  7927. ret
  7928. assembly_statement_invalid:
  7929. subl $12, %esp
  7930. movl 8(%ebp), %eax
  7931. movl %eax, 0(%esp)
  7932. movl 12(%ebp), %eax
  7933. movl %eax, 4(%esp)
  7934. movl $strbuf+1518, %eax
  7935. movl %eax, 8(%esp)
  7936. call parser_error
  7937. addl $12, %esp
  7938. leave
  7939. ret
  7940. return_statement:
  7941. pushl %ebp
  7942. movl %esp, %ebp
  7943. subl $12, %esp
  7944. subl $8, %esp
  7945. movl $0, %eax
  7946. movl %eax, 0(%esp)
  7947. movl $1, %eax
  7948. movl %eax, 4(%esp)
  7949. call vector
  7950. addl $8, %esp
  7951. movl %eax, -4(%ebp)
  7952. subl $4, %esp
  7953. movl 8(%ebp), %eax
  7954. movl %eax, 0(%esp)
  7955. call parser_lex
  7956. addl $4, %esp
  7957. movl %eax, -8(%ebp)
  7958. movl -8(%ebp), %eax
  7959. movl %eax, %edx
  7960. movl $59, %eax
  7961. cmpl %eax, %edx
  7962. sete %al
  7963. movzbl %al, %eax
  7964. cmpl $0, %eax
  7965. je _label215
  7966. subl $4, %esp
  7967. movl 8(%ebp), %eax
  7968. movl %eax, 0(%esp)
  7969. call parser_lexer_hold
  7970. addl $4, %esp
  7971. movl $return_statement_end, %eax
  7972. jmp *%eax
  7973. _label215:
  7974. subl $8, %esp
  7975. movl 8(%ebp), %eax
  7976. movl %eax, 0(%esp)
  7977. movl -8(%ebp), %eax
  7978. movl %eax, 4(%esp)
  7979. call expression
  7980. addl $8, %esp
  7981. movl %eax, -12(%ebp)
  7982. subl $8, %esp
  7983. movl -4(%ebp), %eax
  7984. movl %eax, 0(%esp)
  7985. movl -12(%ebp), %eax
  7986. movl %eax, 4(%esp)
  7987. call vector_push
  7988. addl $8, %esp
  7989. return_statement_end:
  7990. subl $4, %esp
  7991. movl 8(%ebp), %eax
  7992. movl %eax, 0(%esp)
  7993. call parser_lex
  7994. addl $4, %esp
  7995. movl %eax, -8(%ebp)
  7996. movl -8(%ebp), %eax
  7997. movl %eax, %edx
  7998. movl $59, %eax
  7999. cmpl %eax, %edx
  8000. setne %al
  8001. movzbl %al, %eax
  8002. cmpl $0, %eax
  8003. je _label216
  8004. movl $return_statement_end_error, %eax
  8005. jmp *%eax
  8006. _label216:
  8007. subl $12, %esp
  8008. movl $55, %eax
  8009. movl %eax, 0(%esp)
  8010. movl 12(%ebp), %eax
  8011. movl %eax, 4(%esp)
  8012. movl -4(%ebp), %eax
  8013. movl %eax, 8(%esp)
  8014. call tuple3
  8015. addl $12, %esp
  8016. leave
  8017. ret
  8018. return_statement_end_error:
  8019. subl $12, %esp
  8020. movl 8(%ebp), %eax
  8021. movl %eax, 0(%esp)
  8022. movl 12(%ebp), %eax
  8023. movl %eax, 4(%esp)
  8024. movl $strbuf+1552, %eax
  8025. movl %eax, 8(%esp)
  8026. call parser_error
  8027. addl $12, %esp
  8028. leave
  8029. ret
  8030. loop_jump_statement:
  8031. pushl %ebp
  8032. movl %esp, %ebp
  8033. subl $4, %esp
  8034. subl $4, %esp
  8035. movl 8(%ebp), %eax
  8036. movl %eax, 0(%esp)
  8037. call parser_lex
  8038. addl $4, %esp
  8039. movl %eax, -4(%ebp)
  8040. movl -4(%ebp), %eax
  8041. movl %eax, %edx
  8042. movl $59, %eax
  8043. cmpl %eax, %edx
  8044. setne %al
  8045. movzbl %al, %eax
  8046. cmpl $0, %eax
  8047. je _label217
  8048. movl $loop_jump_statement_end_error, %eax
  8049. jmp *%eax
  8050. _label217:
  8051. subl $8, %esp
  8052. movl $56, %eax
  8053. pushl %ebx
  8054. movl %eax, %ebx
  8055. movl 16(%ebp), %eax
  8056. addl %ebx, %eax
  8057. popl %ebx
  8058. pushl %ebx
  8059. pushl %eax
  8060. movl $272, %eax
  8061. movl %eax, %ebx
  8062. popl %eax
  8063. subl %ebx, %eax
  8064. popl %ebx
  8065. movl %eax, 0(%esp)
  8066. movl 12(%ebp), %eax
  8067. movl %eax, 4(%esp)
  8068. call tuple2
  8069. addl $8, %esp
  8070. leave
  8071. ret
  8072. loop_jump_statement_end_error:
  8073. subl $12, %esp
  8074. movl 8(%ebp), %eax
  8075. movl %eax, 0(%esp)
  8076. movl 12(%ebp), %eax
  8077. movl %eax, 4(%esp)
  8078. movl $strbuf+1597, %eax
  8079. movl %eax, 8(%esp)
  8080. call parser_error
  8081. addl $12, %esp
  8082. leave
  8083. ret
  8084. writechar_statement:
  8085. pushl %ebp
  8086. movl %esp, %ebp
  8087. subl $16, %esp
  8088. subl $4, %esp
  8089. movl 8(%ebp), %eax
  8090. movl %eax, 0(%esp)
  8091. call parser_lex
  8092. addl $4, %esp
  8093. movl %eax, -4(%ebp)
  8094. movl -4(%ebp), %eax
  8095. movl %eax, %edx
  8096. movl $40, %eax
  8097. cmpl %eax, %edx
  8098. setne %al
  8099. movzbl %al, %eax
  8100. cmpl $0, %eax
  8101. je _label218
  8102. movl $writechar_statement_invalid, %eax
  8103. jmp *%eax
  8104. _label218:
  8105. subl $4, %esp
  8106. movl 8(%ebp), %eax
  8107. movl %eax, 0(%esp)
  8108. call parser_lex
  8109. addl $4, %esp
  8110. movl %eax, -4(%ebp)
  8111. subl $8, %esp
  8112. movl 8(%ebp), %eax
  8113. movl %eax, 0(%esp)
  8114. movl -4(%ebp), %eax
  8115. movl %eax, 4(%esp)
  8116. call expression
  8117. addl $8, %esp
  8118. movl %eax, -8(%ebp)
  8119. subl $4, %esp
  8120. movl 8(%ebp), %eax
  8121. movl %eax, 0(%esp)
  8122. call parser_lex
  8123. addl $4, %esp
  8124. movl %eax, -4(%ebp)
  8125. movl -4(%ebp), %eax
  8126. movl %eax, %edx
  8127. movl $44, %eax
  8128. cmpl %eax, %edx
  8129. setne %al
  8130. movzbl %al, %eax
  8131. cmpl $0, %eax
  8132. je _label219
  8133. movl $writechar_statement_invalid, %eax
  8134. jmp *%eax
  8135. _label219:
  8136. subl $4, %esp
  8137. movl 8(%ebp), %eax
  8138. movl %eax, 0(%esp)
  8139. call parser_lex
  8140. addl $4, %esp
  8141. movl %eax, -4(%ebp)
  8142. subl $8, %esp
  8143. movl 8(%ebp), %eax
  8144. movl %eax, 0(%esp)
  8145. movl -4(%ebp), %eax
  8146. movl %eax, 4(%esp)
  8147. call expression
  8148. addl $8, %esp
  8149. movl %eax, -12(%ebp)
  8150. subl $4, %esp
  8151. movl 8(%ebp), %eax
  8152. movl %eax, 0(%esp)
  8153. call parser_lex
  8154. addl $4, %esp
  8155. movl %eax, -4(%ebp)
  8156. movl -4(%ebp), %eax
  8157. movl %eax, %edx
  8158. movl $44, %eax
  8159. cmpl %eax, %edx
  8160. setne %al
  8161. movzbl %al, %eax
  8162. cmpl $0, %eax
  8163. je _label220
  8164. movl $writechar_statement_invalid, %eax
  8165. jmp *%eax
  8166. _label220:
  8167. subl $4, %esp
  8168. movl 8(%ebp), %eax
  8169. movl %eax, 0(%esp)
  8170. call parser_lex
  8171. addl $4, %esp
  8172. movl %eax, -4(%ebp)
  8173. subl $8, %esp
  8174. movl 8(%ebp), %eax
  8175. movl %eax, 0(%esp)
  8176. movl -4(%ebp), %eax
  8177. movl %eax, 4(%esp)
  8178. call expression
  8179. addl $8, %esp
  8180. movl %eax, -16(%ebp)
  8181. subl $4, %esp
  8182. movl 8(%ebp), %eax
  8183. movl %eax, 0(%esp)
  8184. call parser_lex
  8185. addl $4, %esp
  8186. movl %eax, -4(%ebp)
  8187. movl -4(%ebp), %eax
  8188. movl %eax, %edx
  8189. movl $41, %eax
  8190. cmpl %eax, %edx
  8191. setne %al
  8192. movzbl %al, %eax
  8193. cmpl $0, %eax
  8194. je _label221
  8195. movl $writechar_statement_invalid, %eax
  8196. jmp *%eax
  8197. _label221:
  8198. subl $4, %esp
  8199. movl 8(%ebp), %eax
  8200. movl %eax, 0(%esp)
  8201. call parser_lex
  8202. addl $4, %esp
  8203. movl %eax, -4(%ebp)
  8204. movl -4(%ebp), %eax
  8205. movl %eax, %edx
  8206. movl $59, %eax
  8207. cmpl %eax, %edx
  8208. setne %al
  8209. movzbl %al, %eax
  8210. cmpl $0, %eax
  8211. je _label222
  8212. movl $writechar_statement_end_error, %eax
  8213. jmp *%eax
  8214. _label222:
  8215. subl $20, %esp
  8216. movl $58, %eax
  8217. movl %eax, 0(%esp)
  8218. movl 12(%ebp), %eax
  8219. movl %eax, 4(%esp)
  8220. movl -8(%ebp), %eax
  8221. movl %eax, 8(%esp)
  8222. movl -12(%ebp), %eax
  8223. movl %eax, 12(%esp)
  8224. movl -16(%ebp), %eax
  8225. movl %eax, 16(%esp)
  8226. call tuple5
  8227. addl $20, %esp
  8228. leave
  8229. ret
  8230. writechar_statement_invalid:
  8231. subl $12, %esp
  8232. movl 8(%ebp), %eax
  8233. movl %eax, 0(%esp)
  8234. movl 12(%ebp), %eax
  8235. movl %eax, 4(%esp)
  8236. movl $strbuf+1650, %eax
  8237. movl %eax, 8(%esp)
  8238. call parser_error
  8239. addl $12, %esp
  8240. writechar_statement_end_error:
  8241. subl $12, %esp
  8242. movl 8(%ebp), %eax
  8243. movl %eax, 0(%esp)
  8244. movl 12(%ebp), %eax
  8245. movl %eax, 4(%esp)
  8246. movl $strbuf+1678, %eax
  8247. movl %eax, 8(%esp)
  8248. call parser_error
  8249. addl $12, %esp
  8250. leave
  8251. ret
  8252. label_statement:
  8253. pushl %ebp
  8254. movl %esp, %ebp
  8255. subl $8, %esp
  8256. subl $4, %esp
  8257. movl 8(%ebp), %eax
  8258. movl %eax, 0(%esp)
  8259. call parser_lex
  8260. addl $4, %esp
  8261. movl %eax, -4(%ebp)
  8262. movl -4(%ebp), %eax
  8263. movl %eax, %edx
  8264. movl $258, %eax
  8265. cmpl %eax, %edx
  8266. setne %al
  8267. movzbl %al, %eax
  8268. cmpl $0, %eax
  8269. je _label223
  8270. movl $label_statement_invalid, %eax
  8271. jmp *%eax
  8272. _label223:
  8273. subl $4, %esp
  8274. pushl %ebx
  8275. pushl %ecx
  8276. pushl %edx
  8277. pushl %esi
  8278. pushl %edi
  8279. subl $4, %esp
  8280. pushl %ebx
  8281. pushl %ecx
  8282. pushl %edx
  8283. pushl %esi
  8284. pushl %edi
  8285. subl $4, %esp
  8286. movl 8(%ebp), %eax
  8287. movl %eax, 0(%esp)
  8288. call parser_lexer
  8289. addl $4, %esp
  8290. popl %edi
  8291. popl %esi
  8292. popl %edx
  8293. popl %ecx
  8294. popl %ebx
  8295. movl %eax, 0(%esp)
  8296. call lexer_token_text
  8297. addl $4, %esp
  8298. popl %edi
  8299. popl %esi
  8300. popl %edx
  8301. popl %ecx
  8302. popl %ebx
  8303. movl %eax, 0(%esp)
  8304. call strdup
  8305. addl $4, %esp
  8306. movl %eax, -8(%ebp)
  8307. subl $4, %esp
  8308. movl 8(%ebp), %eax
  8309. movl %eax, 0(%esp)
  8310. call parser_lex
  8311. addl $4, %esp
  8312. movl %eax, -4(%ebp)
  8313. movl -4(%ebp), %eax
  8314. movl %eax, %edx
  8315. movl $59, %eax
  8316. cmpl %eax, %edx
  8317. setne %al
  8318. movzbl %al, %eax
  8319. cmpl $0, %eax
  8320. je _label224
  8321. movl $label_statement_end_error, %eax
  8322. jmp *%eax
  8323. _label224:
  8324. subl $12, %esp
  8325. movl $59, %eax
  8326. movl %eax, 0(%esp)
  8327. movl 12(%ebp), %eax
  8328. movl %eax, 4(%esp)
  8329. movl -8(%ebp), %eax
  8330. movl %eax, 8(%esp)
  8331. call tuple3
  8332. addl $12, %esp
  8333. leave
  8334. ret
  8335. label_statement_invalid:
  8336. subl $12, %esp
  8337. movl 8(%ebp), %eax
  8338. movl %eax, 0(%esp)
  8339. movl 12(%ebp), %eax
  8340. movl %eax, 4(%esp)
  8341. movl $strbuf+1726, %eax
  8342. movl %eax, 8(%esp)
  8343. call parser_error
  8344. addl $12, %esp
  8345. label_statement_end_error:
  8346. subl $12, %esp
  8347. movl 8(%ebp), %eax
  8348. movl %eax, 0(%esp)
  8349. movl 12(%ebp), %eax
  8350. movl %eax, 4(%esp)
  8351. movl $strbuf+1756, %eax
  8352. movl %eax, 8(%esp)
  8353. call parser_error
  8354. addl $12, %esp
  8355. leave
  8356. ret
  8357. goto_statement:
  8358. pushl %ebp
  8359. movl %esp, %ebp
  8360. subl $8, %esp
  8361. subl $4, %esp
  8362. movl 8(%ebp), %eax
  8363. movl %eax, 0(%esp)
  8364. call parser_lex
  8365. addl $4, %esp
  8366. movl %eax, -4(%ebp)
  8367. subl $8, %esp
  8368. movl 8(%ebp), %eax
  8369. movl %eax, 0(%esp)
  8370. movl -4(%ebp), %eax
  8371. movl %eax, 4(%esp)
  8372. call expression
  8373. addl $8, %esp
  8374. movl %eax, -8(%ebp)
  8375. subl $4, %esp
  8376. movl 8(%ebp), %eax
  8377. movl %eax, 0(%esp)
  8378. call parser_lex
  8379. addl $4, %esp
  8380. movl %eax, -4(%ebp)
  8381. movl -4(%ebp), %eax
  8382. movl %eax, %edx
  8383. movl $59, %eax
  8384. cmpl %eax, %edx
  8385. setne %al
  8386. movzbl %al, %eax
  8387. cmpl $0, %eax
  8388. je _label225
  8389. movl $label_statement_end_error, %eax
  8390. jmp *%eax
  8391. _label225:
  8392. subl $12, %esp
  8393. movl $60, %eax
  8394. movl %eax, 0(%esp)
  8395. movl 12(%ebp), %eax
  8396. movl %eax, 4(%esp)
  8397. movl -8(%ebp), %eax
  8398. movl %eax, 8(%esp)
  8399. call tuple3
  8400. addl $12, %esp
  8401. leave
  8402. ret
  8403. goto_statement_end_error:
  8404. subl $12, %esp
  8405. movl 8(%ebp), %eax
  8406. movl %eax, 0(%esp)
  8407. movl 12(%ebp), %eax
  8408. movl %eax, 4(%esp)
  8409. movl $strbuf+1800, %eax
  8410. movl %eax, 8(%esp)
  8411. call parser_error
  8412. addl $12, %esp
  8413. leave
  8414. ret
  8415. expression:
  8416. pushl %ebp
  8417. movl %esp, %ebp
  8418. subl $4, %esp
  8419. subl $4, %esp
  8420. movl 8(%ebp), %eax
  8421. movl %eax, 0(%esp)
  8422. call parser_token_location
  8423. addl $4, %esp
  8424. movl %eax, -4(%ebp)
  8425. subl $12, %esp
  8426. movl 8(%ebp), %eax
  8427. movl %eax, 0(%esp)
  8428. movl 12(%ebp), %eax
  8429. movl %eax, 4(%esp)
  8430. movl -4(%ebp), %eax
  8431. movl %eax, 8(%esp)
  8432. call assignment_expression
  8433. addl $12, %esp
  8434. leave
  8435. ret
  8436. assignment_expression:
  8437. pushl %ebp
  8438. movl %esp, %ebp
  8439. subl $8, %esp
  8440. subl $12, %esp
  8441. movl 8(%ebp), %eax
  8442. movl %eax, 0(%esp)
  8443. movl 12(%ebp), %eax
  8444. movl %eax, 4(%esp)
  8445. movl 16(%ebp), %eax
  8446. movl %eax, 8(%esp)
  8447. call ternary_expression
  8448. addl $12, %esp
  8449. movl %eax, -4(%ebp)
  8450. subl $4, %esp
  8451. movl 8(%ebp), %eax
  8452. movl %eax, 0(%esp)
  8453. call parser_lex
  8454. addl $4, %esp
  8455. movl %eax, -8(%ebp)
  8456. movl -8(%ebp), %eax
  8457. movl %eax, %edx
  8458. movl $61, %eax
  8459. cmpl %eax, %edx
  8460. sete %al
  8461. movzbl %al, %eax
  8462. cmpl $0, %eax
  8463. je _label226
  8464. subl $16, %esp
  8465. movl 8(%ebp), %eax
  8466. movl %eax, 0(%esp)
  8467. movl -4(%ebp), %eax
  8468. movl %eax, 4(%esp)
  8469. movl $33, %eax
  8470. movl %eax, 8(%esp)
  8471. movl 16(%ebp), %eax
  8472. movl %eax, 12(%esp)
  8473. call assignment_expr
  8474. addl $16, %esp
  8475. leave
  8476. ret
  8477. _label226:
  8478. movl -8(%ebp), %eax
  8479. movl %eax, %edx
  8480. movl $309, %eax
  8481. cmpl %eax, %edx
  8482. sete %al
  8483. movzbl %al, %eax
  8484. cmpl $0, %eax
  8485. je _label227
  8486. subl $16, %esp
  8487. movl 8(%ebp), %eax
  8488. movl %eax, 0(%esp)
  8489. movl -4(%ebp), %eax
  8490. movl %eax, 4(%esp)
  8491. movl $37, %eax
  8492. movl %eax, 8(%esp)
  8493. movl 16(%ebp), %eax
  8494. movl %eax, 12(%esp)
  8495. call assignment_expr
  8496. addl $16, %esp
  8497. leave
  8498. ret
  8499. _label227:
  8500. movl -8(%ebp), %eax
  8501. movl %eax, %edx
  8502. movl $310, %eax
  8503. cmpl %eax, %edx
  8504. sete %al
  8505. movzbl %al, %eax
  8506. cmpl $0, %eax
  8507. je _label228
  8508. subl $16, %esp
  8509. movl 8(%ebp), %eax
  8510. movl %eax, 0(%esp)
  8511. movl -4(%ebp), %eax
  8512. movl %eax, 4(%esp)
  8513. movl $38, %eax
  8514. movl %eax, 8(%esp)
  8515. movl 16(%ebp), %eax
  8516. movl %eax, 12(%esp)
  8517. call assignment_expr
  8518. addl $16, %esp
  8519. leave
  8520. ret
  8521. _label228:
  8522. movl -8(%ebp), %eax
  8523. movl %eax, %edx
  8524. movl $311, %eax
  8525. cmpl %eax, %edx
  8526. sete %al
  8527. movzbl %al, %eax
  8528. cmpl $0, %eax
  8529. je _label229
  8530. subl $16, %esp
  8531. movl 8(%ebp), %eax
  8532. movl %eax, 0(%esp)
  8533. movl -4(%ebp), %eax
  8534. movl %eax, 4(%esp)
  8535. movl $34, %eax
  8536. movl %eax, 8(%esp)
  8537. movl 16(%ebp), %eax
  8538. movl %eax, 12(%esp)
  8539. call assignment_expr
  8540. addl $16, %esp
  8541. leave
  8542. ret
  8543. _label229:
  8544. movl -8(%ebp), %eax
  8545. movl %eax, %edx
  8546. movl $312, %eax
  8547. cmpl %eax, %edx
  8548. sete %al
  8549. movzbl %al, %eax
  8550. cmpl $0, %eax
  8551. je _label230
  8552. subl $16, %esp
  8553. movl 8(%ebp), %eax
  8554. movl %eax, 0(%esp)
  8555. movl -4(%ebp), %eax
  8556. movl %eax, 4(%esp)
  8557. movl $35, %eax
  8558. movl %eax, 8(%esp)
  8559. movl 16(%ebp), %eax
  8560. movl %eax, 12(%esp)
  8561. call assignment_expr
  8562. addl $16, %esp
  8563. leave
  8564. ret
  8565. _label230:
  8566. movl -8(%ebp), %eax
  8567. movl %eax, %edx
  8568. movl $313, %eax
  8569. cmpl %eax, %edx
  8570. sete %al
  8571. movzbl %al, %eax
  8572. cmpl $0, %eax
  8573. je _label231
  8574. subl $16, %esp
  8575. movl 8(%ebp), %eax
  8576. movl %eax, 0(%esp)
  8577. movl -4(%ebp), %eax
  8578. movl %eax, 4(%esp)
  8579. movl $36, %eax
  8580. movl %eax, 8(%esp)
  8581. movl 16(%ebp), %eax
  8582. movl %eax, 12(%esp)
  8583. call assignment_expr
  8584. addl $16, %esp
  8585. leave
  8586. ret
  8587. _label231:
  8588. movl -8(%ebp), %eax
  8589. movl %eax, %edx
  8590. movl $314, %eax
  8591. cmpl %eax, %edx
  8592. sete %al
  8593. movzbl %al, %eax
  8594. cmpl $0, %eax
  8595. je _label232
  8596. subl $16, %esp
  8597. movl 8(%ebp), %eax
  8598. movl %eax, 0(%esp)
  8599. movl -4(%ebp), %eax
  8600. movl %eax, 4(%esp)
  8601. movl $41, %eax
  8602. movl %eax, 8(%esp)
  8603. movl 16(%ebp), %eax
  8604. movl %eax, 12(%esp)
  8605. call assignment_expr
  8606. addl $16, %esp
  8607. leave
  8608. ret
  8609. _label232:
  8610. movl -8(%ebp), %eax
  8611. movl %eax, %edx
  8612. movl $315, %eax
  8613. cmpl %eax, %edx
  8614. sete %al
  8615. movzbl %al, %eax
  8616. cmpl $0, %eax
  8617. je _label233
  8618. subl $16, %esp
  8619. movl 8(%ebp), %eax
  8620. movl %eax, 0(%esp)
  8621. movl -4(%ebp), %eax
  8622. movl %eax, 4(%esp)
  8623. movl $42, %eax
  8624. movl %eax, 8(%esp)
  8625. movl 16(%ebp), %eax
  8626. movl %eax, 12(%esp)
  8627. call assignment_expr
  8628. addl $16, %esp
  8629. leave
  8630. ret
  8631. _label233:
  8632. movl -8(%ebp), %eax
  8633. movl %eax, %edx
  8634. movl $316, %eax
  8635. cmpl %eax, %edx
  8636. sete %al
  8637. movzbl %al, %eax
  8638. cmpl $0, %eax
  8639. je _label234
  8640. subl $16, %esp
  8641. movl 8(%ebp), %eax
  8642. movl %eax, 0(%esp)
  8643. movl -4(%ebp), %eax
  8644. movl %eax, 4(%esp)
  8645. movl $43, %eax
  8646. movl %eax, 8(%esp)
  8647. movl 16(%ebp), %eax
  8648. movl %eax, 12(%esp)
  8649. call assignment_expr
  8650. addl $16, %esp
  8651. leave
  8652. ret
  8653. _label234:
  8654. movl -8(%ebp), %eax
  8655. movl %eax, %edx
  8656. movl $317, %eax
  8657. cmpl %eax, %edx
  8658. sete %al
  8659. movzbl %al, %eax
  8660. cmpl $0, %eax
  8661. je _label235
  8662. subl $16, %esp
  8663. movl 8(%ebp), %eax
  8664. movl %eax, 0(%esp)
  8665. movl -4(%ebp), %eax
  8666. movl %eax, 4(%esp)
  8667. movl $39, %eax
  8668. movl %eax, 8(%esp)
  8669. movl 16(%ebp), %eax
  8670. movl %eax, 12(%esp)
  8671. call assignment_expr
  8672. addl $16, %esp
  8673. leave
  8674. ret
  8675. _label235:
  8676. movl -8(%ebp), %eax
  8677. movl %eax, %edx
  8678. movl $318, %eax
  8679. cmpl %eax, %edx
  8680. sete %al
  8681. movzbl %al, %eax
  8682. cmpl $0, %eax
  8683. je _label236
  8684. subl $16, %esp
  8685. movl 8(%ebp), %eax
  8686. movl %eax, 0(%esp)
  8687. movl -4(%ebp), %eax
  8688. movl %eax, 4(%esp)
  8689. movl $40, %eax
  8690. movl %eax, 8(%esp)
  8691. movl 16(%ebp), %eax
  8692. movl %eax, 12(%esp)
  8693. call assignment_expr
  8694. addl $16, %esp
  8695. leave
  8696. ret
  8697. _label236:
  8698. subl $4, %esp
  8699. movl 8(%ebp), %eax
  8700. movl %eax, 0(%esp)
  8701. call parser_lexer_hold
  8702. addl $4, %esp
  8703. movl -4(%ebp), %eax
  8704. leave
  8705. ret
  8706. assignment_expr:
  8707. pushl %ebp
  8708. movl %esp, %ebp
  8709. subl $12, %esp
  8710. subl $4, %esp
  8711. movl 8(%ebp), %eax
  8712. movl %eax, 0(%esp)
  8713. call parser_lex
  8714. addl $4, %esp
  8715. movl %eax, -4(%ebp)
  8716. subl $4, %esp
  8717. movl 8(%ebp), %eax
  8718. movl %eax, 0(%esp)
  8719. call parser_token_location
  8720. addl $4, %esp
  8721. movl %eax, -12(%ebp)
  8722. subl $12, %esp
  8723. movl 8(%ebp), %eax
  8724. movl %eax, 0(%esp)
  8725. movl -4(%ebp), %eax
  8726. movl %eax, 4(%esp)
  8727. movl -12(%ebp), %eax
  8728. movl %eax, 8(%esp)
  8729. call ternary_expression
  8730. addl $12, %esp
  8731. movl %eax, -8(%ebp)
  8732. subl $16, %esp
  8733. movl 16(%ebp), %eax
  8734. movl %eax, 0(%esp)
  8735. movl 20(%ebp), %eax
  8736. movl %eax, 4(%esp)
  8737. movl 12(%ebp), %eax
  8738. movl %eax, 8(%esp)
  8739. movl -8(%ebp), %eax
  8740. movl %eax, 12(%esp)
  8741. call tuple4
  8742. addl $16, %esp
  8743. leave
  8744. ret
  8745. ternary_expression:
  8746. pushl %ebp
  8747. movl %esp, %ebp
  8748. subl $8, %esp
  8749. subl $16, %esp
  8750. movl 8(%ebp), %eax
  8751. movl %eax, 0(%esp)
  8752. movl 12(%ebp), %eax
  8753. movl %eax, 4(%esp)
  8754. movl $0, %eax
  8755. movl %eax, 8(%esp)
  8756. movl 16(%ebp), %eax
  8757. movl %eax, 12(%esp)
  8758. call logical_or_expression
  8759. addl $16, %esp
  8760. movl %eax, -4(%ebp)
  8761. subl $4, %esp
  8762. movl 8(%ebp), %eax
  8763. movl %eax, 0(%esp)
  8764. call parser_lex
  8765. addl $4, %esp
  8766. movl %eax, -8(%ebp)
  8767. movl -8(%ebp), %eax
  8768. movl %eax, %edx
  8769. movl $63, %eax
  8770. cmpl %eax, %edx
  8771. sete %al
  8772. movzbl %al, %eax
  8773. cmpl $0, %eax
  8774. je _label237
  8775. subl $16, %esp
  8776. movl 8(%ebp), %eax
  8777. movl %eax, 0(%esp)
  8778. movl -4(%ebp), %eax
  8779. movl %eax, 4(%esp)
  8780. movl 16(%ebp), %eax
  8781. movl %eax, 8(%esp)
  8782. movl -12(%ebp), %eax
  8783. movl %eax, 12(%esp)
  8784. call ternary_expr
  8785. addl $16, %esp
  8786. leave
  8787. ret
  8788. _label237:
  8789. subl $4, %esp
  8790. movl 8(%ebp), %eax
  8791. movl %eax, 0(%esp)
  8792. call parser_lexer_hold
  8793. addl $4, %esp
  8794. movl -4(%ebp), %eax
  8795. leave
  8796. ret
  8797. ternary_expr:
  8798. pushl %ebp
  8799. movl %esp, %ebp
  8800. subl $16, %esp
  8801. subl $4, %esp
  8802. movl 8(%ebp), %eax
  8803. movl %eax, 0(%esp)
  8804. call parser_lex
  8805. addl $4, %esp
  8806. movl %eax, -4(%ebp)
  8807. subl $4, %esp
  8808. movl 8(%ebp), %eax
  8809. movl %eax, 0(%esp)
  8810. call parser_token_location
  8811. addl $4, %esp
  8812. movl %eax, -16(%ebp)
  8813. subl $12, %esp
  8814. movl 8(%ebp), %eax
  8815. movl %eax, 0(%esp)
  8816. movl -4(%ebp), %eax
  8817. movl %eax, 4(%esp)
  8818. movl -16(%ebp), %eax
  8819. movl %eax, 8(%esp)
  8820. call ternary_expression
  8821. addl $12, %esp
  8822. movl %eax, -8(%ebp)
  8823. subl $4, %esp
  8824. movl 8(%ebp), %eax
  8825. movl %eax, 0(%esp)
  8826. call parser_lex
  8827. addl $4, %esp
  8828. movl %eax, -4(%ebp)
  8829. movl -4(%ebp), %eax
  8830. movl %eax, %edx
  8831. movl $58, %eax
  8832. cmpl %eax, %edx
  8833. setne %al
  8834. movzbl %al, %eax
  8835. cmpl $0, %eax
  8836. je _label238
  8837. movl $ternary_expr_error, %eax
  8838. jmp *%eax
  8839. _label238:
  8840. subl $4, %esp
  8841. movl 8(%ebp), %eax
  8842. movl %eax, 0(%esp)
  8843. call parser_lex
  8844. addl $4, %esp
  8845. movl %eax, -4(%ebp)
  8846. subl $4, %esp
  8847. movl 8(%ebp), %eax
  8848. movl %eax, 0(%esp)
  8849. call parser_token_location
  8850. addl $4, %esp
  8851. movl %eax, -16(%ebp)
  8852. subl $12, %esp
  8853. movl 8(%ebp), %eax
  8854. movl %eax, 0(%esp)
  8855. movl -4(%ebp), %eax
  8856. movl %eax, 4(%esp)
  8857. movl -16(%ebp), %eax
  8858. movl %eax, 8(%esp)
  8859. call ternary_expression
  8860. addl $12, %esp
  8861. movl %eax, -12(%ebp)
  8862. subl $20, %esp
  8863. movl $48, %eax
  8864. movl %eax, 0(%esp)
  8865. movl 16(%ebp), %eax
  8866. movl %eax, 4(%esp)
  8867. movl 12(%ebp), %eax
  8868. movl %eax, 8(%esp)
  8869. movl -8(%ebp), %eax
  8870. movl %eax, 12(%esp)
  8871. movl -12(%ebp), %eax
  8872. movl %eax, 16(%esp)
  8873. call tuple5
  8874. addl $20, %esp
  8875. leave
  8876. ret
  8877. ternary_expr_error:
  8878. subl $12, %esp
  8879. movl 8(%ebp), %eax
  8880. movl %eax, 0(%esp)
  8881. movl 16(%ebp), %eax
  8882. movl %eax, 4(%esp)
  8883. movl $strbuf+1843, %eax
  8884. movl %eax, 8(%esp)
  8885. call parser_error
  8886. addl $12, %esp
  8887. leave
  8888. ret
  8889. logical_or_expression:
  8890. pushl %ebp
  8891. movl %esp, %ebp
  8892. subl $4, %esp
  8893. movl 16(%ebp), %eax
  8894. movl %eax, %edx
  8895. movl $0, %eax
  8896. cmpl %eax, %edx
  8897. sete %al
  8898. movzbl %al, %eax
  8899. cmpl $0, %eax
  8900. je _label239
  8901. subl $16, %esp
  8902. movl 8(%ebp), %eax
  8903. movl %eax, 0(%esp)
  8904. movl 12(%ebp), %eax
  8905. movl %eax, 4(%esp)
  8906. movl $0, %eax
  8907. movl %eax, 8(%esp)
  8908. movl 20(%ebp), %eax
  8909. movl %eax, 12(%esp)
  8910. call logical_and_expression
  8911. addl $16, %esp
  8912. movl %eax, 16(%ebp)
  8913. _label239:
  8914. subl $4, %esp
  8915. movl 8(%ebp), %eax
  8916. movl %eax, 0(%esp)
  8917. call parser_lex
  8918. addl $4, %esp
  8919. movl %eax, -4(%ebp)
  8920. movl -4(%ebp), %eax
  8921. movl %eax, %edx
  8922. movl $308, %eax
  8923. cmpl %eax, %edx
  8924. sete %al
  8925. movzbl %al, %eax
  8926. cmpl $0, %eax
  8927. je _label240
  8928. subl $12, %esp
  8929. movl 8(%ebp), %eax
  8930. movl %eax, 0(%esp)
  8931. movl 16(%ebp), %eax
  8932. movl %eax, 4(%esp)
  8933. movl 20(%ebp), %eax
  8934. movl %eax, 8(%esp)
  8935. call logical_or_expr
  8936. addl $12, %esp
  8937. leave
  8938. ret
  8939. _label240:
  8940. subl $4, %esp
  8941. movl 8(%ebp), %eax
  8942. movl %eax, 0(%esp)
  8943. call parser_lexer_hold
  8944. addl $4, %esp
  8945. movl 16(%ebp), %eax
  8946. leave
  8947. ret
  8948. logical_or_expr:
  8949. pushl %ebp
  8950. movl %esp, %ebp
  8951. subl $12, %esp
  8952. subl $4, %esp
  8953. movl 8(%ebp), %eax
  8954. movl %eax, 0(%esp)
  8955. call parser_lex
  8956. addl $4, %esp
  8957. movl %eax, -4(%ebp)
  8958. subl $4, %esp
  8959. movl 8(%ebp), %eax
  8960. movl %eax, 0(%esp)
  8961. call parser_token_location
  8962. addl $4, %esp
  8963. movl %eax, -12(%ebp)
  8964. subl $16, %esp
  8965. movl 8(%ebp), %eax
  8966. movl %eax, 0(%esp)
  8967. movl -4(%ebp), %eax
  8968. movl %eax, 4(%esp)
  8969. movl $0, %eax
  8970. movl %eax, 8(%esp)
  8971. movl -12(%ebp), %eax
  8972. movl %eax, 12(%esp)
  8973. call logical_and_expression
  8974. addl $16, %esp
  8975. movl %eax, -8(%ebp)
  8976. subl $16, %esp
  8977. movl 8(%ebp), %eax
  8978. movl %eax, 0(%esp)
  8979. movl $0, %eax
  8980. movl %eax, 4(%esp)
  8981. pushl %ebx
  8982. pushl %ecx
  8983. pushl %edx
  8984. pushl %esi
  8985. pushl %edi
  8986. subl $16, %esp
  8987. movl $32, %eax
  8988. movl %eax, 0(%esp)
  8989. movl 16(%ebp), %eax
  8990. movl %eax, 4(%esp)
  8991. movl 12(%ebp), %eax
  8992. movl %eax, 8(%esp)
  8993. movl -8(%ebp), %eax
  8994. movl %eax, 12(%esp)
  8995. call tuple4
  8996. addl $16, %esp
  8997. popl %edi
  8998. popl %esi
  8999. popl %edx
  9000. popl %ecx
  9001. popl %ebx
  9002. movl %eax, 8(%esp)
  9003. movl 16(%ebp), %eax
  9004. movl %eax, 12(%esp)
  9005. call logical_or_expression
  9006. addl $16, %esp
  9007. leave
  9008. ret
  9009. logical_and_expression:
  9010. pushl %ebp
  9011. movl %esp, %ebp
  9012. subl $4, %esp
  9013. movl 16(%ebp), %eax
  9014. movl %eax, %edx
  9015. movl $0, %eax
  9016. cmpl %eax, %edx
  9017. sete %al
  9018. movzbl %al, %eax
  9019. cmpl $0, %eax
  9020. je _label241
  9021. subl $16, %esp
  9022. movl 8(%ebp), %eax
  9023. movl %eax, 0(%esp)
  9024. movl 12(%ebp), %eax
  9025. movl %eax, 4(%esp)
  9026. movl $0, %eax
  9027. movl %eax, 8(%esp)
  9028. movl 20(%ebp), %eax
  9029. movl %eax, 12(%esp)
  9030. call equality_expression
  9031. addl $16, %esp
  9032. movl %eax, 16(%ebp)
  9033. _label241:
  9034. subl $4, %esp
  9035. movl 8(%ebp), %eax
  9036. movl %eax, 0(%esp)
  9037. call parser_lex
  9038. addl $4, %esp
  9039. movl %eax, -4(%ebp)
  9040. movl -4(%ebp), %eax
  9041. movl %eax, %edx
  9042. movl $307, %eax
  9043. cmpl %eax, %edx
  9044. sete %al
  9045. movzbl %al, %eax
  9046. cmpl $0, %eax
  9047. je _label242
  9048. subl $12, %esp
  9049. movl 8(%ebp), %eax
  9050. movl %eax, 0(%esp)
  9051. movl 16(%ebp), %eax
  9052. movl %eax, 4(%esp)
  9053. movl 20(%ebp), %eax
  9054. movl %eax, 8(%esp)
  9055. call logical_and_expr
  9056. addl $12, %esp
  9057. leave
  9058. ret
  9059. _label242:
  9060. subl $4, %esp
  9061. movl 8(%ebp), %eax
  9062. movl %eax, 0(%esp)
  9063. call parser_lexer_hold
  9064. addl $4, %esp
  9065. movl 16(%ebp), %eax
  9066. leave
  9067. ret
  9068. logical_and_expr:
  9069. pushl %ebp
  9070. movl %esp, %ebp
  9071. subl $12, %esp
  9072. subl $4, %esp
  9073. movl 8(%ebp), %eax
  9074. movl %eax, 0(%esp)
  9075. call parser_lex
  9076. addl $4, %esp
  9077. movl %eax, -4(%ebp)
  9078. subl $4, %esp
  9079. movl 8(%ebp), %eax
  9080. movl %eax, 0(%esp)
  9081. call parser_token_location
  9082. addl $4, %esp
  9083. movl %eax, -12(%ebp)
  9084. subl $16, %esp
  9085. movl 8(%ebp), %eax
  9086. movl %eax, 0(%esp)
  9087. movl -4(%ebp), %eax
  9088. movl %eax, 4(%esp)
  9089. movl $0, %eax
  9090. movl %eax, 8(%esp)
  9091. movl -12(%ebp), %eax
  9092. movl %eax, 12(%esp)
  9093. call equality_expression
  9094. addl $16, %esp
  9095. movl %eax, -8(%ebp)
  9096. subl $16, %esp
  9097. movl 8(%ebp), %eax
  9098. movl %eax, 0(%esp)
  9099. movl $0, %eax
  9100. movl %eax, 4(%esp)
  9101. pushl %ebx
  9102. pushl %ecx
  9103. pushl %edx
  9104. pushl %esi
  9105. pushl %edi
  9106. subl $16, %esp
  9107. movl $31, %eax
  9108. movl %eax, 0(%esp)
  9109. movl 16(%ebp), %eax
  9110. movl %eax, 4(%esp)
  9111. movl 12(%ebp), %eax
  9112. movl %eax, 8(%esp)
  9113. movl -8(%ebp), %eax
  9114. movl %eax, 12(%esp)
  9115. call tuple4
  9116. addl $16, %esp
  9117. popl %edi
  9118. popl %esi
  9119. popl %edx
  9120. popl %ecx
  9121. popl %ebx
  9122. movl %eax, 8(%esp)
  9123. movl 16(%ebp), %eax
  9124. movl %eax, 12(%esp)
  9125. call logical_and_expression
  9126. addl $16, %esp
  9127. leave
  9128. ret
  9129. equality_expression:
  9130. pushl %ebp
  9131. movl %esp, %ebp
  9132. subl $4, %esp
  9133. movl 16(%ebp), %eax
  9134. movl %eax, %edx
  9135. movl $0, %eax
  9136. cmpl %eax, %edx
  9137. sete %al
  9138. movzbl %al, %eax
  9139. cmpl $0, %eax
  9140. je _label243
  9141. subl $16, %esp
  9142. movl 8(%ebp), %eax
  9143. movl %eax, 0(%esp)
  9144. movl 12(%ebp), %eax
  9145. movl %eax, 4(%esp)
  9146. movl $0, %eax
  9147. movl %eax, 8(%esp)
  9148. movl 20(%ebp), %eax
  9149. movl %eax, 12(%esp)
  9150. call relational_expression
  9151. addl $16, %esp
  9152. movl %eax, 16(%ebp)
  9153. _label243:
  9154. subl $4, %esp
  9155. movl 8(%ebp), %eax
  9156. movl %eax, 0(%esp)
  9157. call parser_lex
  9158. addl $4, %esp
  9159. movl %eax, -4(%ebp)
  9160. movl -4(%ebp), %eax
  9161. movl %eax, %edx
  9162. movl $300, %eax
  9163. cmpl %eax, %edx
  9164. sete %al
  9165. movzbl %al, %eax
  9166. cmpl $0, %eax
  9167. je _label244
  9168. subl $16, %esp
  9169. movl 8(%ebp), %eax
  9170. movl %eax, 0(%esp)
  9171. movl 16(%ebp), %eax
  9172. movl %eax, 4(%esp)
  9173. movl $29, %eax
  9174. movl %eax, 8(%esp)
  9175. movl 20(%ebp), %eax
  9176. movl %eax, 12(%esp)
  9177. call equality_expr
  9178. addl $16, %esp
  9179. leave
  9180. ret
  9181. _label244:
  9182. movl -4(%ebp), %eax
  9183. movl %eax, %edx
  9184. movl $301, %eax
  9185. cmpl %eax, %edx
  9186. sete %al
  9187. movzbl %al, %eax
  9188. cmpl $0, %eax
  9189. je _label245
  9190. subl $16, %esp
  9191. movl 8(%ebp), %eax
  9192. movl %eax, 0(%esp)
  9193. movl 16(%ebp), %eax
  9194. movl %eax, 4(%esp)
  9195. movl $30, %eax
  9196. movl %eax, 8(%esp)
  9197. movl 20(%ebp), %eax
  9198. movl %eax, 12(%esp)
  9199. call equality_expr
  9200. addl $16, %esp
  9201. leave
  9202. ret
  9203. _label245:
  9204. subl $4, %esp
  9205. movl 8(%ebp), %eax
  9206. movl %eax, 0(%esp)
  9207. call parser_lexer_hold
  9208. addl $4, %esp
  9209. movl 16(%ebp), %eax
  9210. leave
  9211. ret
  9212. equality_expr:
  9213. pushl %ebp
  9214. movl %esp, %ebp
  9215. subl $12, %esp
  9216. subl $4, %esp
  9217. movl 8(%ebp), %eax
  9218. movl %eax, 0(%esp)
  9219. call parser_lex
  9220. addl $4, %esp
  9221. movl %eax, -4(%ebp)
  9222. subl $4, %esp
  9223. movl 8(%ebp), %eax
  9224. movl %eax, 0(%esp)
  9225. call parser_token_location
  9226. addl $4, %esp
  9227. movl %eax, -12(%ebp)
  9228. subl $16, %esp
  9229. movl 8(%ebp), %eax
  9230. movl %eax, 0(%esp)
  9231. movl -4(%ebp), %eax
  9232. movl %eax, 4(%esp)
  9233. movl $0, %eax
  9234. movl %eax, 8(%esp)
  9235. movl -12(%ebp), %eax
  9236. movl %eax, 12(%esp)
  9237. call relational_expression
  9238. addl $16, %esp
  9239. movl %eax, -8(%ebp)
  9240. subl $16, %esp
  9241. movl 8(%ebp), %eax
  9242. movl %eax, 0(%esp)
  9243. movl $0, %eax
  9244. movl %eax, 4(%esp)
  9245. pushl %ebx
  9246. pushl %ecx
  9247. pushl %edx
  9248. pushl %esi
  9249. pushl %edi
  9250. subl $16, %esp
  9251. movl 16(%ebp), %eax
  9252. movl %eax, 0(%esp)
  9253. movl 20(%ebp), %eax
  9254. movl %eax, 4(%esp)
  9255. movl 12(%ebp), %eax
  9256. movl %eax, 8(%esp)
  9257. movl -8(%ebp), %eax
  9258. movl %eax, 12(%esp)
  9259. call tuple4
  9260. addl $16, %esp
  9261. popl %edi
  9262. popl %esi
  9263. popl %edx
  9264. popl %ecx
  9265. popl %ebx
  9266. movl %eax, 8(%esp)
  9267. movl 20(%ebp), %eax
  9268. movl %eax, 12(%esp)
  9269. call equality_expression
  9270. addl $16, %esp
  9271. leave
  9272. ret
  9273. relational_expression:
  9274. pushl %ebp
  9275. movl %esp, %ebp
  9276. subl $4, %esp
  9277. movl 16(%ebp), %eax
  9278. movl %eax, %edx
  9279. movl $0, %eax
  9280. cmpl %eax, %edx
  9281. sete %al
  9282. movzbl %al, %eax
  9283. cmpl $0, %eax
  9284. je _label246
  9285. subl $16, %esp
  9286. movl 8(%ebp), %eax
  9287. movl %eax, 0(%esp)
  9288. movl 12(%ebp), %eax
  9289. movl %eax, 4(%esp)
  9290. movl $0, %eax
  9291. movl %eax, 8(%esp)
  9292. movl 20(%ebp), %eax
  9293. movl %eax, 12(%esp)
  9294. call bitwise_or_expression
  9295. addl $16, %esp
  9296. movl %eax, 16(%ebp)
  9297. _label246:
  9298. subl $4, %esp
  9299. movl 8(%ebp), %eax
  9300. movl %eax, 0(%esp)
  9301. call parser_lex
  9302. addl $4, %esp
  9303. movl %eax, -4(%ebp)
  9304. movl -4(%ebp), %eax
  9305. movl %eax, %edx
  9306. movl $60, %eax
  9307. cmpl %eax, %edx
  9308. sete %al
  9309. movzbl %al, %eax
  9310. cmpl $0, %eax
  9311. je _label247
  9312. subl $16, %esp
  9313. movl 8(%ebp), %eax
  9314. movl %eax, 0(%esp)
  9315. movl 16(%ebp), %eax
  9316. movl %eax, 4(%esp)
  9317. movl $25, %eax
  9318. movl %eax, 8(%esp)
  9319. movl 20(%ebp), %eax
  9320. movl %eax, 12(%esp)
  9321. call relational_expr
  9322. addl $16, %esp
  9323. leave
  9324. ret
  9325. _label247:
  9326. movl -4(%ebp), %eax
  9327. movl %eax, %edx
  9328. movl $62, %eax
  9329. cmpl %eax, %edx
  9330. sete %al
  9331. movzbl %al, %eax
  9332. cmpl $0, %eax
  9333. je _label248
  9334. subl $16, %esp
  9335. movl 8(%ebp), %eax
  9336. movl %eax, 0(%esp)
  9337. movl 16(%ebp), %eax
  9338. movl %eax, 4(%esp)
  9339. movl $26, %eax
  9340. movl %eax, 8(%esp)
  9341. movl 20(%ebp), %eax
  9342. movl %eax, 12(%esp)
  9343. call relational_expr
  9344. addl $16, %esp
  9345. leave
  9346. ret
  9347. _label248:
  9348. movl -4(%ebp), %eax
  9349. movl %eax, %edx
  9350. movl $302, %eax
  9351. cmpl %eax, %edx
  9352. sete %al
  9353. movzbl %al, %eax
  9354. cmpl $0, %eax
  9355. je _label249
  9356. subl $16, %esp
  9357. movl 8(%ebp), %eax
  9358. movl %eax, 0(%esp)
  9359. movl 16(%ebp), %eax
  9360. movl %eax, 4(%esp)
  9361. movl $27, %eax
  9362. movl %eax, 8(%esp)
  9363. movl 20(%ebp), %eax
  9364. movl %eax, 12(%esp)
  9365. call relational_expr
  9366. addl $16, %esp
  9367. leave
  9368. ret
  9369. _label249:
  9370. movl -4(%ebp), %eax
  9371. movl %eax, %edx
  9372. movl $303, %eax
  9373. cmpl %eax, %edx
  9374. sete %al
  9375. movzbl %al, %eax
  9376. cmpl $0, %eax
  9377. je _label250
  9378. subl $16, %esp
  9379. movl 8(%ebp), %eax
  9380. movl %eax, 0(%esp)
  9381. movl 16(%ebp), %eax
  9382. movl %eax, 4(%esp)
  9383. movl $28, %eax
  9384. movl %eax, 8(%esp)
  9385. movl 20(%ebp), %eax
  9386. movl %eax, 12(%esp)
  9387. call relational_expr
  9388. addl $16, %esp
  9389. leave
  9390. ret
  9391. _label250:
  9392. subl $4, %esp
  9393. movl 8(%ebp), %eax
  9394. movl %eax, 0(%esp)
  9395. call parser_lexer_hold
  9396. addl $4, %esp
  9397. movl 16(%ebp), %eax
  9398. leave
  9399. ret
  9400. relational_expr:
  9401. pushl %ebp
  9402. movl %esp, %ebp
  9403. subl $12, %esp
  9404. subl $4, %esp
  9405. movl 8(%ebp), %eax
  9406. movl %eax, 0(%esp)
  9407. call parser_lex
  9408. addl $4, %esp
  9409. movl %eax, -4(%ebp)
  9410. subl $4, %esp
  9411. movl 8(%ebp), %eax
  9412. movl %eax, 0(%esp)
  9413. call parser_token_location
  9414. addl $4, %esp
  9415. movl %eax, -12(%ebp)
  9416. subl $16, %esp
  9417. movl 8(%ebp), %eax
  9418. movl %eax, 0(%esp)
  9419. movl -4(%ebp), %eax
  9420. movl %eax, 4(%esp)
  9421. movl $0, %eax
  9422. movl %eax, 8(%esp)
  9423. movl -12(%ebp), %eax
  9424. movl %eax, 12(%esp)
  9425. call bitwise_or_expression
  9426. addl $16, %esp
  9427. movl %eax, -8(%ebp)
  9428. subl $16, %esp
  9429. movl 8(%ebp), %eax
  9430. movl %eax, 0(%esp)
  9431. movl $0, %eax
  9432. movl %eax, 4(%esp)
  9433. pushl %ebx
  9434. pushl %ecx
  9435. pushl %edx
  9436. pushl %esi
  9437. pushl %edi
  9438. subl $16, %esp
  9439. movl 16(%ebp), %eax
  9440. movl %eax, 0(%esp)
  9441. movl 20(%ebp), %eax
  9442. movl %eax, 4(%esp)
  9443. movl 12(%ebp), %eax
  9444. movl %eax, 8(%esp)
  9445. movl -8(%ebp), %eax
  9446. movl %eax, 12(%esp)
  9447. call tuple4
  9448. addl $16, %esp
  9449. popl %edi
  9450. popl %esi
  9451. popl %edx
  9452. popl %ecx
  9453. popl %ebx
  9454. movl %eax, 8(%esp)
  9455. movl 20(%ebp), %eax
  9456. movl %eax, 12(%esp)
  9457. call relational_expression
  9458. addl $16, %esp
  9459. leave
  9460. ret
  9461. bitwise_or_expression:
  9462. pushl %ebp
  9463. movl %esp, %ebp
  9464. subl $4, %esp
  9465. movl 16(%ebp), %eax
  9466. movl %eax, %edx
  9467. movl $0, %eax
  9468. cmpl %eax, %edx
  9469. sete %al
  9470. movzbl %al, %eax
  9471. cmpl $0, %eax
  9472. je _label251
  9473. subl $16, %esp
  9474. movl 8(%ebp), %eax
  9475. movl %eax, 0(%esp)
  9476. movl 12(%ebp), %eax
  9477. movl %eax, 4(%esp)
  9478. movl $0, %eax
  9479. movl %eax, 8(%esp)
  9480. movl 20(%ebp), %eax
  9481. movl %eax, 12(%esp)
  9482. call bitwise_xor_expression
  9483. addl $16, %esp
  9484. movl %eax, 16(%ebp)
  9485. _label251:
  9486. subl $4, %esp
  9487. movl 8(%ebp), %eax
  9488. movl %eax, 0(%esp)
  9489. call parser_lex
  9490. addl $4, %esp
  9491. movl %eax, -4(%ebp)
  9492. movl -4(%ebp), %eax
  9493. movl %eax, %edx
  9494. movl $124, %eax
  9495. cmpl %eax, %edx
  9496. sete %al
  9497. movzbl %al, %eax
  9498. cmpl $0, %eax
  9499. je _label252
  9500. subl $12, %esp
  9501. movl 8(%ebp), %eax
  9502. movl %eax, 0(%esp)
  9503. movl 16(%ebp), %eax
  9504. movl %eax, 4(%esp)
  9505. movl 20(%ebp), %eax
  9506. movl %eax, 8(%esp)
  9507. call bitwise_or_expr
  9508. addl $12, %esp
  9509. leave
  9510. ret
  9511. _label252:
  9512. subl $4, %esp
  9513. movl 8(%ebp), %eax
  9514. movl %eax, 0(%esp)
  9515. call parser_lexer_hold
  9516. addl $4, %esp
  9517. movl 16(%ebp), %eax
  9518. leave
  9519. ret
  9520. bitwise_or_expr:
  9521. pushl %ebp
  9522. movl %esp, %ebp
  9523. subl $12, %esp
  9524. subl $4, %esp
  9525. movl 8(%ebp), %eax
  9526. movl %eax, 0(%esp)
  9527. call parser_lex
  9528. addl $4, %esp
  9529. movl %eax, -4(%ebp)
  9530. subl $4, %esp
  9531. movl 8(%ebp), %eax
  9532. movl %eax, 0(%esp)
  9533. call parser_token_location
  9534. addl $4, %esp
  9535. movl %eax, -12(%ebp)
  9536. subl $16, %esp
  9537. movl 8(%ebp), %eax
  9538. movl %eax, 0(%esp)
  9539. movl -4(%ebp), %eax
  9540. movl %eax, 4(%esp)
  9541. movl $0, %eax
  9542. movl %eax, 8(%esp)
  9543. movl -12(%ebp), %eax
  9544. movl %eax, 12(%esp)
  9545. call bitwise_xor_expression
  9546. addl $16, %esp
  9547. movl %eax, -8(%ebp)
  9548. subl $16, %esp
  9549. movl 8(%ebp), %eax
  9550. movl %eax, 0(%esp)
  9551. movl $0, %eax
  9552. movl %eax, 4(%esp)
  9553. pushl %ebx
  9554. pushl %ecx
  9555. pushl %edx
  9556. pushl %esi
  9557. pushl %edi
  9558. subl $16, %esp
  9559. movl $24, %eax
  9560. movl %eax, 0(%esp)
  9561. movl 16(%ebp), %eax
  9562. movl %eax, 4(%esp)
  9563. movl 12(%ebp), %eax
  9564. movl %eax, 8(%esp)
  9565. movl -8(%ebp), %eax
  9566. movl %eax, 12(%esp)
  9567. call tuple4
  9568. addl $16, %esp
  9569. popl %edi
  9570. popl %esi
  9571. popl %edx
  9572. popl %ecx
  9573. popl %ebx
  9574. movl %eax, 8(%esp)
  9575. movl 16(%ebp), %eax
  9576. movl %eax, 12(%esp)
  9577. call bitwise_or_expression
  9578. addl $16, %esp
  9579. leave
  9580. ret
  9581. bitwise_xor_expression:
  9582. pushl %ebp
  9583. movl %esp, %ebp
  9584. subl $4, %esp
  9585. movl 16(%ebp), %eax
  9586. movl %eax, %edx
  9587. movl $0, %eax
  9588. cmpl %eax, %edx
  9589. sete %al
  9590. movzbl %al, %eax
  9591. cmpl $0, %eax
  9592. je _label253
  9593. subl $16, %esp
  9594. movl 8(%ebp), %eax
  9595. movl %eax, 0(%esp)
  9596. movl 12(%ebp), %eax
  9597. movl %eax, 4(%esp)
  9598. movl $0, %eax
  9599. movl %eax, 8(%esp)
  9600. movl 20(%ebp), %eax
  9601. movl %eax, 12(%esp)
  9602. call bitwise_and_expression
  9603. addl $16, %esp
  9604. movl %eax, 16(%ebp)
  9605. _label253:
  9606. subl $4, %esp
  9607. movl 8(%ebp), %eax
  9608. movl %eax, 0(%esp)
  9609. call parser_lex
  9610. addl $4, %esp
  9611. movl %eax, -4(%ebp)
  9612. movl -4(%ebp), %eax
  9613. movl %eax, %edx
  9614. movl $94, %eax
  9615. cmpl %eax, %edx
  9616. sete %al
  9617. movzbl %al, %eax
  9618. cmpl $0, %eax
  9619. je _label254
  9620. subl $12, %esp
  9621. movl 8(%ebp), %eax
  9622. movl %eax, 0(%esp)
  9623. movl 16(%ebp), %eax
  9624. movl %eax, 4(%esp)
  9625. movl 20(%ebp), %eax
  9626. movl %eax, 8(%esp)
  9627. call bitwise_xor_expr
  9628. addl $12, %esp
  9629. leave
  9630. ret
  9631. _label254:
  9632. subl $4, %esp
  9633. movl 8(%ebp), %eax
  9634. movl %eax, 0(%esp)
  9635. call parser_lexer_hold
  9636. addl $4, %esp
  9637. movl 16(%ebp), %eax
  9638. leave
  9639. ret
  9640. bitwise_xor_expr:
  9641. pushl %ebp
  9642. movl %esp, %ebp
  9643. subl $12, %esp
  9644. subl $4, %esp
  9645. movl 8(%ebp), %eax
  9646. movl %eax, 0(%esp)
  9647. call parser_lex
  9648. addl $4, %esp
  9649. movl %eax, -4(%ebp)
  9650. subl $4, %esp
  9651. movl 8(%ebp), %eax
  9652. movl %eax, 0(%esp)
  9653. call parser_token_location
  9654. addl $4, %esp
  9655. movl %eax, -12(%ebp)
  9656. subl $16, %esp
  9657. movl 8(%ebp), %eax
  9658. movl %eax, 0(%esp)
  9659. movl -4(%ebp), %eax
  9660. movl %eax, 4(%esp)
  9661. movl $0, %eax
  9662. movl %eax, 8(%esp)
  9663. movl -12(%ebp), %eax
  9664. movl %eax, 12(%esp)
  9665. call bitwise_and_expression
  9666. addl $16, %esp
  9667. movl %eax, -8(%ebp)
  9668. subl $16, %esp
  9669. movl 8(%ebp), %eax
  9670. movl %eax, 0(%esp)
  9671. movl $0, %eax
  9672. movl %eax, 4(%esp)
  9673. pushl %ebx
  9674. pushl %ecx
  9675. pushl %edx
  9676. pushl %esi
  9677. pushl %edi
  9678. subl $16, %esp
  9679. movl $23, %eax
  9680. movl %eax, 0(%esp)
  9681. movl 16(%ebp), %eax
  9682. movl %eax, 4(%esp)
  9683. movl 12(%ebp), %eax
  9684. movl %eax, 8(%esp)
  9685. movl -8(%ebp), %eax
  9686. movl %eax, 12(%esp)
  9687. call tuple4
  9688. addl $16, %esp
  9689. popl %edi
  9690. popl %esi
  9691. popl %edx
  9692. popl %ecx
  9693. popl %ebx
  9694. movl %eax, 8(%esp)
  9695. movl 16(%ebp), %eax
  9696. movl %eax, 12(%esp)
  9697. call bitwise_xor_expression
  9698. addl $16, %esp
  9699. leave
  9700. ret
  9701. bitwise_and_expression:
  9702. pushl %ebp
  9703. movl %esp, %ebp
  9704. subl $4, %esp
  9705. movl 16(%ebp), %eax
  9706. movl %eax, %edx
  9707. movl $0, %eax
  9708. cmpl %eax, %edx
  9709. sete %al
  9710. movzbl %al, %eax
  9711. cmpl $0, %eax
  9712. je _label255
  9713. subl $16, %esp
  9714. movl 8(%ebp), %eax
  9715. movl %eax, 0(%esp)
  9716. movl 12(%ebp), %eax
  9717. movl %eax, 4(%esp)
  9718. movl $0, %eax
  9719. movl %eax, 8(%esp)
  9720. movl 20(%ebp), %eax
  9721. movl %eax, 12(%esp)
  9722. call bitwise_shift_expression
  9723. addl $16, %esp
  9724. movl %eax, 16(%ebp)
  9725. _label255:
  9726. subl $4, %esp
  9727. movl 8(%ebp), %eax
  9728. movl %eax, 0(%esp)
  9729. call parser_lex
  9730. addl $4, %esp
  9731. movl %eax, -4(%ebp)
  9732. movl -4(%ebp), %eax
  9733. movl %eax, %edx
  9734. movl $38, %eax
  9735. cmpl %eax, %edx
  9736. sete %al
  9737. movzbl %al, %eax
  9738. cmpl $0, %eax
  9739. je _label256
  9740. subl $12, %esp
  9741. movl 8(%ebp), %eax
  9742. movl %eax, 0(%esp)
  9743. movl 16(%ebp), %eax
  9744. movl %eax, 4(%esp)
  9745. movl 20(%ebp), %eax
  9746. movl %eax, 8(%esp)
  9747. call bitwise_and_expr
  9748. addl $12, %esp
  9749. leave
  9750. ret
  9751. _label256:
  9752. subl $4, %esp
  9753. movl 8(%ebp), %eax
  9754. movl %eax, 0(%esp)
  9755. call parser_lexer_hold
  9756. addl $4, %esp
  9757. movl 16(%ebp), %eax
  9758. leave
  9759. ret
  9760. bitwise_and_expr:
  9761. pushl %ebp
  9762. movl %esp, %ebp
  9763. subl $12, %esp
  9764. subl $4, %esp
  9765. movl 8(%ebp), %eax
  9766. movl %eax, 0(%esp)
  9767. call parser_lex
  9768. addl $4, %esp
  9769. movl %eax, -4(%ebp)
  9770. subl $4, %esp
  9771. movl 8(%ebp), %eax
  9772. movl %eax, 0(%esp)
  9773. call parser_token_location
  9774. addl $4, %esp
  9775. movl %eax, -12(%ebp)
  9776. subl $16, %esp
  9777. movl 8(%ebp), %eax
  9778. movl %eax, 0(%esp)
  9779. movl -4(%ebp), %eax
  9780. movl %eax, 4(%esp)
  9781. movl $0, %eax
  9782. movl %eax, 8(%esp)
  9783. movl -12(%ebp), %eax
  9784. movl %eax, 12(%esp)
  9785. call bitwise_shift_expression
  9786. addl $16, %esp
  9787. movl %eax, -8(%ebp)
  9788. subl $16, %esp
  9789. movl 8(%ebp), %eax
  9790. movl %eax, 0(%esp)
  9791. movl $0, %eax
  9792. movl %eax, 4(%esp)
  9793. pushl %ebx
  9794. pushl %ecx
  9795. pushl %edx
  9796. pushl %esi
  9797. pushl %edi
  9798. subl $16, %esp
  9799. movl $22, %eax
  9800. movl %eax, 0(%esp)
  9801. movl 16(%ebp), %eax
  9802. movl %eax, 4(%esp)
  9803. movl 12(%ebp), %eax
  9804. movl %eax, 8(%esp)
  9805. movl -8(%ebp), %eax
  9806. movl %eax, 12(%esp)
  9807. call tuple4
  9808. addl $16, %esp
  9809. popl %edi
  9810. popl %esi
  9811. popl %edx
  9812. popl %ecx
  9813. popl %ebx
  9814. movl %eax, 8(%esp)
  9815. movl 16(%ebp), %eax
  9816. movl %eax, 12(%esp)
  9817. call bitwise_and_expression
  9818. addl $16, %esp
  9819. leave
  9820. ret
  9821. bitwise_shift_expression:
  9822. pushl %ebp
  9823. movl %esp, %ebp
  9824. subl $4, %esp
  9825. movl 16(%ebp), %eax
  9826. movl %eax, %edx
  9827. movl $0, %eax
  9828. cmpl %eax, %edx
  9829. sete %al
  9830. movzbl %al, %eax
  9831. cmpl $0, %eax
  9832. je _label257
  9833. subl $16, %esp
  9834. movl 8(%ebp), %eax
  9835. movl %eax, 0(%esp)
  9836. movl 12(%ebp), %eax
  9837. movl %eax, 4(%esp)
  9838. movl $0, %eax
  9839. movl %eax, 8(%esp)
  9840. movl 20(%ebp), %eax
  9841. movl %eax, 12(%esp)
  9842. call additive_expression
  9843. addl $16, %esp
  9844. movl %eax, 16(%ebp)
  9845. _label257:
  9846. subl $4, %esp
  9847. movl 8(%ebp), %eax
  9848. movl %eax, 0(%esp)
  9849. call parser_lex
  9850. addl $4, %esp
  9851. movl %eax, -4(%ebp)
  9852. movl -4(%ebp), %eax
  9853. movl %eax, %edx
  9854. movl $305, %eax
  9855. cmpl %eax, %edx
  9856. sete %al
  9857. movzbl %al, %eax
  9858. cmpl $0, %eax
  9859. je _label258
  9860. subl $16, %esp
  9861. movl 8(%ebp), %eax
  9862. movl %eax, 0(%esp)
  9863. movl 16(%ebp), %eax
  9864. movl %eax, 4(%esp)
  9865. movl $20, %eax
  9866. movl %eax, 8(%esp)
  9867. movl 20(%ebp), %eax
  9868. movl %eax, 12(%esp)
  9869. call bitwise_shift_expr
  9870. addl $16, %esp
  9871. leave
  9872. ret
  9873. _label258:
  9874. movl -4(%ebp), %eax
  9875. movl %eax, %edx
  9876. movl $306, %eax
  9877. cmpl %eax, %edx
  9878. sete %al
  9879. movzbl %al, %eax
  9880. cmpl $0, %eax
  9881. je _label259
  9882. subl $16, %esp
  9883. movl 8(%ebp), %eax
  9884. movl %eax, 0(%esp)
  9885. movl 16(%ebp), %eax
  9886. movl %eax, 4(%esp)
  9887. movl $21, %eax
  9888. movl %eax, 8(%esp)
  9889. movl 20(%ebp), %eax
  9890. movl %eax, 12(%esp)
  9891. call bitwise_shift_expr
  9892. addl $16, %esp
  9893. leave
  9894. ret
  9895. _label259:
  9896. subl $4, %esp
  9897. movl 8(%ebp), %eax
  9898. movl %eax, 0(%esp)
  9899. call parser_lexer_hold
  9900. addl $4, %esp
  9901. movl 16(%ebp), %eax
  9902. leave
  9903. ret
  9904. bitwise_shift_expr:
  9905. pushl %ebp
  9906. movl %esp, %ebp
  9907. subl $12, %esp
  9908. subl $4, %esp
  9909. movl 8(%ebp), %eax
  9910. movl %eax, 0(%esp)
  9911. call parser_lex
  9912. addl $4, %esp
  9913. movl %eax, -4(%ebp)
  9914. subl $4, %esp
  9915. movl 8(%ebp), %eax
  9916. movl %eax, 0(%esp)
  9917. call parser_token_location
  9918. addl $4, %esp
  9919. movl %eax, -12(%ebp)
  9920. subl $16, %esp
  9921. movl 8(%ebp), %eax
  9922. movl %eax, 0(%esp)
  9923. movl -4(%ebp), %eax
  9924. movl %eax, 4(%esp)
  9925. movl $0, %eax
  9926. movl %eax, 8(%esp)
  9927. movl -12(%ebp), %eax
  9928. movl %eax, 12(%esp)
  9929. call additive_expression
  9930. addl $16, %esp
  9931. movl %eax, -8(%ebp)
  9932. subl $16, %esp
  9933. movl 8(%ebp), %eax
  9934. movl %eax, 0(%esp)
  9935. movl $0, %eax
  9936. movl %eax, 4(%esp)
  9937. pushl %ebx
  9938. pushl %ecx
  9939. pushl %edx
  9940. pushl %esi
  9941. pushl %edi
  9942. subl $16, %esp
  9943. movl 16(%ebp), %eax
  9944. movl %eax, 0(%esp)
  9945. movl 20(%ebp), %eax
  9946. movl %eax, 4(%esp)
  9947. movl 12(%ebp), %eax
  9948. movl %eax, 8(%esp)
  9949. movl -8(%ebp), %eax
  9950. movl %eax, 12(%esp)
  9951. call tuple4
  9952. addl $16, %esp
  9953. popl %edi
  9954. popl %esi
  9955. popl %edx
  9956. popl %ecx
  9957. popl %ebx
  9958. movl %eax, 8(%esp)
  9959. movl 20(%ebp), %eax
  9960. movl %eax, 12(%esp)
  9961. call bitwise_shift_expression
  9962. addl $16, %esp
  9963. leave
  9964. ret
  9965. additive_expression:
  9966. pushl %ebp
  9967. movl %esp, %ebp
  9968. subl $4, %esp
  9969. movl 16(%ebp), %eax
  9970. movl %eax, %edx
  9971. movl $0, %eax
  9972. cmpl %eax, %edx
  9973. sete %al
  9974. movzbl %al, %eax
  9975. cmpl $0, %eax
  9976. je _label260
  9977. subl $16, %esp
  9978. movl 8(%ebp), %eax
  9979. movl %eax, 0(%esp)
  9980. movl 12(%ebp), %eax
  9981. movl %eax, 4(%esp)
  9982. movl $0, %eax
  9983. movl %eax, 8(%esp)
  9984. movl 20(%ebp), %eax
  9985. movl %eax, 12(%esp)
  9986. call multiplicative_expression
  9987. addl $16, %esp
  9988. movl %eax, 16(%ebp)
  9989. _label260:
  9990. subl $4, %esp
  9991. movl 8(%ebp), %eax
  9992. movl %eax, 0(%esp)
  9993. call parser_lex
  9994. addl $4, %esp
  9995. movl %eax, -4(%ebp)
  9996. movl -4(%ebp), %eax
  9997. movl %eax, %edx
  9998. movl $43, %eax
  9999. cmpl %eax, %edx
  10000. sete %al
  10001. movzbl %al, %eax
  10002. cmpl $0, %eax
  10003. je _label261
  10004. subl $16, %esp
  10005. movl 8(%ebp), %eax
  10006. movl %eax, 0(%esp)
  10007. movl 16(%ebp), %eax
  10008. movl %eax, 4(%esp)
  10009. movl $18, %eax
  10010. movl %eax, 8(%esp)
  10011. movl 20(%ebp), %eax
  10012. movl %eax, 12(%esp)
  10013. call additive_expr
  10014. addl $16, %esp
  10015. leave
  10016. ret
  10017. _label261:
  10018. movl -4(%ebp), %eax
  10019. movl %eax, %edx
  10020. movl $45, %eax
  10021. cmpl %eax, %edx
  10022. sete %al
  10023. movzbl %al, %eax
  10024. cmpl $0, %eax
  10025. je _label262
  10026. subl $16, %esp
  10027. movl 8(%ebp), %eax
  10028. movl %eax, 0(%esp)
  10029. movl 16(%ebp), %eax
  10030. movl %eax, 4(%esp)
  10031. movl $19, %eax
  10032. movl %eax, 8(%esp)
  10033. movl 20(%ebp), %eax
  10034. movl %eax, 12(%esp)
  10035. call additive_expr
  10036. addl $16, %esp
  10037. leave
  10038. ret
  10039. _label262:
  10040. subl $4, %esp
  10041. movl 8(%ebp), %eax
  10042. movl %eax, 0(%esp)
  10043. call parser_lexer_hold
  10044. addl $4, %esp
  10045. movl 16(%ebp), %eax
  10046. leave
  10047. ret
  10048. additive_expr:
  10049. pushl %ebp
  10050. movl %esp, %ebp
  10051. subl $12, %esp
  10052. subl $4, %esp
  10053. movl 8(%ebp), %eax
  10054. movl %eax, 0(%esp)
  10055. call parser_lex
  10056. addl $4, %esp
  10057. movl %eax, -4(%ebp)
  10058. subl $4, %esp
  10059. movl 8(%ebp), %eax
  10060. movl %eax, 0(%esp)
  10061. call parser_token_location
  10062. addl $4, %esp
  10063. movl %eax, -12(%ebp)
  10064. subl $16, %esp
  10065. movl 8(%ebp), %eax
  10066. movl %eax, 0(%esp)
  10067. movl -4(%ebp), %eax
  10068. movl %eax, 4(%esp)
  10069. movl $0, %eax
  10070. movl %eax, 8(%esp)
  10071. movl -12(%ebp), %eax
  10072. movl %eax, 12(%esp)
  10073. call multiplicative_expression
  10074. addl $16, %esp
  10075. movl %eax, -8(%ebp)
  10076. subl $16, %esp
  10077. movl 8(%ebp), %eax
  10078. movl %eax, 0(%esp)
  10079. movl $0, %eax
  10080. movl %eax, 4(%esp)
  10081. pushl %ebx
  10082. pushl %ecx
  10083. pushl %edx
  10084. pushl %esi
  10085. pushl %edi
  10086. subl $16, %esp
  10087. movl 16(%ebp), %eax
  10088. movl %eax, 0(%esp)
  10089. movl 20(%ebp), %eax
  10090. movl %eax, 4(%esp)
  10091. movl 12(%ebp), %eax
  10092. movl %eax, 8(%esp)
  10093. movl -8(%ebp), %eax
  10094. movl %eax, 12(%esp)
  10095. call tuple4
  10096. addl $16, %esp
  10097. popl %edi
  10098. popl %esi
  10099. popl %edx
  10100. popl %ecx
  10101. popl %ebx
  10102. movl %eax, 8(%esp)
  10103. movl 20(%ebp), %eax
  10104. movl %eax, 12(%esp)
  10105. call additive_expression
  10106. addl $16, %esp
  10107. leave
  10108. ret
  10109. multiplicative_expression:
  10110. pushl %ebp
  10111. movl %esp, %ebp
  10112. subl $4, %esp
  10113. movl 16(%ebp), %eax
  10114. movl %eax, %edx
  10115. movl $0, %eax
  10116. cmpl %eax, %edx
  10117. sete %al
  10118. movzbl %al, %eax
  10119. cmpl $0, %eax
  10120. je _label263
  10121. subl $12, %esp
  10122. movl 8(%ebp), %eax
  10123. movl %eax, 0(%esp)
  10124. movl 12(%ebp), %eax
  10125. movl %eax, 4(%esp)
  10126. movl 20(%ebp), %eax
  10127. movl %eax, 8(%esp)
  10128. call prefix_expression
  10129. addl $12, %esp
  10130. movl %eax, 16(%ebp)
  10131. _label263:
  10132. subl $4, %esp
  10133. movl 8(%ebp), %eax
  10134. movl %eax, 0(%esp)
  10135. call parser_lex
  10136. addl $4, %esp
  10137. movl %eax, -4(%ebp)
  10138. movl -4(%ebp), %eax
  10139. movl %eax, %edx
  10140. movl $42, %eax
  10141. cmpl %eax, %edx
  10142. sete %al
  10143. movzbl %al, %eax
  10144. cmpl $0, %eax
  10145. je _label264
  10146. subl $16, %esp
  10147. movl 8(%ebp), %eax
  10148. movl %eax, 0(%esp)
  10149. movl 16(%ebp), %eax
  10150. movl %eax, 4(%esp)
  10151. movl $15, %eax
  10152. movl %eax, 8(%esp)
  10153. movl 20(%ebp), %eax
  10154. movl %eax, 12(%esp)
  10155. call multiplicative_expr
  10156. addl $16, %esp
  10157. leave
  10158. ret
  10159. _label264:
  10160. movl -4(%ebp), %eax
  10161. movl %eax, %edx
  10162. movl $47, %eax
  10163. cmpl %eax, %edx
  10164. sete %al
  10165. movzbl %al, %eax
  10166. cmpl $0, %eax
  10167. je _label265
  10168. subl $16, %esp
  10169. movl 8(%ebp), %eax
  10170. movl %eax, 0(%esp)
  10171. movl 16(%ebp), %eax
  10172. movl %eax, 4(%esp)
  10173. movl $16, %eax
  10174. movl %eax, 8(%esp)
  10175. movl 20(%ebp), %eax
  10176. movl %eax, 12(%esp)
  10177. call multiplicative_expr
  10178. addl $16, %esp
  10179. leave
  10180. ret
  10181. _label265:
  10182. movl -4(%ebp), %eax
  10183. movl %eax, %edx
  10184. movl $37, %eax
  10185. cmpl %eax, %edx
  10186. sete %al
  10187. movzbl %al, %eax
  10188. cmpl $0, %eax
  10189. je _label266
  10190. subl $16, %esp
  10191. movl 8(%ebp), %eax
  10192. movl %eax, 0(%esp)
  10193. movl 16(%ebp), %eax
  10194. movl %eax, 4(%esp)
  10195. movl $17, %eax
  10196. movl %eax, 8(%esp)
  10197. movl 20(%ebp), %eax
  10198. movl %eax, 12(%esp)
  10199. call multiplicative_expr
  10200. addl $16, %esp
  10201. leave
  10202. ret
  10203. _label266:
  10204. subl $4, %esp
  10205. movl 8(%ebp), %eax
  10206. movl %eax, 0(%esp)
  10207. call parser_lexer_hold
  10208. addl $4, %esp
  10209. movl 16(%ebp), %eax
  10210. leave
  10211. ret
  10212. multiplicative_expr:
  10213. pushl %ebp
  10214. movl %esp, %ebp
  10215. subl $12, %esp
  10216. subl $4, %esp
  10217. movl 8(%ebp), %eax
  10218. movl %eax, 0(%esp)
  10219. call parser_lex
  10220. addl $4, %esp
  10221. movl %eax, -4(%ebp)
  10222. subl $4, %esp
  10223. movl 8(%ebp), %eax
  10224. movl %eax, 0(%esp)
  10225. call parser_token_location
  10226. addl $4, %esp
  10227. movl %eax, -12(%ebp)
  10228. subl $12, %esp
  10229. movl 8(%ebp), %eax
  10230. movl %eax, 0(%esp)
  10231. movl -4(%ebp), %eax
  10232. movl %eax, 4(%esp)
  10233. movl -12(%ebp), %eax
  10234. movl %eax, 8(%esp)
  10235. call prefix_expression
  10236. addl $12, %esp
  10237. movl %eax, -8(%ebp)
  10238. subl $16, %esp
  10239. movl 8(%ebp), %eax
  10240. movl %eax, 0(%esp)
  10241. movl $0, %eax
  10242. movl %eax, 4(%esp)
  10243. pushl %ebx
  10244. pushl %ecx
  10245. pushl %edx
  10246. pushl %esi
  10247. pushl %edi
  10248. subl $16, %esp
  10249. movl 16(%ebp), %eax
  10250. movl %eax, 0(%esp)
  10251. movl 20(%ebp), %eax
  10252. movl %eax, 4(%esp)
  10253. movl 12(%ebp), %eax
  10254. movl %eax, 8(%esp)
  10255. movl -8(%ebp), %eax
  10256. movl %eax, 12(%esp)
  10257. call tuple4
  10258. addl $16, %esp
  10259. popl %edi
  10260. popl %esi
  10261. popl %edx
  10262. popl %ecx
  10263. popl %ebx
  10264. movl %eax, 8(%esp)
  10265. movl 20(%ebp), %eax
  10266. movl %eax, 12(%esp)
  10267. call multiplicative_expression
  10268. addl $16, %esp
  10269. leave
  10270. ret
  10271. prefix_expression:
  10272. pushl %ebp
  10273. movl %esp, %ebp
  10274. movl 12(%ebp), %eax
  10275. movl %eax, %edx
  10276. movl $43, %eax
  10277. cmpl %eax, %edx
  10278. sete %al
  10279. movzbl %al, %eax
  10280. cmpl $0, %eax
  10281. je _label268
  10282. subl $12, %esp
  10283. movl 8(%ebp), %eax
  10284. movl %eax, 0(%esp)
  10285. movl $9, %eax
  10286. movl %eax, 4(%esp)
  10287. movl 16(%ebp), %eax
  10288. movl %eax, 8(%esp)
  10289. call prefix_expr
  10290. addl $12, %esp
  10291. leave
  10292. ret
  10293. jmp _label267
  10294. _label268:
  10295. movl 12(%ebp), %eax
  10296. movl %eax, %edx
  10297. movl $45, %eax
  10298. cmpl %eax, %edx
  10299. sete %al
  10300. movzbl %al, %eax
  10301. cmpl $0, %eax
  10302. je _label269
  10303. subl $12, %esp
  10304. movl 8(%ebp), %eax
  10305. movl %eax, 0(%esp)
  10306. movl $10, %eax
  10307. movl %eax, 4(%esp)
  10308. movl 16(%ebp), %eax
  10309. movl %eax, 8(%esp)
  10310. call prefix_expr
  10311. addl $12, %esp
  10312. leave
  10313. ret
  10314. jmp _label267
  10315. _label269:
  10316. movl 12(%ebp), %eax
  10317. movl %eax, %edx
  10318. movl $33, %eax
  10319. cmpl %eax, %edx
  10320. sete %al
  10321. movzbl %al, %eax
  10322. cmpl $0, %eax
  10323. je _label270
  10324. subl $12, %esp
  10325. movl 8(%ebp), %eax
  10326. movl %eax, 0(%esp)
  10327. movl $11, %eax
  10328. movl %eax, 4(%esp)
  10329. movl 16(%ebp), %eax
  10330. movl %eax, 8(%esp)
  10331. call prefix_expr
  10332. addl $12, %esp
  10333. leave
  10334. ret
  10335. jmp _label267
  10336. _label270:
  10337. movl 12(%ebp), %eax
  10338. movl %eax, %edx
  10339. movl $126, %eax
  10340. cmpl %eax, %edx
  10341. sete %al
  10342. movzbl %al, %eax
  10343. cmpl $0, %eax
  10344. je _label271
  10345. subl $12, %esp
  10346. movl 8(%ebp), %eax
  10347. movl %eax, 0(%esp)
  10348. movl $12, %eax
  10349. movl %eax, 4(%esp)
  10350. movl 16(%ebp), %eax
  10351. movl %eax, 8(%esp)
  10352. call prefix_expr
  10353. addl $12, %esp
  10354. leave
  10355. ret
  10356. jmp _label267
  10357. _label271:
  10358. movl 12(%ebp), %eax
  10359. movl %eax, %edx
  10360. movl $42, %eax
  10361. cmpl %eax, %edx
  10362. sete %al
  10363. movzbl %al, %eax
  10364. cmpl $0, %eax
  10365. je _label272
  10366. subl $12, %esp
  10367. movl 8(%ebp), %eax
  10368. movl %eax, 0(%esp)
  10369. movl $13, %eax
  10370. movl %eax, 4(%esp)
  10371. movl 16(%ebp), %eax
  10372. movl %eax, 8(%esp)
  10373. call prefix_expr
  10374. addl $12, %esp
  10375. leave
  10376. ret
  10377. jmp _label267
  10378. _label272:
  10379. movl 12(%ebp), %eax
  10380. movl %eax, %edx
  10381. movl $38, %eax
  10382. cmpl %eax, %edx
  10383. sete %al
  10384. movzbl %al, %eax
  10385. cmpl $0, %eax
  10386. je _label273
  10387. subl $12, %esp
  10388. movl 8(%ebp), %eax
  10389. movl %eax, 0(%esp)
  10390. movl $14, %eax
  10391. movl %eax, 4(%esp)
  10392. movl 16(%ebp), %eax
  10393. movl %eax, 8(%esp)
  10394. call prefix_expr
  10395. addl $12, %esp
  10396. leave
  10397. ret
  10398. jmp _label267
  10399. _label273:
  10400. movl 12(%ebp), %eax
  10401. movl %eax, %edx
  10402. movl $320, %eax
  10403. cmpl %eax, %edx
  10404. sete %al
  10405. movzbl %al, %eax
  10406. cmpl $0, %eax
  10407. je _label274
  10408. subl $12, %esp
  10409. movl 8(%ebp), %eax
  10410. movl %eax, 0(%esp)
  10411. movl $44, %eax
  10412. movl %eax, 4(%esp)
  10413. movl 16(%ebp), %eax
  10414. movl %eax, 8(%esp)
  10415. call prefix_expr
  10416. addl $12, %esp
  10417. leave
  10418. ret
  10419. jmp _label267
  10420. _label274:
  10421. movl 12(%ebp), %eax
  10422. movl %eax, %edx
  10423. movl $319, %eax
  10424. cmpl %eax, %edx
  10425. sete %al
  10426. movzbl %al, %eax
  10427. cmpl $0, %eax
  10428. je _label275
  10429. subl $12, %esp
  10430. movl 8(%ebp), %eax
  10431. movl %eax, 0(%esp)
  10432. movl $45, %eax
  10433. movl %eax, 4(%esp)
  10434. movl 16(%ebp), %eax
  10435. movl %eax, 8(%esp)
  10436. call prefix_expr
  10437. addl $12, %esp
  10438. leave
  10439. ret
  10440. jmp _label267
  10441. _label275:
  10442. subl $12, %esp
  10443. movl 8(%ebp), %eax
  10444. movl %eax, 0(%esp)
  10445. movl 12(%ebp), %eax
  10446. movl %eax, 4(%esp)
  10447. movl 16(%ebp), %eax
  10448. movl %eax, 8(%esp)
  10449. call simple_expression
  10450. addl $12, %esp
  10451. leave
  10452. ret
  10453. _label267:
  10454. leave
  10455. ret
  10456. prefix_expr:
  10457. pushl %ebp
  10458. movl %esp, %ebp
  10459. subl $12, %esp
  10460. subl $4, %esp
  10461. movl 8(%ebp), %eax
  10462. movl %eax, 0(%esp)
  10463. call parser_lex
  10464. addl $4, %esp
  10465. movl %eax, -4(%ebp)
  10466. subl $4, %esp
  10467. movl 8(%ebp), %eax
  10468. movl %eax, 0(%esp)
  10469. call parser_token_location
  10470. addl $4, %esp
  10471. movl %eax, -8(%ebp)
  10472. subl $12, %esp
  10473. movl 8(%ebp), %eax
  10474. movl %eax, 0(%esp)
  10475. movl -4(%ebp), %eax
  10476. movl %eax, 4(%esp)
  10477. movl -8(%ebp), %eax
  10478. movl %eax, 8(%esp)
  10479. call prefix_expression
  10480. addl $12, %esp
  10481. movl %eax, -12(%ebp)
  10482. subl $12, %esp
  10483. movl 12(%ebp), %eax
  10484. movl %eax, 0(%esp)
  10485. movl 16(%ebp), %eax
  10486. movl %eax, 4(%esp)
  10487. movl -12(%ebp), %eax
  10488. movl %eax, 8(%esp)
  10489. call tuple3
  10490. addl $12, %esp
  10491. leave
  10492. ret
  10493. simple_expression:
  10494. pushl %ebp
  10495. movl %esp, %ebp
  10496. movl 12(%ebp), %eax
  10497. movl %eax, %edx
  10498. movl $258, %eax
  10499. cmpl %eax, %edx
  10500. sete %al
  10501. movzbl %al, %eax
  10502. cmpl $0, %eax
  10503. je _label276
  10504. subl $8, %esp
  10505. movl 8(%ebp), %eax
  10506. movl %eax, 0(%esp)
  10507. movl 16(%ebp), %eax
  10508. movl %eax, 4(%esp)
  10509. call simple_identifier_expression
  10510. addl $8, %esp
  10511. leave
  10512. ret
  10513. _label276:
  10514. movl 12(%ebp), %eax
  10515. movl %eax, %edx
  10516. movl $260, %eax
  10517. cmpl %eax, %edx
  10518. sete %al
  10519. movzbl %al, %eax
  10520. cmpl $0, %eax
  10521. je _label277
  10522. subl $12, %esp
  10523. movl 8(%ebp), %eax
  10524. movl %eax, 0(%esp)
  10525. movl $1, %eax
  10526. movl %eax, 4(%esp)
  10527. movl 16(%ebp), %eax
  10528. movl %eax, 8(%esp)
  10529. call simple_argvar_expression
  10530. addl $12, %esp
  10531. leave
  10532. ret
  10533. _label277:
  10534. movl 12(%ebp), %eax
  10535. movl %eax, %edx
  10536. movl $261, %eax
  10537. cmpl %eax, %edx
  10538. sete %al
  10539. movzbl %al, %eax
  10540. cmpl $0, %eax
  10541. je _label278
  10542. subl $12, %esp
  10543. movl 8(%ebp), %eax
  10544. movl %eax, 0(%esp)
  10545. movl $0, %eax
  10546. movl %eax, 4(%esp)
  10547. movl 16(%ebp), %eax
  10548. movl %eax, 8(%esp)
  10549. call simple_argvar_expression
  10550. addl $12, %esp
  10551. leave
  10552. ret
  10553. _label278:
  10554. movl 12(%ebp), %eax
  10555. movl %eax, %edx
  10556. movl $280, %eax
  10557. cmpl %eax, %edx
  10558. sete %al
  10559. movzbl %al, %eax
  10560. cmpl $0, %eax
  10561. je _label279
  10562. subl $8, %esp
  10563. movl 8(%ebp), %eax
  10564. movl %eax, 0(%esp)
  10565. movl 16(%ebp), %eax
  10566. movl %eax, 4(%esp)
  10567. call simple_syscall_expression
  10568. addl $8, %esp
  10569. leave
  10570. ret
  10571. _label279:
  10572. movl 12(%ebp), %eax
  10573. movl %eax, %edx
  10574. movl $284, %eax
  10575. cmpl %eax, %edx
  10576. sete %al
  10577. movzbl %al, %eax
  10578. cmpl $0, %eax
  10579. je _label280
  10580. subl $8, %esp
  10581. movl 8(%ebp), %eax
  10582. movl %eax, 0(%esp)
  10583. movl 16(%ebp), %eax
  10584. movl %eax, 4(%esp)
  10585. call simple_readchar_expression
  10586. addl $8, %esp
  10587. leave
  10588. ret
  10589. _label280:
  10590. movl 12(%ebp), %eax
  10591. movl %eax, %edx
  10592. movl $40, %eax
  10593. cmpl %eax, %edx
  10594. sete %al
  10595. movzbl %al, %eax
  10596. cmpl $0, %eax
  10597. je _label281
  10598. subl $8, %esp
  10599. movl 8(%ebp), %eax
  10600. movl %eax, 0(%esp)
  10601. movl 16(%ebp), %eax
  10602. movl %eax, 4(%esp)
  10603. call simple_parantheses_expression
  10604. addl $8, %esp
  10605. leave
  10606. ret
  10607. _label281:
  10608. subl $8, %esp
  10609. movl 8(%ebp), %eax
  10610. movl %eax, 0(%esp)
  10611. pushl %ebx
  10612. pushl %ecx
  10613. pushl %edx
  10614. pushl %esi
  10615. pushl %edi
  10616. subl $12, %esp
  10617. movl 8(%ebp), %eax
  10618. movl %eax, 0(%esp)
  10619. movl 12(%ebp), %eax
  10620. movl %eax, 4(%esp)
  10621. movl 16(%ebp), %eax
  10622. movl %eax, 8(%esp)
  10623. call constant_expression
  10624. addl $12, %esp
  10625. popl %edi
  10626. popl %esi
  10627. popl %edx
  10628. popl %ecx
  10629. popl %ebx
  10630. movl %eax, 4(%esp)
  10631. call simple_postfix_expression
  10632. addl $8, %esp
  10633. leave
  10634. ret
  10635. simple_identifier_expression:
  10636. pushl %ebp
  10637. movl %esp, %ebp
  10638. subl $4, %esp
  10639. subl $4, %esp
  10640. pushl %ebx
  10641. pushl %ecx
  10642. pushl %edx
  10643. pushl %esi
  10644. pushl %edi
  10645. subl $4, %esp
  10646. pushl %ebx
  10647. pushl %ecx
  10648. pushl %edx
  10649. pushl %esi
  10650. pushl %edi
  10651. subl $4, %esp
  10652. movl 8(%ebp), %eax
  10653. movl %eax, 0(%esp)
  10654. call parser_lexer
  10655. addl $4, %esp
  10656. popl %edi
  10657. popl %esi
  10658. popl %edx
  10659. popl %ecx
  10660. popl %ebx
  10661. movl %eax, 0(%esp)
  10662. call lexer_token_text
  10663. addl $4, %esp
  10664. popl %edi
  10665. popl %esi
  10666. popl %edx
  10667. popl %ecx
  10668. popl %ebx
  10669. movl %eax, 0(%esp)
  10670. call strdup
  10671. addl $4, %esp
  10672. movl %eax, -4(%ebp)
  10673. subl $8, %esp
  10674. movl 8(%ebp), %eax
  10675. movl %eax, 0(%esp)
  10676. pushl %ebx
  10677. pushl %ecx
  10678. pushl %edx
  10679. pushl %esi
  10680. pushl %edi
  10681. subl $12, %esp
  10682. movl $2, %eax
  10683. movl %eax, 0(%esp)
  10684. movl 12(%ebp), %eax
  10685. movl %eax, 4(%esp)
  10686. movl -4(%ebp), %eax
  10687. movl %eax, 8(%esp)
  10688. call tuple3
  10689. addl $12, %esp
  10690. popl %edi
  10691. popl %esi
  10692. popl %edx
  10693. popl %ecx
  10694. popl %ebx
  10695. movl %eax, 4(%esp)
  10696. call simple_postfix_expression
  10697. addl $8, %esp
  10698. leave
  10699. ret
  10700. simple_argvar_expression:
  10701. pushl %ebp
  10702. movl %esp, %ebp
  10703. subl $4, %esp
  10704. movl $4, %eax
  10705. movl %eax, -4(%ebp)
  10706. movl 12(%ebp), %eax
  10707. cmpl $0, %eax
  10708. je _label282
  10709. movl $3, %eax
  10710. movl %eax, -4(%ebp)
  10711. _label282:
  10712. subl $8, %esp
  10713. movl 8(%ebp), %eax
  10714. movl %eax, 0(%esp)
  10715. pushl %ebx
  10716. pushl %ecx
  10717. pushl %edx
  10718. pushl %esi
  10719. pushl %edi
  10720. subl $12, %esp
  10721. movl -4(%ebp), %eax
  10722. movl %eax, 0(%esp)
  10723. movl 16(%ebp), %eax
  10724. movl %eax, 4(%esp)
  10725. pushl %ebx
  10726. pushl %ecx
  10727. pushl %edx
  10728. pushl %esi
  10729. pushl %edi
  10730. subl $4, %esp
  10731. pushl %ebx
  10732. pushl %ecx
  10733. pushl %edx
  10734. pushl %esi
  10735. pushl %edi
  10736. subl $4, %esp
  10737. movl 8(%ebp), %eax
  10738. movl %eax, 0(%esp)
  10739. call parser_lexer
  10740. addl $4, %esp
  10741. popl %edi
  10742. popl %esi
  10743. popl %edx
  10744. popl %ecx
  10745. popl %ebx
  10746. movl %eax, 0(%esp)
  10747. call lexer_token_value
  10748. addl $4, %esp
  10749. popl %edi
  10750. popl %esi
  10751. popl %edx
  10752. popl %ecx
  10753. popl %ebx
  10754. movl %eax, 8(%esp)
  10755. call tuple3
  10756. addl $12, %esp
  10757. popl %edi
  10758. popl %esi
  10759. popl %edx
  10760. popl %ecx
  10761. popl %ebx
  10762. movl %eax, 4(%esp)
  10763. call simple_postfix_expression
  10764. addl $8, %esp
  10765. leave
  10766. ret
  10767. simple_syscall_expression:
  10768. pushl %ebp
  10769. movl %esp, %ebp
  10770. subl $12, %esp
  10771. subl $8, %esp
  10772. movl $0, %eax
  10773. movl %eax, 0(%esp)
  10774. movl $1, %eax
  10775. movl %eax, 4(%esp)
  10776. call vector
  10777. addl $8, %esp
  10778. movl %eax, -4(%ebp)
  10779. subl $4, %esp
  10780. movl 8(%ebp), %eax
  10781. movl %eax, 0(%esp)
  10782. call parser_lex
  10783. addl $4, %esp
  10784. movl %eax, -8(%ebp)
  10785. movl -8(%ebp), %eax
  10786. movl %eax, %edx
  10787. movl $40, %eax
  10788. cmpl %eax, %edx
  10789. setne %al
  10790. movzbl %al, %eax
  10791. cmpl $0, %eax
  10792. je _label283
  10793. movl $simple_syscall_expression_invalid, %eax
  10794. jmp *%eax
  10795. _label283:
  10796. simple_syscall_expression_loop:
  10797. subl $4, %esp
  10798. movl 8(%ebp), %eax
  10799. movl %eax, 0(%esp)
  10800. call parser_lex
  10801. addl $4, %esp
  10802. movl %eax, -8(%ebp)
  10803. subl $8, %esp
  10804. movl 8(%ebp), %eax
  10805. movl %eax, 0(%esp)
  10806. movl -8(%ebp), %eax
  10807. movl %eax, 4(%esp)
  10808. call expression
  10809. addl $8, %esp
  10810. movl %eax, -12(%ebp)
  10811. subl $8, %esp
  10812. movl -4(%ebp), %eax
  10813. movl %eax, 0(%esp)
  10814. movl -12(%ebp), %eax
  10815. movl %eax, 4(%esp)
  10816. call vector_push
  10817. addl $8, %esp
  10818. subl $4, %esp
  10819. movl 8(%ebp), %eax
  10820. movl %eax, 0(%esp)
  10821. call parser_lex
  10822. addl $4, %esp
  10823. movl %eax, -8(%ebp)
  10824. movl -8(%ebp), %eax
  10825. movl %eax, %edx
  10826. movl $44, %eax
  10827. cmpl %eax, %edx
  10828. sete %al
  10829. movzbl %al, %eax
  10830. cmpl $0, %eax
  10831. je _label284
  10832. movl $simple_syscall_expression_loop, %eax
  10833. jmp *%eax
  10834. _label284:
  10835. movl -8(%ebp), %eax
  10836. movl %eax, %edx
  10837. movl $41, %eax
  10838. cmpl %eax, %edx
  10839. setne %al
  10840. movzbl %al, %eax
  10841. cmpl $0, %eax
  10842. je _label285
  10843. movl $simple_syscall_expression_invalid, %eax
  10844. jmp *%eax
  10845. _label285:
  10846. subl $4, %esp
  10847. movl -4(%ebp), %eax
  10848. movl %eax, 0(%esp)
  10849. call vector_size
  10850. addl $4, %esp
  10851. movl %eax, %edx
  10852. movl $7, %eax
  10853. cmpl %eax, %edx
  10854. setg %al
  10855. movzbl %al, %eax
  10856. cmpl $0, %eax
  10857. je _label286
  10858. movl $simple_syscall_expression_too_many, %eax
  10859. jmp *%eax
  10860. _label286:
  10861. subl $8, %esp
  10862. movl 8(%ebp), %eax
  10863. movl %eax, 0(%esp)
  10864. pushl %ebx
  10865. pushl %ecx
  10866. pushl %edx
  10867. pushl %esi
  10868. pushl %edi
  10869. subl $12, %esp
  10870. movl $5, %eax
  10871. movl %eax, 0(%esp)
  10872. movl 12(%ebp), %eax
  10873. movl %eax, 4(%esp)
  10874. movl -4(%ebp), %eax
  10875. movl %eax, 8(%esp)
  10876. call tuple3
  10877. addl $12, %esp
  10878. popl %edi
  10879. popl %esi
  10880. popl %edx
  10881. popl %ecx
  10882. popl %ebx
  10883. movl %eax, 4(%esp)
  10884. call simple_postfix_expression
  10885. addl $8, %esp
  10886. leave
  10887. ret
  10888. simple_syscall_expression_invalid:
  10889. subl $12, %esp
  10890. movl 8(%ebp), %eax
  10891. movl %eax, 0(%esp)
  10892. movl 12(%ebp), %eax
  10893. movl %eax, 4(%esp)
  10894. movl $strbuf+1879, %eax
  10895. movl %eax, 8(%esp)
  10896. call parser_error
  10897. addl $12, %esp
  10898. simple_syscall_expression_too_many:
  10899. subl $12, %esp
  10900. movl 8(%ebp), %eax
  10901. movl %eax, 0(%esp)
  10902. movl 12(%ebp), %eax
  10903. movl %eax, 4(%esp)
  10904. movl $strbuf+1906, %eax
  10905. movl %eax, 8(%esp)
  10906. call parser_error
  10907. addl $12, %esp
  10908. leave
  10909. ret
  10910. simple_readchar_expression:
  10911. pushl %ebp
  10912. movl %esp, %ebp
  10913. subl $12, %esp
  10914. subl $4, %esp
  10915. movl 8(%ebp), %eax
  10916. movl %eax, 0(%esp)
  10917. call parser_lex
  10918. addl $4, %esp
  10919. movl %eax, -4(%ebp)
  10920. movl -4(%ebp), %eax
  10921. movl %eax, %edx
  10922. movl $40, %eax
  10923. cmpl %eax, %edx
  10924. setne %al
  10925. movzbl %al, %eax
  10926. cmpl $0, %eax
  10927. je _label287
  10928. movl $simple_readchar_expression_invalid, %eax
  10929. jmp *%eax
  10930. _label287:
  10931. subl $4, %esp
  10932. movl 8(%ebp), %eax
  10933. movl %eax, 0(%esp)
  10934. call parser_lex
  10935. addl $4, %esp
  10936. movl %eax, -4(%ebp)
  10937. subl $8, %esp
  10938. movl 8(%ebp), %eax
  10939. movl %eax, 0(%esp)
  10940. movl -4(%ebp), %eax
  10941. movl %eax, 4(%esp)
  10942. call expression
  10943. addl $8, %esp
  10944. movl %eax, -8(%ebp)
  10945. subl $4, %esp
  10946. movl 8(%ebp), %eax
  10947. movl %eax, 0(%esp)
  10948. call parser_lex
  10949. addl $4, %esp
  10950. movl %eax, -4(%ebp)
  10951. movl -4(%ebp), %eax
  10952. movl %eax, %edx
  10953. movl $44, %eax
  10954. cmpl %eax, %edx
  10955. setne %al
  10956. movzbl %al, %eax
  10957. cmpl $0, %eax
  10958. je _label288
  10959. movl $simple_readchar_expression_invalid, %eax
  10960. jmp *%eax
  10961. _label288:
  10962. subl $4, %esp
  10963. movl 8(%ebp), %eax
  10964. movl %eax, 0(%esp)
  10965. call parser_lex
  10966. addl $4, %esp
  10967. movl %eax, -4(%ebp)
  10968. subl $8, %esp
  10969. movl 8(%ebp), %eax
  10970. movl %eax, 0(%esp)
  10971. movl -4(%ebp), %eax
  10972. movl %eax, 4(%esp)
  10973. call expression
  10974. addl $8, %esp
  10975. movl %eax, -12(%ebp)
  10976. subl $4, %esp
  10977. movl 8(%ebp), %eax
  10978. movl %eax, 0(%esp)
  10979. call parser_lex
  10980. addl $4, %esp
  10981. movl %eax, -4(%ebp)
  10982. movl -4(%ebp), %eax
  10983. movl %eax, %edx
  10984. movl $41, %eax
  10985. cmpl %eax, %edx
  10986. setne %al
  10987. movzbl %al, %eax
  10988. cmpl $0, %eax
  10989. je _label289
  10990. movl $simple_readchar_expression_invalid, %eax
  10991. jmp *%eax
  10992. _label289:
  10993. subl $8, %esp
  10994. movl 8(%ebp), %eax
  10995. movl %eax, 0(%esp)
  10996. pushl %ebx
  10997. pushl %ecx
  10998. pushl %edx
  10999. pushl %esi
  11000. pushl %edi
  11001. subl $16, %esp
  11002. movl $6, %eax
  11003. movl %eax, 0(%esp)
  11004. movl 12(%ebp), %eax
  11005. movl %eax, 4(%esp)
  11006. movl -8(%ebp), %eax
  11007. movl %eax, 8(%esp)
  11008. movl -12(%ebp), %eax
  11009. movl %eax, 12(%esp)
  11010. call tuple4
  11011. addl $16, %esp
  11012. popl %edi
  11013. popl %esi
  11014. popl %edx
  11015. popl %ecx
  11016. popl %ebx
  11017. movl %eax, 4(%esp)
  11018. call simple_postfix_expression
  11019. addl $8, %esp
  11020. leave
  11021. ret
  11022. simple_readchar_expression_invalid:
  11023. subl $12, %esp
  11024. movl 8(%ebp), %eax
  11025. movl %eax, 0(%esp)
  11026. movl 12(%ebp), %eax
  11027. movl %eax, 4(%esp)
  11028. movl $strbuf+1947, %eax
  11029. movl %eax, 8(%esp)
  11030. call parser_error
  11031. addl $12, %esp
  11032. leave
  11033. ret
  11034. simple_parantheses_expression:
  11035. pushl %ebp
  11036. movl %esp, %ebp
  11037. subl $8, %esp
  11038. subl $4, %esp
  11039. movl 8(%ebp), %eax
  11040. movl %eax, 0(%esp)
  11041. call parser_lex
  11042. addl $4, %esp
  11043. movl %eax, -4(%ebp)
  11044. subl $8, %esp
  11045. movl 8(%ebp), %eax
  11046. movl %eax, 0(%esp)
  11047. movl -4(%ebp), %eax
  11048. movl %eax, 4(%esp)
  11049. call expression
  11050. addl $8, %esp
  11051. movl %eax, -8(%ebp)
  11052. subl $4, %esp
  11053. movl 8(%ebp), %eax
  11054. movl %eax, 0(%esp)
  11055. call parser_lex
  11056. addl $4, %esp
  11057. movl %eax, -4(%ebp)
  11058. movl -4(%ebp), %eax
  11059. movl %eax, %edx
  11060. movl $41, %eax
  11061. cmpl %eax, %edx
  11062. setne %al
  11063. movzbl %al, %eax
  11064. cmpl $0, %eax
  11065. je _label290
  11066. movl $simple_parantheses_expression_invalid, %eax
  11067. jmp *%eax
  11068. _label290:
  11069. subl $8, %esp
  11070. movl 8(%ebp), %eax
  11071. movl %eax, 0(%esp)
  11072. movl -8(%ebp), %eax
  11073. movl %eax, 4(%esp)
  11074. call simple_postfix_expression
  11075. addl $8, %esp
  11076. leave
  11077. ret
  11078. simple_parantheses_expression_invalid:
  11079. subl $12, %esp
  11080. movl 8(%ebp), %eax
  11081. movl %eax, 0(%esp)
  11082. movl 12(%ebp), %eax
  11083. movl %eax, 4(%esp)
  11084. movl $strbuf+1975, %eax
  11085. movl %eax, 8(%esp)
  11086. call parser_error
  11087. addl $12, %esp
  11088. leave
  11089. ret
  11090. simple_postfix_expression:
  11091. pushl %ebp
  11092. movl %esp, %ebp
  11093. subl $8, %esp
  11094. subl $4, %esp
  11095. movl 8(%ebp), %eax
  11096. movl %eax, 0(%esp)
  11097. call parser_lex
  11098. addl $4, %esp
  11099. movl %eax, -4(%ebp)
  11100. subl $4, %esp
  11101. movl 8(%ebp), %eax
  11102. movl %eax, 0(%esp)
  11103. call parser_token_location
  11104. addl $4, %esp
  11105. movl %eax, -8(%ebp)
  11106. movl -4(%ebp), %eax
  11107. movl %eax, %edx
  11108. movl $40, %eax
  11109. cmpl %eax, %edx
  11110. sete %al
  11111. movzbl %al, %eax
  11112. cmpl $0, %eax
  11113. je _label292
  11114. subl $12, %esp
  11115. movl 8(%ebp), %eax
  11116. movl %eax, 0(%esp)
  11117. movl 12(%ebp), %eax
  11118. movl %eax, 4(%esp)
  11119. movl -8(%ebp), %eax
  11120. movl %eax, 8(%esp)
  11121. call simple_address_call_expression
  11122. addl $12, %esp
  11123. leave
  11124. ret
  11125. jmp _label291
  11126. _label292:
  11127. movl -4(%ebp), %eax
  11128. movl %eax, %edx
  11129. movl $91, %eax
  11130. cmpl %eax, %edx
  11131. sete %al
  11132. movzbl %al, %eax
  11133. cmpl $0, %eax
  11134. je _label293
  11135. subl $12, %esp
  11136. movl 8(%ebp), %eax
  11137. movl %eax, 0(%esp)
  11138. movl 12(%ebp), %eax
  11139. movl %eax, 4(%esp)
  11140. movl -8(%ebp), %eax
  11141. movl %eax, 8(%esp)
  11142. call simple_address_index_expression
  11143. addl $12, %esp
  11144. leave
  11145. ret
  11146. jmp _label291
  11147. _label293:
  11148. movl -4(%ebp), %eax
  11149. movl %eax, %edx
  11150. movl $320, %eax
  11151. cmpl %eax, %edx
  11152. sete %al
  11153. movzbl %al, %eax
  11154. cmpl $0, %eax
  11155. je _label294
  11156. subl $8, %esp
  11157. movl 8(%ebp), %eax
  11158. movl %eax, 0(%esp)
  11159. pushl %ebx
  11160. pushl %ecx
  11161. pushl %edx
  11162. pushl %esi
  11163. pushl %edi
  11164. subl $12, %esp
  11165. movl $46, %eax
  11166. movl %eax, 0(%esp)
  11167. movl -8(%ebp), %eax
  11168. movl %eax, 4(%esp)
  11169. movl 12(%ebp), %eax
  11170. movl %eax, 8(%esp)
  11171. call tuple3
  11172. addl $12, %esp
  11173. popl %edi
  11174. popl %esi
  11175. popl %edx
  11176. popl %ecx
  11177. popl %ebx
  11178. movl %eax, 4(%esp)
  11179. call simple_postfix_expression
  11180. addl $8, %esp
  11181. leave
  11182. ret
  11183. jmp _label291
  11184. _label294:
  11185. movl -4(%ebp), %eax
  11186. movl %eax, %edx
  11187. movl $319, %eax
  11188. cmpl %eax, %edx
  11189. sete %al
  11190. movzbl %al, %eax
  11191. cmpl $0, %eax
  11192. je _label291
  11193. subl $8, %esp
  11194. movl 8(%ebp), %eax
  11195. movl %eax, 0(%esp)
  11196. pushl %ebx
  11197. pushl %ecx
  11198. pushl %edx
  11199. pushl %esi
  11200. pushl %edi
  11201. subl $12, %esp
  11202. movl $47, %eax
  11203. movl %eax, 0(%esp)
  11204. movl -8(%ebp), %eax
  11205. movl %eax, 4(%esp)
  11206. movl 12(%ebp), %eax
  11207. movl %eax, 8(%esp)
  11208. call tuple3
  11209. addl $12, %esp
  11210. popl %edi
  11211. popl %esi
  11212. popl %edx
  11213. popl %ecx
  11214. popl %ebx
  11215. movl %eax, 4(%esp)
  11216. call simple_postfix_expression
  11217. addl $8, %esp
  11218. leave
  11219. ret
  11220. _label291:
  11221. subl $4, %esp
  11222. movl 8(%ebp), %eax
  11223. movl %eax, 0(%esp)
  11224. call parser_lexer_hold
  11225. addl $4, %esp
  11226. subl $4, %esp
  11227. movl -8(%ebp), %eax
  11228. movl %eax, 0(%esp)
  11229. call free
  11230. addl $4, %esp
  11231. movl 12(%ebp), %eax
  11232. leave
  11233. ret
  11234. simple_address_call_expression:
  11235. pushl %ebp
  11236. movl %esp, %ebp
  11237. subl $12, %esp
  11238. subl $8, %esp
  11239. movl $0, %eax
  11240. movl %eax, 0(%esp)
  11241. movl $1, %eax
  11242. movl %eax, 4(%esp)
  11243. call vector
  11244. addl $8, %esp
  11245. movl %eax, -4(%ebp)
  11246. subl $8, %esp
  11247. movl -4(%ebp), %eax
  11248. movl %eax, 0(%esp)
  11249. movl 12(%ebp), %eax
  11250. movl %eax, 4(%esp)
  11251. call vector_push
  11252. addl $8, %esp
  11253. simple_address_call_expression_loop:
  11254. subl $4, %esp
  11255. movl 8(%ebp), %eax
  11256. movl %eax, 0(%esp)
  11257. call parser_lex
  11258. addl $4, %esp
  11259. movl %eax, -8(%ebp)
  11260. movl -8(%ebp), %eax
  11261. movl %eax, %edx
  11262. movl $41, %eax
  11263. cmpl %eax, %edx
  11264. sete %al
  11265. movzbl %al, %eax
  11266. cmpl $0, %eax
  11267. je _label295
  11268. movl $simple_address_call_expression_end, %eax
  11269. jmp *%eax
  11270. _label295:
  11271. subl $8, %esp
  11272. movl 8(%ebp), %eax
  11273. movl %eax, 0(%esp)
  11274. movl -8(%ebp), %eax
  11275. movl %eax, 4(%esp)
  11276. call expression
  11277. addl $8, %esp
  11278. movl %eax, -12(%ebp)
  11279. subl $8, %esp
  11280. movl -4(%ebp), %eax
  11281. movl %eax, 0(%esp)
  11282. movl -12(%ebp), %eax
  11283. movl %eax, 4(%esp)
  11284. call vector_push
  11285. addl $8, %esp
  11286. subl $4, %esp
  11287. movl 8(%ebp), %eax
  11288. movl %eax, 0(%esp)
  11289. call parser_lex
  11290. addl $4, %esp
  11291. movl %eax, -8(%ebp)
  11292. movl -8(%ebp), %eax
  11293. movl %eax, %edx
  11294. movl $44, %eax
  11295. cmpl %eax, %edx
  11296. sete %al
  11297. movzbl %al, %eax
  11298. cmpl $0, %eax
  11299. je _label296
  11300. movl $simple_address_call_expression_loop, %eax
  11301. jmp *%eax
  11302. _label296:
  11303. movl -8(%ebp), %eax
  11304. movl %eax, %edx
  11305. movl $41, %eax
  11306. cmpl %eax, %edx
  11307. setne %al
  11308. movzbl %al, %eax
  11309. cmpl $0, %eax
  11310. je _label297
  11311. movl $simple_address_call_expression_invalid, %eax
  11312. jmp *%eax
  11313. _label297:
  11314. simple_address_call_expression_end:
  11315. subl $8, %esp
  11316. movl 8(%ebp), %eax
  11317. movl %eax, 0(%esp)
  11318. pushl %ebx
  11319. pushl %ecx
  11320. pushl %edx
  11321. pushl %esi
  11322. pushl %edi
  11323. subl $12, %esp
  11324. movl $7, %eax
  11325. movl %eax, 0(%esp)
  11326. movl 16(%ebp), %eax
  11327. movl %eax, 4(%esp)
  11328. movl -4(%ebp), %eax
  11329. movl %eax, 8(%esp)
  11330. call tuple3
  11331. addl $12, %esp
  11332. popl %edi
  11333. popl %esi
  11334. popl %edx
  11335. popl %ecx
  11336. popl %ebx
  11337. movl %eax, 4(%esp)
  11338. call simple_postfix_expression
  11339. addl $8, %esp
  11340. leave
  11341. ret
  11342. simple_address_call_expression_invalid:
  11343. subl $12, %esp
  11344. movl 8(%ebp), %eax
  11345. movl %eax, 0(%esp)
  11346. movl 16(%ebp), %eax
  11347. movl %eax, 4(%esp)
  11348. movl $strbuf+2012, %eax
  11349. movl %eax, 8(%esp)
  11350. call parser_error
  11351. addl $12, %esp
  11352. leave
  11353. ret
  11354. simple_address_index_expression:
  11355. pushl %ebp
  11356. movl %esp, %ebp
  11357. subl $8, %esp
  11358. subl $4, %esp
  11359. movl 8(%ebp), %eax
  11360. movl %eax, 0(%esp)
  11361. call parser_lex
  11362. addl $4, %esp
  11363. movl %eax, -4(%ebp)
  11364. subl $8, %esp
  11365. movl 8(%ebp), %eax
  11366. movl %eax, 0(%esp)
  11367. movl -4(%ebp), %eax
  11368. movl %eax, 4(%esp)
  11369. call expression
  11370. addl $8, %esp
  11371. movl %eax, -8(%ebp)
  11372. subl $4, %esp
  11373. movl 8(%ebp), %eax
  11374. movl %eax, 0(%esp)
  11375. call parser_lex
  11376. addl $4, %esp
  11377. movl %eax, -4(%ebp)
  11378. movl -4(%ebp), %eax
  11379. movl %eax, %edx
  11380. movl $93, %eax
  11381. cmpl %eax, %edx
  11382. setne %al
  11383. movzbl %al, %eax
  11384. cmpl $0, %eax
  11385. je _label298
  11386. movl $simple_address_index_expression_invalid, %eax
  11387. jmp *%eax
  11388. _label298:
  11389. subl $8, %esp
  11390. movl 8(%ebp), %eax
  11391. movl %eax, 0(%esp)
  11392. pushl %ebx
  11393. pushl %ecx
  11394. pushl %edx
  11395. pushl %esi
  11396. pushl %edi
  11397. subl $16, %esp
  11398. movl $8, %eax
  11399. movl %eax, 0(%esp)
  11400. movl 16(%ebp), %eax
  11401. movl %eax, 4(%esp)
  11402. movl 12(%ebp), %eax
  11403. movl %eax, 8(%esp)
  11404. movl -8(%ebp), %eax
  11405. movl %eax, 12(%esp)
  11406. call tuple4
  11407. addl $16, %esp
  11408. popl %edi
  11409. popl %esi
  11410. popl %edx
  11411. popl %ecx
  11412. popl %ebx
  11413. movl %eax, 4(%esp)
  11414. call simple_postfix_expression
  11415. addl $8, %esp
  11416. leave
  11417. ret
  11418. simple_address_index_expression_invalid:
  11419. subl $12, %esp
  11420. movl 8(%ebp), %eax
  11421. movl %eax, 0(%esp)
  11422. movl 16(%ebp), %eax
  11423. movl %eax, 4(%esp)
  11424. movl $strbuf+2042, %eax
  11425. movl %eax, 8(%esp)
  11426. call parser_error
  11427. addl $12, %esp
  11428. leave
  11429. ret
  11430. constant_expression:
  11431. pushl %ebp
  11432. movl %esp, %ebp
  11433. movl 12(%ebp), %eax
  11434. movl %eax, %edx
  11435. movl $257, %eax
  11436. cmpl %eax, %edx
  11437. sete %al
  11438. movzbl %al, %eax
  11439. cmpl $0, %eax
  11440. je _label299
  11441. subl $8, %esp
  11442. movl 8(%ebp), %eax
  11443. movl %eax, 0(%esp)
  11444. movl 16(%ebp), %eax
  11445. movl %eax, 4(%esp)
  11446. call constant_integer_expression
  11447. addl $8, %esp
  11448. leave
  11449. ret
  11450. _label299:
  11451. movl 12(%ebp), %eax
  11452. movl %eax, %edx
  11453. movl $259, %eax
  11454. cmpl %eax, %edx
  11455. sete %al
  11456. movzbl %al, %eax
  11457. cmpl $0, %eax
  11458. je _label300
  11459. subl $8, %esp
  11460. movl 8(%ebp), %eax
  11461. movl %eax, 0(%esp)
  11462. movl 16(%ebp), %eax
  11463. movl %eax, 4(%esp)
  11464. call constant_string_expression
  11465. addl $8, %esp
  11466. leave
  11467. ret
  11468. _label300:
  11469. subl $12, %esp
  11470. movl 8(%ebp), %eax
  11471. movl %eax, 0(%esp)
  11472. movl 16(%ebp), %eax
  11473. movl %eax, 4(%esp)
  11474. movl $strbuf+2073, %eax
  11475. movl %eax, 8(%esp)
  11476. call parser_error
  11477. addl $12, %esp
  11478. leave
  11479. ret
  11480. constant_integer_expression:
  11481. pushl %ebp
  11482. movl %esp, %ebp
  11483. subl $12, %esp
  11484. movl $0, %eax
  11485. movl %eax, 0(%esp)
  11486. movl 12(%ebp), %eax
  11487. movl %eax, 4(%esp)
  11488. pushl %ebx
  11489. pushl %ecx
  11490. pushl %edx
  11491. pushl %esi
  11492. pushl %edi
  11493. subl $4, %esp
  11494. pushl %ebx
  11495. pushl %ecx
  11496. pushl %edx
  11497. pushl %esi
  11498. pushl %edi
  11499. subl $4, %esp
  11500. movl 8(%ebp), %eax
  11501. movl %eax, 0(%esp)
  11502. call parser_lexer
  11503. addl $4, %esp
  11504. popl %edi
  11505. popl %esi
  11506. popl %edx
  11507. popl %ecx
  11508. popl %ebx
  11509. movl %eax, 0(%esp)
  11510. call lexer_token_value
  11511. addl $4, %esp
  11512. popl %edi
  11513. popl %esi
  11514. popl %edx
  11515. popl %ecx
  11516. popl %ebx
  11517. movl %eax, 8(%esp)
  11518. call tuple3
  11519. addl $12, %esp
  11520. leave
  11521. ret
  11522. constant_string_expression:
  11523. pushl %ebp
  11524. movl %esp, %ebp
  11525. subl $4, %esp
  11526. subl $4, %esp
  11527. pushl %ebx
  11528. pushl %ecx
  11529. pushl %edx
  11530. pushl %esi
  11531. pushl %edi
  11532. subl $4, %esp
  11533. movl 8(%ebp), %eax
  11534. movl %eax, 0(%esp)
  11535. call parser_lexer
  11536. addl $4, %esp
  11537. popl %edi
  11538. popl %esi
  11539. popl %edx
  11540. popl %ecx
  11541. popl %ebx
  11542. movl %eax, 0(%esp)
  11543. call lexer_token_text
  11544. addl $4, %esp
  11545. movl %eax, -4(%ebp)
  11546. subl $12, %esp
  11547. movl $1, %eax
  11548. movl %eax, 0(%esp)
  11549. movl 12(%ebp), %eax
  11550. movl %eax, 4(%esp)
  11551. pushl %ebx
  11552. pushl %ecx
  11553. pushl %edx
  11554. pushl %esi
  11555. pushl %edi
  11556. subl $8, %esp
  11557. pushl %ebx
  11558. pushl %ecx
  11559. pushl %edx
  11560. pushl %esi
  11561. pushl %edi
  11562. subl $4, %esp
  11563. movl 8(%ebp), %eax
  11564. movl %eax, 0(%esp)
  11565. call parser_buffer
  11566. addl $4, %esp
  11567. popl %edi
  11568. popl %esi
  11569. popl %edx
  11570. popl %ecx
  11571. popl %ebx
  11572. movl %eax, 0(%esp)
  11573. movl -4(%ebp), %eax
  11574. movl %eax, 4(%esp)
  11575. call string_buffer_push
  11576. addl $8, %esp
  11577. popl %edi
  11578. popl %esi
  11579. popl %edx
  11580. popl %ecx
  11581. popl %ebx
  11582. movl %eax, 8(%esp)
  11583. call tuple3
  11584. addl $12, %esp
  11585. leave
  11586. ret
  11587. string_buffer:
  11588. pushl %ebp
  11589. movl %esp, %ebp
  11590. subl $12, %esp
  11591. pushl %ebx
  11592. pushl %ecx
  11593. pushl %edx
  11594. pushl %esi
  11595. pushl %edi
  11596. subl $4, %esp
  11597. movl $16384, %eax
  11598. movl %eax, 0(%esp)
  11599. call calloc
  11600. addl $4, %esp
  11601. popl %edi
  11602. popl %esi
  11603. popl %edx
  11604. popl %ecx
  11605. popl %ebx
  11606. movl %eax, 0(%esp)
  11607. movl $0, %eax
  11608. movl %eax, 4(%esp)
  11609. movl $0, %eax
  11610. movl %eax, 8(%esp)
  11611. call tuple3
  11612. addl $12, %esp
  11613. leave
  11614. ret
  11615. string_buffer_offset:
  11616. pushl %ebp
  11617. movl %esp, %ebp
  11618. movl 8(%ebp), %eax
  11619. movl %eax, %edx
  11620. movl $1, %eax
  11621. leal (%edx,%eax,4), %eax
  11622. movl (%eax), %eax
  11623. leave
  11624. ret
  11625. string_buffer_length:
  11626. pushl %ebp
  11627. movl %esp, %ebp
  11628. movl 8(%ebp), %eax
  11629. movl %eax, %edx
  11630. movl $2, %eax
  11631. leal (%edx,%eax,4), %eax
  11632. movl (%eax), %eax
  11633. leave
  11634. ret
  11635. string_buffer_find:
  11636. pushl %ebp
  11637. movl %esp, %ebp
  11638. subl $20, %esp
  11639. subl $4, %esp
  11640. movl 8(%ebp), %eax
  11641. movl %eax, 0(%esp)
  11642. call string_buffer_length
  11643. addl $4, %esp
  11644. movl %eax, -8(%ebp)
  11645. movl -8(%ebp), %eax
  11646. movl %eax, %edx
  11647. movl $0, %eax
  11648. cmpl %eax, %edx
  11649. setne %al
  11650. movzbl %al, %eax
  11651. cmpl $0, %eax
  11652. je _label301
  11653. movl 8(%ebp), %eax
  11654. movl %eax, %edx
  11655. movl $0, %eax
  11656. leal (%edx,%eax,4), %eax
  11657. movl (%eax), %eax
  11658. movl %eax, -4(%ebp)
  11659. movl $0, %eax
  11660. movl %eax, -12(%ebp)
  11661. movl $0, %eax
  11662. movl %eax, -16(%ebp)
  11663. _label302:
  11664. movl -12(%ebp), %eax
  11665. movl %eax, %edx
  11666. movl -8(%ebp), %eax
  11667. cmpl %eax, %edx
  11668. setl %al
  11669. movzbl %al, %eax
  11670. cmpl $0, %eax
  11671. je _label303
  11672. movl -4(%ebp), %eax
  11673. movl %eax, %ebx
  11674. movl -12(%ebp), %eax
  11675. addl %ebx, %eax
  11676. movl %eax, -20(%ebp)
  11677. subl $8, %esp
  11678. movl -20(%ebp), %eax
  11679. movl %eax, 0(%esp)
  11680. movl 12(%ebp), %eax
  11681. movl %eax, 4(%esp)
  11682. call strcmp
  11683. addl $8, %esp
  11684. movl %eax, %edx
  11685. movl $0, %eax
  11686. cmpl %eax, %edx
  11687. sete %al
  11688. movzbl %al, %eax
  11689. cmpl $0, %eax
  11690. je _label304
  11691. movl -16(%ebp), %eax
  11692. leave
  11693. ret
  11694. _label304:
  11695. movl -12(%ebp), %eax
  11696. movl %eax, %ebx
  11697. pushl %ebx
  11698. subl $4, %esp
  11699. movl -20(%ebp), %eax
  11700. movl %eax, 0(%esp)
  11701. call strlen
  11702. addl $4, %esp
  11703. popl %ebx
  11704. addl %ebx, %eax
  11705. movl %eax, %ebx
  11706. movl $1, %eax
  11707. addl %ebx, %eax
  11708. movl %eax, -12(%ebp)
  11709. movl -16(%ebp), %eax
  11710. movl %eax, %ebx
  11711. pushl %ebx
  11712. subl $4, %esp
  11713. movl -20(%ebp), %eax
  11714. movl %eax, 0(%esp)
  11715. call stresclen
  11716. addl $4, %esp
  11717. popl %ebx
  11718. addl %ebx, %eax
  11719. pushl %eax
  11720. movl $1, %eax
  11721. movl %eax, %ebx
  11722. popl %eax
  11723. subl %ebx, %eax
  11724. movl %eax, -16(%ebp)
  11725. jmp _label302
  11726. _label303:
  11727. _label301:
  11728. movl $1, %eax
  11729. negl %eax
  11730. leave
  11731. ret
  11732. string_buffer_push:
  11733. pushl %ebp
  11734. movl %esp, %ebp
  11735. subl $12, %esp
  11736. subl $8, %esp
  11737. movl 8(%ebp), %eax
  11738. movl %eax, 0(%esp)
  11739. movl 12(%ebp), %eax
  11740. movl %eax, 4(%esp)
  11741. call string_buffer_find
  11742. addl $8, %esp
  11743. movl %eax, -4(%ebp)
  11744. movl -4(%ebp), %eax
  11745. movl %eax, %edx
  11746. movl $1, %eax
  11747. negl %eax
  11748. cmpl %eax, %edx
  11749. setne %al
  11750. movzbl %al, %eax
  11751. cmpl $0, %eax
  11752. je _label305
  11753. movl -4(%ebp), %eax
  11754. leave
  11755. ret
  11756. _label305:
  11757. subl $4, %esp
  11758. movl 8(%ebp), %eax
  11759. movl %eax, 0(%esp)
  11760. call string_buffer_offset
  11761. addl $4, %esp
  11762. movl %eax, -4(%ebp)
  11763. subl $4, %esp
  11764. movl 8(%ebp), %eax
  11765. movl %eax, 0(%esp)
  11766. call string_buffer_length
  11767. addl $4, %esp
  11768. movl %eax, -8(%ebp)
  11769. subl $4, %esp
  11770. movl 12(%ebp), %eax
  11771. movl %eax, 0(%esp)
  11772. call strlen
  11773. addl $4, %esp
  11774. movl %eax, -12(%ebp)
  11775. movl -8(%ebp), %eax
  11776. movl %eax, %ebx
  11777. movl -12(%ebp), %eax
  11778. addl %ebx, %eax
  11779. movl %eax, %edx
  11780. movl $16384, %eax
  11781. cmpl %eax, %edx
  11782. setge %al
  11783. movzbl %al, %eax
  11784. cmpl $0, %eax
  11785. je _label306
  11786. subl $4, %esp
  11787. movl $strbuf+2126, %eax
  11788. movl %eax, 0(%esp)
  11789. call eputs
  11790. addl $4, %esp
  11791. subl $4, %esp
  11792. movl $1, %eax
  11793. movl %eax, 0(%esp)
  11794. call exit
  11795. addl $4, %esp
  11796. _label306:
  11797. subl $8, %esp
  11798. movl 12(%ebp), %eax
  11799. movl %eax, 0(%esp)
  11800. movl 8(%ebp), %eax
  11801. pushl %edx
  11802. movl %eax, %edx
  11803. movl $0, %eax
  11804. leal (%edx,%eax,4), %eax
  11805. popl %edx
  11806. movl (%eax), %eax
  11807. pushl %ebx
  11808. movl %eax, %ebx
  11809. movl -8(%ebp), %eax
  11810. addl %ebx, %eax
  11811. popl %ebx
  11812. movl %eax, 4(%esp)
  11813. call strcpy
  11814. addl $8, %esp
  11815. movl 8(%ebp), %eax
  11816. movl %eax, %edx
  11817. movl $1, %eax
  11818. leal (%edx,%eax,4), %eax
  11819. movl %eax, %ebx
  11820. movl -4(%ebp), %eax
  11821. pushl %ebx
  11822. movl %eax, %ebx
  11823. pushl %ebx
  11824. subl $4, %esp
  11825. movl 12(%ebp), %eax
  11826. movl %eax, 0(%esp)
  11827. call stresclen
  11828. addl $4, %esp
  11829. popl %ebx
  11830. addl %ebx, %eax
  11831. popl %ebx
  11832. pushl %ebx
  11833. pushl %eax
  11834. movl $1, %eax
  11835. movl %eax, %ebx
  11836. popl %eax
  11837. subl %ebx, %eax
  11838. popl %ebx
  11839. movl %eax, (%ebx)
  11840. movl 8(%ebp), %eax
  11841. movl %eax, %edx
  11842. movl $2, %eax
  11843. leal (%edx,%eax,4), %eax
  11844. movl %eax, %ebx
  11845. movl -8(%ebp), %eax
  11846. pushl %ebx
  11847. movl %eax, %ebx
  11848. movl -12(%ebp), %eax
  11849. addl %ebx, %eax
  11850. popl %ebx
  11851. pushl %ebx
  11852. movl %eax, %ebx
  11853. movl $1, %eax
  11854. addl %ebx, %eax
  11855. popl %ebx
  11856. movl %eax, (%ebx)
  11857. movl -4(%ebp), %eax
  11858. leave
  11859. ret
  11860. string_buffer_export:
  11861. pushl %ebp
  11862. movl %esp, %ebp
  11863. subl $12, %esp
  11864. subl $4, %esp
  11865. movl 8(%ebp), %eax
  11866. movl %eax, 0(%esp)
  11867. call string_buffer_length
  11868. addl $4, %esp
  11869. movl %eax, -8(%ebp)
  11870. movl -8(%ebp), %eax
  11871. movl %eax, %edx
  11872. movl $0, %eax
  11873. cmpl %eax, %edx
  11874. setne %al
  11875. movzbl %al, %eax
  11876. cmpl $0, %eax
  11877. je _label307
  11878. movl 8(%ebp), %eax
  11879. movl %eax, %edx
  11880. movl $0, %eax
  11881. leal (%edx,%eax,4), %eax
  11882. movl (%eax), %eax
  11883. movl %eax, -4(%ebp)
  11884. subl $8, %esp
  11885. movl 12(%ebp), %eax
  11886. movl %eax, 0(%esp)
  11887. movl $strbuf+2157, %eax
  11888. movl %eax, 4(%esp)
  11889. call fputs
  11890. addl $8, %esp
  11891. movl $0, %eax
  11892. movl %eax, -12(%ebp)
  11893. _label308:
  11894. movl -12(%ebp), %eax
  11895. movl %eax, %edx
  11896. movl -8(%ebp), %eax
  11897. cmpl %eax, %edx
  11898. setl %al
  11899. movzbl %al, %eax
  11900. cmpl $0, %eax
  11901. je _label309
  11902. subl $8, %esp
  11903. movl 12(%ebp), %eax
  11904. movl %eax, 0(%esp)
  11905. movl $strbuf+2166, %eax
  11906. movl %eax, 4(%esp)
  11907. call fputs
  11908. addl $8, %esp
  11909. subl $8, %esp
  11910. movl 12(%ebp), %eax
  11911. movl %eax, 0(%esp)
  11912. movl -4(%ebp), %eax
  11913. pushl %ebx
  11914. movl %eax, %ebx
  11915. movl -12(%ebp), %eax
  11916. addl %ebx, %eax
  11917. popl %ebx
  11918. movl %eax, 4(%esp)
  11919. call fputs
  11920. addl $8, %esp
  11921. subl $8, %esp
  11922. movl 12(%ebp), %eax
  11923. movl %eax, 0(%esp)
  11924. movl $10, %eax
  11925. movl %eax, 4(%esp)
  11926. call fputc
  11927. addl $8, %esp
  11928. movl -12(%ebp), %eax
  11929. movl %eax, %ebx
  11930. pushl %ebx
  11931. subl $4, %esp
  11932. movl -4(%ebp), %eax
  11933. pushl %ebx
  11934. movl %eax, %ebx
  11935. movl -12(%ebp), %eax
  11936. addl %ebx, %eax
  11937. popl %ebx
  11938. movl %eax, 0(%esp)
  11939. call strlen
  11940. addl $4, %esp
  11941. popl %ebx
  11942. addl %ebx, %eax
  11943. movl %eax, %ebx
  11944. movl $1, %eax
  11945. addl %ebx, %eax
  11946. movl %eax, -12(%ebp)
  11947. jmp _label308
  11948. _label309:
  11949. _label307:
  11950. leave
  11951. ret
  11952. .data
  11953. registers:.long strbuf+2175,strbuf+2180,strbuf+2185,strbuf+2190,strbuf+2195,strbuf+2200,strbuf+2205
  11954. .text
  11955. compiler:
  11956. pushl %ebp
  11957. movl %esp, %ebp
  11958. subl $24, %esp
  11959. movl 8(%ebp), %eax
  11960. movl %eax, 0(%esp)
  11961. movl 12(%ebp), %eax
  11962. movl %eax, 4(%esp)
  11963. movl $0, %eax
  11964. movl %eax, 8(%esp)
  11965. movl $0, %eax
  11966. movl %eax, 12(%esp)
  11967. pushl %ebx
  11968. pushl %ecx
  11969. pushl %edx
  11970. pushl %esi
  11971. pushl %edi
  11972. subl $24, %esp
  11973. movl $0, %eax
  11974. movl %eax, 0(%esp)
  11975. movl $0, %eax
  11976. movl %eax, 4(%esp)
  11977. movl $0, %eax
  11978. movl %eax, 8(%esp)
  11979. movl $0, %eax
  11980. movl %eax, 12(%esp)
  11981. movl $0, %eax
  11982. movl %eax, 16(%esp)
  11983. movl $0, %eax
  11984. movl %eax, 20(%esp)
  11985. call tuple6
  11986. addl $24, %esp
  11987. popl %edi
  11988. popl %esi
  11989. popl %edx
  11990. popl %ecx
  11991. popl %ebx
  11992. movl %eax, 16(%esp)
  11993. pushl %ebx
  11994. pushl %ecx
  11995. pushl %edx
  11996. pushl %esi
  11997. pushl %edi
  11998. subl $4, %esp
  11999. movl $0, %eax
  12000. movl %eax, 0(%esp)
  12001. call list
  12002. addl $4, %esp
  12003. popl %edi
  12004. popl %esi
  12005. popl %edx
  12006. popl %ecx
  12007. popl %ebx
  12008. movl %eax, 20(%esp)
  12009. call tuple6
  12010. addl $24, %esp
  12011. leave
  12012. ret
  12013. compiler_output_chan:
  12014. pushl %ebp
  12015. movl %esp, %ebp
  12016. movl 8(%ebp), %eax
  12017. movl %eax, %edx
  12018. movl $0, %eax
  12019. leal (%edx,%eax,4), %eax
  12020. movl (%eax), %eax
  12021. leave
  12022. ret
  12023. compiler_label_id:
  12024. pushl %ebp
  12025. movl %esp, %ebp
  12026. movl 8(%ebp), %eax
  12027. movl %eax, %edx
  12028. movl $2, %eax
  12029. leal (%edx,%eax,4), %eax
  12030. movl (%eax), %eax
  12031. leave
  12032. ret
  12033. compiler_set_segment:
  12034. pushl %ebp
  12035. movl %esp, %ebp
  12036. subl $4, %esp
  12037. subl $4, %esp
  12038. movl 8(%ebp), %eax
  12039. movl %eax, 0(%esp)
  12040. call compiler_output_chan
  12041. addl $4, %esp
  12042. movl %eax, -4(%ebp)
  12043. movl 8(%ebp), %eax
  12044. movl %eax, %edx
  12045. movl $3, %eax
  12046. leal (%edx,%eax,4), %eax
  12047. movl (%eax), %eax
  12048. movl %eax, %edx
  12049. movl 12(%ebp), %eax
  12050. cmpl %eax, %edx
  12051. sete %al
  12052. movzbl %al, %eax
  12053. cmpl $0, %eax
  12054. je _label310
  12055. leave
  12056. ret
  12057. _label310:
  12058. movl 8(%ebp), %eax
  12059. movl %eax, %edx
  12060. movl $3, %eax
  12061. leal (%edx,%eax,4), %eax
  12062. movl %eax, %ebx
  12063. movl 12(%ebp), %eax
  12064. movl %eax, (%ebx)
  12065. movl 12(%ebp), %eax
  12066. movl %eax, %edx
  12067. movl $0, %eax
  12068. cmpl %eax, %edx
  12069. sete %al
  12070. movzbl %al, %eax
  12071. cmpl $0, %eax
  12072. je _label311
  12073. subl $8, %esp
  12074. movl -4(%ebp), %eax
  12075. movl %eax, 0(%esp)
  12076. movl $strbuf+2210, %eax
  12077. movl %eax, 4(%esp)
  12078. call fputs
  12079. addl $8, %esp
  12080. _label311:
  12081. movl 12(%ebp), %eax
  12082. movl %eax, %edx
  12083. movl $1, %eax
  12084. cmpl %eax, %edx
  12085. sete %al
  12086. movzbl %al, %eax
  12087. cmpl $0, %eax
  12088. je _label312
  12089. subl $8, %esp
  12090. movl -4(%ebp), %eax
  12091. movl %eax, 0(%esp)
  12092. movl $strbuf+2217, %eax
  12093. movl %eax, 4(%esp)
  12094. call fputs
  12095. addl $8, %esp
  12096. _label312:
  12097. movl 12(%ebp), %eax
  12098. movl %eax, %edx
  12099. movl $2, %eax
  12100. cmpl %eax, %edx
  12101. sete %al
  12102. movzbl %al, %eax
  12103. cmpl $0, %eax
  12104. je _label313
  12105. subl $8, %esp
  12106. movl -4(%ebp), %eax
  12107. movl %eax, 0(%esp)
  12108. movl $strbuf+2224, %eax
  12109. movl %eax, 4(%esp)
  12110. call fputs
  12111. addl $8, %esp
  12112. _label313:
  12113. leave
  12114. ret
  12115. compiler_allocate_register:
  12116. pushl %ebp
  12117. movl %esp, %ebp
  12118. subl $8, %esp
  12119. subl $4, %esp
  12120. movl 8(%ebp), %eax
  12121. movl %eax, 0(%esp)
  12122. call compiler_output_chan
  12123. addl $4, %esp
  12124. movl %eax, -4(%ebp)
  12125. movl 8(%ebp), %eax
  12126. movl %eax, %edx
  12127. movl $4, %eax
  12128. leal (%edx,%eax,4), %eax
  12129. movl (%eax), %eax
  12130. movl %eax, -8(%ebp)
  12131. movl -8(%ebp), %eax
  12132. movl %eax, %edx
  12133. movl 12(%ebp), %eax
  12134. leal (%edx,%eax,4), %eax
  12135. movl (%eax), %eax
  12136. movl %eax, %edx
  12137. movl $0, %eax
  12138. cmpl %eax, %edx
  12139. setne %al
  12140. movzbl %al, %eax
  12141. cmpl $0, %eax
  12142. je _label314
  12143. subl $8, %esp
  12144. movl -4(%ebp), %eax
  12145. movl %eax, 0(%esp)
  12146. movl $strbuf+2242, %eax
  12147. movl %eax, 4(%esp)
  12148. call fputs
  12149. addl $8, %esp
  12150. subl $8, %esp
  12151. movl -4(%ebp), %eax
  12152. movl %eax, 0(%esp)
  12153. movl 12(%ebp), %eax
  12154. leal registers(,%eax,4), %eax
  12155. movl (%eax), %eax
  12156. movl %eax, 4(%esp)
  12157. call fputs
  12158. addl $8, %esp
  12159. subl $8, %esp
  12160. movl -4(%ebp), %eax
  12161. movl %eax, 0(%esp)
  12162. movl $10, %eax
  12163. movl %eax, 4(%esp)
  12164. call fputc
  12165. addl $8, %esp
  12166. _label314:
  12167. movl -8(%ebp), %eax
  12168. movl %eax, %edx
  12169. movl 12(%ebp), %eax
  12170. leal (%edx,%eax,4), %eax
  12171. movl %eax, %ebx
  12172. movl -8(%ebp), %eax
  12173. movl %eax, %edx
  12174. movl 12(%ebp), %eax
  12175. leal (%edx,%eax,4), %eax
  12176. movl (%eax), %eax
  12177. pushl %ebx
  12178. movl %eax, %ebx
  12179. movl $1, %eax
  12180. addl %ebx, %eax
  12181. popl %ebx
  12182. movl %eax, (%ebx)
  12183. leave
  12184. ret
  12185. compiler_free_register:
  12186. pushl %ebp
  12187. movl %esp, %ebp
  12188. subl $8, %esp
  12189. subl $4, %esp
  12190. movl 8(%ebp), %eax
  12191. movl %eax, 0(%esp)
  12192. call compiler_output_chan
  12193. addl $4, %esp
  12194. movl %eax, -4(%ebp)
  12195. movl 8(%ebp), %eax
  12196. movl %eax, %edx
  12197. movl $4, %eax
  12198. leal (%edx,%eax,4), %eax
  12199. movl (%eax), %eax
  12200. movl %eax, -8(%ebp)
  12201. subl $8, %esp
  12202. movl -8(%ebp), %eax
  12203. pushl %edx
  12204. movl %eax, %edx
  12205. movl 12(%ebp), %eax
  12206. leal (%edx,%eax,4), %eax
  12207. popl %edx
  12208. movl (%eax), %eax
  12209. pushl %edx
  12210. movl %eax, %edx
  12211. movl $0, %eax
  12212. cmpl %eax, %edx
  12213. popl %edx
  12214. setne %al
  12215. movzbl %al, %eax
  12216. movl %eax, 0(%esp)
  12217. movl $strbuf+2250, %eax
  12218. movl %eax, 4(%esp)
  12219. call assert
  12220. addl $8, %esp
  12221. movl -8(%ebp), %eax
  12222. movl %eax, %edx
  12223. movl 12(%ebp), %eax
  12224. leal (%edx,%eax,4), %eax
  12225. movl (%eax), %eax
  12226. movl %eax, %edx
  12227. movl $1, %eax
  12228. cmpl %eax, %edx
  12229. setne %al
  12230. movzbl %al, %eax
  12231. cmpl $0, %eax
  12232. je _label315
  12233. subl $8, %esp
  12234. movl -4(%ebp), %eax
  12235. movl %eax, 0(%esp)
  12236. movl $strbuf+2283, %eax
  12237. movl %eax, 4(%esp)
  12238. call fputs
  12239. addl $8, %esp
  12240. subl $8, %esp
  12241. movl -4(%ebp), %eax
  12242. movl %eax, 0(%esp)
  12243. movl 12(%ebp), %eax
  12244. leal registers(,%eax,4), %eax
  12245. movl (%eax), %eax
  12246. movl %eax, 4(%esp)
  12247. call fputs
  12248. addl $8, %esp
  12249. subl $8, %esp
  12250. movl -4(%ebp), %eax
  12251. movl %eax, 0(%esp)
  12252. movl $10, %eax
  12253. movl %eax, 4(%esp)
  12254. call fputc
  12255. addl $8, %esp
  12256. _label315:
  12257. movl -8(%ebp), %eax
  12258. movl %eax, %edx
  12259. movl 12(%ebp), %eax
  12260. leal (%edx,%eax,4), %eax
  12261. movl %eax, %ebx
  12262. movl -8(%ebp), %eax
  12263. movl %eax, %edx
  12264. movl 12(%ebp), %eax
  12265. leal (%edx,%eax,4), %eax
  12266. movl (%eax), %eax
  12267. pushl %ebx
  12268. pushl %eax
  12269. movl $1, %eax
  12270. movl %eax, %ebx
  12271. popl %eax
  12272. subl %ebx, %eax
  12273. popl %ebx
  12274. movl %eax, (%ebx)
  12275. leave
  12276. ret
  12277. compiler_new_label:
  12278. pushl %ebp
  12279. movl %esp, %ebp
  12280. subl $4, %esp
  12281. subl $4, %esp
  12282. movl 8(%ebp), %eax
  12283. movl %eax, 0(%esp)
  12284. call compiler_label_id
  12285. addl $4, %esp
  12286. movl %eax, -4(%ebp)
  12287. movl 8(%ebp), %eax
  12288. movl %eax, %edx
  12289. movl $2, %eax
  12290. leal (%edx,%eax,4), %eax
  12291. movl %eax, %ebx
  12292. movl -4(%ebp), %eax
  12293. pushl %ebx
  12294. movl %eax, %ebx
  12295. movl $1, %eax
  12296. addl %ebx, %eax
  12297. popl %ebx
  12298. movl %eax, (%ebx)
  12299. movl -4(%ebp), %eax
  12300. leave
  12301. ret
  12302. compiler_loop:
  12303. pushl %ebp
  12304. movl %esp, %ebp
  12305. subl $4, %esp
  12306. movl 8(%ebp), %eax
  12307. pushl %edx
  12308. movl %eax, %edx
  12309. movl $5, %eax
  12310. leal (%edx,%eax,4), %eax
  12311. popl %edx
  12312. movl (%eax), %eax
  12313. movl %eax, 0(%esp)
  12314. call list_value
  12315. addl $4, %esp
  12316. leave
  12317. ret
  12318. compiler_push_loop:
  12319. pushl %ebp
  12320. movl %esp, %ebp
  12321. subl $4, %esp
  12322. subl $8, %esp
  12323. movl 12(%ebp), %eax
  12324. movl %eax, 0(%esp)
  12325. movl 16(%ebp), %eax
  12326. movl %eax, 4(%esp)
  12327. call tuple2
  12328. addl $8, %esp
  12329. movl %eax, -4(%ebp)
  12330. movl 8(%ebp), %eax
  12331. movl %eax, %edx
  12332. movl $5, %eax
  12333. leal (%edx,%eax,4), %eax
  12334. movl %eax, %ebx
  12335. pushl %ebx
  12336. subl $8, %esp
  12337. movl 8(%ebp), %eax
  12338. pushl %edx
  12339. movl %eax, %edx
  12340. movl $5, %eax
  12341. leal (%edx,%eax,4), %eax
  12342. popl %edx
  12343. movl (%eax), %eax
  12344. movl %eax, 0(%esp)
  12345. movl -4(%ebp), %eax
  12346. movl %eax, 4(%esp)
  12347. call list_insert
  12348. addl $8, %esp
  12349. popl %ebx
  12350. movl %eax, (%ebx)
  12351. leave
  12352. ret
  12353. compiler_pop_loop:
  12354. pushl %ebp
  12355. movl %esp, %ebp
  12356. subl $4, %esp
  12357. subl $4, %esp
  12358. movl 8(%ebp), %eax
  12359. pushl %edx
  12360. movl %eax, %edx
  12361. movl $5, %eax
  12362. leal (%edx,%eax,4), %eax
  12363. popl %edx
  12364. movl (%eax), %eax
  12365. movl %eax, 0(%esp)
  12366. call list_value
  12367. addl $4, %esp
  12368. movl %eax, -4(%ebp)
  12369. subl $8, %esp
  12370. movl -4(%ebp), %eax
  12371. pushl %edx
  12372. movl %eax, %edx
  12373. movl $0, %eax
  12374. cmpl %eax, %edx
  12375. popl %edx
  12376. setne %al
  12377. movzbl %al, %eax
  12378. movl %eax, 0(%esp)
  12379. movl $strbuf+2290, %eax
  12380. movl %eax, 4(%esp)
  12381. call assert
  12382. addl $8, %esp
  12383. movl 8(%ebp), %eax
  12384. movl %eax, %edx
  12385. movl $5, %eax
  12386. leal (%edx,%eax,4), %eax
  12387. movl %eax, %ebx
  12388. pushl %ebx
  12389. subl $4, %esp
  12390. movl 8(%ebp), %eax
  12391. pushl %edx
  12392. movl %eax, %edx
  12393. movl $5, %eax
  12394. leal (%edx,%eax,4), %eax
  12395. popl %edx
  12396. movl (%eax), %eax
  12397. movl %eax, 0(%esp)
  12398. call list_pop
  12399. addl $4, %esp
  12400. popl %ebx
  12401. movl %eax, (%ebx)
  12402. leave
  12403. ret
  12404. fputlabel:
  12405. pushl %ebp
  12406. movl %esp, %ebp
  12407. subl $8, %esp
  12408. movl 8(%ebp), %eax
  12409. movl %eax, 0(%esp)
  12410. movl $strbuf+2325, %eax
  12411. movl %eax, 4(%esp)
  12412. call fputs
  12413. addl $8, %esp
  12414. subl $8, %esp
  12415. movl 8(%ebp), %eax
  12416. movl %eax, 0(%esp)
  12417. movl 12(%ebp), %eax
  12418. movl %eax, 4(%esp)
  12419. call fputd
  12420. addl $8, %esp
  12421. leave
  12422. ret
  12423. fputlabeldef:
  12424. pushl %ebp
  12425. movl %esp, %ebp
  12426. subl $8, %esp
  12427. movl 8(%ebp), %eax
  12428. movl %eax, 0(%esp)
  12429. movl 12(%ebp), %eax
  12430. movl %eax, 4(%esp)
  12431. call fputlabel
  12432. addl $8, %esp
  12433. subl $8, %esp
  12434. movl 8(%ebp), %eax
  12435. movl %eax, 0(%esp)
  12436. movl $strbuf+2332, %eax
  12437. movl %eax, 4(%esp)
  12438. call fputs
  12439. addl $8, %esp
  12440. leave
  12441. ret
  12442. compiler_error:
  12443. pushl %ebp
  12444. movl %esp, %ebp
  12445. subl $4, %esp
  12446. movl $strbuf+2335, %eax
  12447. movl %eax, 0(%esp)
  12448. call eputs
  12449. addl $4, %esp
  12450. subl $8, %esp
  12451. movl 12(%ebp), %eax
  12452. pushl %edx
  12453. movl %eax, %edx
  12454. movl $1, %eax
  12455. leal (%edx,%eax,4), %eax
  12456. popl %edx
  12457. movl (%eax), %eax
  12458. movl %eax, 0(%esp)
  12459. movl stderr, %eax
  12460. movl %eax, 4(%esp)
  12461. call fputloc
  12462. addl $8, %esp
  12463. subl $4, %esp
  12464. movl $strbuf+294, %eax
  12465. movl %eax, 0(%esp)
  12466. call eputs
  12467. addl $4, %esp
  12468. subl $4, %esp
  12469. movl 16(%ebp), %eax
  12470. movl %eax, 0(%esp)
  12471. call eputs
  12472. addl $4, %esp
  12473. subl $4, %esp
  12474. movl $10, %eax
  12475. movl %eax, 0(%esp)
  12476. call eputc
  12477. addl $4, %esp
  12478. leave
  12479. ret
  12480. compiler_compile:
  12481. pushl %ebp
  12482. movl %esp, %ebp
  12483. subl $4, %esp
  12484. subl $8, %esp
  12485. movl 8(%ebp), %eax
  12486. movl %eax, 0(%esp)
  12487. movl 12(%ebp), %eax
  12488. movl %eax, 4(%esp)
  12489. call compiler_use_macros
  12490. addl $8, %esp
  12491. movl $0, %eax
  12492. movl %eax, -4(%ebp)
  12493. _label316:
  12494. movl -4(%ebp), %eax
  12495. movl %eax, %edx
  12496. pushl %edx
  12497. subl $4, %esp
  12498. movl 12(%ebp), %eax
  12499. movl %eax, 0(%esp)
  12500. call vector_size
  12501. addl $4, %esp
  12502. popl %edx
  12503. cmpl %eax, %edx
  12504. setl %al
  12505. movzbl %al, %eax
  12506. cmpl $0, %eax
  12507. je _label317
  12508. subl $8, %esp
  12509. movl 8(%ebp), %eax
  12510. movl %eax, 0(%esp)
  12511. pushl %ebx
  12512. pushl %ecx
  12513. pushl %edx
  12514. pushl %esi
  12515. pushl %edi
  12516. subl $8, %esp
  12517. movl 12(%ebp), %eax
  12518. movl %eax, 0(%esp)
  12519. movl -4(%ebp), %eax
  12520. movl %eax, 4(%esp)
  12521. call vector_get
  12522. addl $8, %esp
  12523. popl %edi
  12524. popl %esi
  12525. popl %edx
  12526. popl %ecx
  12527. popl %ebx
  12528. movl %eax, 4(%esp)
  12529. call compile_top_level_statement
  12530. addl $8, %esp
  12531. movl -4(%ebp), %eax
  12532. movl %eax, %ebx
  12533. movl $1, %eax
  12534. addl %ebx, %eax
  12535. movl %eax, -4(%ebp)
  12536. jmp _label316
  12537. _label317:
  12538. subl $8, %esp
  12539. movl 8(%ebp), %eax
  12540. movl %eax, 0(%esp)
  12541. movl $2, %eax
  12542. movl %eax, 4(%esp)
  12543. call compiler_set_segment
  12544. addl $8, %esp
  12545. subl $8, %esp
  12546. movl 8(%ebp), %eax
  12547. pushl %edx
  12548. movl %eax, %edx
  12549. movl $1, %eax
  12550. leal (%edx,%eax,4), %eax
  12551. popl %edx
  12552. movl (%eax), %eax
  12553. movl %eax, 0(%esp)
  12554. movl 8(%ebp), %eax
  12555. pushl %edx
  12556. movl %eax, %edx
  12557. movl $0, %eax
  12558. leal (%edx,%eax,4), %eax
  12559. popl %edx
  12560. movl (%eax), %eax
  12561. movl %eax, 4(%esp)
  12562. call string_buffer_export
  12563. addl $8, %esp
  12564. leave
  12565. ret
  12566. compiler_use_macros:
  12567. pushl %ebp
  12568. movl %esp, %ebp
  12569. subl $12, %esp
  12570. movl $0, %eax
  12571. movl %eax, -4(%ebp)
  12572. _label318:
  12573. movl -4(%ebp), %eax
  12574. movl %eax, %edx
  12575. pushl %edx
  12576. subl $4, %esp
  12577. movl 12(%ebp), %eax
  12578. movl %eax, 0(%esp)
  12579. call vector_size
  12580. addl $4, %esp
  12581. popl %edx
  12582. cmpl %eax, %edx
  12583. setl %al
  12584. movzbl %al, %eax
  12585. cmpl $0, %eax
  12586. je _label319
  12587. subl $8, %esp
  12588. movl 12(%ebp), %eax
  12589. movl %eax, 0(%esp)
  12590. movl -4(%ebp), %eax
  12591. movl %eax, 4(%esp)
  12592. call vector_get
  12593. addl $8, %esp
  12594. movl %eax, -8(%ebp)
  12595. movl -8(%ebp), %eax
  12596. movl %eax, %edx
  12597. movl $0, %eax
  12598. leal (%edx,%eax,4), %eax
  12599. movl (%eax), %eax
  12600. movl %eax, %edx
  12601. movl $63, %eax
  12602. cmpl %eax, %edx
  12603. sete %al
  12604. movzbl %al, %eax
  12605. cmpl $0, %eax
  12606. je _label320
  12607. movl -4(%ebp), %eax
  12608. movl %eax, %ebx
  12609. movl $1, %eax
  12610. addl %ebx, %eax
  12611. movl %eax, -12(%ebp)
  12612. _label321:
  12613. movl -12(%ebp), %eax
  12614. movl %eax, %edx
  12615. pushl %edx
  12616. subl $4, %esp
  12617. movl 12(%ebp), %eax
  12618. movl %eax, 0(%esp)
  12619. call vector_size
  12620. addl $4, %esp
  12621. popl %edx
  12622. cmpl %eax, %edx
  12623. setl %al
  12624. movzbl %al, %eax
  12625. cmpl $0, %eax
  12626. je _label322
  12627. subl $12, %esp
  12628. movl 8(%ebp), %eax
  12629. movl %eax, 0(%esp)
  12630. pushl %ebx
  12631. pushl %ecx
  12632. pushl %edx
  12633. pushl %esi
  12634. pushl %edi
  12635. subl $8, %esp
  12636. movl 12(%ebp), %eax
  12637. movl %eax, 0(%esp)
  12638. movl -12(%ebp), %eax
  12639. movl %eax, 4(%esp)
  12640. call vector_get
  12641. addl $8, %esp
  12642. popl %edi
  12643. popl %esi
  12644. popl %edx
  12645. popl %ecx
  12646. popl %ebx
  12647. movl %eax, 4(%esp)
  12648. movl -8(%ebp), %eax
  12649. movl %eax, 8(%esp)
  12650. call compiler_use_macro
  12651. addl $12, %esp
  12652. movl -12(%ebp), %eax
  12653. movl %eax, %ebx
  12654. movl $1, %eax
  12655. addl %ebx, %eax
  12656. movl %eax, -12(%ebp)
  12657. jmp _label321
  12658. _label322:
  12659. _label320:
  12660. movl -4(%ebp), %eax
  12661. movl %eax, %ebx
  12662. movl $1, %eax
  12663. addl %ebx, %eax
  12664. movl %eax, -4(%ebp)
  12665. jmp _label318
  12666. _label319:
  12667. leave
  12668. ret
  12669. compiler_use_macro:
  12670. pushl %ebp
  12671. movl %esp, %ebp
  12672. subl $16, %esp
  12673. movl $2, %eax
  12674. movl %eax, -8(%ebp)
  12675. movl 12(%ebp), %eax
  12676. movl %eax, %edx
  12677. movl $0, %eax
  12678. leal (%edx,%eax,4), %eax
  12679. movl (%eax), %eax
  12680. movl %eax, -4(%ebp)
  12681. movl -4(%ebp), %eax
  12682. movl %eax, %edx
  12683. movl $5, %eax
  12684. cmpl %eax, %edx
  12685. sete %al
  12686. movzbl %al, %eax
  12687. cmpl $0, %eax
  12688. je _label323
  12689. movl $compiler_use_macro_vector, %eax
  12690. jmp *%eax
  12691. _label323:
  12692. movl -4(%ebp), %eax
  12693. movl %eax, %edx
  12694. movl $7, %eax
  12695. cmpl %eax, %edx
  12696. sete %al
  12697. movzbl %al, %eax
  12698. cmpl $0, %eax
  12699. je _label324
  12700. movl $compiler_use_macro_vector, %eax
  12701. jmp *%eax
  12702. _label324:
  12703. movl -4(%ebp), %eax
  12704. movl %eax, %edx
  12705. movl $6, %eax
  12706. cmpl %eax, %edx
  12707. sete %al
  12708. movzbl %al, %eax
  12709. cmpl $0, %eax
  12710. je _label325
  12711. movl $2, %eax
  12712. movl %eax, -12(%ebp)
  12713. movl $compiler_use_macro_tuple, %eax
  12714. jmp *%eax
  12715. _label325:
  12716. movl -4(%ebp), %eax
  12717. movl %eax, %edx
  12718. movl $8, %eax
  12719. cmpl %eax, %edx
  12720. sete %al
  12721. movzbl %al, %eax
  12722. cmpl $0, %eax
  12723. je _label326
  12724. movl $2, %eax
  12725. movl %eax, -12(%ebp)
  12726. movl $compiler_use_macro_tuple, %eax
  12727. jmp *%eax
  12728. _label326:
  12729. movl -4(%ebp), %eax
  12730. movl %eax, %edx
  12731. movl $9, %eax
  12732. cmpl %eax, %edx
  12733. setge %al
  12734. movzbl %al, %eax
  12735. cmpl $0, %eax
  12736. je _label330
  12737. movl -4(%ebp), %eax
  12738. movl %eax, %edx
  12739. movl $14, %eax
  12740. cmpl %eax, %edx
  12741. setle %al
  12742. movzbl %al, %eax
  12743. cmpl $0, %eax
  12744. je _label330
  12745. movl $1, %eax
  12746. jmp _label331
  12747. _label330:
  12748. movl $0, %eax
  12749. _label331:
  12750. cmpl $0, %eax
  12751. jne _label328
  12752. movl -4(%ebp), %eax
  12753. movl %eax, %edx
  12754. movl $44, %eax
  12755. cmpl %eax, %edx
  12756. setge %al
  12757. movzbl %al, %eax
  12758. cmpl $0, %eax
  12759. je _label332
  12760. movl -4(%ebp), %eax
  12761. movl %eax, %edx
  12762. movl $47, %eax
  12763. cmpl %eax, %edx
  12764. setle %al
  12765. movzbl %al, %eax
  12766. cmpl $0, %eax
  12767. je _label332
  12768. movl $1, %eax
  12769. jmp _label333
  12770. _label332:
  12771. movl $0, %eax
  12772. _label333:
  12773. cmpl $0, %eax
  12774. jne _label328
  12775. movl $0, %eax
  12776. jmp _label329
  12777. _label328:
  12778. movl $1, %eax
  12779. _label329:
  12780. cmpl $0, %eax
  12781. je _label327
  12782. movl $1, %eax
  12783. movl %eax, -12(%ebp)
  12784. movl $compiler_use_macro_tuple, %eax
  12785. jmp *%eax
  12786. _label327:
  12787. movl -4(%ebp), %eax
  12788. movl %eax, %edx
  12789. movl $15, %eax
  12790. cmpl %eax, %edx
  12791. setge %al
  12792. movzbl %al, %eax
  12793. cmpl $0, %eax
  12794. je _label335
  12795. movl -4(%ebp), %eax
  12796. movl %eax, %edx
  12797. movl $43, %eax
  12798. cmpl %eax, %edx
  12799. setle %al
  12800. movzbl %al, %eax
  12801. cmpl $0, %eax
  12802. je _label335
  12803. movl $1, %eax
  12804. jmp _label336
  12805. _label335:
  12806. movl $0, %eax
  12807. _label336:
  12808. cmpl $0, %eax
  12809. je _label334
  12810. movl $2, %eax
  12811. movl %eax, -12(%ebp)
  12812. movl $compiler_use_macro_tuple, %eax
  12813. jmp *%eax
  12814. _label334:
  12815. movl -4(%ebp), %eax
  12816. movl %eax, %edx
  12817. movl $48, %eax
  12818. cmpl %eax, %edx
  12819. sete %al
  12820. movzbl %al, %eax
  12821. cmpl $0, %eax
  12822. je _label337
  12823. movl $3, %eax
  12824. movl %eax, -12(%ebp)
  12825. movl $compiler_use_macro_tuple, %eax
  12826. jmp *%eax
  12827. _label337:
  12828. movl -4(%ebp), %eax
  12829. movl %eax, %edx
  12830. movl $49, %eax
  12831. cmpl %eax, %edx
  12832. sete %al
  12833. movzbl %al, %eax
  12834. cmpl $0, %eax
  12835. je _label338
  12836. movl $compiler_use_macro_vector, %eax
  12837. jmp *%eax
  12838. _label338:
  12839. movl -4(%ebp), %eax
  12840. movl %eax, %edx
  12841. movl $61, %eax
  12842. cmpl %eax, %edx
  12843. sete %al
  12844. movzbl %al, %eax
  12845. cmpl $0, %eax
  12846. je _label339
  12847. movl $compiler_use_macro_vector, %eax
  12848. jmp *%eax
  12849. _label339:
  12850. movl -4(%ebp), %eax
  12851. movl %eax, %edx
  12852. movl $55, %eax
  12853. cmpl %eax, %edx
  12854. sete %al
  12855. movzbl %al, %eax
  12856. cmpl $0, %eax
  12857. je _label340
  12858. movl $compiler_use_macro_vector, %eax
  12859. jmp *%eax
  12860. _label340:
  12861. movl -4(%ebp), %eax
  12862. movl %eax, %edx
  12863. movl $65, %eax
  12864. cmpl %eax, %edx
  12865. sete %al
  12866. movzbl %al, %eax
  12867. cmpl $0, %eax
  12868. je _label341
  12869. movl $3, %eax
  12870. movl %eax, -8(%ebp)
  12871. movl $compiler_use_macro_vector, %eax
  12872. jmp *%eax
  12873. _label341:
  12874. movl -4(%ebp), %eax
  12875. movl %eax, %edx
  12876. movl $53, %eax
  12877. cmpl %eax, %edx
  12878. sete %al
  12879. movzbl %al, %eax
  12880. cmpl $0, %eax
  12881. je _label342
  12882. movl $1, %eax
  12883. movl %eax, -12(%ebp)
  12884. movl $compiler_use_macro_tuple, %eax
  12885. jmp *%eax
  12886. _label342:
  12887. movl -4(%ebp), %eax
  12888. movl %eax, %edx
  12889. movl $50, %eax
  12890. cmpl %eax, %edx
  12891. sete %al
  12892. movzbl %al, %eax
  12893. cmpl $0, %eax
  12894. je _label343
  12895. movl $4, %eax
  12896. movl %eax, -12(%ebp)
  12897. movl $compiler_use_macro_tuple, %eax
  12898. jmp *%eax
  12899. _label343:
  12900. movl -4(%ebp), %eax
  12901. movl %eax, %edx
  12902. movl $51, %eax
  12903. cmpl %eax, %edx
  12904. sete %al
  12905. movzbl %al, %eax
  12906. cmpl $0, %eax
  12907. je _label344
  12908. movl $2, %eax
  12909. movl %eax, -12(%ebp)
  12910. movl $compiler_use_macro_tuple, %eax
  12911. jmp *%eax
  12912. _label344:
  12913. movl -4(%ebp), %eax
  12914. movl %eax, %edx
  12915. movl $52, %eax
  12916. cmpl %eax, %edx
  12917. sete %al
  12918. movzbl %al, %eax
  12919. cmpl $0, %eax
  12920. je _label345
  12921. movl $2, %eax
  12922. movl %eax, -12(%ebp)
  12923. movl $compiler_use_macro_tuple, %eax
  12924. jmp *%eax
  12925. _label345:
  12926. movl -4(%ebp), %eax
  12927. movl %eax, %edx
  12928. movl $58, %eax
  12929. cmpl %eax, %edx
  12930. sete %al
  12931. movzbl %al, %eax
  12932. cmpl $0, %eax
  12933. je _label346
  12934. movl $3, %eax
  12935. movl %eax, -12(%ebp)
  12936. movl $compiler_use_macro_tuple, %eax
  12937. jmp *%eax
  12938. _label346:
  12939. movl -4(%ebp), %eax
  12940. movl %eax, %edx
  12941. movl $60, %eax
  12942. cmpl %eax, %edx
  12943. sete %al
  12944. movzbl %al, %eax
  12945. cmpl $0, %eax
  12946. je _label347
  12947. movl $1, %eax
  12948. movl %eax, -12(%ebp)
  12949. movl $compiler_use_macro_tuple, %eax
  12950. jmp *%eax
  12951. _label347:
  12952. movl -4(%ebp), %eax
  12953. movl %eax, %edx
  12954. movl $63, %eax
  12955. cmpl %eax, %edx
  12956. sete %al
  12957. movzbl %al, %eax
  12958. cmpl $0, %eax
  12959. je _label348
  12960. movl $3, %eax
  12961. movl %eax, -8(%ebp)
  12962. movl $1, %eax
  12963. movl %eax, -12(%ebp)
  12964. movl $compiler_use_macro_tuple, %eax
  12965. jmp *%eax
  12966. _label348:
  12967. movl -4(%ebp), %eax
  12968. movl %eax, %edx
  12969. movl $64, %eax
  12970. cmpl %eax, %edx
  12971. sete %al
  12972. movzbl %al, %eax
  12973. cmpl $0, %eax
  12974. je _label349
  12975. movl $4, %eax
  12976. movl %eax, -8(%ebp)
  12977. movl $1, %eax
  12978. movl %eax, -12(%ebp)
  12979. movl $compiler_use_macro_tuple, %eax
  12980. jmp *%eax
  12981. _label349:
  12982. movl -4(%ebp), %eax
  12983. movl %eax, %edx
  12984. movl $66, %eax
  12985. cmpl %eax, %edx
  12986. sete %al
  12987. movzbl %al, %eax
  12988. cmpl $0, %eax
  12989. je _label350
  12990. movl $3, %eax
  12991. movl %eax, -8(%ebp)
  12992. movl $1, %eax
  12993. movl %eax, -12(%ebp)
  12994. movl $compiler_use_macro_tuple, %eax
  12995. jmp *%eax
  12996. _label350:
  12997. movl -4(%ebp), %eax
  12998. movl %eax, %edx
  12999. movl $67, %eax
  13000. cmpl %eax, %edx
  13001. sete %al
  13002. movzbl %al, %eax
  13003. cmpl $0, %eax
  13004. je _label351
  13005. movl $3, %eax
  13006. movl %eax, -8(%ebp)
  13007. movl $1, %eax
  13008. movl %eax, -12(%ebp)
  13009. movl $compiler_use_macro_tuple, %eax
  13010. jmp *%eax
  13011. _label351:
  13012. movl -4(%ebp), %eax
  13013. movl %eax, %edx
  13014. movl $68, %eax
  13015. cmpl %eax, %edx
  13016. sete %al
  13017. movzbl %al, %eax
  13018. cmpl $0, %eax
  13019. je _label352
  13020. movl $3, %eax
  13021. movl %eax, -8(%ebp)
  13022. movl $1, %eax
  13023. movl %eax, -12(%ebp)
  13024. movl $compiler_use_macro_tuple, %eax
  13025. jmp *%eax
  13026. _label352:
  13027. compiler_use_macro_exit:
  13028. leave
  13029. ret
  13030. compiler_use_macro_tuple:
  13031. movl $0, %eax
  13032. movl %eax, -4(%ebp)
  13033. _label353:
  13034. movl -4(%ebp), %eax
  13035. movl %eax, %edx
  13036. movl -12(%ebp), %eax
  13037. cmpl %eax, %edx
  13038. setl %al
  13039. movzbl %al, %eax
  13040. cmpl $0, %eax
  13041. je _label354
  13042. movl 12(%ebp), %eax
  13043. movl %eax, %edx
  13044. movl -8(%ebp), %eax
  13045. movl %eax, %ebx
  13046. movl -4(%ebp), %eax
  13047. addl %ebx, %eax
  13048. leal (%edx,%eax,4), %eax
  13049. movl (%eax), %eax
  13050. movl %eax, -16(%ebp)
  13051. movl -16(%ebp), %eax
  13052. cmpl $0, %eax
  13053. je _label355
  13054. movl -16(%ebp), %eax
  13055. movl %eax, %edx
  13056. movl $0, %eax
  13057. leal (%edx,%eax,4), %eax
  13058. movl (%eax), %eax
  13059. movl %eax, %edx
  13060. movl $2, %eax
  13061. cmpl %eax, %edx
  13062. sete %al
  13063. movzbl %al, %eax
  13064. cmpl $0, %eax
  13065. je _label357
  13066. subl $8, %esp
  13067. movl -16(%ebp), %eax
  13068. pushl %edx
  13069. movl %eax, %edx
  13070. movl $2, %eax
  13071. leal (%edx,%eax,4), %eax
  13072. popl %edx
  13073. movl (%eax), %eax
  13074. movl %eax, 0(%esp)
  13075. movl 16(%ebp), %eax
  13076. pushl %edx
  13077. movl %eax, %edx
  13078. movl $2, %eax
  13079. leal (%edx,%eax,4), %eax
  13080. popl %edx
  13081. movl (%eax), %eax
  13082. movl %eax, 4(%esp)
  13083. call strcmp
  13084. addl $8, %esp
  13085. movl %eax, %edx
  13086. movl $0, %eax
  13087. cmpl %eax, %edx
  13088. sete %al
  13089. movzbl %al, %eax
  13090. cmpl $0, %eax
  13091. je _label358
  13092. movl 12(%ebp), %eax
  13093. movl %eax, %edx
  13094. movl -8(%ebp), %eax
  13095. movl %eax, %ebx
  13096. movl -4(%ebp), %eax
  13097. addl %ebx, %eax
  13098. leal (%edx,%eax,4), %eax
  13099. movl %eax, %ebx
  13100. movl 16(%ebp), %eax
  13101. movl %eax, %edx
  13102. movl $3, %eax
  13103. leal (%edx,%eax,4), %eax
  13104. movl (%eax), %eax
  13105. movl %eax, (%ebx)
  13106. _label358:
  13107. jmp _label356
  13108. _label357:
  13109. subl $12, %esp
  13110. movl 8(%ebp), %eax
  13111. movl %eax, 0(%esp)
  13112. movl -16(%ebp), %eax
  13113. movl %eax, 4(%esp)
  13114. movl 16(%ebp), %eax
  13115. movl %eax, 8(%esp)
  13116. call compiler_use_macro
  13117. addl $12, %esp
  13118. _label356:
  13119. _label355:
  13120. movl -4(%ebp), %eax
  13121. movl %eax, %ebx
  13122. movl $1, %eax
  13123. addl %ebx, %eax
  13124. movl %eax, -4(%ebp)
  13125. jmp _label353
  13126. _label354:
  13127. movl $compiler_use_macro_exit, %eax
  13128. jmp *%eax
  13129. compiler_use_macro_vector:
  13130. movl $0, %eax
  13131. movl %eax, -4(%ebp)
  13132. _label359:
  13133. movl -4(%ebp), %eax
  13134. movl %eax, %edx
  13135. pushl %edx
  13136. subl $4, %esp
  13137. movl 12(%ebp), %eax
  13138. pushl %edx
  13139. movl %eax, %edx
  13140. movl -8(%ebp), %eax
  13141. leal (%edx,%eax,4), %eax
  13142. popl %edx
  13143. movl (%eax), %eax
  13144. movl %eax, 0(%esp)
  13145. call vector_size
  13146. addl $4, %esp
  13147. popl %edx
  13148. cmpl %eax, %edx
  13149. setl %al
  13150. movzbl %al, %eax
  13151. cmpl $0, %eax
  13152. je _label360
  13153. subl $8, %esp
  13154. movl 12(%ebp), %eax
  13155. pushl %edx
  13156. movl %eax, %edx
  13157. movl -8(%ebp), %eax
  13158. leal (%edx,%eax,4), %eax
  13159. popl %edx
  13160. movl (%eax), %eax
  13161. movl %eax, 0(%esp)
  13162. movl -4(%ebp), %eax
  13163. movl %eax, 4(%esp)
  13164. call vector_get
  13165. addl $8, %esp
  13166. movl %eax, -16(%ebp)
  13167. movl -16(%ebp), %eax
  13168. movl %eax, %edx
  13169. movl $0, %eax
  13170. leal (%edx,%eax,4), %eax
  13171. movl (%eax), %eax
  13172. movl %eax, %edx
  13173. movl $2, %eax
  13174. cmpl %eax, %edx
  13175. sete %al
  13176. movzbl %al, %eax
  13177. cmpl $0, %eax
  13178. je _label362
  13179. subl $8, %esp
  13180. movl -16(%ebp), %eax
  13181. pushl %edx
  13182. movl %eax, %edx
  13183. movl $2, %eax
  13184. leal (%edx,%eax,4), %eax
  13185. popl %edx
  13186. movl (%eax), %eax
  13187. movl %eax, 0(%esp)
  13188. movl 16(%ebp), %eax
  13189. pushl %edx
  13190. movl %eax, %edx
  13191. movl $2, %eax
  13192. leal (%edx,%eax,4), %eax
  13193. popl %edx
  13194. movl (%eax), %eax
  13195. movl %eax, 4(%esp)
  13196. call strcmp
  13197. addl $8, %esp
  13198. movl %eax, %edx
  13199. movl $0, %eax
  13200. cmpl %eax, %edx
  13201. sete %al
  13202. movzbl %al, %eax
  13203. cmpl $0, %eax
  13204. je _label363
  13205. subl $12, %esp
  13206. movl 12(%ebp), %eax
  13207. pushl %edx
  13208. movl %eax, %edx
  13209. movl -8(%ebp), %eax
  13210. leal (%edx,%eax,4), %eax
  13211. popl %edx
  13212. movl (%eax), %eax
  13213. movl %eax, 0(%esp)
  13214. movl -4(%ebp), %eax
  13215. movl %eax, 4(%esp)
  13216. movl 16(%ebp), %eax
  13217. pushl %edx
  13218. movl %eax, %edx
  13219. movl $3, %eax
  13220. leal (%edx,%eax,4), %eax
  13221. popl %edx
  13222. movl (%eax), %eax
  13223. movl %eax, 8(%esp)
  13224. call vector_set
  13225. addl $12, %esp
  13226. _label363:
  13227. jmp _label361
  13228. _label362:
  13229. subl $12, %esp
  13230. movl 8(%ebp), %eax
  13231. movl %eax, 0(%esp)
  13232. movl -16(%ebp), %eax
  13233. movl %eax, 4(%esp)
  13234. movl 16(%ebp), %eax
  13235. movl %eax, 8(%esp)
  13236. call compiler_use_macro
  13237. addl $12, %esp
  13238. _label361:
  13239. movl -4(%ebp), %eax
  13240. movl %eax, %ebx
  13241. movl $1, %eax
  13242. addl %ebx, %eax
  13243. movl %eax, -4(%ebp)
  13244. jmp _label359
  13245. _label360:
  13246. movl $compiler_use_macro_exit, %eax
  13247. jmp *%eax
  13248. leave
  13249. ret
  13250. compile_top_level_statement:
  13251. pushl %ebp
  13252. movl %esp, %ebp
  13253. subl $4, %esp
  13254. movl 12(%ebp), %eax
  13255. movl %eax, %edx
  13256. movl $0, %eax
  13257. leal (%edx,%eax,4), %eax
  13258. movl (%eax), %eax
  13259. movl %eax, -4(%ebp)
  13260. movl -4(%ebp), %eax
  13261. movl %eax, %edx
  13262. movl $62, %eax
  13263. cmpl %eax, %edx
  13264. sete %al
  13265. movzbl %al, %eax
  13266. cmpl $0, %eax
  13267. je _label365
  13268. subl $8, %esp
  13269. movl 8(%ebp), %eax
  13270. movl %eax, 0(%esp)
  13271. movl 12(%ebp), %eax
  13272. movl %eax, 4(%esp)
  13273. call compile_global_statement
  13274. addl $8, %esp
  13275. jmp _label364
  13276. _label365:
  13277. movl -4(%ebp), %eax
  13278. movl %eax, %edx
  13279. movl $64, %eax
  13280. cmpl %eax, %edx
  13281. sete %al
  13282. movzbl %al, %eax
  13283. cmpl $0, %eax
  13284. je _label366
  13285. subl $8, %esp
  13286. movl 8(%ebp), %eax
  13287. movl %eax, 0(%esp)
  13288. movl 12(%ebp), %eax
  13289. movl %eax, 4(%esp)
  13290. call compile_function_declaration
  13291. addl $8, %esp
  13292. jmp _label364
  13293. _label366:
  13294. movl -4(%ebp), %eax
  13295. movl %eax, %edx
  13296. movl $65, %eax
  13297. cmpl %eax, %edx
  13298. sete %al
  13299. movzbl %al, %eax
  13300. cmpl $0, %eax
  13301. je _label367
  13302. subl $8, %esp
  13303. movl 8(%ebp), %eax
  13304. movl %eax, 0(%esp)
  13305. movl 12(%ebp), %eax
  13306. movl %eax, 4(%esp)
  13307. call compile_array_declaration
  13308. addl $8, %esp
  13309. jmp _label364
  13310. _label367:
  13311. movl -4(%ebp), %eax
  13312. movl %eax, %edx
  13313. movl $66, %eax
  13314. cmpl %eax, %edx
  13315. sete %al
  13316. movzbl %al, %eax
  13317. cmpl $0, %eax
  13318. je _label368
  13319. subl $12, %esp
  13320. movl 8(%ebp), %eax
  13321. movl %eax, 0(%esp)
  13322. movl 12(%ebp), %eax
  13323. movl %eax, 4(%esp)
  13324. movl $1, %eax
  13325. movl %eax, 8(%esp)
  13326. call compile_type_array_declaration
  13327. addl $12, %esp
  13328. jmp _label364
  13329. _label368:
  13330. movl -4(%ebp), %eax
  13331. movl %eax, %edx
  13332. movl $67, %eax
  13333. cmpl %eax, %edx
  13334. sete %al
  13335. movzbl %al, %eax
  13336. cmpl $0, %eax
  13337. je _label369
  13338. subl $12, %esp
  13339. movl 8(%ebp), %eax
  13340. movl %eax, 0(%esp)
  13341. movl 12(%ebp), %eax
  13342. movl %eax, 4(%esp)
  13343. movl $4, %eax
  13344. movl %eax, 8(%esp)
  13345. call compile_type_array_declaration
  13346. addl $12, %esp
  13347. jmp _label364
  13348. _label369:
  13349. movl -4(%ebp), %eax
  13350. movl %eax, %edx
  13351. movl $68, %eax
  13352. cmpl %eax, %edx
  13353. sete %al
  13354. movzbl %al, %eax
  13355. cmpl $0, %eax
  13356. je _label364
  13357. subl $8, %esp
  13358. movl 8(%ebp), %eax
  13359. movl %eax, 0(%esp)
  13360. movl 12(%ebp), %eax
  13361. movl %eax, 4(%esp)
  13362. call compile_variable_declaration
  13363. addl $8, %esp
  13364. _label364:
  13365. leave
  13366. ret
  13367. compile_global_statement:
  13368. pushl %ebp
  13369. movl %esp, %ebp
  13370. subl $8, %esp
  13371. subl $4, %esp
  13372. movl 8(%ebp), %eax
  13373. movl %eax, 0(%esp)
  13374. call compiler_output_chan
  13375. addl $4, %esp
  13376. movl %eax, -4(%ebp)
  13377. subl $8, %esp
  13378. movl -4(%ebp), %eax
  13379. movl %eax, 0(%esp)
  13380. movl $strbuf+2343, %eax
  13381. movl %eax, 4(%esp)
  13382. call fputs
  13383. addl $8, %esp
  13384. movl $0, %eax
  13385. movl %eax, -8(%ebp)
  13386. _label370:
  13387. movl -8(%ebp), %eax
  13388. movl %eax, %edx
  13389. pushl %edx
  13390. subl $4, %esp
  13391. movl 12(%ebp), %eax
  13392. pushl %edx
  13393. movl %eax, %edx
  13394. movl $2, %eax
  13395. leal (%edx,%eax,4), %eax
  13396. popl %edx
  13397. movl (%eax), %eax
  13398. movl %eax, 0(%esp)
  13399. call vector_size
  13400. addl $4, %esp
  13401. popl %edx
  13402. cmpl %eax, %edx
  13403. setl %al
  13404. movzbl %al, %eax
  13405. cmpl $0, %eax
  13406. je _label371
  13407. movl -8(%ebp), %eax
  13408. movl %eax, %edx
  13409. movl $0, %eax
  13410. cmpl %eax, %edx
  13411. setne %al
  13412. movzbl %al, %eax
  13413. cmpl $0, %eax
  13414. je _label372
  13415. subl $8, %esp
  13416. movl -4(%ebp), %eax
  13417. movl %eax, 0(%esp)
  13418. movl $44, %eax
  13419. movl %eax, 4(%esp)
  13420. call fputc
  13421. addl $8, %esp
  13422. _label372:
  13423. subl $8, %esp
  13424. movl -4(%ebp), %eax
  13425. movl %eax, 0(%esp)
  13426. pushl %ebx
  13427. pushl %ecx
  13428. pushl %edx
  13429. pushl %esi
  13430. pushl %edi
  13431. subl $8, %esp
  13432. movl 12(%ebp), %eax
  13433. pushl %edx
  13434. movl %eax, %edx
  13435. movl $2, %eax
  13436. leal (%edx,%eax,4), %eax
  13437. popl %edx
  13438. movl (%eax), %eax
  13439. movl %eax, 0(%esp)
  13440. movl -8(%ebp), %eax
  13441. movl %eax, 4(%esp)
  13442. call vector_get
  13443. addl $8, %esp
  13444. popl %edi
  13445. popl %esi
  13446. popl %edx
  13447. popl %ecx
  13448. popl %ebx
  13449. movl %eax, 4(%esp)
  13450. call fputs
  13451. addl $8, %esp
  13452. movl -8(%ebp), %eax
  13453. movl %eax, %ebx
  13454. movl $1, %eax
  13455. addl %ebx, %eax
  13456. movl %eax, -8(%ebp)
  13457. jmp _label370
  13458. _label371:
  13459. subl $8, %esp
  13460. movl -4(%ebp), %eax
  13461. movl %eax, 0(%esp)
  13462. movl $10, %eax
  13463. movl %eax, 4(%esp)
  13464. call fputc
  13465. addl $8, %esp
  13466. leave
  13467. ret
  13468. compile_function_declaration:
  13469. pushl %ebp
  13470. movl %esp, %ebp
  13471. subl $8, %esp
  13472. subl $4, %esp
  13473. movl 8(%ebp), %eax
  13474. movl %eax, 0(%esp)
  13475. call compiler_output_chan
  13476. addl $4, %esp
  13477. movl %eax, -4(%ebp)
  13478. movl 12(%ebp), %eax
  13479. movl %eax, %edx
  13480. movl $4, %eax
  13481. leal (%edx,%eax,4), %eax
  13482. movl (%eax), %eax
  13483. movl %eax, -8(%ebp)
  13484. subl $8, %esp
  13485. movl 8(%ebp), %eax
  13486. movl %eax, 0(%esp)
  13487. movl $0, %eax
  13488. movl %eax, 4(%esp)
  13489. call compiler_set_segment
  13490. addl $8, %esp
  13491. subl $8, %esp
  13492. movl -4(%ebp), %eax
  13493. movl %eax, 0(%esp)
  13494. movl 12(%ebp), %eax
  13495. pushl %edx
  13496. movl %eax, %edx
  13497. movl $2, %eax
  13498. leal (%edx,%eax,4), %eax
  13499. popl %edx
  13500. movl (%eax), %eax
  13501. movl %eax, 4(%esp)
  13502. call fputs
  13503. addl $8, %esp
  13504. subl $8, %esp
  13505. movl -4(%ebp), %eax
  13506. movl %eax, 0(%esp)
  13507. movl $strbuf+2332, %eax
  13508. movl %eax, 4(%esp)
  13509. call fputs
  13510. addl $8, %esp
  13511. subl $8, %esp
  13512. movl -4(%ebp), %eax
  13513. movl %eax, 0(%esp)
  13514. movl $strbuf+2352, %eax
  13515. movl %eax, 4(%esp)
  13516. call fputs
  13517. addl $8, %esp
  13518. subl $8, %esp
  13519. movl -4(%ebp), %eax
  13520. movl %eax, 0(%esp)
  13521. movl $strbuf+2365, %eax
  13522. movl %eax, 4(%esp)
  13523. call fputs
  13524. addl $8, %esp
  13525. subl $8, %esp
  13526. movl 8(%ebp), %eax
  13527. movl %eax, 0(%esp)
  13528. movl -8(%ebp), %eax
  13529. movl %eax, 4(%esp)
  13530. call compile_block_statement
  13531. addl $8, %esp
  13532. subl $8, %esp
  13533. movl -4(%ebp), %eax
  13534. movl %eax, 0(%esp)
  13535. movl -8(%ebp), %eax
  13536. movl %eax, 4(%esp)
  13537. call compile_function_declaration_return
  13538. addl $8, %esp
  13539. leave
  13540. ret
  13541. compile_function_declaration_return:
  13542. pushl %ebp
  13543. movl %esp, %ebp
  13544. subl $12, %esp
  13545. movl 12(%ebp), %eax
  13546. movl %eax, %edx
  13547. movl $2, %eax
  13548. leal (%edx,%eax,4), %eax
  13549. movl (%eax), %eax
  13550. movl %eax, -4(%ebp)
  13551. subl $4, %esp
  13552. movl -4(%ebp), %eax
  13553. movl %eax, 0(%esp)
  13554. call vector_size
  13555. addl $4, %esp
  13556. movl %eax, %edx
  13557. movl $0, %eax
  13558. cmpl %eax, %edx
  13559. sete %al
  13560. movzbl %al, %eax
  13561. cmpl $0, %eax
  13562. je _label373
  13563. movl $compile_function_declaration_return_print, %eax
  13564. jmp *%eax
  13565. _label373:
  13566. subl $4, %esp
  13567. movl -4(%ebp), %eax
  13568. movl %eax, 0(%esp)
  13569. call vector_pop
  13570. addl $4, %esp
  13571. movl %eax, -8(%ebp)
  13572. movl -8(%ebp), %eax
  13573. movl %eax, %edx
  13574. movl $0, %eax
  13575. leal (%edx,%eax,4), %eax
  13576. movl (%eax), %eax
  13577. movl %eax, -12(%ebp)
  13578. movl -12(%ebp), %eax
  13579. movl %eax, %edx
  13580. movl $55, %eax
  13581. cmpl %eax, %edx
  13582. sete %al
  13583. movzbl %al, %eax
  13584. cmpl $0, %eax
  13585. je _label374
  13586. leave
  13587. ret
  13588. _label374:
  13589. compile_function_declaration_return_print:
  13590. subl $8, %esp
  13591. movl 8(%ebp), %eax
  13592. movl %eax, 0(%esp)
  13593. movl $strbuf+2383, %eax
  13594. movl %eax, 4(%esp)
  13595. call fputs
  13596. addl $8, %esp
  13597. leave
  13598. ret
  13599. compile_array_declaration:
  13600. pushl %ebp
  13601. movl %esp, %ebp
  13602. subl $8, %esp
  13603. subl $4, %esp
  13604. movl 8(%ebp), %eax
  13605. movl %eax, 0(%esp)
  13606. call compiler_output_chan
  13607. addl $4, %esp
  13608. movl %eax, -4(%ebp)
  13609. subl $8, %esp
  13610. movl 8(%ebp), %eax
  13611. movl %eax, 0(%esp)
  13612. movl $1, %eax
  13613. movl %eax, 4(%esp)
  13614. call compiler_set_segment
  13615. addl $8, %esp
  13616. subl $8, %esp
  13617. movl -4(%ebp), %eax
  13618. movl %eax, 0(%esp)
  13619. movl 12(%ebp), %eax
  13620. pushl %edx
  13621. movl %eax, %edx
  13622. movl $2, %eax
  13623. leal (%edx,%eax,4), %eax
  13624. popl %edx
  13625. movl (%eax), %eax
  13626. movl %eax, 4(%esp)
  13627. call fputs
  13628. addl $8, %esp
  13629. subl $8, %esp
  13630. movl -4(%ebp), %eax
  13631. movl %eax, 0(%esp)
  13632. movl $strbuf+2396, %eax
  13633. movl %eax, 4(%esp)
  13634. call fputs
  13635. addl $8, %esp
  13636. movl $0, %eax
  13637. movl %eax, -8(%ebp)
  13638. _label375:
  13639. movl -8(%ebp), %eax
  13640. movl %eax, %edx
  13641. pushl %edx
  13642. subl $4, %esp
  13643. movl 12(%ebp), %eax
  13644. pushl %edx
  13645. movl %eax, %edx
  13646. movl $3, %eax
  13647. leal (%edx,%eax,4), %eax
  13648. popl %edx
  13649. movl (%eax), %eax
  13650. movl %eax, 0(%esp)
  13651. call vector_size
  13652. addl $4, %esp
  13653. popl %edx
  13654. cmpl %eax, %edx
  13655. setl %al
  13656. movzbl %al, %eax
  13657. cmpl $0, %eax
  13658. je _label376
  13659. movl -8(%ebp), %eax
  13660. movl %eax, %edx
  13661. movl $0, %eax
  13662. cmpl %eax, %edx
  13663. setne %al
  13664. movzbl %al, %eax
  13665. cmpl $0, %eax
  13666. je _label377
  13667. subl $8, %esp
  13668. movl -4(%ebp), %eax
  13669. movl %eax, 0(%esp)
  13670. movl $44, %eax
  13671. movl %eax, 4(%esp)
  13672. call fputc
  13673. addl $8, %esp
  13674. _label377:
  13675. subl $8, %esp
  13676. movl 8(%ebp), %eax
  13677. movl %eax, 0(%esp)
  13678. pushl %ebx
  13679. pushl %ecx
  13680. pushl %edx
  13681. pushl %esi
  13682. pushl %edi
  13683. subl $8, %esp
  13684. movl 12(%ebp), %eax
  13685. pushl %edx
  13686. movl %eax, %edx
  13687. movl $3, %eax
  13688. leal (%edx,%eax,4), %eax
  13689. popl %edx
  13690. movl (%eax), %eax
  13691. movl %eax, 0(%esp)
  13692. movl -8(%ebp), %eax
  13693. movl %eax, 4(%esp)
  13694. call vector_get
  13695. addl $8, %esp
  13696. popl %edi
  13697. popl %esi
  13698. popl %edx
  13699. popl %ecx
  13700. popl %ebx
  13701. movl %eax, 4(%esp)
  13702. call compile_simple_value
  13703. addl $8, %esp
  13704. movl -8(%ebp), %eax
  13705. movl %eax, %ebx
  13706. movl $1, %eax
  13707. addl %ebx, %eax
  13708. movl %eax, -8(%ebp)
  13709. jmp _label375
  13710. _label376:
  13711. subl $8, %esp
  13712. movl -4(%ebp), %eax
  13713. movl %eax, 0(%esp)
  13714. movl $10, %eax
  13715. movl %eax, 4(%esp)
  13716. call fputc
  13717. addl $8, %esp
  13718. leave
  13719. ret
  13720. compile_type_array_declaration:
  13721. pushl %ebp
  13722. movl %esp, %ebp
  13723. subl $8, %esp
  13724. subl $4, %esp
  13725. movl 8(%ebp), %eax
  13726. movl %eax, 0(%esp)
  13727. call compiler_output_chan
  13728. addl $4, %esp
  13729. movl %eax, -4(%ebp)
  13730. movl 12(%ebp), %eax
  13731. movl %eax, %edx
  13732. movl $3, %eax
  13733. leal (%edx,%eax,4), %eax
  13734. movl (%eax), %eax
  13735. movl %eax, -8(%ebp)
  13736. movl -8(%ebp), %eax
  13737. movl %eax, %edx
  13738. movl $0, %eax
  13739. leal (%edx,%eax,4), %eax
  13740. movl (%eax), %eax
  13741. movl %eax, %edx
  13742. movl $0, %eax
  13743. cmpl %eax, %edx
  13744. setne %al
  13745. movzbl %al, %eax
  13746. cmpl $0, %eax
  13747. je _label378
  13748. subl $12, %esp
  13749. movl 8(%ebp), %eax
  13750. movl %eax, 0(%esp)
  13751. movl -12(%ebp), %eax
  13752. movl %eax, 4(%esp)
  13753. movl $strbuf+2404, %eax
  13754. movl %eax, 8(%esp)
  13755. call compiler_error
  13756. addl $12, %esp
  13757. _label378:
  13758. subl $8, %esp
  13759. movl 8(%ebp), %eax
  13760. movl %eax, 0(%esp)
  13761. movl $1, %eax
  13762. movl %eax, 4(%esp)
  13763. call compiler_set_segment
  13764. addl $8, %esp
  13765. subl $8, %esp
  13766. movl -4(%ebp), %eax
  13767. movl %eax, 0(%esp)
  13768. movl $strbuf+2448, %eax
  13769. movl %eax, 4(%esp)
  13770. call fputs
  13771. addl $8, %esp
  13772. subl $8, %esp
  13773. movl -4(%ebp), %eax
  13774. movl %eax, 0(%esp)
  13775. movl 12(%ebp), %eax
  13776. pushl %edx
  13777. movl %eax, %edx
  13778. movl $2, %eax
  13779. leal (%edx,%eax,4), %eax
  13780. popl %edx
  13781. movl (%eax), %eax
  13782. movl %eax, 4(%esp)
  13783. call fputs
  13784. addl $8, %esp
  13785. subl $8, %esp
  13786. movl -4(%ebp), %eax
  13787. movl %eax, 0(%esp)
  13788. movl $44, %eax
  13789. movl %eax, 4(%esp)
  13790. call fputc
  13791. addl $8, %esp
  13792. subl $8, %esp
  13793. movl -4(%ebp), %eax
  13794. movl %eax, 0(%esp)
  13795. movl -8(%ebp), %eax
  13796. pushl %edx
  13797. movl %eax, %edx
  13798. movl $2, %eax
  13799. leal (%edx,%eax,4), %eax
  13800. popl %edx
  13801. movl (%eax), %eax
  13802. pushl %ebx
  13803. movl %eax, %ebx
  13804. movl 16(%ebp), %eax
  13805. imull %ebx, %eax
  13806. popl %ebx
  13807. movl %eax, 4(%esp)
  13808. call fputd
  13809. addl $8, %esp
  13810. subl $8, %esp
  13811. movl -4(%ebp), %eax
  13812. movl %eax, 0(%esp)
  13813. movl $10, %eax
  13814. movl %eax, 4(%esp)
  13815. call fputc
  13816. addl $8, %esp
  13817. leave
  13818. ret
  13819. compile_variable_declaration:
  13820. pushl %ebp
  13821. movl %esp, %ebp
  13822. subl $4, %esp
  13823. subl $4, %esp
  13824. movl 8(%ebp), %eax
  13825. movl %eax, 0(%esp)
  13826. call compiler_output_chan
  13827. addl $4, %esp
  13828. movl %eax, -4(%ebp)
  13829. subl $8, %esp
  13830. movl 8(%ebp), %eax
  13831. movl %eax, 0(%esp)
  13832. movl $1, %eax
  13833. movl %eax, 4(%esp)
  13834. call compiler_set_segment
  13835. addl $8, %esp
  13836. subl $8, %esp
  13837. movl -4(%ebp), %eax
  13838. movl %eax, 0(%esp)
  13839. movl 12(%ebp), %eax
  13840. pushl %edx
  13841. movl %eax, %edx
  13842. movl $2, %eax
  13843. leal (%edx,%eax,4), %eax
  13844. popl %edx
  13845. movl (%eax), %eax
  13846. movl %eax, 4(%esp)
  13847. call fputs
  13848. addl $8, %esp
  13849. subl $8, %esp
  13850. movl -4(%ebp), %eax
  13851. movl %eax, 0(%esp)
  13852. movl $strbuf+2396, %eax
  13853. movl %eax, 4(%esp)
  13854. call fputs
  13855. addl $8, %esp
  13856. subl $8, %esp
  13857. movl 8(%ebp), %eax
  13858. movl %eax, 0(%esp)
  13859. movl 12(%ebp), %eax
  13860. pushl %edx
  13861. movl %eax, %edx
  13862. movl $3, %eax
  13863. leal (%edx,%eax,4), %eax
  13864. popl %edx
  13865. movl (%eax), %eax
  13866. movl %eax, 4(%esp)
  13867. call compile_simple_value
  13868. addl $8, %esp
  13869. subl $8, %esp
  13870. movl -4(%ebp), %eax
  13871. movl %eax, 0(%esp)
  13872. movl $10, %eax
  13873. movl %eax, 4(%esp)
  13874. call fputc
  13875. addl $8, %esp
  13876. leave
  13877. ret
  13878. compile_block_statement:
  13879. pushl %ebp
  13880. movl %esp, %ebp
  13881. subl $16, %esp
  13882. movl $0, %eax
  13883. movl %eax, -4(%ebp)
  13884. movl $0, %eax
  13885. movl %eax, -8(%ebp)
  13886. _label379:
  13887. movl -4(%ebp), %eax
  13888. movl %eax, %edx
  13889. pushl %edx
  13890. subl $4, %esp
  13891. movl 12(%ebp), %eax
  13892. pushl %edx
  13893. movl %eax, %edx
  13894. movl $2, %eax
  13895. leal (%edx,%eax,4), %eax
  13896. popl %edx
  13897. movl (%eax), %eax
  13898. movl %eax, 0(%esp)
  13899. call vector_size
  13900. addl $4, %esp
  13901. popl %edx
  13902. cmpl %eax, %edx
  13903. setl %al
  13904. movzbl %al, %eax
  13905. cmpl $0, %eax
  13906. je _label380
  13907. subl $8, %esp
  13908. movl 12(%ebp), %eax
  13909. pushl %edx
  13910. movl %eax, %edx
  13911. movl $2, %eax
  13912. leal (%edx,%eax,4), %eax
  13913. popl %edx
  13914. movl (%eax), %eax
  13915. movl %eax, 0(%esp)
  13916. movl -4(%ebp), %eax
  13917. movl %eax, 4(%esp)
  13918. call vector_get
  13919. addl $8, %esp
  13920. movl %eax, -12(%ebp)
  13921. movl -12(%ebp), %eax
  13922. movl %eax, %edx
  13923. movl $0, %eax
  13924. leal (%edx,%eax,4), %eax
  13925. movl (%eax), %eax
  13926. movl %eax, -16(%ebp)
  13927. movl -8(%ebp), %eax
  13928. cmpl $0, %eax
  13929. je _label381
  13930. movl -16(%ebp), %eax
  13931. movl %eax, %edx
  13932. movl $59, %eax
  13933. cmpl %eax, %edx
  13934. sete %al
  13935. movzbl %al, %eax
  13936. cmpl $0, %eax
  13937. je _label383
  13938. movl $0, %eax
  13939. movl %eax, -8(%ebp)
  13940. jmp _label382
  13941. _label383:
  13942. subl $12, %esp
  13943. movl 8(%ebp), %eax
  13944. movl %eax, 0(%esp)
  13945. movl -12(%ebp), %eax
  13946. movl %eax, 4(%esp)
  13947. movl $strbuf+2455, %eax
  13948. movl %eax, 8(%esp)
  13949. call compiler_error
  13950. addl $12, %esp
  13951. _label382:
  13952. _label381:
  13953. subl $8, %esp
  13954. movl 8(%ebp), %eax
  13955. movl %eax, 0(%esp)
  13956. pushl %ebx
  13957. pushl %ecx
  13958. pushl %edx
  13959. pushl %esi
  13960. pushl %edi
  13961. subl $8, %esp
  13962. movl 12(%ebp), %eax
  13963. pushl %edx
  13964. movl %eax, %edx
  13965. movl $2, %eax
  13966. leal (%edx,%eax,4), %eax
  13967. popl %edx
  13968. movl (%eax), %eax
  13969. movl %eax, 0(%esp)
  13970. movl -4(%ebp), %eax
  13971. movl %eax, 4(%esp)
  13972. call vector_get
  13973. addl $8, %esp
  13974. popl %edi
  13975. popl %esi
  13976. popl %edx
  13977. popl %ecx
  13978. popl %ebx
  13979. movl %eax, 4(%esp)
  13980. call compile_statement
  13981. addl $8, %esp
  13982. movl -16(%ebp), %eax
  13983. movl %eax, %edx
  13984. movl $55, %eax
  13985. cmpl %eax, %edx
  13986. sete %al
  13987. movzbl %al, %eax
  13988. cmpl $0, %eax
  13989. jne _label385
  13990. movl -16(%ebp), %eax
  13991. movl %eax, %edx
  13992. movl $60, %eax
  13993. cmpl %eax, %edx
  13994. sete %al
  13995. movzbl %al, %eax
  13996. cmpl $0, %eax
  13997. jne _label385
  13998. movl -16(%ebp), %eax
  13999. movl %eax, %edx
  14000. movl $56, %eax
  14001. cmpl %eax, %edx
  14002. sete %al
  14003. movzbl %al, %eax
  14004. cmpl $0, %eax
  14005. jne _label385
  14006. movl -16(%ebp), %eax
  14007. movl %eax, %edx
  14008. movl $57, %eax
  14009. cmpl %eax, %edx
  14010. sete %al
  14011. movzbl %al, %eax
  14012. cmpl $0, %eax
  14013. jne _label385
  14014. movl $0, %eax
  14015. jmp _label386
  14016. _label385:
  14017. movl $1, %eax
  14018. _label386:
  14019. cmpl $0, %eax
  14020. je _label384
  14021. movl $1, %eax
  14022. movl %eax, -8(%ebp)
  14023. _label384:
  14024. movl -4(%ebp), %eax
  14025. movl %eax, %ebx
  14026. movl $1, %eax
  14027. addl %ebx, %eax
  14028. movl %eax, -4(%ebp)
  14029. jmp _label379
  14030. _label380:
  14031. leave
  14032. ret
  14033. compile_statement:
  14034. pushl %ebp
  14035. movl %esp, %ebp
  14036. subl $4, %esp
  14037. movl 12(%ebp), %eax
  14038. movl %eax, %edx
  14039. movl $0, %eax
  14040. leal (%edx,%eax,4), %eax
  14041. movl (%eax), %eax
  14042. movl %eax, -4(%ebp)
  14043. movl -4(%ebp), %eax
  14044. movl %eax, %edx
  14045. movl $49, %eax
  14046. cmpl %eax, %edx
  14047. sete %al
  14048. movzbl %al, %eax
  14049. cmpl $0, %eax
  14050. je _label388
  14051. subl $8, %esp
  14052. movl 8(%ebp), %eax
  14053. movl %eax, 0(%esp)
  14054. movl 12(%ebp), %eax
  14055. movl %eax, 4(%esp)
  14056. call compile_if_statement
  14057. addl $8, %esp
  14058. jmp _label387
  14059. _label388:
  14060. movl -4(%ebp), %eax
  14061. movl %eax, %edx
  14062. movl $50, %eax
  14063. cmpl %eax, %edx
  14064. sete %al
  14065. movzbl %al, %eax
  14066. cmpl $0, %eax
  14067. je _label389
  14068. subl $8, %esp
  14069. movl 8(%ebp), %eax
  14070. movl %eax, 0(%esp)
  14071. movl 12(%ebp), %eax
  14072. movl %eax, 4(%esp)
  14073. call compile_for_statement
  14074. addl $8, %esp
  14075. jmp _label387
  14076. _label389:
  14077. movl -4(%ebp), %eax
  14078. movl %eax, %edx
  14079. movl $51, %eax
  14080. cmpl %eax, %edx
  14081. sete %al
  14082. movzbl %al, %eax
  14083. cmpl $0, %eax
  14084. je _label390
  14085. subl $12, %esp
  14086. movl 8(%ebp), %eax
  14087. movl %eax, 0(%esp)
  14088. movl 12(%ebp), %eax
  14089. movl %eax, 4(%esp)
  14090. movl $1, %eax
  14091. movl %eax, 8(%esp)
  14092. call compile_while_statement
  14093. addl $12, %esp
  14094. jmp _label387
  14095. _label390:
  14096. movl -4(%ebp), %eax
  14097. movl %eax, %edx
  14098. movl $52, %eax
  14099. cmpl %eax, %edx
  14100. sete %al
  14101. movzbl %al, %eax
  14102. cmpl $0, %eax
  14103. je _label391
  14104. subl $12, %esp
  14105. movl 8(%ebp), %eax
  14106. movl %eax, 0(%esp)
  14107. movl 12(%ebp), %eax
  14108. movl %eax, 4(%esp)
  14109. movl $0, %eax
  14110. movl %eax, 8(%esp)
  14111. call compile_while_statement
  14112. addl $12, %esp
  14113. jmp _label387
  14114. _label391:
  14115. movl -4(%ebp), %eax
  14116. movl %eax, %edx
  14117. movl $53, %eax
  14118. cmpl %eax, %edx
  14119. sete %al
  14120. movzbl %al, %eax
  14121. cmpl $0, %eax
  14122. je _label392
  14123. subl $8, %esp
  14124. movl 8(%ebp), %eax
  14125. movl %eax, 0(%esp)
  14126. movl 12(%ebp), %eax
  14127. movl %eax, 4(%esp)
  14128. call compile_allocate_statement
  14129. addl $8, %esp
  14130. jmp _label387
  14131. _label392:
  14132. movl -4(%ebp), %eax
  14133. movl %eax, %edx
  14134. movl $54, %eax
  14135. cmpl %eax, %edx
  14136. sete %al
  14137. movzbl %al, %eax
  14138. cmpl $0, %eax
  14139. je _label393
  14140. subl $8, %esp
  14141. movl 8(%ebp), %eax
  14142. movl %eax, 0(%esp)
  14143. movl 12(%ebp), %eax
  14144. movl %eax, 4(%esp)
  14145. call compile_assembly_statement
  14146. addl $8, %esp
  14147. jmp _label387
  14148. _label393:
  14149. movl -4(%ebp), %eax
  14150. movl %eax, %edx
  14151. movl $55, %eax
  14152. cmpl %eax, %edx
  14153. sete %al
  14154. movzbl %al, %eax
  14155. cmpl $0, %eax
  14156. je _label394
  14157. subl $8, %esp
  14158. movl 8(%ebp), %eax
  14159. movl %eax, 0(%esp)
  14160. movl 12(%ebp), %eax
  14161. movl %eax, 4(%esp)
  14162. call compile_return_statement
  14163. addl $8, %esp
  14164. jmp _label387
  14165. _label394:
  14166. movl -4(%ebp), %eax
  14167. movl %eax, %edx
  14168. movl $56, %eax
  14169. cmpl %eax, %edx
  14170. sete %al
  14171. movzbl %al, %eax
  14172. cmpl $0, %eax
  14173. jne _label395
  14174. movl -4(%ebp), %eax
  14175. movl %eax, %edx
  14176. movl $57, %eax
  14177. cmpl %eax, %edx
  14178. sete %al
  14179. movzbl %al, %eax
  14180. cmpl $0, %eax
  14181. jne _label395
  14182. movl $0, %eax
  14183. jmp _label396
  14184. _label395:
  14185. movl $1, %eax
  14186. _label396:
  14187. cmpl $0, %eax
  14188. je _label397
  14189. subl $8, %esp
  14190. movl 8(%ebp), %eax
  14191. movl %eax, 0(%esp)
  14192. movl 12(%ebp), %eax
  14193. movl %eax, 4(%esp)
  14194. call compile_loop_jump_statement
  14195. addl $8, %esp
  14196. jmp _label387
  14197. _label397:
  14198. movl -4(%ebp), %eax
  14199. movl %eax, %edx
  14200. movl $58, %eax
  14201. cmpl %eax, %edx
  14202. sete %al
  14203. movzbl %al, %eax
  14204. cmpl $0, %eax
  14205. je _label398
  14206. subl $8, %esp
  14207. movl 8(%ebp), %eax
  14208. movl %eax, 0(%esp)
  14209. movl 12(%ebp), %eax
  14210. movl %eax, 4(%esp)
  14211. call compile_writechar_statement
  14212. addl $8, %esp
  14213. jmp _label387
  14214. _label398:
  14215. movl -4(%ebp), %eax
  14216. movl %eax, %edx
  14217. movl $59, %eax
  14218. cmpl %eax, %edx
  14219. sete %al
  14220. movzbl %al, %eax
  14221. cmpl $0, %eax
  14222. je _label399
  14223. subl $8, %esp
  14224. movl 8(%ebp), %eax
  14225. movl %eax, 0(%esp)
  14226. movl 12(%ebp), %eax
  14227. movl %eax, 4(%esp)
  14228. call compile_label_statement
  14229. addl $8, %esp
  14230. jmp _label387
  14231. _label399:
  14232. movl -4(%ebp), %eax
  14233. movl %eax, %edx
  14234. movl $60, %eax
  14235. cmpl %eax, %edx
  14236. sete %al
  14237. movzbl %al, %eax
  14238. cmpl $0, %eax
  14239. je _label400
  14240. subl $8, %esp
  14241. movl 8(%ebp), %eax
  14242. movl %eax, 0(%esp)
  14243. movl 12(%ebp), %eax
  14244. movl %eax, 4(%esp)
  14245. call compile_goto_statement
  14246. addl $8, %esp
  14247. jmp _label387
  14248. _label400:
  14249. movl -4(%ebp), %eax
  14250. movl %eax, %edx
  14251. movl $61, %eax
  14252. cmpl %eax, %edx
  14253. sete %al
  14254. movzbl %al, %eax
  14255. cmpl $0, %eax
  14256. je _label401
  14257. subl $8, %esp
  14258. movl 8(%ebp), %eax
  14259. movl %eax, 0(%esp)
  14260. movl 12(%ebp), %eax
  14261. movl %eax, 4(%esp)
  14262. call compile_block_statement
  14263. addl $8, %esp
  14264. jmp _label387
  14265. _label401:
  14266. subl $8, %esp
  14267. movl 8(%ebp), %eax
  14268. movl %eax, 0(%esp)
  14269. movl 12(%ebp), %eax
  14270. movl %eax, 4(%esp)
  14271. call compile_expression
  14272. addl $8, %esp
  14273. _label387:
  14274. leave
  14275. ret
  14276. compile_if_statement:
  14277. pushl %ebp
  14278. movl %esp, %ebp
  14279. subl $20, %esp
  14280. subl $4, %esp
  14281. movl 8(%ebp), %eax
  14282. movl %eax, 0(%esp)
  14283. call compiler_output_chan
  14284. addl $4, %esp
  14285. movl %eax, -4(%ebp)
  14286. subl $4, %esp
  14287. movl 8(%ebp), %eax
  14288. movl %eax, 0(%esp)
  14289. call compiler_new_label
  14290. addl $4, %esp
  14291. movl %eax, -8(%ebp)
  14292. movl $0, %eax
  14293. movl %eax, -16(%ebp)
  14294. _label402:
  14295. movl -16(%ebp), %eax
  14296. movl %eax, %edx
  14297. pushl %edx
  14298. subl $4, %esp
  14299. movl 12(%ebp), %eax
  14300. pushl %edx
  14301. movl %eax, %edx
  14302. movl $2, %eax
  14303. leal (%edx,%eax,4), %eax
  14304. popl %edx
  14305. movl (%eax), %eax
  14306. movl %eax, 0(%esp)
  14307. call vector_size
  14308. addl $4, %esp
  14309. popl %edx
  14310. cmpl %eax, %edx
  14311. setl %al
  14312. movzbl %al, %eax
  14313. cmpl $0, %eax
  14314. je _label403
  14315. movl -16(%ebp), %eax
  14316. movl %eax, %edx
  14317. movl $0, %eax
  14318. cmpl %eax, %edx
  14319. setne %al
  14320. movzbl %al, %eax
  14321. cmpl $0, %eax
  14322. je _label404
  14323. subl $8, %esp
  14324. movl -4(%ebp), %eax
  14325. movl %eax, 0(%esp)
  14326. movl $strbuf+2473, %eax
  14327. movl %eax, 4(%esp)
  14328. call fputs
  14329. addl $8, %esp
  14330. subl $8, %esp
  14331. movl -4(%ebp), %eax
  14332. movl %eax, 0(%esp)
  14333. movl -8(%ebp), %eax
  14334. movl %eax, 4(%esp)
  14335. call fputlabel
  14336. addl $8, %esp
  14337. subl $8, %esp
  14338. movl -4(%ebp), %eax
  14339. movl %eax, 0(%esp)
  14340. movl $10, %eax
  14341. movl %eax, 4(%esp)
  14342. call fputc
  14343. addl $8, %esp
  14344. subl $8, %esp
  14345. movl -4(%ebp), %eax
  14346. movl %eax, 0(%esp)
  14347. movl -12(%ebp), %eax
  14348. movl %eax, 4(%esp)
  14349. call fputlabeldef
  14350. addl $8, %esp
  14351. _label404:
  14352. subl $8, %esp
  14353. movl 12(%ebp), %eax
  14354. pushl %edx
  14355. movl %eax, %edx
  14356. movl $2, %eax
  14357. leal (%edx,%eax,4), %eax
  14358. popl %edx
  14359. movl (%eax), %eax
  14360. movl %eax, 0(%esp)
  14361. movl -16(%ebp), %eax
  14362. movl %eax, 4(%esp)
  14363. call vector_get
  14364. addl $8, %esp
  14365. movl %eax, -20(%ebp)
  14366. movl -20(%ebp), %eax
  14367. movl %eax, %edx
  14368. movl $0, %eax
  14369. leal (%edx,%eax,4), %eax
  14370. movl (%eax), %eax
  14371. movl %eax, %edx
  14372. movl $61, %eax
  14373. cmpl %eax, %edx
  14374. setne %al
  14375. movzbl %al, %eax
  14376. cmpl $0, %eax
  14377. je _label405
  14378. subl $8, %esp
  14379. movl 8(%ebp), %eax
  14380. movl %eax, 0(%esp)
  14381. movl -20(%ebp), %eax
  14382. movl %eax, 4(%esp)
  14383. call compile_expression
  14384. addl $8, %esp
  14385. movl -16(%ebp), %eax
  14386. movl %eax, %ebx
  14387. movl $2, %eax
  14388. addl %ebx, %eax
  14389. movl %eax, %edx
  14390. pushl %edx
  14391. subl $4, %esp
  14392. movl 12(%ebp), %eax
  14393. pushl %edx
  14394. movl %eax, %edx
  14395. movl $2, %eax
  14396. leal (%edx,%eax,4), %eax
  14397. popl %edx
  14398. movl (%eax), %eax
  14399. movl %eax, 0(%esp)
  14400. call vector_size
  14401. addl $4, %esp
  14402. popl %edx
  14403. cmpl %eax, %edx
  14404. setl %al
  14405. movzbl %al, %eax
  14406. cmpl $0, %eax
  14407. je _label406
  14408. subl $4, %esp
  14409. movl 8(%ebp), %eax
  14410. movl %eax, 0(%esp)
  14411. call compiler_new_label
  14412. addl $4, %esp
  14413. jmp _label407
  14414. _label406:
  14415. movl -8(%ebp), %eax
  14416. _label407:
  14417. movl %eax, -12(%ebp)
  14418. subl $8, %esp
  14419. movl -4(%ebp), %eax
  14420. movl %eax, 0(%esp)
  14421. movl $strbuf+2479, %eax
  14422. movl %eax, 4(%esp)
  14423. call fputs
  14424. addl $8, %esp
  14425. subl $8, %esp
  14426. movl -4(%ebp), %eax
  14427. movl %eax, 0(%esp)
  14428. movl $strbuf+2495, %eax
  14429. movl %eax, 4(%esp)
  14430. call fputs
  14431. addl $8, %esp
  14432. subl $8, %esp
  14433. movl -4(%ebp), %eax
  14434. movl %eax, 0(%esp)
  14435. movl -12(%ebp), %eax
  14436. movl %eax, 4(%esp)
  14437. call fputlabel
  14438. addl $8, %esp
  14439. subl $8, %esp
  14440. movl -4(%ebp), %eax
  14441. movl %eax, 0(%esp)
  14442. movl $10, %eax
  14443. movl %eax, 4(%esp)
  14444. call fputc
  14445. addl $8, %esp
  14446. movl -16(%ebp), %eax
  14447. movl %eax, %ebx
  14448. movl $1, %eax
  14449. addl %ebx, %eax
  14450. movl %eax, -16(%ebp)
  14451. subl $8, %esp
  14452. movl 12(%ebp), %eax
  14453. pushl %edx
  14454. movl %eax, %edx
  14455. movl $2, %eax
  14456. leal (%edx,%eax,4), %eax
  14457. popl %edx
  14458. movl (%eax), %eax
  14459. movl %eax, 0(%esp)
  14460. movl -16(%ebp), %eax
  14461. movl %eax, 4(%esp)
  14462. call vector_get
  14463. addl $8, %esp
  14464. movl %eax, -20(%ebp)
  14465. _label405:
  14466. subl $8, %esp
  14467. movl 8(%ebp), %eax
  14468. movl %eax, 0(%esp)
  14469. movl -20(%ebp), %eax
  14470. movl %eax, 4(%esp)
  14471. call compile_block_statement
  14472. addl $8, %esp
  14473. movl -16(%ebp), %eax
  14474. movl %eax, %ebx
  14475. movl $1, %eax
  14476. addl %ebx, %eax
  14477. movl %eax, -16(%ebp)
  14478. jmp _label402
  14479. _label403:
  14480. subl $8, %esp
  14481. movl -4(%ebp), %eax
  14482. movl %eax, 0(%esp)
  14483. movl -8(%ebp), %eax
  14484. movl %eax, 4(%esp)
  14485. call fputlabeldef
  14486. addl $8, %esp
  14487. leave
  14488. ret
  14489. compile_for_statement:
  14490. pushl %ebp
  14491. movl %esp, %ebp
  14492. subl $20, %esp
  14493. subl $4, %esp
  14494. movl 8(%ebp), %eax
  14495. movl %eax, 0(%esp)
  14496. call compiler_output_chan
  14497. addl $4, %esp
  14498. movl %eax, -4(%ebp)
  14499. subl $4, %esp
  14500. movl 8(%ebp), %eax
  14501. movl %eax, 0(%esp)
  14502. call compiler_new_label
  14503. addl $4, %esp
  14504. movl %eax, -8(%ebp)
  14505. subl $4, %esp
  14506. movl 8(%ebp), %eax
  14507. movl %eax, 0(%esp)
  14508. call compiler_new_label
  14509. addl $4, %esp
  14510. movl %eax, -12(%ebp)
  14511. subl $4, %esp
  14512. movl 8(%ebp), %eax
  14513. movl %eax, 0(%esp)
  14514. call compiler_new_label
  14515. addl $4, %esp
  14516. movl %eax, -16(%ebp)
  14517. movl 12(%ebp), %eax
  14518. movl %eax, %edx
  14519. movl $2, %eax
  14520. leal (%edx,%eax,4), %eax
  14521. movl (%eax), %eax
  14522. cmpl $0, %eax
  14523. je _label408
  14524. subl $8, %esp
  14525. movl 8(%ebp), %eax
  14526. movl %eax, 0(%esp)
  14527. movl 12(%ebp), %eax
  14528. pushl %edx
  14529. movl %eax, %edx
  14530. movl $2, %eax
  14531. leal (%edx,%eax,4), %eax
  14532. popl %edx
  14533. movl (%eax), %eax
  14534. movl %eax, 4(%esp)
  14535. call compile_expression
  14536. addl $8, %esp
  14537. _label408:
  14538. subl $8, %esp
  14539. movl -4(%ebp), %eax
  14540. movl %eax, 0(%esp)
  14541. movl -8(%ebp), %eax
  14542. movl %eax, 4(%esp)
  14543. call fputlabeldef
  14544. addl $8, %esp
  14545. movl 12(%ebp), %eax
  14546. movl %eax, %edx
  14547. movl $3, %eax
  14548. leal (%edx,%eax,4), %eax
  14549. movl (%eax), %eax
  14550. cmpl $0, %eax
  14551. je _label409
  14552. subl $8, %esp
  14553. movl 8(%ebp), %eax
  14554. movl %eax, 0(%esp)
  14555. movl 12(%ebp), %eax
  14556. pushl %edx
  14557. movl %eax, %edx
  14558. movl $3, %eax
  14559. leal (%edx,%eax,4), %eax
  14560. popl %edx
  14561. movl (%eax), %eax
  14562. movl %eax, 4(%esp)
  14563. call compile_expression
  14564. addl $8, %esp
  14565. subl $8, %esp
  14566. movl -4(%ebp), %eax
  14567. movl %eax, 0(%esp)
  14568. movl $strbuf+2479, %eax
  14569. movl %eax, 4(%esp)
  14570. call fputs
  14571. addl $8, %esp
  14572. subl $8, %esp
  14573. movl -4(%ebp), %eax
  14574. movl %eax, 0(%esp)
  14575. movl $strbuf+2495, %eax
  14576. movl %eax, 4(%esp)
  14577. call fputs
  14578. addl $8, %esp
  14579. subl $8, %esp
  14580. movl -4(%ebp), %eax
  14581. movl %eax, 0(%esp)
  14582. movl -16(%ebp), %eax
  14583. movl %eax, 4(%esp)
  14584. call fputlabel
  14585. addl $8, %esp
  14586. subl $8, %esp
  14587. movl -4(%ebp), %eax
  14588. movl %eax, 0(%esp)
  14589. movl $10, %eax
  14590. movl %eax, 4(%esp)
  14591. call fputc
  14592. addl $8, %esp
  14593. _label409:
  14594. subl $12, %esp
  14595. movl 8(%ebp), %eax
  14596. movl %eax, 0(%esp)
  14597. movl -12(%ebp), %eax
  14598. movl %eax, 4(%esp)
  14599. movl -16(%ebp), %eax
  14600. movl %eax, 8(%esp)
  14601. call compiler_push_loop
  14602. addl $12, %esp
  14603. subl $8, %esp
  14604. movl 8(%ebp), %eax
  14605. movl %eax, 0(%esp)
  14606. movl 12(%ebp), %eax
  14607. pushl %edx
  14608. movl %eax, %edx
  14609. movl $5, %eax
  14610. leal (%edx,%eax,4), %eax
  14611. popl %edx
  14612. movl (%eax), %eax
  14613. movl %eax, 4(%esp)
  14614. call compile_block_statement
  14615. addl $8, %esp
  14616. subl $4, %esp
  14617. movl 8(%ebp), %eax
  14618. movl %eax, 0(%esp)
  14619. call compiler_pop_loop
  14620. addl $4, %esp
  14621. subl $8, %esp
  14622. movl -4(%ebp), %eax
  14623. movl %eax, 0(%esp)
  14624. movl -12(%ebp), %eax
  14625. movl %eax, 4(%esp)
  14626. call fputlabeldef
  14627. addl $8, %esp
  14628. movl $0, %eax
  14629. movl %eax, -20(%ebp)
  14630. _label410:
  14631. movl -20(%ebp), %eax
  14632. movl %eax, %edx
  14633. pushl %edx
  14634. subl $4, %esp
  14635. movl 12(%ebp), %eax
  14636. pushl %edx
  14637. movl %eax, %edx
  14638. movl $4, %eax
  14639. leal (%edx,%eax,4), %eax
  14640. popl %edx
  14641. movl (%eax), %eax
  14642. movl %eax, 0(%esp)
  14643. call vector_size
  14644. addl $4, %esp
  14645. popl %edx
  14646. cmpl %eax, %edx
  14647. setl %al
  14648. movzbl %al, %eax
  14649. cmpl $0, %eax
  14650. je _label411
  14651. subl $8, %esp
  14652. movl 8(%ebp), %eax
  14653. movl %eax, 0(%esp)
  14654. pushl %ebx
  14655. pushl %ecx
  14656. pushl %edx
  14657. pushl %esi
  14658. pushl %edi
  14659. subl $8, %esp
  14660. movl 12(%ebp), %eax
  14661. pushl %edx
  14662. movl %eax, %edx
  14663. movl $4, %eax
  14664. leal (%edx,%eax,4), %eax
  14665. popl %edx
  14666. movl (%eax), %eax
  14667. movl %eax, 0(%esp)
  14668. movl -20(%ebp), %eax
  14669. movl %eax, 4(%esp)
  14670. call vector_get
  14671. addl $8, %esp
  14672. popl %edi
  14673. popl %esi
  14674. popl %edx
  14675. popl %ecx
  14676. popl %ebx
  14677. movl %eax, 4(%esp)
  14678. call compile_expression
  14679. addl $8, %esp
  14680. movl -20(%ebp), %eax
  14681. movl %eax, %ebx
  14682. movl $1, %eax
  14683. addl %ebx, %eax
  14684. movl %eax, -20(%ebp)
  14685. jmp _label410
  14686. _label411:
  14687. subl $8, %esp
  14688. movl -4(%ebp), %eax
  14689. movl %eax, 0(%esp)
  14690. movl $strbuf+2473, %eax
  14691. movl %eax, 4(%esp)
  14692. call fputs
  14693. addl $8, %esp
  14694. subl $8, %esp
  14695. movl -4(%ebp), %eax
  14696. movl %eax, 0(%esp)
  14697. movl -8(%ebp), %eax
  14698. movl %eax, 4(%esp)
  14699. call fputlabel
  14700. addl $8, %esp
  14701. subl $8, %esp
  14702. movl -4(%ebp), %eax
  14703. movl %eax, 0(%esp)
  14704. movl $10, %eax
  14705. movl %eax, 4(%esp)
  14706. call fputc
  14707. addl $8, %esp
  14708. subl $8, %esp
  14709. movl -4(%ebp), %eax
  14710. movl %eax, 0(%esp)
  14711. movl -16(%ebp), %eax
  14712. movl %eax, 4(%esp)
  14713. call fputlabeldef
  14714. addl $8, %esp
  14715. leave
  14716. ret
  14717. compile_while_statement:
  14718. pushl %ebp
  14719. movl %esp, %ebp
  14720. subl $12, %esp
  14721. subl $4, %esp
  14722. movl 8(%ebp), %eax
  14723. movl %eax, 0(%esp)
  14724. call compiler_output_chan
  14725. addl $4, %esp
  14726. movl %eax, -4(%ebp)
  14727. subl $4, %esp
  14728. movl 8(%ebp), %eax
  14729. movl %eax, 0(%esp)
  14730. call compiler_new_label
  14731. addl $4, %esp
  14732. movl %eax, -8(%ebp)
  14733. subl $4, %esp
  14734. movl 8(%ebp), %eax
  14735. movl %eax, 0(%esp)
  14736. call compiler_new_label
  14737. addl $4, %esp
  14738. movl %eax, -12(%ebp)
  14739. subl $8, %esp
  14740. movl -4(%ebp), %eax
  14741. movl %eax, 0(%esp)
  14742. movl -8(%ebp), %eax
  14743. movl %eax, 4(%esp)
  14744. call fputlabeldef
  14745. addl $8, %esp
  14746. movl 16(%ebp), %eax
  14747. cmpl $0, %eax
  14748. sete %al
  14749. movzbl %al, %eax
  14750. cmpl $0, %eax
  14751. je _label412
  14752. subl $20, %esp
  14753. movl 8(%ebp), %eax
  14754. movl %eax, 0(%esp)
  14755. movl 12(%ebp), %eax
  14756. pushl %edx
  14757. movl %eax, %edx
  14758. movl $2, %eax
  14759. leal (%edx,%eax,4), %eax
  14760. popl %edx
  14761. movl (%eax), %eax
  14762. movl %eax, 4(%esp)
  14763. movl 16(%ebp), %eax
  14764. movl %eax, 8(%esp)
  14765. movl -8(%ebp), %eax
  14766. movl %eax, 12(%esp)
  14767. movl -12(%ebp), %eax
  14768. movl %eax, 16(%esp)
  14769. call compile_while_condition
  14770. addl $20, %esp
  14771. _label412:
  14772. subl $12, %esp
  14773. movl 8(%ebp), %eax
  14774. movl %eax, 0(%esp)
  14775. movl -8(%ebp), %eax
  14776. movl %eax, 4(%esp)
  14777. movl -12(%ebp), %eax
  14778. movl %eax, 8(%esp)
  14779. call compiler_push_loop
  14780. addl $12, %esp
  14781. subl $8, %esp
  14782. movl 8(%ebp), %eax
  14783. movl %eax, 0(%esp)
  14784. movl 12(%ebp), %eax
  14785. pushl %edx
  14786. movl %eax, %edx
  14787. movl $3, %eax
  14788. leal (%edx,%eax,4), %eax
  14789. popl %edx
  14790. movl (%eax), %eax
  14791. movl %eax, 4(%esp)
  14792. call compile_block_statement
  14793. addl $8, %esp
  14794. subl $12, %esp
  14795. movl 8(%ebp), %eax
  14796. movl %eax, 0(%esp)
  14797. movl -8(%ebp), %eax
  14798. movl %eax, 4(%esp)
  14799. movl -12(%ebp), %eax
  14800. movl %eax, 8(%esp)
  14801. call compiler_pop_loop
  14802. addl $12, %esp
  14803. movl 16(%ebp), %eax
  14804. cmpl $0, %eax
  14805. je _label414
  14806. subl $20, %esp
  14807. movl 8(%ebp), %eax
  14808. movl %eax, 0(%esp)
  14809. movl 12(%ebp), %eax
  14810. pushl %edx
  14811. movl %eax, %edx
  14812. movl $2, %eax
  14813. leal (%edx,%eax,4), %eax
  14814. popl %edx
  14815. movl (%eax), %eax
  14816. movl %eax, 4(%esp)
  14817. movl 16(%ebp), %eax
  14818. movl %eax, 8(%esp)
  14819. movl -8(%ebp), %eax
  14820. movl %eax, 12(%esp)
  14821. movl -12(%ebp), %eax
  14822. movl %eax, 16(%esp)
  14823. call compile_while_condition
  14824. addl $20, %esp
  14825. jmp _label413
  14826. _label414:
  14827. subl $8, %esp
  14828. movl -4(%ebp), %eax
  14829. movl %eax, 0(%esp)
  14830. movl $strbuf+2473, %eax
  14831. movl %eax, 4(%esp)
  14832. call fputs
  14833. addl $8, %esp
  14834. subl $8, %esp
  14835. movl -4(%ebp), %eax
  14836. movl %eax, 0(%esp)
  14837. movl -8(%ebp), %eax
  14838. movl %eax, 4(%esp)
  14839. call fputlabel
  14840. addl $8, %esp
  14841. subl $8, %esp
  14842. movl -4(%ebp), %eax
  14843. movl %eax, 0(%esp)
  14844. movl $10, %eax
  14845. movl %eax, 4(%esp)
  14846. call fputc
  14847. addl $8, %esp
  14848. _label413:
  14849. subl $8, %esp
  14850. movl -4(%ebp), %eax
  14851. movl %eax, 0(%esp)
  14852. movl -12(%ebp), %eax
  14853. movl %eax, 4(%esp)
  14854. call fputlabeldef
  14855. addl $8, %esp
  14856. leave
  14857. ret
  14858. compile_while_condition:
  14859. pushl %ebp
  14860. movl %esp, %ebp
  14861. subl $4, %esp
  14862. subl $4, %esp
  14863. movl 8(%ebp), %eax
  14864. movl %eax, 0(%esp)
  14865. call compiler_output_chan
  14866. addl $4, %esp
  14867. movl %eax, -4(%ebp)
  14868. subl $8, %esp
  14869. movl 8(%ebp), %eax
  14870. movl %eax, 0(%esp)
  14871. movl 12(%ebp), %eax
  14872. movl %eax, 4(%esp)
  14873. call compile_expression
  14874. addl $8, %esp
  14875. subl $8, %esp
  14876. movl -4(%ebp), %eax
  14877. movl %eax, 0(%esp)
  14878. movl $strbuf+2479, %eax
  14879. movl %eax, 4(%esp)
  14880. call fputs
  14881. addl $8, %esp
  14882. subl $8, %esp
  14883. movl -4(%ebp), %eax
  14884. movl %eax, 0(%esp)
  14885. movl 16(%ebp), %eax
  14886. cmpl $0, %eax
  14887. je _label415
  14888. movl $strbuf+2500, %eax
  14889. jmp _label416
  14890. _label415:
  14891. movl $strbuf+2495, %eax
  14892. _label416:
  14893. movl %eax, 4(%esp)
  14894. call fputs
  14895. addl $8, %esp
  14896. subl $8, %esp
  14897. movl -4(%ebp), %eax
  14898. movl %eax, 0(%esp)
  14899. movl 16(%ebp), %eax
  14900. cmpl $0, %eax
  14901. je _label417
  14902. movl 20(%ebp), %eax
  14903. jmp _label418
  14904. _label417:
  14905. movl 24(%ebp), %eax
  14906. _label418:
  14907. movl %eax, 4(%esp)
  14908. call fputlabel
  14909. addl $8, %esp
  14910. subl $8, %esp
  14911. movl -4(%ebp), %eax
  14912. movl %eax, 0(%esp)
  14913. movl $10, %eax
  14914. movl %eax, 4(%esp)
  14915. call fputc
  14916. addl $8, %esp
  14917. leave
  14918. ret
  14919. compile_allocate_statement:
  14920. pushl %ebp
  14921. movl %esp, %ebp
  14922. subl $12, %esp
  14923. subl $4, %esp
  14924. movl 8(%ebp), %eax
  14925. movl %eax, 0(%esp)
  14926. call compiler_output_chan
  14927. addl $4, %esp
  14928. movl %eax, -4(%ebp)
  14929. movl 12(%ebp), %eax
  14930. movl %eax, %edx
  14931. movl $2, %eax
  14932. leal (%edx,%eax,4), %eax
  14933. movl (%eax), %eax
  14934. movl %eax, -8(%ebp)
  14935. movl -8(%ebp), %eax
  14936. movl %eax, %edx
  14937. movl $0, %eax
  14938. leal (%edx,%eax,4), %eax
  14939. movl (%eax), %eax
  14940. movl %eax, %edx
  14941. movl $0, %eax
  14942. cmpl %eax, %edx
  14943. setne %al
  14944. movzbl %al, %eax
  14945. cmpl $0, %eax
  14946. je _label419
  14947. subl $12, %esp
  14948. movl 8(%ebp), %eax
  14949. movl %eax, 0(%esp)
  14950. movl -8(%ebp), %eax
  14951. movl %eax, 4(%esp)
  14952. movl $strbuf+2506, %eax
  14953. movl %eax, 8(%esp)
  14954. call compiler_error
  14955. addl $12, %esp
  14956. _label419:
  14957. movl -8(%ebp), %eax
  14958. movl %eax, %edx
  14959. movl $2, %eax
  14960. leal (%edx,%eax,4), %eax
  14961. movl (%eax), %eax
  14962. movl %eax, %ebx
  14963. movl $4, %eax
  14964. imull %ebx, %eax
  14965. movl %eax, -12(%ebp)
  14966. movl -12(%ebp), %eax
  14967. movl %eax, %edx
  14968. movl $0, %eax
  14969. cmpl %eax, %edx
  14970. setle %al
  14971. movzbl %al, %eax
  14972. cmpl $0, %eax
  14973. je _label420
  14974. subl $12, %esp
  14975. movl 8(%ebp), %eax
  14976. movl %eax, 0(%esp)
  14977. movl -8(%ebp), %eax
  14978. movl %eax, 4(%esp)
  14979. movl $strbuf+2550, %eax
  14980. movl %eax, 8(%esp)
  14981. call compiler_error
  14982. addl $12, %esp
  14983. _label420:
  14984. subl $8, %esp
  14985. movl -4(%ebp), %eax
  14986. movl %eax, 0(%esp)
  14987. movl $strbuf+2581, %eax
  14988. movl %eax, 4(%esp)
  14989. call fputs
  14990. addl $8, %esp
  14991. subl $8, %esp
  14992. movl -4(%ebp), %eax
  14993. movl %eax, 0(%esp)
  14994. movl -12(%ebp), %eax
  14995. movl %eax, 4(%esp)
  14996. call fputd
  14997. addl $8, %esp
  14998. subl $8, %esp
  14999. movl -4(%ebp), %eax
  15000. movl %eax, 0(%esp)
  15001. movl $strbuf+2589, %eax
  15002. movl %eax, 4(%esp)
  15003. call fputs
  15004. addl $8, %esp
  15005. leave
  15006. ret
  15007. compile_assembly_statement:
  15008. pushl %ebp
  15009. movl %esp, %ebp
  15010. subl $8, %esp
  15011. subl $4, %esp
  15012. movl 8(%ebp), %eax
  15013. movl %eax, 0(%esp)
  15014. call compiler_output_chan
  15015. addl $4, %esp
  15016. movl %eax, -4(%ebp)
  15017. movl $0, %eax
  15018. movl %eax, -8(%ebp)
  15019. _label421:
  15020. movl -8(%ebp), %eax
  15021. movl %eax, %edx
  15022. pushl %edx
  15023. subl $4, %esp
  15024. movl 12(%ebp), %eax
  15025. pushl %edx
  15026. movl %eax, %edx
  15027. movl $2, %eax
  15028. leal (%edx,%eax,4), %eax
  15029. popl %edx
  15030. movl (%eax), %eax
  15031. movl %eax, 0(%esp)
  15032. call vector_size
  15033. addl $4, %esp
  15034. popl %edx
  15035. cmpl %eax, %edx
  15036. setl %al
  15037. movzbl %al, %eax
  15038. cmpl $0, %eax
  15039. je _label423
  15040. subl $8, %esp
  15041. movl -4(%ebp), %eax
  15042. movl %eax, 0(%esp)
  15043. movl $9, %eax
  15044. movl %eax, 4(%esp)
  15045. call fputc
  15046. addl $8, %esp
  15047. subl $8, %esp
  15048. movl -4(%ebp), %eax
  15049. movl %eax, 0(%esp)
  15050. pushl %ebx
  15051. pushl %ecx
  15052. pushl %edx
  15053. pushl %esi
  15054. pushl %edi
  15055. subl $8, %esp
  15056. movl 12(%ebp), %eax
  15057. pushl %edx
  15058. movl %eax, %edx
  15059. movl $2, %eax
  15060. leal (%edx,%eax,4), %eax
  15061. popl %edx
  15062. movl (%eax), %eax
  15063. movl %eax, 0(%esp)
  15064. movl -8(%ebp), %eax
  15065. movl %eax, 4(%esp)
  15066. call vector_get
  15067. addl $8, %esp
  15068. popl %edi
  15069. popl %esi
  15070. popl %edx
  15071. popl %ecx
  15072. popl %ebx
  15073. movl %eax, 4(%esp)
  15074. call fputs
  15075. addl $8, %esp
  15076. subl $8, %esp
  15077. movl -4(%ebp), %eax
  15078. movl %eax, 0(%esp)
  15079. movl $10, %eax
  15080. movl %eax, 4(%esp)
  15081. call fputc
  15082. addl $8, %esp
  15083. _label422:
  15084. movl -8(%ebp), %eax
  15085. leal 1(%eax), %edx
  15086. movl %edx, -8(%ebp)
  15087. jmp _label421
  15088. _label423:
  15089. leave
  15090. ret
  15091. compile_return_statement:
  15092. pushl %ebp
  15093. movl %esp, %ebp
  15094. subl $4, %esp
  15095. movl 12(%ebp), %eax
  15096. movl %eax, %edx
  15097. movl $2, %eax
  15098. leal (%edx,%eax,4), %eax
  15099. movl (%eax), %eax
  15100. movl %eax, -4(%ebp)
  15101. subl $4, %esp
  15102. movl -4(%ebp), %eax
  15103. movl %eax, 0(%esp)
  15104. call vector_size
  15105. addl $4, %esp
  15106. movl %eax, %edx
  15107. movl $0, %eax
  15108. cmpl %eax, %edx
  15109. setne %al
  15110. movzbl %al, %eax
  15111. cmpl $0, %eax
  15112. je _label424
  15113. subl $8, %esp
  15114. movl 8(%ebp), %eax
  15115. movl %eax, 0(%esp)
  15116. pushl %ebx
  15117. pushl %ecx
  15118. pushl %edx
  15119. pushl %esi
  15120. pushl %edi
  15121. subl $4, %esp
  15122. movl -4(%ebp), %eax
  15123. movl %eax, 0(%esp)
  15124. call vector_pop
  15125. addl $4, %esp
  15126. popl %edi
  15127. popl %esi
  15128. popl %edx
  15129. popl %ecx
  15130. popl %ebx
  15131. movl %eax, 4(%esp)
  15132. call compile_expression
  15133. addl $8, %esp
  15134. _label424:
  15135. subl $8, %esp
  15136. pushl %ebx
  15137. pushl %ecx
  15138. pushl %edx
  15139. pushl %esi
  15140. pushl %edi
  15141. subl $4, %esp
  15142. movl 8(%ebp), %eax
  15143. movl %eax, 0(%esp)
  15144. call compiler_output_chan
  15145. addl $4, %esp
  15146. popl %edi
  15147. popl %esi
  15148. popl %edx
  15149. popl %ecx
  15150. popl %ebx
  15151. movl %eax, 0(%esp)
  15152. movl $strbuf+2383, %eax
  15153. movl %eax, 4(%esp)
  15154. call fputs
  15155. addl $8, %esp
  15156. leave
  15157. ret
  15158. compile_loop_jump_statement:
  15159. pushl %ebp
  15160. movl %esp, %ebp
  15161. subl $12, %esp
  15162. subl $4, %esp
  15163. movl 8(%ebp), %eax
  15164. movl %eax, 0(%esp)
  15165. call compiler_output_chan
  15166. addl $4, %esp
  15167. movl %eax, -4(%ebp)
  15168. subl $4, %esp
  15169. movl 8(%ebp), %eax
  15170. movl %eax, 0(%esp)
  15171. call compiler_loop
  15172. addl $4, %esp
  15173. movl %eax, -8(%ebp)
  15174. movl -8(%ebp), %eax
  15175. cmpl $0, %eax
  15176. je _label426
  15177. movl 12(%ebp), %eax
  15178. movl %eax, %edx
  15179. movl $0, %eax
  15180. leal (%edx,%eax,4), %eax
  15181. movl (%eax), %eax
  15182. movl %eax, %edx
  15183. movl $56, %eax
  15184. cmpl %eax, %edx
  15185. sete %al
  15186. movzbl %al, %eax
  15187. cmpl $0, %eax
  15188. je _label427
  15189. movl -8(%ebp), %eax
  15190. movl %eax, %edx
  15191. movl $1, %eax
  15192. leal (%edx,%eax,4), %eax
  15193. movl (%eax), %eax
  15194. jmp _label428
  15195. _label427:
  15196. movl -8(%ebp), %eax
  15197. movl %eax, %edx
  15198. movl $0, %eax
  15199. leal (%edx,%eax,4), %eax
  15200. movl (%eax), %eax
  15201. _label428:
  15202. movl %eax, -12(%ebp)
  15203. subl $8, %esp
  15204. movl -4(%ebp), %eax
  15205. movl %eax, 0(%esp)
  15206. movl $strbuf+2473, %eax
  15207. movl %eax, 4(%esp)
  15208. call fputs
  15209. addl $8, %esp
  15210. subl $8, %esp
  15211. movl -4(%ebp), %eax
  15212. movl %eax, 0(%esp)
  15213. movl -12(%ebp), %eax
  15214. movl %eax, 4(%esp)
  15215. call fputlabel
  15216. addl $8, %esp
  15217. subl $8, %esp
  15218. movl -4(%ebp), %eax
  15219. movl %eax, 0(%esp)
  15220. movl $10, %eax
  15221. movl %eax, 4(%esp)
  15222. call fputc
  15223. addl $8, %esp
  15224. jmp _label425
  15225. _label426:
  15226. subl $12, %esp
  15227. movl 8(%ebp), %eax
  15228. movl %eax, 0(%esp)
  15229. movl 12(%ebp), %eax
  15230. movl %eax, 4(%esp)
  15231. movl $strbuf+2597, %eax
  15232. movl %eax, 8(%esp)
  15233. call compiler_error
  15234. addl $12, %esp
  15235. _label425:
  15236. leave
  15237. ret
  15238. compile_writechar_statement:
  15239. pushl %ebp
  15240. movl %esp, %ebp
  15241. subl $4, %esp
  15242. subl $4, %esp
  15243. movl 8(%ebp), %eax
  15244. movl %eax, 0(%esp)
  15245. call compiler_output_chan
  15246. addl $4, %esp
  15247. movl %eax, -4(%ebp)
  15248. subl $8, %esp
  15249. movl 8(%ebp), %eax
  15250. movl %eax, 0(%esp)
  15251. movl 12(%ebp), %eax
  15252. pushl %edx
  15253. movl %eax, %edx
  15254. movl $2, %eax
  15255. leal (%edx,%eax,4), %eax
  15256. popl %edx
  15257. movl (%eax), %eax
  15258. movl %eax, 4(%esp)
  15259. call compile_expression
  15260. addl $8, %esp
  15261. subl $8, %esp
  15262. movl 8(%ebp), %eax
  15263. movl %eax, 0(%esp)
  15264. movl $3, %eax
  15265. movl %eax, 4(%esp)
  15266. call compiler_allocate_register
  15267. addl $8, %esp
  15268. subl $8, %esp
  15269. movl -4(%ebp), %eax
  15270. movl %eax, 0(%esp)
  15271. movl $strbuf+2641, %eax
  15272. movl %eax, 4(%esp)
  15273. call fputs
  15274. addl $8, %esp
  15275. subl $8, %esp
  15276. movl 8(%ebp), %eax
  15277. movl %eax, 0(%esp)
  15278. movl 12(%ebp), %eax
  15279. pushl %edx
  15280. movl %eax, %edx
  15281. movl $3, %eax
  15282. leal (%edx,%eax,4), %eax
  15283. popl %edx
  15284. movl (%eax), %eax
  15285. movl %eax, 4(%esp)
  15286. call compile_expression
  15287. addl $8, %esp
  15288. subl $8, %esp
  15289. movl -4(%ebp), %eax
  15290. movl %eax, 0(%esp)
  15291. movl $strbuf+2659, %eax
  15292. movl %eax, 4(%esp)
  15293. call fputs
  15294. addl $8, %esp
  15295. subl $8, %esp
  15296. movl 8(%ebp), %eax
  15297. movl %eax, 0(%esp)
  15298. movl 12(%ebp), %eax
  15299. pushl %edx
  15300. movl %eax, %edx
  15301. movl $4, %eax
  15302. leal (%edx,%eax,4), %eax
  15303. popl %edx
  15304. movl (%eax), %eax
  15305. movl %eax, 4(%esp)
  15306. call compile_expression
  15307. addl $8, %esp
  15308. subl $8, %esp
  15309. movl -4(%ebp), %eax
  15310. movl %eax, 0(%esp)
  15311. movl $strbuf+2677, %eax
  15312. movl %eax, 4(%esp)
  15313. call fputs
  15314. addl $8, %esp
  15315. subl $8, %esp
  15316. movl 8(%ebp), %eax
  15317. movl %eax, 0(%esp)
  15318. movl $3, %eax
  15319. movl %eax, 4(%esp)
  15320. call compiler_free_register
  15321. addl $8, %esp
  15322. leave
  15323. ret
  15324. compile_label_statement:
  15325. pushl %ebp
  15326. movl %esp, %ebp
  15327. subl $4, %esp
  15328. subl $4, %esp
  15329. movl 8(%ebp), %eax
  15330. movl %eax, 0(%esp)
  15331. call compiler_output_chan
  15332. addl $4, %esp
  15333. movl %eax, -4(%ebp)
  15334. subl $8, %esp
  15335. movl -4(%ebp), %eax
  15336. movl %eax, 0(%esp)
  15337. movl 12(%ebp), %eax
  15338. pushl %edx
  15339. movl %eax, %edx
  15340. movl $2, %eax
  15341. leal (%edx,%eax,4), %eax
  15342. popl %edx
  15343. movl (%eax), %eax
  15344. movl %eax, 4(%esp)
  15345. call fputs
  15346. addl $8, %esp
  15347. subl $8, %esp
  15348. movl -4(%ebp), %eax
  15349. movl %eax, 0(%esp)
  15350. movl $strbuf+2332, %eax
  15351. movl %eax, 4(%esp)
  15352. call fputs
  15353. addl $8, %esp
  15354. leave
  15355. ret
  15356. compile_goto_statement:
  15357. pushl %ebp
  15358. movl %esp, %ebp
  15359. subl $8, %esp
  15360. movl 8(%ebp), %eax
  15361. movl %eax, 0(%esp)
  15362. movl 12(%ebp), %eax
  15363. pushl %edx
  15364. movl %eax, %edx
  15365. movl $2, %eax
  15366. leal (%edx,%eax,4), %eax
  15367. popl %edx
  15368. movl (%eax), %eax
  15369. movl %eax, 4(%esp)
  15370. call compile_expression
  15371. addl $8, %esp
  15372. subl $8, %esp
  15373. pushl %ebx
  15374. pushl %ecx
  15375. pushl %edx
  15376. pushl %esi
  15377. pushl %edi
  15378. subl $4, %esp
  15379. movl 8(%ebp), %eax
  15380. movl %eax, 0(%esp)
  15381. call compiler_output_chan
  15382. addl $4, %esp
  15383. popl %edi
  15384. popl %esi
  15385. popl %edx
  15386. popl %ecx
  15387. popl %ebx
  15388. movl %eax, 0(%esp)
  15389. movl $strbuf+2696, %eax
  15390. movl %eax, 4(%esp)
  15391. call fputs
  15392. addl $8, %esp
  15393. leave
  15394. ret
  15395. compile_expression:
  15396. pushl %ebp
  15397. movl %esp, %ebp
  15398. subl $4, %esp
  15399. movl 12(%ebp), %eax
  15400. movl %eax, %edx
  15401. movl $0, %eax
  15402. leal (%edx,%eax,4), %eax
  15403. movl (%eax), %eax
  15404. movl %eax, -4(%ebp)
  15405. movl -4(%ebp), %eax
  15406. movl %eax, %edx
  15407. movl $0, %eax
  15408. cmpl %eax, %edx
  15409. sete %al
  15410. movzbl %al, %eax
  15411. cmpl $0, %eax
  15412. je _label430
  15413. subl $8, %esp
  15414. movl 8(%ebp), %eax
  15415. movl %eax, 0(%esp)
  15416. movl 12(%ebp), %eax
  15417. movl %eax, 4(%esp)
  15418. call compile_integer_expression
  15419. addl $8, %esp
  15420. jmp _label429
  15421. _label430:
  15422. movl -4(%ebp), %eax
  15423. movl %eax, %edx
  15424. movl $1, %eax
  15425. cmpl %eax, %edx
  15426. sete %al
  15427. movzbl %al, %eax
  15428. cmpl $0, %eax
  15429. je _label431
  15430. subl $8, %esp
  15431. movl 8(%ebp), %eax
  15432. movl %eax, 0(%esp)
  15433. movl 12(%ebp), %eax
  15434. movl %eax, 4(%esp)
  15435. call compile_string_expression
  15436. addl $8, %esp
  15437. jmp _label429
  15438. _label431:
  15439. movl -4(%ebp), %eax
  15440. movl %eax, %edx
  15441. movl $7, %eax
  15442. cmpl %eax, %edx
  15443. sete %al
  15444. movzbl %al, %eax
  15445. cmpl $0, %eax
  15446. je _label432
  15447. subl $8, %esp
  15448. movl 8(%ebp), %eax
  15449. movl %eax, 0(%esp)
  15450. movl 12(%ebp), %eax
  15451. movl %eax, 4(%esp)
  15452. call compile_address_call_expression
  15453. addl $8, %esp
  15454. jmp _label429
  15455. _label432:
  15456. movl -4(%ebp), %eax
  15457. movl %eax, %edx
  15458. movl $8, %eax
  15459. cmpl %eax, %edx
  15460. sete %al
  15461. movzbl %al, %eax
  15462. cmpl $0, %eax
  15463. je _label433
  15464. subl $8, %esp
  15465. movl 8(%ebp), %eax
  15466. movl %eax, 0(%esp)
  15467. movl 12(%ebp), %eax
  15468. movl %eax, 4(%esp)
  15469. call compile_address_index_expression
  15470. addl $8, %esp
  15471. jmp _label429
  15472. _label433:
  15473. movl -4(%ebp), %eax
  15474. movl %eax, %edx
  15475. movl $2, %eax
  15476. cmpl %eax, %edx
  15477. sete %al
  15478. movzbl %al, %eax
  15479. cmpl $0, %eax
  15480. je _label434
  15481. subl $8, %esp
  15482. movl 8(%ebp), %eax
  15483. movl %eax, 0(%esp)
  15484. movl 12(%ebp), %eax
  15485. movl %eax, 4(%esp)
  15486. call compile_simple_identifier_expression
  15487. addl $8, %esp
  15488. jmp _label429
  15489. _label434:
  15490. movl -4(%ebp), %eax
  15491. movl %eax, %edx
  15492. movl $3, %eax
  15493. cmpl %eax, %edx
  15494. sete %al
  15495. movzbl %al, %eax
  15496. cmpl $0, %eax
  15497. je _label435
  15498. subl $8, %esp
  15499. movl 8(%ebp), %eax
  15500. movl %eax, 0(%esp)
  15501. movl 12(%ebp), %eax
  15502. movl %eax, 4(%esp)
  15503. call compile_simple_argument_expression
  15504. addl $8, %esp
  15505. jmp _label429
  15506. _label435:
  15507. movl -4(%ebp), %eax
  15508. movl %eax, %edx
  15509. movl $4, %eax
  15510. cmpl %eax, %edx
  15511. sete %al
  15512. movzbl %al, %eax
  15513. cmpl $0, %eax
  15514. je _label436
  15515. subl $8, %esp
  15516. movl 8(%ebp), %eax
  15517. movl %eax, 0(%esp)
  15518. movl 12(%ebp), %eax
  15519. movl %eax, 4(%esp)
  15520. call compile_simple_variable_expression
  15521. addl $8, %esp
  15522. jmp _label429
  15523. _label436:
  15524. movl -4(%ebp), %eax
  15525. movl %eax, %edx
  15526. movl $5, %eax
  15527. cmpl %eax, %edx
  15528. sete %al
  15529. movzbl %al, %eax
  15530. cmpl $0, %eax
  15531. je _label437
  15532. subl $8, %esp
  15533. movl 8(%ebp), %eax
  15534. movl %eax, 0(%esp)
  15535. movl 12(%ebp), %eax
  15536. movl %eax, 4(%esp)
  15537. call compile_simple_syscall_expression
  15538. addl $8, %esp
  15539. jmp _label429
  15540. _label437:
  15541. movl -4(%ebp), %eax
  15542. movl %eax, %edx
  15543. movl $6, %eax
  15544. cmpl %eax, %edx
  15545. sete %al
  15546. movzbl %al, %eax
  15547. cmpl $0, %eax
  15548. je _label438
  15549. subl $8, %esp
  15550. movl 8(%ebp), %eax
  15551. movl %eax, 0(%esp)
  15552. movl 12(%ebp), %eax
  15553. movl %eax, 4(%esp)
  15554. call compile_simple_readchar_expression
  15555. addl $8, %esp
  15556. jmp _label429
  15557. _label438:
  15558. movl -4(%ebp), %eax
  15559. movl %eax, %edx
  15560. movl $9, %eax
  15561. cmpl %eax, %edx
  15562. sete %al
  15563. movzbl %al, %eax
  15564. cmpl $0, %eax
  15565. je _label439
  15566. subl $8, %esp
  15567. movl 8(%ebp), %eax
  15568. movl %eax, 0(%esp)
  15569. movl 12(%ebp), %eax
  15570. movl %eax, 4(%esp)
  15571. call compile_prefix_plus_expression
  15572. addl $8, %esp
  15573. jmp _label429
  15574. _label439:
  15575. movl -4(%ebp), %eax
  15576. movl %eax, %edx
  15577. movl $10, %eax
  15578. cmpl %eax, %edx
  15579. sete %al
  15580. movzbl %al, %eax
  15581. cmpl $0, %eax
  15582. je _label440
  15583. subl $8, %esp
  15584. movl 8(%ebp), %eax
  15585. movl %eax, 0(%esp)
  15586. movl 12(%ebp), %eax
  15587. movl %eax, 4(%esp)
  15588. call compile_prefix_minus_expression
  15589. addl $8, %esp
  15590. jmp _label429
  15591. _label440:
  15592. movl -4(%ebp), %eax
  15593. movl %eax, %edx
  15594. movl $11, %eax
  15595. cmpl %eax, %edx
  15596. sete %al
  15597. movzbl %al, %eax
  15598. cmpl $0, %eax
  15599. je _label441
  15600. subl $8, %esp
  15601. movl 8(%ebp), %eax
  15602. movl %eax, 0(%esp)
  15603. movl 12(%ebp), %eax
  15604. movl %eax, 4(%esp)
  15605. call compile_prefix_logical_not_expression
  15606. addl $8, %esp
  15607. jmp _label429
  15608. _label441:
  15609. movl -4(%ebp), %eax
  15610. movl %eax, %edx
  15611. movl $12, %eax
  15612. cmpl %eax, %edx
  15613. sete %al
  15614. movzbl %al, %eax
  15615. cmpl $0, %eax
  15616. je _label442
  15617. subl $8, %esp
  15618. movl 8(%ebp), %eax
  15619. movl %eax, 0(%esp)
  15620. movl 12(%ebp), %eax
  15621. movl %eax, 4(%esp)
  15622. call compile_prefix_not_expression
  15623. addl $8, %esp
  15624. jmp _label429
  15625. _label442:
  15626. movl -4(%ebp), %eax
  15627. movl %eax, %edx
  15628. movl $13, %eax
  15629. cmpl %eax, %edx
  15630. sete %al
  15631. movzbl %al, %eax
  15632. cmpl $0, %eax
  15633. je _label443
  15634. subl $8, %esp
  15635. movl 8(%ebp), %eax
  15636. movl %eax, 0(%esp)
  15637. movl 12(%ebp), %eax
  15638. movl %eax, 4(%esp)
  15639. call compile_prefix_deref_expression
  15640. addl $8, %esp
  15641. jmp _label429
  15642. _label443:
  15643. movl -4(%ebp), %eax
  15644. movl %eax, %edx
  15645. movl $14, %eax
  15646. cmpl %eax, %edx
  15647. sete %al
  15648. movzbl %al, %eax
  15649. cmpl $0, %eax
  15650. je _label444
  15651. subl $8, %esp
  15652. movl 8(%ebp), %eax
  15653. movl %eax, 0(%esp)
  15654. movl 12(%ebp), %eax
  15655. movl %eax, 4(%esp)
  15656. call compile_prefix_addrof_expression
  15657. addl $8, %esp
  15658. jmp _label429
  15659. _label444:
  15660. movl -4(%ebp), %eax
  15661. movl %eax, %edx
  15662. movl $15, %eax
  15663. cmpl %eax, %edx
  15664. setge %al
  15665. movzbl %al, %eax
  15666. cmpl $0, %eax
  15667. je _label445
  15668. movl -4(%ebp), %eax
  15669. movl %eax, %edx
  15670. movl $24, %eax
  15671. cmpl %eax, %edx
  15672. setle %al
  15673. movzbl %al, %eax
  15674. cmpl $0, %eax
  15675. je _label445
  15676. movl $1, %eax
  15677. jmp _label446
  15678. _label445:
  15679. movl $0, %eax
  15680. _label446:
  15681. cmpl $0, %eax
  15682. je _label447
  15683. subl $16, %esp
  15684. movl 8(%ebp), %eax
  15685. movl %eax, 0(%esp)
  15686. movl -4(%ebp), %eax
  15687. movl %eax, 4(%esp)
  15688. movl 12(%ebp), %eax
  15689. pushl %edx
  15690. movl %eax, %edx
  15691. movl $2, %eax
  15692. leal (%edx,%eax,4), %eax
  15693. popl %edx
  15694. movl (%eax), %eax
  15695. movl %eax, 8(%esp)
  15696. movl 12(%ebp), %eax
  15697. pushl %edx
  15698. movl %eax, %edx
  15699. movl $3, %eax
  15700. leal (%edx,%eax,4), %eax
  15701. popl %edx
  15702. movl (%eax), %eax
  15703. movl %eax, 12(%esp)
  15704. call compile_bitwise_arithmetic_expression
  15705. addl $16, %esp
  15706. jmp _label429
  15707. _label447:
  15708. movl -4(%ebp), %eax
  15709. movl %eax, %edx
  15710. movl $25, %eax
  15711. cmpl %eax, %edx
  15712. sete %al
  15713. movzbl %al, %eax
  15714. cmpl $0, %eax
  15715. je _label448
  15716. subl $8, %esp
  15717. movl 8(%ebp), %eax
  15718. movl %eax, 0(%esp)
  15719. movl 12(%ebp), %eax
  15720. movl %eax, 4(%esp)
  15721. call compile_comparison_expression
  15722. addl $8, %esp
  15723. jmp _label429
  15724. _label448:
  15725. movl -4(%ebp), %eax
  15726. movl %eax, %edx
  15727. movl $26, %eax
  15728. cmpl %eax, %edx
  15729. sete %al
  15730. movzbl %al, %eax
  15731. cmpl $0, %eax
  15732. je _label449
  15733. subl $8, %esp
  15734. movl 8(%ebp), %eax
  15735. movl %eax, 0(%esp)
  15736. movl 12(%ebp), %eax
  15737. movl %eax, 4(%esp)
  15738. call compile_comparison_expression
  15739. addl $8, %esp
  15740. jmp _label429
  15741. _label449:
  15742. movl -4(%ebp), %eax
  15743. movl %eax, %edx
  15744. movl $27, %eax
  15745. cmpl %eax, %edx
  15746. sete %al
  15747. movzbl %al, %eax
  15748. cmpl $0, %eax
  15749. je _label450
  15750. subl $8, %esp
  15751. movl 8(%ebp), %eax
  15752. movl %eax, 0(%esp)
  15753. movl 12(%ebp), %eax
  15754. movl %eax, 4(%esp)
  15755. call compile_comparison_expression
  15756. addl $8, %esp
  15757. jmp _label429
  15758. _label450:
  15759. movl -4(%ebp), %eax
  15760. movl %eax, %edx
  15761. movl $28, %eax
  15762. cmpl %eax, %edx
  15763. sete %al
  15764. movzbl %al, %eax
  15765. cmpl $0, %eax
  15766. je _label451
  15767. subl $8, %esp
  15768. movl 8(%ebp), %eax
  15769. movl %eax, 0(%esp)
  15770. movl 12(%ebp), %eax
  15771. movl %eax, 4(%esp)
  15772. call compile_comparison_expression
  15773. addl $8, %esp
  15774. jmp _label429
  15775. _label451:
  15776. movl -4(%ebp), %eax
  15777. movl %eax, %edx
  15778. movl $29, %eax
  15779. cmpl %eax, %edx
  15780. sete %al
  15781. movzbl %al, %eax
  15782. cmpl $0, %eax
  15783. je _label452
  15784. subl $8, %esp
  15785. movl 8(%ebp), %eax
  15786. movl %eax, 0(%esp)
  15787. movl 12(%ebp), %eax
  15788. movl %eax, 4(%esp)
  15789. call compile_comparison_expression
  15790. addl $8, %esp
  15791. jmp _label429
  15792. _label452:
  15793. movl -4(%ebp), %eax
  15794. movl %eax, %edx
  15795. movl $30, %eax
  15796. cmpl %eax, %edx
  15797. sete %al
  15798. movzbl %al, %eax
  15799. cmpl $0, %eax
  15800. je _label453
  15801. subl $8, %esp
  15802. movl 8(%ebp), %eax
  15803. movl %eax, 0(%esp)
  15804. movl 12(%ebp), %eax
  15805. movl %eax, 4(%esp)
  15806. call compile_comparison_expression
  15807. addl $8, %esp
  15808. jmp _label429
  15809. _label453:
  15810. movl -4(%ebp), %eax
  15811. movl %eax, %edx
  15812. movl $31, %eax
  15813. cmpl %eax, %edx
  15814. sete %al
  15815. movzbl %al, %eax
  15816. cmpl $0, %eax
  15817. je _label454
  15818. subl $12, %esp
  15819. movl 8(%ebp), %eax
  15820. movl %eax, 0(%esp)
  15821. movl 12(%ebp), %eax
  15822. movl %eax, 4(%esp)
  15823. movl $0, %eax
  15824. movl %eax, 8(%esp)
  15825. call compile_logical_expression
  15826. addl $12, %esp
  15827. jmp _label429
  15828. _label454:
  15829. movl -4(%ebp), %eax
  15830. movl %eax, %edx
  15831. movl $32, %eax
  15832. cmpl %eax, %edx
  15833. sete %al
  15834. movzbl %al, %eax
  15835. cmpl $0, %eax
  15836. je _label455
  15837. subl $12, %esp
  15838. movl 8(%ebp), %eax
  15839. movl %eax, 0(%esp)
  15840. movl 12(%ebp), %eax
  15841. movl %eax, 4(%esp)
  15842. movl $1, %eax
  15843. movl %eax, 8(%esp)
  15844. call compile_logical_expression
  15845. addl $12, %esp
  15846. jmp _label429
  15847. _label455:
  15848. movl -4(%ebp), %eax
  15849. movl %eax, %edx
  15850. movl $48, %eax
  15851. cmpl %eax, %edx
  15852. sete %al
  15853. movzbl %al, %eax
  15854. cmpl $0, %eax
  15855. je _label456
  15856. subl $8, %esp
  15857. movl 8(%ebp), %eax
  15858. movl %eax, 0(%esp)
  15859. movl 12(%ebp), %eax
  15860. movl %eax, 4(%esp)
  15861. call compile_ternary_expression
  15862. addl $8, %esp
  15863. jmp _label429
  15864. _label456:
  15865. movl -4(%ebp), %eax
  15866. movl %eax, %edx
  15867. movl $33, %eax
  15868. cmpl %eax, %edx
  15869. setge %al
  15870. movzbl %al, %eax
  15871. cmpl $0, %eax
  15872. je _label457
  15873. movl -4(%ebp), %eax
  15874. movl %eax, %edx
  15875. movl $47, %eax
  15876. cmpl %eax, %edx
  15877. setle %al
  15878. movzbl %al, %eax
  15879. cmpl $0, %eax
  15880. je _label457
  15881. movl $1, %eax
  15882. jmp _label458
  15883. _label457:
  15884. movl $0, %eax
  15885. _label458:
  15886. cmpl $0, %eax
  15887. je _label459
  15888. subl $8, %esp
  15889. movl 8(%ebp), %eax
  15890. movl %eax, 0(%esp)
  15891. movl 12(%ebp), %eax
  15892. movl %eax, 4(%esp)
  15893. call compile_assignment_expression
  15894. addl $8, %esp
  15895. jmp _label429
  15896. _label459:
  15897. subl $12, %esp
  15898. movl 8(%ebp), %eax
  15899. movl %eax, 0(%esp)
  15900. movl 12(%ebp), %eax
  15901. movl %eax, 4(%esp)
  15902. movl $strbuf+2708, %eax
  15903. movl %eax, 8(%esp)
  15904. call compiler_error
  15905. addl $12, %esp
  15906. _label429:
  15907. leave
  15908. ret
  15909. compile_address_call_expression:
  15910. pushl %ebp
  15911. movl %esp, %ebp
  15912. subl $20, %esp
  15913. subl $4, %esp
  15914. movl 8(%ebp), %eax
  15915. movl %eax, 0(%esp)
  15916. call compiler_output_chan
  15917. addl $4, %esp
  15918. movl %eax, -4(%ebp)
  15919. movl 12(%ebp), %eax
  15920. movl %eax, %edx
  15921. movl $2, %eax
  15922. leal (%edx,%eax,4), %eax
  15923. movl (%eax), %eax
  15924. movl %eax, -8(%ebp)
  15925. subl $4, %esp
  15926. movl -8(%ebp), %eax
  15927. movl %eax, 0(%esp)
  15928. call vector_size
  15929. addl $4, %esp
  15930. movl %eax, -12(%ebp)
  15931. subl $8, %esp
  15932. movl -8(%ebp), %eax
  15933. movl %eax, 0(%esp)
  15934. movl $0, %eax
  15935. movl %eax, 4(%esp)
  15936. call vector_get
  15937. addl $8, %esp
  15938. movl %eax, -20(%ebp)
  15939. subl $8, %esp
  15940. movl 8(%ebp), %eax
  15941. movl %eax, 0(%esp)
  15942. movl $1, %eax
  15943. movl %eax, 4(%esp)
  15944. call compiler_allocate_register
  15945. addl $8, %esp
  15946. movl -20(%ebp), %eax
  15947. movl %eax, %edx
  15948. movl $0, %eax
  15949. leal (%edx,%eax,4), %eax
  15950. movl (%eax), %eax
  15951. movl %eax, %edx
  15952. movl $2, %eax
  15953. cmpl %eax, %edx
  15954. setne %al
  15955. movzbl %al, %eax
  15956. cmpl $0, %eax
  15957. je _label460
  15958. subl $8, %esp
  15959. movl 8(%ebp), %eax
  15960. movl %eax, 0(%esp)
  15961. movl -20(%ebp), %eax
  15962. movl %eax, 4(%esp)
  15963. call compile_expression
  15964. addl $8, %esp
  15965. subl $8, %esp
  15966. movl -4(%ebp), %eax
  15967. movl %eax, 0(%esp)
  15968. movl $strbuf+2743, %eax
  15969. movl %eax, 4(%esp)
  15970. call fputs
  15971. addl $8, %esp
  15972. _label460:
  15973. subl $8, %esp
  15974. movl 8(%ebp), %eax
  15975. movl %eax, 0(%esp)
  15976. movl $2, %eax
  15977. movl %eax, 4(%esp)
  15978. call compiler_allocate_register
  15979. addl $8, %esp
  15980. subl $8, %esp
  15981. movl 8(%ebp), %eax
  15982. movl %eax, 0(%esp)
  15983. movl $3, %eax
  15984. movl %eax, 4(%esp)
  15985. call compiler_allocate_register
  15986. addl $8, %esp
  15987. subl $8, %esp
  15988. movl 8(%ebp), %eax
  15989. movl %eax, 0(%esp)
  15990. movl $4, %eax
  15991. movl %eax, 4(%esp)
  15992. call compiler_allocate_register
  15993. addl $8, %esp
  15994. subl $8, %esp
  15995. movl 8(%ebp), %eax
  15996. movl %eax, 0(%esp)
  15997. movl $5, %eax
  15998. movl %eax, 4(%esp)
  15999. call compiler_allocate_register
  16000. addl $8, %esp
  16001. movl -12(%ebp), %eax
  16002. movl %eax, %edx
  16003. movl $1, %eax
  16004. cmpl %eax, %edx
  16005. setg %al
  16006. movzbl %al, %eax
  16007. cmpl $0, %eax
  16008. je _label461
  16009. subl $8, %esp
  16010. movl -4(%ebp), %eax
  16011. movl %eax, 0(%esp)
  16012. movl $strbuf+2581, %eax
  16013. movl %eax, 4(%esp)
  16014. call fputs
  16015. addl $8, %esp
  16016. subl $8, %esp
  16017. movl -4(%ebp), %eax
  16018. movl %eax, 0(%esp)
  16019. movl $4, %eax
  16020. pushl %ebx
  16021. movl %eax, %ebx
  16022. movl -12(%ebp), %eax
  16023. pushl %ebx
  16024. pushl %eax
  16025. movl $1, %eax
  16026. movl %eax, %ebx
  16027. popl %eax
  16028. subl %ebx, %eax
  16029. popl %ebx
  16030. imull %ebx, %eax
  16031. popl %ebx
  16032. movl %eax, 4(%esp)
  16033. call fputd
  16034. addl $8, %esp
  16035. subl $8, %esp
  16036. movl -4(%ebp), %eax
  16037. movl %eax, 0(%esp)
  16038. movl $strbuf+2589, %eax
  16039. movl %eax, 4(%esp)
  16040. call fputs
  16041. addl $8, %esp
  16042. _label461:
  16043. movl $1, %eax
  16044. movl %eax, -16(%ebp)
  16045. _label462:
  16046. movl -16(%ebp), %eax
  16047. movl %eax, %edx
  16048. movl -12(%ebp), %eax
  16049. cmpl %eax, %edx
  16050. setl %al
  16051. movzbl %al, %eax
  16052. cmpl $0, %eax
  16053. je _label463
  16054. subl $8, %esp
  16055. movl 8(%ebp), %eax
  16056. movl %eax, 0(%esp)
  16057. pushl %ebx
  16058. pushl %ecx
  16059. pushl %edx
  16060. pushl %esi
  16061. pushl %edi
  16062. subl $8, %esp
  16063. movl -8(%ebp), %eax
  16064. movl %eax, 0(%esp)
  16065. movl -16(%ebp), %eax
  16066. movl %eax, 4(%esp)
  16067. call vector_get
  16068. addl $8, %esp
  16069. popl %edi
  16070. popl %esi
  16071. popl %edx
  16072. popl %ecx
  16073. popl %ebx
  16074. movl %eax, 4(%esp)
  16075. call compile_expression
  16076. addl $8, %esp
  16077. subl $8, %esp
  16078. movl -4(%ebp), %eax
  16079. movl %eax, 0(%esp)
  16080. movl $strbuf+2761, %eax
  16081. movl %eax, 4(%esp)
  16082. call fputs
  16083. addl $8, %esp
  16084. subl $8, %esp
  16085. movl -4(%ebp), %eax
  16086. movl %eax, 0(%esp)
  16087. movl $4, %eax
  16088. pushl %ebx
  16089. movl %eax, %ebx
  16090. movl -16(%ebp), %eax
  16091. pushl %ebx
  16092. pushl %eax
  16093. movl $1, %eax
  16094. movl %eax, %ebx
  16095. popl %eax
  16096. subl %ebx, %eax
  16097. popl %ebx
  16098. imull %ebx, %eax
  16099. popl %ebx
  16100. movl %eax, 4(%esp)
  16101. call fputd
  16102. addl $8, %esp
  16103. subl $8, %esp
  16104. movl -4(%ebp), %eax
  16105. movl %eax, 0(%esp)
  16106. movl $strbuf+2774, %eax
  16107. movl %eax, 4(%esp)
  16108. call fputs
  16109. addl $8, %esp
  16110. movl -16(%ebp), %eax
  16111. movl %eax, %ebx
  16112. movl $1, %eax
  16113. addl %ebx, %eax
  16114. movl %eax, -16(%ebp)
  16115. jmp _label462
  16116. _label463:
  16117. movl -20(%ebp), %eax
  16118. movl %eax, %edx
  16119. movl $0, %eax
  16120. leal (%edx,%eax,4), %eax
  16121. movl (%eax), %eax
  16122. movl %eax, %edx
  16123. movl $2, %eax
  16124. cmpl %eax, %edx
  16125. sete %al
  16126. movzbl %al, %eax
  16127. cmpl $0, %eax
  16128. je _label465
  16129. subl $8, %esp
  16130. movl -4(%ebp), %eax
  16131. movl %eax, 0(%esp)
  16132. movl $strbuf+2782, %eax
  16133. movl %eax, 4(%esp)
  16134. call fputs
  16135. addl $8, %esp
  16136. subl $8, %esp
  16137. movl -4(%ebp), %eax
  16138. movl %eax, 0(%esp)
  16139. movl -20(%ebp), %eax
  16140. pushl %edx
  16141. movl %eax, %edx
  16142. movl $2, %eax
  16143. leal (%edx,%eax,4), %eax
  16144. popl %edx
  16145. movl (%eax), %eax
  16146. movl %eax, 4(%esp)
  16147. call fputs
  16148. addl $8, %esp
  16149. subl $8, %esp
  16150. movl -4(%ebp), %eax
  16151. movl %eax, 0(%esp)
  16152. movl $10, %eax
  16153. movl %eax, 4(%esp)
  16154. call fputc
  16155. addl $8, %esp
  16156. jmp _label464
  16157. _label465:
  16158. subl $8, %esp
  16159. movl -4(%ebp), %eax
  16160. movl %eax, 0(%esp)
  16161. movl $strbuf+2789, %eax
  16162. movl %eax, 4(%esp)
  16163. call fputs
  16164. addl $8, %esp
  16165. _label464:
  16166. movl -12(%ebp), %eax
  16167. movl %eax, %edx
  16168. movl $1, %eax
  16169. cmpl %eax, %edx
  16170. setg %al
  16171. movzbl %al, %eax
  16172. cmpl $0, %eax
  16173. je _label466
  16174. subl $8, %esp
  16175. movl -4(%ebp), %eax
  16176. movl %eax, 0(%esp)
  16177. movl $strbuf+2802, %eax
  16178. movl %eax, 4(%esp)
  16179. call fputs
  16180. addl $8, %esp
  16181. subl $8, %esp
  16182. movl -4(%ebp), %eax
  16183. movl %eax, 0(%esp)
  16184. movl $4, %eax
  16185. pushl %ebx
  16186. movl %eax, %ebx
  16187. movl -12(%ebp), %eax
  16188. pushl %ebx
  16189. pushl %eax
  16190. movl $1, %eax
  16191. movl %eax, %ebx
  16192. popl %eax
  16193. subl %ebx, %eax
  16194. popl %ebx
  16195. imull %ebx, %eax
  16196. popl %ebx
  16197. movl %eax, 4(%esp)
  16198. call fputd
  16199. addl $8, %esp
  16200. subl $8, %esp
  16201. movl -4(%ebp), %eax
  16202. movl %eax, 0(%esp)
  16203. movl $strbuf+2589, %eax
  16204. movl %eax, 4(%esp)
  16205. call fputs
  16206. addl $8, %esp
  16207. _label466:
  16208. subl $8, %esp
  16209. movl 8(%ebp), %eax
  16210. movl %eax, 0(%esp)
  16211. movl $5, %eax
  16212. movl %eax, 4(%esp)
  16213. call compiler_free_register
  16214. addl $8, %esp
  16215. subl $8, %esp
  16216. movl 8(%ebp), %eax
  16217. movl %eax, 0(%esp)
  16218. movl $4, %eax
  16219. movl %eax, 4(%esp)
  16220. call compiler_free_register
  16221. addl $8, %esp
  16222. subl $8, %esp
  16223. movl 8(%ebp), %eax
  16224. movl %eax, 0(%esp)
  16225. movl $3, %eax
  16226. movl %eax, 4(%esp)
  16227. call compiler_free_register
  16228. addl $8, %esp
  16229. subl $8, %esp
  16230. movl 8(%ebp), %eax
  16231. movl %eax, 0(%esp)
  16232. movl $2, %eax
  16233. movl %eax, 4(%esp)
  16234. call compiler_free_register
  16235. addl $8, %esp
  16236. subl $8, %esp
  16237. movl 8(%ebp), %eax
  16238. movl %eax, 0(%esp)
  16239. movl $1, %eax
  16240. movl %eax, 4(%esp)
  16241. call compiler_free_register
  16242. addl $8, %esp
  16243. leave
  16244. ret
  16245. compile_address_index_expression:
  16246. pushl %ebp
  16247. movl %esp, %ebp
  16248. subl $8, %esp
  16249. subl $4, %esp
  16250. movl 8(%ebp), %eax
  16251. movl %eax, 0(%esp)
  16252. call compiler_output_chan
  16253. addl $4, %esp
  16254. movl %eax, -4(%ebp)
  16255. subl $8, %esp
  16256. movl 8(%ebp), %eax
  16257. movl %eax, 0(%esp)
  16258. movl 12(%ebp), %eax
  16259. movl %eax, 4(%esp)
  16260. call compile_address_index_address
  16261. addl $8, %esp
  16262. subl $8, %esp
  16263. movl -4(%ebp), %eax
  16264. movl %eax, 0(%esp)
  16265. movl $strbuf+2810, %eax
  16266. movl %eax, 4(%esp)
  16267. call fputs
  16268. addl $8, %esp
  16269. leave
  16270. ret
  16271. compile_address_index_address:
  16272. pushl %ebp
  16273. movl %esp, %ebp
  16274. subl $12, %esp
  16275. subl $4, %esp
  16276. movl 8(%ebp), %eax
  16277. movl %eax, 0(%esp)
  16278. call compiler_output_chan
  16279. addl $4, %esp
  16280. movl %eax, -4(%ebp)
  16281. movl 12(%ebp), %eax
  16282. movl %eax, %edx
  16283. movl $2, %eax
  16284. leal (%edx,%eax,4), %eax
  16285. movl (%eax), %eax
  16286. movl %eax, -8(%ebp)
  16287. movl -8(%ebp), %eax
  16288. movl %eax, %edx
  16289. movl $0, %eax
  16290. leal (%edx,%eax,4), %eax
  16291. movl (%eax), %eax
  16292. movl %eax, -12(%ebp)
  16293. movl -12(%ebp), %eax
  16294. movl %eax, %edx
  16295. movl $8, %eax
  16296. cmpl %eax, %edx
  16297. sete %al
  16298. movzbl %al, %eax
  16299. cmpl $0, %eax
  16300. je _label468
  16301. subl $8, %esp
  16302. movl 8(%ebp), %eax
  16303. movl %eax, 0(%esp)
  16304. movl -8(%ebp), %eax
  16305. movl %eax, 4(%esp)
  16306. call compile_address_index_address
  16307. addl $8, %esp
  16308. subl $8, %esp
  16309. movl 8(%ebp), %eax
  16310. movl %eax, 0(%esp)
  16311. movl $3, %eax
  16312. movl %eax, 4(%esp)
  16313. call compiler_allocate_register
  16314. addl $8, %esp
  16315. subl $8, %esp
  16316. movl -4(%ebp), %eax
  16317. movl %eax, 0(%esp)
  16318. movl $strbuf+2830, %eax
  16319. movl %eax, 4(%esp)
  16320. call fputs
  16321. addl $8, %esp
  16322. jmp _label467
  16323. _label468:
  16324. movl -12(%ebp), %eax
  16325. movl %eax, %edx
  16326. movl $2, %eax
  16327. cmpl %eax, %edx
  16328. setne %al
  16329. movzbl %al, %eax
  16330. cmpl $0, %eax
  16331. je _label469
  16332. subl $8, %esp
  16333. movl 8(%ebp), %eax
  16334. movl %eax, 0(%esp)
  16335. movl -8(%ebp), %eax
  16336. movl %eax, 4(%esp)
  16337. call compile_expression
  16338. addl $8, %esp
  16339. subl $8, %esp
  16340. movl 8(%ebp), %eax
  16341. movl %eax, 0(%esp)
  16342. movl $3, %eax
  16343. movl %eax, 4(%esp)
  16344. call compiler_allocate_register
  16345. addl $8, %esp
  16346. subl $8, %esp
  16347. movl -4(%ebp), %eax
  16348. movl %eax, 0(%esp)
  16349. movl $strbuf+2641, %eax
  16350. movl %eax, 4(%esp)
  16351. call fputs
  16352. addl $8, %esp
  16353. _label469:
  16354. _label467:
  16355. subl $8, %esp
  16356. movl 8(%ebp), %eax
  16357. movl %eax, 0(%esp)
  16358. movl 12(%ebp), %eax
  16359. pushl %edx
  16360. movl %eax, %edx
  16361. movl $3, %eax
  16362. leal (%edx,%eax,4), %eax
  16363. popl %edx
  16364. movl (%eax), %eax
  16365. movl %eax, 4(%esp)
  16366. call compile_expression
  16367. addl $8, %esp
  16368. subl $8, %esp
  16369. movl -4(%ebp), %eax
  16370. movl %eax, 0(%esp)
  16371. movl $strbuf+2850, %eax
  16372. movl %eax, 4(%esp)
  16373. call fputs
  16374. addl $8, %esp
  16375. movl -12(%ebp), %eax
  16376. movl %eax, %edx
  16377. movl $2, %eax
  16378. cmpl %eax, %edx
  16379. sete %al
  16380. movzbl %al, %eax
  16381. cmpl $0, %eax
  16382. je _label471
  16383. subl $8, %esp
  16384. movl -4(%ebp), %eax
  16385. movl %eax, 0(%esp)
  16386. movl -8(%ebp), %eax
  16387. pushl %edx
  16388. movl %eax, %edx
  16389. movl $2, %eax
  16390. leal (%edx,%eax,4), %eax
  16391. popl %edx
  16392. movl (%eax), %eax
  16393. movl %eax, 4(%esp)
  16394. call fputs
  16395. addl $8, %esp
  16396. subl $8, %esp
  16397. movl -4(%ebp), %eax
  16398. movl %eax, 0(%esp)
  16399. movl $strbuf+2857, %eax
  16400. movl %eax, 4(%esp)
  16401. call fputs
  16402. addl $8, %esp
  16403. jmp _label470
  16404. _label471:
  16405. subl $8, %esp
  16406. movl -4(%ebp), %eax
  16407. movl %eax, 0(%esp)
  16408. movl $strbuf+2874, %eax
  16409. movl %eax, 4(%esp)
  16410. call fputs
  16411. addl $8, %esp
  16412. subl $8, %esp
  16413. movl 8(%ebp), %eax
  16414. movl %eax, 0(%esp)
  16415. movl $3, %eax
  16416. movl %eax, 4(%esp)
  16417. call compiler_free_register
  16418. addl $8, %esp
  16419. _label470:
  16420. leave
  16421. ret
  16422. compile_simple_identifier_expression:
  16423. pushl %ebp
  16424. movl %esp, %ebp
  16425. subl $4, %esp
  16426. subl $4, %esp
  16427. movl 8(%ebp), %eax
  16428. movl %eax, 0(%esp)
  16429. call compiler_output_chan
  16430. addl $4, %esp
  16431. movl %eax, -4(%ebp)
  16432. subl $8, %esp
  16433. movl -4(%ebp), %eax
  16434. movl %eax, 0(%esp)
  16435. movl $strbuf+2895, %eax
  16436. movl %eax, 4(%esp)
  16437. call fputs
  16438. addl $8, %esp
  16439. subl $8, %esp
  16440. movl -4(%ebp), %eax
  16441. movl %eax, 0(%esp)
  16442. movl 12(%ebp), %eax
  16443. pushl %edx
  16444. movl %eax, %edx
  16445. movl $2, %eax
  16446. leal (%edx,%eax,4), %eax
  16447. popl %edx
  16448. movl (%eax), %eax
  16449. movl %eax, 4(%esp)
  16450. call fputs
  16451. addl $8, %esp
  16452. subl $8, %esp
  16453. movl -4(%ebp), %eax
  16454. movl %eax, 0(%esp)
  16455. movl $strbuf+2902, %eax
  16456. movl %eax, 4(%esp)
  16457. call fputs
  16458. addl $8, %esp
  16459. leave
  16460. ret
  16461. compile_simple_argument_expression:
  16462. pushl %ebp
  16463. movl %esp, %ebp
  16464. subl $4, %esp
  16465. subl $4, %esp
  16466. movl 8(%ebp), %eax
  16467. movl %eax, 0(%esp)
  16468. call compiler_output_chan
  16469. addl $4, %esp
  16470. movl %eax, -4(%ebp)
  16471. subl $8, %esp
  16472. movl -4(%ebp), %eax
  16473. movl %eax, 0(%esp)
  16474. movl $strbuf+2895, %eax
  16475. movl %eax, 4(%esp)
  16476. call fputs
  16477. addl $8, %esp
  16478. subl $8, %esp
  16479. movl -4(%ebp), %eax
  16480. movl %eax, 0(%esp)
  16481. movl 12(%ebp), %eax
  16482. pushl %edx
  16483. movl %eax, %edx
  16484. movl $2, %eax
  16485. leal (%edx,%eax,4), %eax
  16486. popl %edx
  16487. movl (%eax), %eax
  16488. movl %eax, 4(%esp)
  16489. call fputarg
  16490. addl $8, %esp
  16491. subl $8, %esp
  16492. movl -4(%ebp), %eax
  16493. movl %eax, 0(%esp)
  16494. movl $strbuf+2902, %eax
  16495. movl %eax, 4(%esp)
  16496. call fputs
  16497. addl $8, %esp
  16498. leave
  16499. ret
  16500. fputarg:
  16501. pushl %ebp
  16502. movl %esp, %ebp
  16503. subl $8, %esp
  16504. movl 8(%ebp), %eax
  16505. movl %eax, 0(%esp)
  16506. movl $4, %eax
  16507. pushl %ebx
  16508. movl %eax, %ebx
  16509. movl 12(%ebp), %eax
  16510. pushl %ebx
  16511. movl %eax, %ebx
  16512. movl $2, %eax
  16513. addl %ebx, %eax
  16514. popl %ebx
  16515. imull %ebx, %eax
  16516. popl %ebx
  16517. movl %eax, 4(%esp)
  16518. call fputd
  16519. addl $8, %esp
  16520. subl $8, %esp
  16521. movl 8(%ebp), %eax
  16522. movl %eax, 0(%esp)
  16523. movl $strbuf+2910, %eax
  16524. movl %eax, 4(%esp)
  16525. call fputs
  16526. addl $8, %esp
  16527. leave
  16528. ret
  16529. compile_simple_variable_expression:
  16530. pushl %ebp
  16531. movl %esp, %ebp
  16532. subl $4, %esp
  16533. subl $4, %esp
  16534. movl 8(%ebp), %eax
  16535. movl %eax, 0(%esp)
  16536. call compiler_output_chan
  16537. addl $4, %esp
  16538. movl %eax, -4(%ebp)
  16539. subl $8, %esp
  16540. movl -4(%ebp), %eax
  16541. movl %eax, 0(%esp)
  16542. movl $strbuf+2895, %eax
  16543. movl %eax, 4(%esp)
  16544. call fputs
  16545. addl $8, %esp
  16546. subl $8, %esp
  16547. movl -4(%ebp), %eax
  16548. movl %eax, 0(%esp)
  16549. movl 12(%ebp), %eax
  16550. pushl %edx
  16551. movl %eax, %edx
  16552. movl $2, %eax
  16553. leal (%edx,%eax,4), %eax
  16554. popl %edx
  16555. movl (%eax), %eax
  16556. movl %eax, 4(%esp)
  16557. call fputvar
  16558. addl $8, %esp
  16559. subl $8, %esp
  16560. movl -4(%ebp), %eax
  16561. movl %eax, 0(%esp)
  16562. movl $strbuf+2902, %eax
  16563. movl %eax, 4(%esp)
  16564. call fputs
  16565. addl $8, %esp
  16566. leave
  16567. ret
  16568. fputvar:
  16569. pushl %ebp
  16570. movl %esp, %ebp
  16571. subl $8, %esp
  16572. movl 8(%ebp), %eax
  16573. movl %eax, 0(%esp)
  16574. movl $45, %eax
  16575. movl %eax, 4(%esp)
  16576. call fputc
  16577. addl $8, %esp
  16578. subl $8, %esp
  16579. movl 8(%ebp), %eax
  16580. movl %eax, 0(%esp)
  16581. movl $4, %eax
  16582. pushl %ebx
  16583. movl %eax, %ebx
  16584. movl 12(%ebp), %eax
  16585. pushl %ebx
  16586. movl %eax, %ebx
  16587. movl $1, %eax
  16588. addl %ebx, %eax
  16589. popl %ebx
  16590. imull %ebx, %eax
  16591. popl %ebx
  16592. movl %eax, 4(%esp)
  16593. call fputd
  16594. addl $8, %esp
  16595. subl $8, %esp
  16596. movl 8(%ebp), %eax
  16597. movl %eax, 0(%esp)
  16598. movl $strbuf+2910, %eax
  16599. movl %eax, 4(%esp)
  16600. call fputs
  16601. addl $8, %esp
  16602. leave
  16603. ret
  16604. compile_simple_syscall_expression:
  16605. pushl %ebp
  16606. movl %esp, %ebp
  16607. subl $16, %esp
  16608. subl $4, %esp
  16609. movl 8(%ebp), %eax
  16610. movl %eax, 0(%esp)
  16611. call compiler_output_chan
  16612. addl $4, %esp
  16613. movl %eax, -4(%ebp)
  16614. movl 12(%ebp), %eax
  16615. movl %eax, %edx
  16616. movl $2, %eax
  16617. leal (%edx,%eax,4), %eax
  16618. movl (%eax), %eax
  16619. movl %eax, -8(%ebp)
  16620. subl $4, %esp
  16621. movl -8(%ebp), %eax
  16622. movl %eax, 0(%esp)
  16623. call vector_size
  16624. addl $4, %esp
  16625. movl %eax, -12(%ebp)
  16626. movl -12(%ebp), %eax
  16627. movl %eax, %edx
  16628. movl $1, %eax
  16629. cmpl %eax, %edx
  16630. setg %al
  16631. movzbl %al, %eax
  16632. cmpl $0, %eax
  16633. je _label472
  16634. subl $8, %esp
  16635. movl 8(%ebp), %eax
  16636. movl %eax, 0(%esp)
  16637. movl $1, %eax
  16638. movl %eax, 4(%esp)
  16639. call compiler_allocate_register
  16640. addl $8, %esp
  16641. _label472:
  16642. movl -12(%ebp), %eax
  16643. movl %eax, %edx
  16644. movl $2, %eax
  16645. cmpl %eax, %edx
  16646. setg %al
  16647. movzbl %al, %eax
  16648. cmpl $0, %eax
  16649. je _label473
  16650. subl $8, %esp
  16651. movl 8(%ebp), %eax
  16652. movl %eax, 0(%esp)
  16653. movl $2, %eax
  16654. movl %eax, 4(%esp)
  16655. call compiler_allocate_register
  16656. addl $8, %esp
  16657. _label473:
  16658. movl -12(%ebp), %eax
  16659. movl %eax, %edx
  16660. movl $3, %eax
  16661. cmpl %eax, %edx
  16662. setg %al
  16663. movzbl %al, %eax
  16664. cmpl $0, %eax
  16665. je _label474
  16666. subl $8, %esp
  16667. movl 8(%ebp), %eax
  16668. movl %eax, 0(%esp)
  16669. movl $3, %eax
  16670. movl %eax, 4(%esp)
  16671. call compiler_allocate_register
  16672. addl $8, %esp
  16673. _label474:
  16674. movl -12(%ebp), %eax
  16675. movl %eax, %edx
  16676. movl $4, %eax
  16677. cmpl %eax, %edx
  16678. setg %al
  16679. movzbl %al, %eax
  16680. cmpl $0, %eax
  16681. je _label475
  16682. subl $8, %esp
  16683. movl 8(%ebp), %eax
  16684. movl %eax, 0(%esp)
  16685. movl $4, %eax
  16686. movl %eax, 4(%esp)
  16687. call compiler_allocate_register
  16688. addl $8, %esp
  16689. _label475:
  16690. movl -12(%ebp), %eax
  16691. movl %eax, %edx
  16692. movl $5, %eax
  16693. cmpl %eax, %edx
  16694. setg %al
  16695. movzbl %al, %eax
  16696. cmpl $0, %eax
  16697. je _label476
  16698. subl $8, %esp
  16699. movl 8(%ebp), %eax
  16700. movl %eax, 0(%esp)
  16701. movl $5, %eax
  16702. movl %eax, 4(%esp)
  16703. call compiler_allocate_register
  16704. addl $8, %esp
  16705. _label476:
  16706. movl -12(%ebp), %eax
  16707. movl %eax, %edx
  16708. movl $6, %eax
  16709. cmpl %eax, %edx
  16710. setg %al
  16711. movzbl %al, %eax
  16712. cmpl $0, %eax
  16713. je _label477
  16714. subl $8, %esp
  16715. movl -4(%ebp), %eax
  16716. movl %eax, 0(%esp)
  16717. movl $strbuf+2352, %eax
  16718. movl %eax, 4(%esp)
  16719. call fputs
  16720. addl $8, %esp
  16721. _label477:
  16722. movl $0, %eax
  16723. movl %eax, -16(%ebp)
  16724. _label478:
  16725. movl -16(%ebp), %eax
  16726. movl %eax, %edx
  16727. movl -12(%ebp), %eax
  16728. cmpl %eax, %edx
  16729. setl %al
  16730. movzbl %al, %eax
  16731. cmpl $0, %eax
  16732. je _label479
  16733. subl $8, %esp
  16734. movl 8(%ebp), %eax
  16735. movl %eax, 0(%esp)
  16736. pushl %ebx
  16737. pushl %ecx
  16738. pushl %edx
  16739. pushl %esi
  16740. pushl %edi
  16741. subl $8, %esp
  16742. movl -8(%ebp), %eax
  16743. movl %eax, 0(%esp)
  16744. movl -16(%ebp), %eax
  16745. movl %eax, 4(%esp)
  16746. call vector_get
  16747. addl $8, %esp
  16748. popl %edi
  16749. popl %esi
  16750. popl %edx
  16751. popl %ecx
  16752. popl %ebx
  16753. movl %eax, 4(%esp)
  16754. call compile_expression
  16755. addl $8, %esp
  16756. movl -16(%ebp), %eax
  16757. movl %eax, %edx
  16758. movl $0, %eax
  16759. cmpl %eax, %edx
  16760. setne %al
  16761. movzbl %al, %eax
  16762. cmpl $0, %eax
  16763. je _label480
  16764. subl $8, %esp
  16765. movl -4(%ebp), %eax
  16766. movl %eax, 0(%esp)
  16767. movl $strbuf+2761, %eax
  16768. movl %eax, 4(%esp)
  16769. call fputs
  16770. addl $8, %esp
  16771. subl $8, %esp
  16772. movl -4(%ebp), %eax
  16773. movl %eax, 0(%esp)
  16774. movl -16(%ebp), %eax
  16775. leal registers(,%eax,4), %eax
  16776. movl (%eax), %eax
  16777. movl %eax, 4(%esp)
  16778. call fputs
  16779. addl $8, %esp
  16780. subl $8, %esp
  16781. movl -4(%ebp), %eax
  16782. movl %eax, 0(%esp)
  16783. movl $10, %eax
  16784. movl %eax, 4(%esp)
  16785. call fputc
  16786. addl $8, %esp
  16787. _label480:
  16788. movl -16(%ebp), %eax
  16789. movl %eax, %edx
  16790. movl $0, %eax
  16791. cmpl %eax, %edx
  16792. sete %al
  16793. movzbl %al, %eax
  16794. movl %eax, %ebx
  16795. movl -12(%ebp), %eax
  16796. movl %eax, %edx
  16797. movl $1, %eax
  16798. cmpl %eax, %edx
  16799. setg %al
  16800. movzbl %al, %eax
  16801. imull %ebx, %eax
  16802. cmpl $0, %eax
  16803. je _label481
  16804. subl $8, %esp
  16805. movl -4(%ebp), %eax
  16806. movl %eax, 0(%esp)
  16807. movl $strbuf+2917, %eax
  16808. movl %eax, 4(%esp)
  16809. call fputs
  16810. addl $8, %esp
  16811. _label481:
  16812. movl -16(%ebp), %eax
  16813. movl %eax, %ebx
  16814. movl $1, %eax
  16815. addl %ebx, %eax
  16816. movl %eax, -16(%ebp)
  16817. jmp _label478
  16818. _label479:
  16819. movl -12(%ebp), %eax
  16820. movl %eax, %edx
  16821. movl $1, %eax
  16822. cmpl %eax, %edx
  16823. setg %al
  16824. movzbl %al, %eax
  16825. cmpl $0, %eax
  16826. je _label482
  16827. subl $8, %esp
  16828. movl -4(%ebp), %eax
  16829. movl %eax, 0(%esp)
  16830. movl $strbuf+2930, %eax
  16831. movl %eax, 4(%esp)
  16832. call fputs
  16833. addl $8, %esp
  16834. _label482:
  16835. subl $8, %esp
  16836. movl -4(%ebp), %eax
  16837. movl %eax, 0(%esp)
  16838. movl $strbuf+2942, %eax
  16839. movl %eax, 4(%esp)
  16840. call fputs
  16841. addl $8, %esp
  16842. movl -12(%ebp), %eax
  16843. movl %eax, %edx
  16844. movl $6, %eax
  16845. cmpl %eax, %edx
  16846. setg %al
  16847. movzbl %al, %eax
  16848. cmpl $0, %eax
  16849. je _label483
  16850. subl $8, %esp
  16851. movl -4(%ebp), %eax
  16852. movl %eax, 0(%esp)
  16853. movl $strbuf+2954, %eax
  16854. movl %eax, 4(%esp)
  16855. call fputs
  16856. addl $8, %esp
  16857. _label483:
  16858. movl -12(%ebp), %eax
  16859. movl %eax, %edx
  16860. movl $5, %eax
  16861. cmpl %eax, %edx
  16862. setg %al
  16863. movzbl %al, %eax
  16864. cmpl $0, %eax
  16865. je _label484
  16866. subl $8, %esp
  16867. movl 8(%ebp), %eax
  16868. movl %eax, 0(%esp)
  16869. movl $5, %eax
  16870. movl %eax, 4(%esp)
  16871. call compiler_free_register
  16872. addl $8, %esp
  16873. _label484:
  16874. movl -12(%ebp), %eax
  16875. movl %eax, %edx
  16876. movl $4, %eax
  16877. cmpl %eax, %edx
  16878. setg %al
  16879. movzbl %al, %eax
  16880. cmpl $0, %eax
  16881. je _label485
  16882. subl $8, %esp
  16883. movl 8(%ebp), %eax
  16884. movl %eax, 0(%esp)
  16885. movl $4, %eax
  16886. movl %eax, 4(%esp)
  16887. call compiler_free_register
  16888. addl $8, %esp
  16889. _label485:
  16890. movl -12(%ebp), %eax
  16891. movl %eax, %edx
  16892. movl $3, %eax
  16893. cmpl %eax, %edx
  16894. setg %al
  16895. movzbl %al, %eax
  16896. cmpl $0, %eax
  16897. je _label486
  16898. subl $8, %esp
  16899. movl 8(%ebp), %eax
  16900. movl %eax, 0(%esp)
  16901. movl $3, %eax
  16902. movl %eax, 4(%esp)
  16903. call compiler_free_register
  16904. addl $8, %esp
  16905. _label486:
  16906. movl -12(%ebp), %eax
  16907. movl %eax, %edx
  16908. movl $2, %eax
  16909. cmpl %eax, %edx
  16910. setg %al
  16911. movzbl %al, %eax
  16912. cmpl $0, %eax
  16913. je _label487
  16914. subl $8, %esp
  16915. movl 8(%ebp), %eax
  16916. movl %eax, 0(%esp)
  16917. movl $2, %eax
  16918. movl %eax, 4(%esp)
  16919. call compiler_free_register
  16920. addl $8, %esp
  16921. _label487:
  16922. movl -12(%ebp), %eax
  16923. movl %eax, %edx
  16924. movl $1, %eax
  16925. cmpl %eax, %edx
  16926. setg %al
  16927. movzbl %al, %eax
  16928. cmpl $0, %eax
  16929. je _label488
  16930. subl $8, %esp
  16931. movl 8(%ebp), %eax
  16932. movl %eax, 0(%esp)
  16933. movl $1, %eax
  16934. movl %eax, 4(%esp)
  16935. call compiler_free_register
  16936. addl $8, %esp
  16937. _label488:
  16938. leave
  16939. ret
  16940. compile_simple_readchar_expression:
  16941. pushl %ebp
  16942. movl %esp, %ebp
  16943. subl $4, %esp
  16944. subl $4, %esp
  16945. movl 8(%ebp), %eax
  16946. movl %eax, 0(%esp)
  16947. call compiler_output_chan
  16948. addl $4, %esp
  16949. movl %eax, -4(%ebp)
  16950. subl $8, %esp
  16951. movl 8(%ebp), %eax
  16952. movl %eax, 0(%esp)
  16953. movl 12(%ebp), %eax
  16954. pushl %edx
  16955. movl %eax, %edx
  16956. movl $2, %eax
  16957. leal (%edx,%eax,4), %eax
  16958. popl %edx
  16959. movl (%eax), %eax
  16960. movl %eax, 4(%esp)
  16961. call compile_expression
  16962. addl $8, %esp
  16963. subl $8, %esp
  16964. movl 8(%ebp), %eax
  16965. movl %eax, 0(%esp)
  16966. movl $3, %eax
  16967. movl %eax, 4(%esp)
  16968. call compiler_allocate_register
  16969. addl $8, %esp
  16970. subl $8, %esp
  16971. movl -4(%ebp), %eax
  16972. movl %eax, 0(%esp)
  16973. movl $strbuf+2641, %eax
  16974. movl %eax, 4(%esp)
  16975. call fputs
  16976. addl $8, %esp
  16977. subl $8, %esp
  16978. movl 8(%ebp), %eax
  16979. movl %eax, 0(%esp)
  16980. movl 12(%ebp), %eax
  16981. pushl %edx
  16982. movl %eax, %edx
  16983. movl $3, %eax
  16984. leal (%edx,%eax,4), %eax
  16985. popl %edx
  16986. movl (%eax), %eax
  16987. movl %eax, 4(%esp)
  16988. call compile_expression
  16989. addl $8, %esp
  16990. subl $8, %esp
  16991. movl -4(%ebp), %eax
  16992. movl %eax, 0(%esp)
  16993. movl $strbuf+2659, %eax
  16994. movl %eax, 4(%esp)
  16995. call fputs
  16996. addl $8, %esp
  16997. subl $8, %esp
  16998. movl -4(%ebp), %eax
  16999. movl %eax, 0(%esp)
  17000. movl $strbuf+2966, %eax
  17001. movl %eax, 4(%esp)
  17002. call fputs
  17003. addl $8, %esp
  17004. subl $8, %esp
  17005. movl 8(%ebp), %eax
  17006. movl %eax, 0(%esp)
  17007. movl $3, %eax
  17008. movl %eax, 4(%esp)
  17009. call compiler_free_register
  17010. addl $8, %esp
  17011. leave
  17012. ret
  17013. compile_prefix_plus_expression:
  17014. pushl %ebp
  17015. movl %esp, %ebp
  17016. leave
  17017. ret
  17018. compile_prefix_minus_expression:
  17019. pushl %ebp
  17020. movl %esp, %ebp
  17021. subl $4, %esp
  17022. subl $4, %esp
  17023. movl 8(%ebp), %eax
  17024. movl %eax, 0(%esp)
  17025. call compiler_output_chan
  17026. addl $4, %esp
  17027. movl %eax, -4(%ebp)
  17028. subl $8, %esp
  17029. movl 8(%ebp), %eax
  17030. movl %eax, 0(%esp)
  17031. movl 12(%ebp), %eax
  17032. pushl %edx
  17033. movl %eax, %edx
  17034. movl $2, %eax
  17035. leal (%edx,%eax,4), %eax
  17036. popl %edx
  17037. movl (%eax), %eax
  17038. movl %eax, 4(%esp)
  17039. call compile_expression
  17040. addl $8, %esp
  17041. subl $8, %esp
  17042. movl -4(%ebp), %eax
  17043. movl %eax, 0(%esp)
  17044. movl $strbuf+2988, %eax
  17045. movl %eax, 4(%esp)
  17046. call fputs
  17047. addl $8, %esp
  17048. leave
  17049. ret
  17050. compile_prefix_logical_not_expression:
  17051. pushl %ebp
  17052. movl %esp, %ebp
  17053. subl $4, %esp
  17054. subl $4, %esp
  17055. movl 8(%ebp), %eax
  17056. movl %eax, 0(%esp)
  17057. call compiler_output_chan
  17058. addl $4, %esp
  17059. movl %eax, -4(%ebp)
  17060. subl $8, %esp
  17061. movl 8(%ebp), %eax
  17062. movl %eax, 0(%esp)
  17063. movl 12(%ebp), %eax
  17064. pushl %edx
  17065. movl %eax, %edx
  17066. movl $2, %eax
  17067. leal (%edx,%eax,4), %eax
  17068. popl %edx
  17069. movl (%eax), %eax
  17070. movl %eax, 4(%esp)
  17071. call compile_expression
  17072. addl $8, %esp
  17073. subl $8, %esp
  17074. movl -4(%ebp), %eax
  17075. movl %eax, 0(%esp)
  17076. movl $strbuf+2479, %eax
  17077. movl %eax, 4(%esp)
  17078. call fputs
  17079. addl $8, %esp
  17080. subl $8, %esp
  17081. movl -4(%ebp), %eax
  17082. movl %eax, 0(%esp)
  17083. movl $strbuf+3000, %eax
  17084. movl %eax, 4(%esp)
  17085. call fputs
  17086. addl $8, %esp
  17087. subl $8, %esp
  17088. movl -4(%ebp), %eax
  17089. movl %eax, 0(%esp)
  17090. movl $strbuf+3011, %eax
  17091. movl %eax, 4(%esp)
  17092. call fputs
  17093. addl $8, %esp
  17094. leave
  17095. ret
  17096. compile_prefix_not_expression:
  17097. pushl %ebp
  17098. movl %esp, %ebp
  17099. subl $4, %esp
  17100. subl $4, %esp
  17101. movl 8(%ebp), %eax
  17102. movl %eax, 0(%esp)
  17103. call compiler_output_chan
  17104. addl $4, %esp
  17105. movl %eax, -4(%ebp)
  17106. subl $8, %esp
  17107. movl 8(%ebp), %eax
  17108. movl %eax, 0(%esp)
  17109. movl 12(%ebp), %eax
  17110. pushl %edx
  17111. movl %eax, %edx
  17112. movl $2, %eax
  17113. leal (%edx,%eax,4), %eax
  17114. popl %edx
  17115. movl (%eax), %eax
  17116. movl %eax, 4(%esp)
  17117. call compile_expression
  17118. addl $8, %esp
  17119. subl $8, %esp
  17120. movl -4(%ebp), %eax
  17121. movl %eax, 0(%esp)
  17122. movl $strbuf+3030, %eax
  17123. movl %eax, 4(%esp)
  17124. call fputs
  17125. addl $8, %esp
  17126. leave
  17127. ret
  17128. compile_prefix_deref_expression:
  17129. pushl %ebp
  17130. movl %esp, %ebp
  17131. subl $4, %esp
  17132. subl $4, %esp
  17133. movl 8(%ebp), %eax
  17134. movl %eax, 0(%esp)
  17135. call compiler_output_chan
  17136. addl $4, %esp
  17137. movl %eax, -4(%ebp)
  17138. subl $8, %esp
  17139. movl 8(%ebp), %eax
  17140. movl %eax, 0(%esp)
  17141. movl 12(%ebp), %eax
  17142. pushl %edx
  17143. movl %eax, %edx
  17144. movl $2, %eax
  17145. leal (%edx,%eax,4), %eax
  17146. popl %edx
  17147. movl (%eax), %eax
  17148. movl %eax, 4(%esp)
  17149. call compile_expression
  17150. addl $8, %esp
  17151. subl $8, %esp
  17152. movl -4(%ebp), %eax
  17153. movl %eax, 0(%esp)
  17154. movl $strbuf+2810, %eax
  17155. movl %eax, 4(%esp)
  17156. call fputs
  17157. addl $8, %esp
  17158. leave
  17159. ret
  17160. compile_prefix_addrof_expression:
  17161. pushl %ebp
  17162. movl %esp, %ebp
  17163. subl $12, %esp
  17164. subl $4, %esp
  17165. movl 8(%ebp), %eax
  17166. movl %eax, 0(%esp)
  17167. call compiler_output_chan
  17168. addl $4, %esp
  17169. movl %eax, -4(%ebp)
  17170. movl 12(%ebp), %eax
  17171. movl %eax, %edx
  17172. movl $2, %eax
  17173. leal (%edx,%eax,4), %eax
  17174. movl (%eax), %eax
  17175. movl %eax, -8(%ebp)
  17176. movl -8(%ebp), %eax
  17177. movl %eax, %edx
  17178. movl $0, %eax
  17179. leal (%edx,%eax,4), %eax
  17180. movl (%eax), %eax
  17181. movl %eax, -12(%ebp)
  17182. movl -12(%ebp), %eax
  17183. movl %eax, %edx
  17184. movl $2, %eax
  17185. cmpl %eax, %edx
  17186. sete %al
  17187. movzbl %al, %eax
  17188. cmpl $0, %eax
  17189. je _label489
  17190. subl $8, %esp
  17191. movl -4(%ebp), %eax
  17192. movl %eax, 0(%esp)
  17193. movl $strbuf+3042, %eax
  17194. movl %eax, 4(%esp)
  17195. call fputs
  17196. addl $8, %esp
  17197. subl $8, %esp
  17198. movl -4(%ebp), %eax
  17199. movl %eax, 0(%esp)
  17200. movl -8(%ebp), %eax
  17201. pushl %edx
  17202. movl %eax, %edx
  17203. movl $2, %eax
  17204. leal (%edx,%eax,4), %eax
  17205. popl %edx
  17206. movl (%eax), %eax
  17207. movl %eax, 4(%esp)
  17208. call fputs
  17209. addl $8, %esp
  17210. subl $8, %esp
  17211. movl -4(%ebp), %eax
  17212. movl %eax, 0(%esp)
  17213. movl $strbuf+2902, %eax
  17214. movl %eax, 4(%esp)
  17215. call fputs
  17216. addl $8, %esp
  17217. leave
  17218. ret
  17219. _label489:
  17220. movl -12(%ebp), %eax
  17221. movl %eax, %edx
  17222. movl $3, %eax
  17223. cmpl %eax, %edx
  17224. sete %al
  17225. movzbl %al, %eax
  17226. cmpl $0, %eax
  17227. je _label490
  17228. subl $8, %esp
  17229. movl -4(%ebp), %eax
  17230. movl %eax, 0(%esp)
  17231. movl $strbuf+2850, %eax
  17232. movl %eax, 4(%esp)
  17233. call fputs
  17234. addl $8, %esp
  17235. subl $8, %esp
  17236. movl -4(%ebp), %eax
  17237. movl %eax, 0(%esp)
  17238. movl -8(%ebp), %eax
  17239. pushl %edx
  17240. movl %eax, %edx
  17241. movl $2, %eax
  17242. leal (%edx,%eax,4), %eax
  17243. popl %edx
  17244. movl (%eax), %eax
  17245. movl %eax, 4(%esp)
  17246. call fputarg
  17247. addl $8, %esp
  17248. subl $8, %esp
  17249. movl -4(%ebp), %eax
  17250. movl %eax, 0(%esp)
  17251. movl $strbuf+2902, %eax
  17252. movl %eax, 4(%esp)
  17253. call fputs
  17254. addl $8, %esp
  17255. leave
  17256. ret
  17257. _label490:
  17258. movl -12(%ebp), %eax
  17259. movl %eax, %edx
  17260. movl $4, %eax
  17261. cmpl %eax, %edx
  17262. sete %al
  17263. movzbl %al, %eax
  17264. cmpl $0, %eax
  17265. je _label491
  17266. subl $8, %esp
  17267. movl -4(%ebp), %eax
  17268. movl %eax, 0(%esp)
  17269. movl $strbuf+2850, %eax
  17270. movl %eax, 4(%esp)
  17271. call fputs
  17272. addl $8, %esp
  17273. subl $8, %esp
  17274. movl -4(%ebp), %eax
  17275. movl %eax, 0(%esp)
  17276. movl -8(%ebp), %eax
  17277. pushl %edx
  17278. movl %eax, %edx
  17279. movl $2, %eax
  17280. leal (%edx,%eax,4), %eax
  17281. popl %edx
  17282. movl (%eax), %eax
  17283. movl %eax, 4(%esp)
  17284. call fputvar
  17285. addl $8, %esp
  17286. subl $8, %esp
  17287. movl -4(%ebp), %eax
  17288. movl %eax, 0(%esp)
  17289. movl $strbuf+2902, %eax
  17290. movl %eax, 4(%esp)
  17291. call fputs
  17292. addl $8, %esp
  17293. leave
  17294. ret
  17295. _label491:
  17296. subl $12, %esp
  17297. movl 8(%ebp), %eax
  17298. movl %eax, 0(%esp)
  17299. movl 12(%ebp), %eax
  17300. movl %eax, 4(%esp)
  17301. movl $strbuf+3050, %eax
  17302. movl %eax, 8(%esp)
  17303. call compiler_error
  17304. addl $12, %esp
  17305. leave
  17306. ret
  17307. compile_bitwise_arithmetic_expression:
  17308. pushl %ebp
  17309. movl %esp, %ebp
  17310. subl $4, %esp
  17311. subl $4, %esp
  17312. movl 8(%ebp), %eax
  17313. movl %eax, 0(%esp)
  17314. call compiler_output_chan
  17315. addl $4, %esp
  17316. movl %eax, -4(%ebp)
  17317. subl $8, %esp
  17318. movl 8(%ebp), %eax
  17319. movl %eax, 0(%esp)
  17320. movl 16(%ebp), %eax
  17321. movl %eax, 4(%esp)
  17322. call compile_expression
  17323. addl $8, %esp
  17324. subl $8, %esp
  17325. movl 8(%ebp), %eax
  17326. movl %eax, 0(%esp)
  17327. movl $1, %eax
  17328. movl %eax, 4(%esp)
  17329. call compiler_allocate_register
  17330. addl $8, %esp
  17331. movl 12(%ebp), %eax
  17332. movl %eax, %edx
  17333. movl $19, %eax
  17334. cmpl %eax, %edx
  17335. sete %al
  17336. movzbl %al, %eax
  17337. cmpl $0, %eax
  17338. je _label493
  17339. subl $8, %esp
  17340. movl -4(%ebp), %eax
  17341. movl %eax, 0(%esp)
  17342. movl $strbuf+2917, %eax
  17343. movl %eax, 4(%esp)
  17344. call fputs
  17345. addl $8, %esp
  17346. jmp _label492
  17347. _label493:
  17348. movl 12(%ebp), %eax
  17349. movl %eax, %edx
  17350. movl $16, %eax
  17351. cmpl %eax, %edx
  17352. sete %al
  17353. movzbl %al, %eax
  17354. cmpl $0, %eax
  17355. jne _label494
  17356. movl 12(%ebp), %eax
  17357. movl %eax, %edx
  17358. movl $17, %eax
  17359. cmpl %eax, %edx
  17360. sete %al
  17361. movzbl %al, %eax
  17362. cmpl $0, %eax
  17363. jne _label494
  17364. movl $0, %eax
  17365. jmp _label495
  17366. _label494:
  17367. movl $1, %eax
  17368. _label495:
  17369. cmpl $0, %eax
  17370. je _label496
  17371. subl $8, %esp
  17372. movl 8(%ebp), %eax
  17373. movl %eax, 0(%esp)
  17374. movl $3, %eax
  17375. movl %eax, 4(%esp)
  17376. call compiler_allocate_register
  17377. addl $8, %esp
  17378. subl $8, %esp
  17379. movl -4(%ebp), %eax
  17380. movl %eax, 0(%esp)
  17381. movl $strbuf+2917, %eax
  17382. movl %eax, 4(%esp)
  17383. call fputs
  17384. addl $8, %esp
  17385. jmp _label492
  17386. _label496:
  17387. subl $8, %esp
  17388. movl -4(%ebp), %eax
  17389. movl %eax, 0(%esp)
  17390. movl $strbuf+2743, %eax
  17391. movl %eax, 4(%esp)
  17392. call fputs
  17393. addl $8, %esp
  17394. _label492:
  17395. subl $8, %esp
  17396. movl 8(%ebp), %eax
  17397. movl %eax, 0(%esp)
  17398. movl 20(%ebp), %eax
  17399. movl %eax, 4(%esp)
  17400. call compile_expression
  17401. addl $8, %esp
  17402. movl 12(%ebp), %eax
  17403. movl %eax, %edx
  17404. movl $20, %eax
  17405. cmpl %eax, %edx
  17406. sete %al
  17407. movzbl %al, %eax
  17408. cmpl $0, %eax
  17409. jne _label498
  17410. movl 12(%ebp), %eax
  17411. movl %eax, %edx
  17412. movl $21, %eax
  17413. cmpl %eax, %edx
  17414. sete %al
  17415. movzbl %al, %eax
  17416. cmpl $0, %eax
  17417. jne _label498
  17418. movl $0, %eax
  17419. jmp _label499
  17420. _label498:
  17421. movl $1, %eax
  17422. _label499:
  17423. cmpl $0, %eax
  17424. je _label500
  17425. subl $8, %esp
  17426. movl 8(%ebp), %eax
  17427. movl %eax, 0(%esp)
  17428. movl $2, %eax
  17429. movl %eax, 4(%esp)
  17430. call compiler_allocate_register
  17431. addl $8, %esp
  17432. subl $8, %esp
  17433. movl -4(%ebp), %eax
  17434. movl %eax, 0(%esp)
  17435. movl $strbuf+3095, %eax
  17436. movl %eax, 4(%esp)
  17437. call fputs
  17438. addl $8, %esp
  17439. subl $8, %esp
  17440. movl -4(%ebp), %eax
  17441. movl %eax, 0(%esp)
  17442. movl $strbuf+3113, %eax
  17443. movl %eax, 4(%esp)
  17444. call fputs
  17445. addl $8, %esp
  17446. jmp _label497
  17447. _label500:
  17448. movl 12(%ebp), %eax
  17449. movl %eax, %edx
  17450. movl $19, %eax
  17451. cmpl %eax, %edx
  17452. sete %al
  17453. movzbl %al, %eax
  17454. cmpl $0, %eax
  17455. je _label501
  17456. subl $8, %esp
  17457. movl -4(%ebp), %eax
  17458. movl %eax, 0(%esp)
  17459. movl $strbuf+2743, %eax
  17460. movl %eax, 4(%esp)
  17461. call fputs
  17462. addl $8, %esp
  17463. subl $8, %esp
  17464. movl -4(%ebp), %eax
  17465. movl %eax, 0(%esp)
  17466. movl $strbuf+2930, %eax
  17467. movl %eax, 4(%esp)
  17468. call fputs
  17469. addl $8, %esp
  17470. jmp _label497
  17471. _label501:
  17472. movl 12(%ebp), %eax
  17473. movl %eax, %edx
  17474. movl $16, %eax
  17475. cmpl %eax, %edx
  17476. sete %al
  17477. movzbl %al, %eax
  17478. cmpl $0, %eax
  17479. jne _label502
  17480. movl 12(%ebp), %eax
  17481. movl %eax, %edx
  17482. movl $17, %eax
  17483. cmpl %eax, %edx
  17484. sete %al
  17485. movzbl %al, %eax
  17486. cmpl $0, %eax
  17487. jne _label502
  17488. movl $0, %eax
  17489. jmp _label503
  17490. _label502:
  17491. movl $1, %eax
  17492. _label503:
  17493. cmpl $0, %eax
  17494. je _label497
  17495. subl $8, %esp
  17496. movl -4(%ebp), %eax
  17497. movl %eax, 0(%esp)
  17498. movl $strbuf+2743, %eax
  17499. movl %eax, 4(%esp)
  17500. call fputs
  17501. addl $8, %esp
  17502. subl $8, %esp
  17503. movl -4(%ebp), %eax
  17504. movl %eax, 0(%esp)
  17505. movl $strbuf+2930, %eax
  17506. movl %eax, 4(%esp)
  17507. call fputs
  17508. addl $8, %esp
  17509. subl $8, %esp
  17510. movl -4(%ebp), %eax
  17511. movl %eax, 0(%esp)
  17512. movl $strbuf+3131, %eax
  17513. movl %eax, 4(%esp)
  17514. call fputs
  17515. addl $8, %esp
  17516. _label497:
  17517. subl $8, %esp
  17518. movl -4(%ebp), %eax
  17519. movl %eax, 0(%esp)
  17520. movl $9, %eax
  17521. movl %eax, 4(%esp)
  17522. call fputc
  17523. addl $8, %esp
  17524. movl 12(%ebp), %eax
  17525. movl %eax, %edx
  17526. movl $15, %eax
  17527. cmpl %eax, %edx
  17528. sete %al
  17529. movzbl %al, %eax
  17530. cmpl $0, %eax
  17531. je _label505
  17532. subl $8, %esp
  17533. movl -4(%ebp), %eax
  17534. movl %eax, 0(%esp)
  17535. movl $strbuf+3146, %eax
  17536. movl %eax, 4(%esp)
  17537. call fputs
  17538. addl $8, %esp
  17539. jmp _label504
  17540. _label505:
  17541. movl 12(%ebp), %eax
  17542. movl %eax, %edx
  17543. movl $16, %eax
  17544. cmpl %eax, %edx
  17545. sete %al
  17546. movzbl %al, %eax
  17547. cmpl $0, %eax
  17548. je _label506
  17549. subl $8, %esp
  17550. movl -4(%ebp), %eax
  17551. movl %eax, 0(%esp)
  17552. movl $strbuf+3163, %eax
  17553. movl %eax, 4(%esp)
  17554. call fputs
  17555. addl $8, %esp
  17556. jmp _label504
  17557. _label506:
  17558. movl 12(%ebp), %eax
  17559. movl %eax, %edx
  17560. movl $17, %eax
  17561. cmpl %eax, %edx
  17562. sete %al
  17563. movzbl %al, %eax
  17564. cmpl $0, %eax
  17565. je _label507
  17566. subl $8, %esp
  17567. movl -4(%ebp), %eax
  17568. movl %eax, 0(%esp)
  17569. movl $strbuf+3173, %eax
  17570. movl %eax, 4(%esp)
  17571. call fputs
  17572. addl $8, %esp
  17573. jmp _label504
  17574. _label507:
  17575. movl 12(%ebp), %eax
  17576. movl %eax, %edx
  17577. movl $18, %eax
  17578. cmpl %eax, %edx
  17579. sete %al
  17580. movzbl %al, %eax
  17581. cmpl $0, %eax
  17582. je _label508
  17583. subl $8, %esp
  17584. movl -4(%ebp), %eax
  17585. movl %eax, 0(%esp)
  17586. movl $strbuf+3200, %eax
  17587. movl %eax, 4(%esp)
  17588. call fputs
  17589. addl $8, %esp
  17590. jmp _label504
  17591. _label508:
  17592. movl 12(%ebp), %eax
  17593. movl %eax, %edx
  17594. movl $19, %eax
  17595. cmpl %eax, %edx
  17596. sete %al
  17597. movzbl %al, %eax
  17598. cmpl $0, %eax
  17599. je _label509
  17600. subl $8, %esp
  17601. movl -4(%ebp), %eax
  17602. movl %eax, 0(%esp)
  17603. movl $strbuf+3216, %eax
  17604. movl %eax, 4(%esp)
  17605. call fputs
  17606. addl $8, %esp
  17607. jmp _label504
  17608. _label509:
  17609. movl 12(%ebp), %eax
  17610. movl %eax, %edx
  17611. movl $20, %eax
  17612. cmpl %eax, %edx
  17613. sete %al
  17614. movzbl %al, %eax
  17615. cmpl $0, %eax
  17616. je _label510
  17617. subl $8, %esp
  17618. movl -4(%ebp), %eax
  17619. movl %eax, 0(%esp)
  17620. movl $strbuf+3232, %eax
  17621. movl %eax, 4(%esp)
  17622. call fputs
  17623. addl $8, %esp
  17624. jmp _label504
  17625. _label510:
  17626. movl 12(%ebp), %eax
  17627. movl %eax, %edx
  17628. movl $21, %eax
  17629. cmpl %eax, %edx
  17630. sete %al
  17631. movzbl %al, %eax
  17632. cmpl $0, %eax
  17633. je _label511
  17634. subl $8, %esp
  17635. movl -4(%ebp), %eax
  17636. movl %eax, 0(%esp)
  17637. movl $strbuf+3247, %eax
  17638. movl %eax, 4(%esp)
  17639. call fputs
  17640. addl $8, %esp
  17641. jmp _label504
  17642. _label511:
  17643. movl 12(%ebp), %eax
  17644. movl %eax, %edx
  17645. movl $22, %eax
  17646. cmpl %eax, %edx
  17647. sete %al
  17648. movzbl %al, %eax
  17649. cmpl $0, %eax
  17650. je _label512
  17651. subl $8, %esp
  17652. movl -4(%ebp), %eax
  17653. movl %eax, 0(%esp)
  17654. movl $strbuf+3262, %eax
  17655. movl %eax, 4(%esp)
  17656. call fputs
  17657. addl $8, %esp
  17658. jmp _label504
  17659. _label512:
  17660. movl 12(%ebp), %eax
  17661. movl %eax, %edx
  17662. movl $23, %eax
  17663. cmpl %eax, %edx
  17664. sete %al
  17665. movzbl %al, %eax
  17666. cmpl $0, %eax
  17667. je _label513
  17668. subl $8, %esp
  17669. movl -4(%ebp), %eax
  17670. movl %eax, 0(%esp)
  17671. movl $strbuf+3278, %eax
  17672. movl %eax, 4(%esp)
  17673. call fputs
  17674. addl $8, %esp
  17675. jmp _label504
  17676. _label513:
  17677. movl 12(%ebp), %eax
  17678. movl %eax, %edx
  17679. movl $24, %eax
  17680. cmpl %eax, %edx
  17681. sete %al
  17682. movzbl %al, %eax
  17683. cmpl $0, %eax
  17684. je _label504
  17685. subl $8, %esp
  17686. movl -4(%ebp), %eax
  17687. movl %eax, 0(%esp)
  17688. movl $strbuf+3294, %eax
  17689. movl %eax, 4(%esp)
  17690. call fputs
  17691. addl $8, %esp
  17692. _label504:
  17693. subl $8, %esp
  17694. movl -4(%ebp), %eax
  17695. movl %eax, 0(%esp)
  17696. movl $10, %eax
  17697. movl %eax, 4(%esp)
  17698. call fputc
  17699. addl $8, %esp
  17700. movl 12(%ebp), %eax
  17701. movl %eax, %edx
  17702. movl $20, %eax
  17703. cmpl %eax, %edx
  17704. sete %al
  17705. movzbl %al, %eax
  17706. cmpl $0, %eax
  17707. jne _label515
  17708. movl 12(%ebp), %eax
  17709. movl %eax, %edx
  17710. movl $21, %eax
  17711. cmpl %eax, %edx
  17712. sete %al
  17713. movzbl %al, %eax
  17714. cmpl $0, %eax
  17715. jne _label515
  17716. movl $0, %eax
  17717. jmp _label516
  17718. _label515:
  17719. movl $1, %eax
  17720. _label516:
  17721. cmpl $0, %eax
  17722. je _label517
  17723. subl $8, %esp
  17724. movl 8(%ebp), %eax
  17725. movl %eax, 0(%esp)
  17726. movl $2, %eax
  17727. movl %eax, 4(%esp)
  17728. call compiler_free_register
  17729. addl $8, %esp
  17730. jmp _label514
  17731. _label517:
  17732. movl 12(%ebp), %eax
  17733. movl %eax, %edx
  17734. movl $16, %eax
  17735. cmpl %eax, %edx
  17736. sete %al
  17737. movzbl %al, %eax
  17738. cmpl $0, %eax
  17739. jne _label518
  17740. movl 12(%ebp), %eax
  17741. movl %eax, %edx
  17742. movl $17, %eax
  17743. cmpl %eax, %edx
  17744. sete %al
  17745. movzbl %al, %eax
  17746. cmpl $0, %eax
  17747. jne _label518
  17748. movl $0, %eax
  17749. jmp _label519
  17750. _label518:
  17751. movl $1, %eax
  17752. _label519:
  17753. cmpl $0, %eax
  17754. je _label514
  17755. subl $8, %esp
  17756. movl 8(%ebp), %eax
  17757. movl %eax, 0(%esp)
  17758. movl $3, %eax
  17759. movl %eax, 4(%esp)
  17760. call compiler_free_register
  17761. addl $8, %esp
  17762. _label514:
  17763. subl $8, %esp
  17764. movl 8(%ebp), %eax
  17765. movl %eax, 0(%esp)
  17766. movl $1, %eax
  17767. movl %eax, 4(%esp)
  17768. call compiler_free_register
  17769. addl $8, %esp
  17770. leave
  17771. ret
  17772. compile_comparison_expression:
  17773. pushl %ebp
  17774. movl %esp, %ebp
  17775. subl $8, %esp
  17776. subl $4, %esp
  17777. movl 8(%ebp), %eax
  17778. movl %eax, 0(%esp)
  17779. call compiler_output_chan
  17780. addl $4, %esp
  17781. movl %eax, -4(%ebp)
  17782. movl 12(%ebp), %eax
  17783. movl %eax, %edx
  17784. movl $0, %eax
  17785. leal (%edx,%eax,4), %eax
  17786. movl (%eax), %eax
  17787. movl %eax, -8(%ebp)
  17788. subl $8, %esp
  17789. movl 8(%ebp), %eax
  17790. movl %eax, 0(%esp)
  17791. movl 12(%ebp), %eax
  17792. pushl %edx
  17793. movl %eax, %edx
  17794. movl $2, %eax
  17795. leal (%edx,%eax,4), %eax
  17796. popl %edx
  17797. movl (%eax), %eax
  17798. movl %eax, 4(%esp)
  17799. call compile_expression
  17800. addl $8, %esp
  17801. subl $8, %esp
  17802. movl 8(%ebp), %eax
  17803. movl %eax, 0(%esp)
  17804. movl $3, %eax
  17805. movl %eax, 4(%esp)
  17806. call compiler_allocate_register
  17807. addl $8, %esp
  17808. subl $8, %esp
  17809. movl -4(%ebp), %eax
  17810. movl %eax, 0(%esp)
  17811. movl $strbuf+2641, %eax
  17812. movl %eax, 4(%esp)
  17813. call fputs
  17814. addl $8, %esp
  17815. subl $8, %esp
  17816. movl 8(%ebp), %eax
  17817. movl %eax, 0(%esp)
  17818. movl 12(%ebp), %eax
  17819. pushl %edx
  17820. movl %eax, %edx
  17821. movl $3, %eax
  17822. leal (%edx,%eax,4), %eax
  17823. popl %edx
  17824. movl (%eax), %eax
  17825. movl %eax, 4(%esp)
  17826. call compile_expression
  17827. addl $8, %esp
  17828. subl $8, %esp
  17829. movl -4(%ebp), %eax
  17830. movl %eax, 0(%esp)
  17831. movl $strbuf+3309, %eax
  17832. movl %eax, 4(%esp)
  17833. call fputs
  17834. addl $8, %esp
  17835. subl $8, %esp
  17836. movl 8(%ebp), %eax
  17837. movl %eax, 0(%esp)
  17838. movl $3, %eax
  17839. movl %eax, 4(%esp)
  17840. call compiler_free_register
  17841. addl $8, %esp
  17842. subl $8, %esp
  17843. movl -4(%ebp), %eax
  17844. movl %eax, 0(%esp)
  17845. movl $9, %eax
  17846. movl %eax, 4(%esp)
  17847. call fputc
  17848. addl $8, %esp
  17849. movl -8(%ebp), %eax
  17850. movl %eax, %edx
  17851. movl $29, %eax
  17852. cmpl %eax, %edx
  17853. sete %al
  17854. movzbl %al, %eax
  17855. cmpl $0, %eax
  17856. je _label520
  17857. subl $8, %esp
  17858. movl -4(%ebp), %eax
  17859. movl %eax, 0(%esp)
  17860. movl $strbuf+3327, %eax
  17861. movl %eax, 4(%esp)
  17862. call fputs
  17863. addl $8, %esp
  17864. _label520:
  17865. movl -8(%ebp), %eax
  17866. movl %eax, %edx
  17867. movl $30, %eax
  17868. cmpl %eax, %edx
  17869. sete %al
  17870. movzbl %al, %eax
  17871. cmpl $0, %eax
  17872. je _label521
  17873. subl $8, %esp
  17874. movl -4(%ebp), %eax
  17875. movl %eax, 0(%esp)
  17876. movl $strbuf+3332, %eax
  17877. movl %eax, 4(%esp)
  17878. call fputs
  17879. addl $8, %esp
  17880. _label521:
  17881. movl -8(%ebp), %eax
  17882. movl %eax, %edx
  17883. movl $25, %eax
  17884. cmpl %eax, %edx
  17885. sete %al
  17886. movzbl %al, %eax
  17887. cmpl $0, %eax
  17888. je _label522
  17889. subl $8, %esp
  17890. movl -4(%ebp), %eax
  17891. movl %eax, 0(%esp)
  17892. movl $strbuf+3338, %eax
  17893. movl %eax, 4(%esp)
  17894. call fputs
  17895. addl $8, %esp
  17896. _label522:
  17897. movl -8(%ebp), %eax
  17898. movl %eax, %edx
  17899. movl $26, %eax
  17900. cmpl %eax, %edx
  17901. sete %al
  17902. movzbl %al, %eax
  17903. cmpl $0, %eax
  17904. je _label523
  17905. subl $8, %esp
  17906. movl -4(%ebp), %eax
  17907. movl %eax, 0(%esp)
  17908. movl $strbuf+3343, %eax
  17909. movl %eax, 4(%esp)
  17910. call fputs
  17911. addl $8, %esp
  17912. _label523:
  17913. movl -8(%ebp), %eax
  17914. movl %eax, %edx
  17915. movl $27, %eax
  17916. cmpl %eax, %edx
  17917. sete %al
  17918. movzbl %al, %eax
  17919. cmpl $0, %eax
  17920. je _label524
  17921. subl $8, %esp
  17922. movl -4(%ebp), %eax
  17923. movl %eax, 0(%esp)
  17924. movl $strbuf+3348, %eax
  17925. movl %eax, 4(%esp)
  17926. call fputs
  17927. addl $8, %esp
  17928. _label524:
  17929. movl -8(%ebp), %eax
  17930. movl %eax, %edx
  17931. movl $28, %eax
  17932. cmpl %eax, %edx
  17933. sete %al
  17934. movzbl %al, %eax
  17935. cmpl $0, %eax
  17936. je _label525
  17937. subl $8, %esp
  17938. movl -4(%ebp), %eax
  17939. movl %eax, 0(%esp)
  17940. movl $strbuf+3354, %eax
  17941. movl %eax, 4(%esp)
  17942. call fputs
  17943. addl $8, %esp
  17944. _label525:
  17945. subl $8, %esp
  17946. movl -4(%ebp), %eax
  17947. movl %eax, 0(%esp)
  17948. movl $strbuf+3360, %eax
  17949. movl %eax, 4(%esp)
  17950. call fputs
  17951. addl $8, %esp
  17952. leave
  17953. ret
  17954. compile_logical_expression:
  17955. pushl %ebp
  17956. movl %esp, %ebp
  17957. subl $12, %esp
  17958. subl $4, %esp
  17959. movl 8(%ebp), %eax
  17960. movl %eax, 0(%esp)
  17961. call compiler_output_chan
  17962. addl $4, %esp
  17963. movl %eax, -4(%ebp)
  17964. subl $4, %esp
  17965. movl 8(%ebp), %eax
  17966. movl %eax, 0(%esp)
  17967. call compiler_new_label
  17968. addl $4, %esp
  17969. movl %eax, -8(%ebp)
  17970. subl $4, %esp
  17971. movl 8(%ebp), %eax
  17972. movl %eax, 0(%esp)
  17973. call compiler_new_label
  17974. addl $4, %esp
  17975. movl %eax, -12(%ebp)
  17976. subl $16, %esp
  17977. movl 8(%ebp), %eax
  17978. movl %eax, 0(%esp)
  17979. movl 12(%ebp), %eax
  17980. pushl %edx
  17981. movl %eax, %edx
  17982. movl $2, %eax
  17983. leal (%edx,%eax,4), %eax
  17984. popl %edx
  17985. movl (%eax), %eax
  17986. movl %eax, 4(%esp)
  17987. movl 16(%ebp), %eax
  17988. movl %eax, 8(%esp)
  17989. movl -8(%ebp), %eax
  17990. movl %eax, 12(%esp)
  17991. call compile_logical_expression_operand
  17992. addl $16, %esp
  17993. subl $16, %esp
  17994. movl 8(%ebp), %eax
  17995. movl %eax, 0(%esp)
  17996. movl 12(%ebp), %eax
  17997. pushl %edx
  17998. movl %eax, %edx
  17999. movl $3, %eax
  18000. leal (%edx,%eax,4), %eax
  18001. popl %edx
  18002. movl (%eax), %eax
  18003. movl %eax, 4(%esp)
  18004. movl 16(%ebp), %eax
  18005. movl %eax, 8(%esp)
  18006. movl -8(%ebp), %eax
  18007. movl %eax, 12(%esp)
  18008. call compile_logical_expression_operand
  18009. addl $16, %esp
  18010. movl 16(%ebp), %eax
  18011. cmpl $0, %eax
  18012. je _label527
  18013. subl $8, %esp
  18014. movl -4(%ebp), %eax
  18015. movl %eax, 0(%esp)
  18016. movl $strbuf+3384, %eax
  18017. movl %eax, 4(%esp)
  18018. call fputs
  18019. addl $8, %esp
  18020. jmp _label526
  18021. _label527:
  18022. subl $8, %esp
  18023. movl -4(%ebp), %eax
  18024. movl %eax, 0(%esp)
  18025. movl $strbuf+3400, %eax
  18026. movl %eax, 4(%esp)
  18027. call fputs
  18028. addl $8, %esp
  18029. _label526:
  18030. subl $8, %esp
  18031. movl -4(%ebp), %eax
  18032. movl %eax, 0(%esp)
  18033. movl $strbuf+2473, %eax
  18034. movl %eax, 4(%esp)
  18035. call fputs
  18036. addl $8, %esp
  18037. subl $8, %esp
  18038. movl -4(%ebp), %eax
  18039. movl %eax, 0(%esp)
  18040. movl -12(%ebp), %eax
  18041. movl %eax, 4(%esp)
  18042. call fputlabel
  18043. addl $8, %esp
  18044. subl $8, %esp
  18045. movl -4(%ebp), %eax
  18046. movl %eax, 0(%esp)
  18047. movl $10, %eax
  18048. movl %eax, 4(%esp)
  18049. call fputc
  18050. addl $8, %esp
  18051. subl $8, %esp
  18052. movl -4(%ebp), %eax
  18053. movl %eax, 0(%esp)
  18054. movl -8(%ebp), %eax
  18055. movl %eax, 4(%esp)
  18056. call fputlabeldef
  18057. addl $8, %esp
  18058. movl 16(%ebp), %eax
  18059. cmpl $0, %eax
  18060. je _label529
  18061. subl $8, %esp
  18062. movl -4(%ebp), %eax
  18063. movl %eax, 0(%esp)
  18064. movl $strbuf+3400, %eax
  18065. movl %eax, 4(%esp)
  18066. call fputs
  18067. addl $8, %esp
  18068. jmp _label528
  18069. _label529:
  18070. subl $8, %esp
  18071. movl -4(%ebp), %eax
  18072. movl %eax, 0(%esp)
  18073. movl $strbuf+3384, %eax
  18074. movl %eax, 4(%esp)
  18075. call fputs
  18076. addl $8, %esp
  18077. _label528:
  18078. subl $8, %esp
  18079. movl -4(%ebp), %eax
  18080. movl %eax, 0(%esp)
  18081. movl -12(%ebp), %eax
  18082. movl %eax, 4(%esp)
  18083. call fputlabeldef
  18084. addl $8, %esp
  18085. leave
  18086. ret
  18087. compile_logical_expression_operand:
  18088. pushl %ebp
  18089. movl %esp, %ebp
  18090. subl $4, %esp
  18091. subl $4, %esp
  18092. movl 8(%ebp), %eax
  18093. movl %eax, 0(%esp)
  18094. call compiler_output_chan
  18095. addl $4, %esp
  18096. movl %eax, -4(%ebp)
  18097. movl 12(%ebp), %eax
  18098. movl %eax, %edx
  18099. movl $0, %eax
  18100. leal (%edx,%eax,4), %eax
  18101. movl (%eax), %eax
  18102. pushl %eax
  18103. movl $31, %eax
  18104. movl %eax, %ebx
  18105. popl %eax
  18106. subl %ebx, %eax
  18107. movl %eax, %edx
  18108. movl 16(%ebp), %eax
  18109. cmpl %eax, %edx
  18110. sete %al
  18111. movzbl %al, %eax
  18112. cmpl $0, %eax
  18113. je _label530
  18114. subl $16, %esp
  18115. movl 8(%ebp), %eax
  18116. movl %eax, 0(%esp)
  18117. movl 12(%ebp), %eax
  18118. pushl %edx
  18119. movl %eax, %edx
  18120. movl $2, %eax
  18121. leal (%edx,%eax,4), %eax
  18122. popl %edx
  18123. movl (%eax), %eax
  18124. movl %eax, 4(%esp)
  18125. movl 16(%ebp), %eax
  18126. movl %eax, 8(%esp)
  18127. movl 20(%ebp), %eax
  18128. movl %eax, 12(%esp)
  18129. call compile_logical_expression_operand
  18130. addl $16, %esp
  18131. subl $16, %esp
  18132. movl 8(%ebp), %eax
  18133. movl %eax, 0(%esp)
  18134. movl 12(%ebp), %eax
  18135. pushl %edx
  18136. movl %eax, %edx
  18137. movl $3, %eax
  18138. leal (%edx,%eax,4), %eax
  18139. popl %edx
  18140. movl (%eax), %eax
  18141. movl %eax, 4(%esp)
  18142. movl 16(%ebp), %eax
  18143. movl %eax, 8(%esp)
  18144. movl 20(%ebp), %eax
  18145. movl %eax, 12(%esp)
  18146. call compile_logical_expression_operand
  18147. addl $16, %esp
  18148. leave
  18149. ret
  18150. _label530:
  18151. subl $8, %esp
  18152. movl 8(%ebp), %eax
  18153. movl %eax, 0(%esp)
  18154. movl 12(%ebp), %eax
  18155. movl %eax, 4(%esp)
  18156. call compile_expression
  18157. addl $8, %esp
  18158. subl $8, %esp
  18159. movl -4(%ebp), %eax
  18160. movl %eax, 0(%esp)
  18161. movl $strbuf+2479, %eax
  18162. movl %eax, 4(%esp)
  18163. call fputs
  18164. addl $8, %esp
  18165. movl 16(%ebp), %eax
  18166. cmpl $0, %eax
  18167. je _label532
  18168. subl $8, %esp
  18169. movl -4(%ebp), %eax
  18170. movl %eax, 0(%esp)
  18171. movl $strbuf+2500, %eax
  18172. movl %eax, 4(%esp)
  18173. call fputs
  18174. addl $8, %esp
  18175. jmp _label531
  18176. _label532:
  18177. subl $8, %esp
  18178. movl -4(%ebp), %eax
  18179. movl %eax, 0(%esp)
  18180. movl $strbuf+2495, %eax
  18181. movl %eax, 4(%esp)
  18182. call fputs
  18183. addl $8, %esp
  18184. _label531:
  18185. subl $8, %esp
  18186. movl -4(%ebp), %eax
  18187. movl %eax, 0(%esp)
  18188. movl 20(%ebp), %eax
  18189. movl %eax, 4(%esp)
  18190. call fputlabel
  18191. addl $8, %esp
  18192. subl $8, %esp
  18193. movl -4(%ebp), %eax
  18194. movl %eax, 0(%esp)
  18195. movl $10, %eax
  18196. movl %eax, 4(%esp)
  18197. call fputc
  18198. addl $8, %esp
  18199. leave
  18200. ret
  18201. compile_ternary_expression:
  18202. pushl %ebp
  18203. movl %esp, %ebp
  18204. subl $12, %esp
  18205. subl $4, %esp
  18206. movl 8(%ebp), %eax
  18207. movl %eax, 0(%esp)
  18208. call compiler_output_chan
  18209. addl $4, %esp
  18210. movl %eax, -4(%ebp)
  18211. subl $4, %esp
  18212. movl 8(%ebp), %eax
  18213. movl %eax, 0(%esp)
  18214. call compiler_new_label
  18215. addl $4, %esp
  18216. movl %eax, -8(%ebp)
  18217. subl $4, %esp
  18218. movl 8(%ebp), %eax
  18219. movl %eax, 0(%esp)
  18220. call compiler_new_label
  18221. addl $4, %esp
  18222. movl %eax, -12(%ebp)
  18223. subl $8, %esp
  18224. movl 8(%ebp), %eax
  18225. movl %eax, 0(%esp)
  18226. movl 12(%ebp), %eax
  18227. pushl %edx
  18228. movl %eax, %edx
  18229. movl $2, %eax
  18230. leal (%edx,%eax,4), %eax
  18231. popl %edx
  18232. movl (%eax), %eax
  18233. movl %eax, 4(%esp)
  18234. call compile_expression
  18235. addl $8, %esp
  18236. subl $8, %esp
  18237. movl -4(%ebp), %eax
  18238. movl %eax, 0(%esp)
  18239. movl $strbuf+2479, %eax
  18240. movl %eax, 4(%esp)
  18241. call fputs
  18242. addl $8, %esp
  18243. subl $8, %esp
  18244. movl -4(%ebp), %eax
  18245. movl %eax, 0(%esp)
  18246. movl $strbuf+2495, %eax
  18247. movl %eax, 4(%esp)
  18248. call fputs
  18249. addl $8, %esp
  18250. subl $8, %esp
  18251. movl -4(%ebp), %eax
  18252. movl %eax, 0(%esp)
  18253. movl -8(%ebp), %eax
  18254. movl %eax, 4(%esp)
  18255. call fputlabel
  18256. addl $8, %esp
  18257. subl $8, %esp
  18258. movl -4(%ebp), %eax
  18259. movl %eax, 0(%esp)
  18260. movl $10, %eax
  18261. movl %eax, 4(%esp)
  18262. call fputc
  18263. addl $8, %esp
  18264. subl $8, %esp
  18265. movl 8(%ebp), %eax
  18266. movl %eax, 0(%esp)
  18267. movl 12(%ebp), %eax
  18268. pushl %edx
  18269. movl %eax, %edx
  18270. movl $3, %eax
  18271. leal (%edx,%eax,4), %eax
  18272. popl %edx
  18273. movl (%eax), %eax
  18274. movl %eax, 4(%esp)
  18275. call compile_expression
  18276. addl $8, %esp
  18277. subl $8, %esp
  18278. movl -4(%ebp), %eax
  18279. movl %eax, 0(%esp)
  18280. movl $strbuf+2473, %eax
  18281. movl %eax, 4(%esp)
  18282. call fputs
  18283. addl $8, %esp
  18284. subl $8, %esp
  18285. movl -4(%ebp), %eax
  18286. movl %eax, 0(%esp)
  18287. movl -12(%ebp), %eax
  18288. movl %eax, 4(%esp)
  18289. call fputlabel
  18290. addl $8, %esp
  18291. subl $8, %esp
  18292. movl -4(%ebp), %eax
  18293. movl %eax, 0(%esp)
  18294. movl $10, %eax
  18295. movl %eax, 4(%esp)
  18296. call fputc
  18297. addl $8, %esp
  18298. subl $8, %esp
  18299. movl -4(%ebp), %eax
  18300. movl %eax, 0(%esp)
  18301. movl -8(%ebp), %eax
  18302. movl %eax, 4(%esp)
  18303. call fputlabeldef
  18304. addl $8, %esp
  18305. subl $8, %esp
  18306. movl 8(%ebp), %eax
  18307. movl %eax, 0(%esp)
  18308. movl 12(%ebp), %eax
  18309. pushl %edx
  18310. movl %eax, %edx
  18311. movl $4, %eax
  18312. leal (%edx,%eax,4), %eax
  18313. popl %edx
  18314. movl (%eax), %eax
  18315. movl %eax, 4(%esp)
  18316. call compile_expression
  18317. addl $8, %esp
  18318. subl $8, %esp
  18319. movl -4(%ebp), %eax
  18320. movl %eax, 0(%esp)
  18321. movl -12(%ebp), %eax
  18322. movl %eax, 4(%esp)
  18323. call fputlabeldef
  18324. addl $8, %esp
  18325. leave
  18326. ret
  18327. compile_assignment_expression:
  18328. pushl %ebp
  18329. movl %esp, %ebp
  18330. subl $16, %esp
  18331. subl $4, %esp
  18332. movl 8(%ebp), %eax
  18333. movl %eax, 0(%esp)
  18334. call compiler_output_chan
  18335. addl $4, %esp
  18336. movl %eax, -4(%ebp)
  18337. movl 12(%ebp), %eax
  18338. movl %eax, %edx
  18339. movl $0, %eax
  18340. leal (%edx,%eax,4), %eax
  18341. movl (%eax), %eax
  18342. movl %eax, -8(%ebp)
  18343. movl 12(%ebp), %eax
  18344. movl %eax, %edx
  18345. movl $2, %eax
  18346. leal (%edx,%eax,4), %eax
  18347. movl (%eax), %eax
  18348. movl %eax, -12(%ebp)
  18349. movl -12(%ebp), %eax
  18350. movl %eax, %edx
  18351. movl $0, %eax
  18352. leal (%edx,%eax,4), %eax
  18353. movl (%eax), %eax
  18354. movl %eax, -16(%ebp)
  18355. movl -16(%ebp), %eax
  18356. movl %eax, %edx
  18357. movl $8, %eax
  18358. cmpl %eax, %edx
  18359. sete %al
  18360. movzbl %al, %eax
  18361. cmpl $0, %eax
  18362. je _label534
  18363. subl $8, %esp
  18364. movl 8(%ebp), %eax
  18365. movl %eax, 0(%esp)
  18366. movl -12(%ebp), %eax
  18367. movl %eax, 4(%esp)
  18368. call compile_address_index_address
  18369. addl $8, %esp
  18370. subl $8, %esp
  18371. movl 8(%ebp), %eax
  18372. movl %eax, 0(%esp)
  18373. movl $1, %eax
  18374. movl %eax, 4(%esp)
  18375. call compiler_allocate_register
  18376. addl $8, %esp
  18377. subl $8, %esp
  18378. movl -4(%ebp), %eax
  18379. movl %eax, 0(%esp)
  18380. movl $strbuf+2743, %eax
  18381. movl %eax, 4(%esp)
  18382. call fputs
  18383. addl $8, %esp
  18384. jmp _label533
  18385. _label534:
  18386. movl -16(%ebp), %eax
  18387. movl %eax, %edx
  18388. movl $13, %eax
  18389. cmpl %eax, %edx
  18390. sete %al
  18391. movzbl %al, %eax
  18392. cmpl $0, %eax
  18393. je _label533
  18394. subl $8, %esp
  18395. movl 8(%ebp), %eax
  18396. movl %eax, 0(%esp)
  18397. movl -12(%ebp), %eax
  18398. pushl %edx
  18399. movl %eax, %edx
  18400. movl $2, %eax
  18401. leal (%edx,%eax,4), %eax
  18402. popl %edx
  18403. movl (%eax), %eax
  18404. movl %eax, 4(%esp)
  18405. call compile_expression
  18406. addl $8, %esp
  18407. subl $8, %esp
  18408. movl 8(%ebp), %eax
  18409. movl %eax, 0(%esp)
  18410. movl $1, %eax
  18411. movl %eax, 4(%esp)
  18412. call compiler_allocate_register
  18413. addl $8, %esp
  18414. subl $8, %esp
  18415. movl -4(%ebp), %eax
  18416. movl %eax, 0(%esp)
  18417. movl $strbuf+2743, %eax
  18418. movl %eax, 4(%esp)
  18419. call fputs
  18420. addl $8, %esp
  18421. _label533:
  18422. movl -8(%ebp), %eax
  18423. movl %eax, %edx
  18424. movl $33, %eax
  18425. cmpl %eax, %edx
  18426. sete %al
  18427. movzbl %al, %eax
  18428. cmpl $0, %eax
  18429. je _label536
  18430. subl $8, %esp
  18431. movl 8(%ebp), %eax
  18432. movl %eax, 0(%esp)
  18433. movl 12(%ebp), %eax
  18434. pushl %edx
  18435. movl %eax, %edx
  18436. movl $3, %eax
  18437. leal (%edx,%eax,4), %eax
  18438. popl %edx
  18439. movl (%eax), %eax
  18440. movl %eax, 4(%esp)
  18441. call compile_expression
  18442. addl $8, %esp
  18443. jmp _label535
  18444. _label536:
  18445. movl -8(%ebp), %eax
  18446. movl %eax, %edx
  18447. movl $44, %eax
  18448. cmpl %eax, %edx
  18449. setge %al
  18450. movzbl %al, %eax
  18451. cmpl $0, %eax
  18452. je _label537
  18453. movl -8(%ebp), %eax
  18454. movl %eax, %edx
  18455. movl $47, %eax
  18456. cmpl %eax, %edx
  18457. setle %al
  18458. movzbl %al, %eax
  18459. cmpl $0, %eax
  18460. je _label537
  18461. movl $1, %eax
  18462. jmp _label538
  18463. _label537:
  18464. movl $0, %eax
  18465. _label538:
  18466. cmpl $0, %eax
  18467. je _label539
  18468. subl $8, %esp
  18469. movl 8(%ebp), %eax
  18470. movl %eax, 0(%esp)
  18471. movl -12(%ebp), %eax
  18472. movl %eax, 4(%esp)
  18473. call compile_expression
  18474. addl $8, %esp
  18475. movl -8(%ebp), %eax
  18476. movl %eax, %edx
  18477. movl $44, %eax
  18478. cmpl %eax, %edx
  18479. sete %al
  18480. movzbl %al, %eax
  18481. cmpl $0, %eax
  18482. je _label541
  18483. subl $8, %esp
  18484. movl -4(%ebp), %eax
  18485. movl %eax, 0(%esp)
  18486. movl $strbuf+3416, %eax
  18487. movl %eax, 4(%esp)
  18488. call fputs
  18489. addl $8, %esp
  18490. jmp _label540
  18491. _label541:
  18492. movl -8(%ebp), %eax
  18493. movl %eax, %edx
  18494. movl $45, %eax
  18495. cmpl %eax, %edx
  18496. sete %al
  18497. movzbl %al, %eax
  18498. cmpl $0, %eax
  18499. je _label542
  18500. subl $8, %esp
  18501. movl -4(%ebp), %eax
  18502. movl %eax, 0(%esp)
  18503. movl $strbuf+3432, %eax
  18504. movl %eax, 4(%esp)
  18505. call fputs
  18506. addl $8, %esp
  18507. jmp _label540
  18508. _label542:
  18509. subl $8, %esp
  18510. movl 8(%ebp), %eax
  18511. movl %eax, 0(%esp)
  18512. movl $3, %eax
  18513. movl %eax, 4(%esp)
  18514. call compiler_allocate_register
  18515. addl $8, %esp
  18516. subl $8, %esp
  18517. movl -4(%ebp), %eax
  18518. movl %eax, 0(%esp)
  18519. movl $strbuf+2850, %eax
  18520. movl %eax, 4(%esp)
  18521. call fputs
  18522. addl $8, %esp
  18523. movl -8(%ebp), %eax
  18524. movl %eax, %edx
  18525. movl $46, %eax
  18526. cmpl %eax, %edx
  18527. sete %al
  18528. movzbl %al, %eax
  18529. cmpl $0, %eax
  18530. je _label543
  18531. subl $8, %esp
  18532. movl -4(%ebp), %eax
  18533. movl %eax, 0(%esp)
  18534. movl $45, %eax
  18535. movl %eax, 4(%esp)
  18536. call fputc
  18537. addl $8, %esp
  18538. _label543:
  18539. subl $8, %esp
  18540. movl -4(%ebp), %eax
  18541. movl %eax, 0(%esp)
  18542. movl $strbuf+3448, %eax
  18543. movl %eax, 4(%esp)
  18544. call fputs
  18545. addl $8, %esp
  18546. _label540:
  18547. jmp _label535
  18548. _label539:
  18549. subl $16, %esp
  18550. movl 8(%ebp), %eax
  18551. movl %eax, 0(%esp)
  18552. movl -8(%ebp), %eax
  18553. pushl %ebx
  18554. pushl %eax
  18555. movl $34, %eax
  18556. movl %eax, %ebx
  18557. popl %eax
  18558. subl %ebx, %eax
  18559. popl %ebx
  18560. pushl %ebx
  18561. movl %eax, %ebx
  18562. movl $15, %eax
  18563. addl %ebx, %eax
  18564. popl %ebx
  18565. movl %eax, 4(%esp)
  18566. movl -12(%ebp), %eax
  18567. movl %eax, 8(%esp)
  18568. movl 12(%ebp), %eax
  18569. pushl %edx
  18570. movl %eax, %edx
  18571. movl $3, %eax
  18572. leal (%edx,%eax,4), %eax
  18573. popl %edx
  18574. movl (%eax), %eax
  18575. movl %eax, 12(%esp)
  18576. call compile_bitwise_arithmetic_expression
  18577. addl $16, %esp
  18578. _label535:
  18579. subl $8, %esp
  18580. movl -4(%ebp), %eax
  18581. movl %eax, 0(%esp)
  18582. movl $strbuf+2895, %eax
  18583. movl %eax, 4(%esp)
  18584. call fputs
  18585. addl $8, %esp
  18586. movl -8(%ebp), %eax
  18587. movl %eax, %edx
  18588. movl $46, %eax
  18589. cmpl %eax, %edx
  18590. sete %al
  18591. movzbl %al, %eax
  18592. cmpl $0, %eax
  18593. jne _label545
  18594. movl -8(%ebp), %eax
  18595. movl %eax, %edx
  18596. movl $47, %eax
  18597. cmpl %eax, %edx
  18598. sete %al
  18599. movzbl %al, %eax
  18600. cmpl $0, %eax
  18601. jne _label545
  18602. movl $0, %eax
  18603. jmp _label546
  18604. _label545:
  18605. movl $1, %eax
  18606. _label546:
  18607. cmpl $0, %eax
  18608. je _label547
  18609. subl $8, %esp
  18610. movl -4(%ebp), %eax
  18611. movl %eax, 0(%esp)
  18612. movl $strbuf+2190, %eax
  18613. movl %eax, 4(%esp)
  18614. call fputs
  18615. addl $8, %esp
  18616. jmp _label544
  18617. _label547:
  18618. subl $8, %esp
  18619. movl -4(%ebp), %eax
  18620. movl %eax, 0(%esp)
  18621. movl $strbuf+2175, %eax
  18622. movl %eax, 4(%esp)
  18623. call fputs
  18624. addl $8, %esp
  18625. _label544:
  18626. subl $8, %esp
  18627. movl -4(%ebp), %eax
  18628. movl %eax, 0(%esp)
  18629. movl $strbuf+3463, %eax
  18630. movl %eax, 4(%esp)
  18631. call fputs
  18632. addl $8, %esp
  18633. movl -16(%ebp), %eax
  18634. movl %eax, %edx
  18635. movl $2, %eax
  18636. cmpl %eax, %edx
  18637. sete %al
  18638. movzbl %al, %eax
  18639. cmpl $0, %eax
  18640. je _label549
  18641. subl $8, %esp
  18642. movl -4(%ebp), %eax
  18643. movl %eax, 0(%esp)
  18644. movl -12(%ebp), %eax
  18645. pushl %edx
  18646. movl %eax, %edx
  18647. movl $2, %eax
  18648. leal (%edx,%eax,4), %eax
  18649. popl %edx
  18650. movl (%eax), %eax
  18651. movl %eax, 4(%esp)
  18652. call fputs
  18653. addl $8, %esp
  18654. jmp _label548
  18655. _label549:
  18656. movl -16(%ebp), %eax
  18657. movl %eax, %edx
  18658. movl $3, %eax
  18659. cmpl %eax, %edx
  18660. sete %al
  18661. movzbl %al, %eax
  18662. cmpl $0, %eax
  18663. je _label550
  18664. subl $8, %esp
  18665. movl -4(%ebp), %eax
  18666. movl %eax, 0(%esp)
  18667. movl -12(%ebp), %eax
  18668. pushl %edx
  18669. movl %eax, %edx
  18670. movl $2, %eax
  18671. leal (%edx,%eax,4), %eax
  18672. popl %edx
  18673. movl (%eax), %eax
  18674. movl %eax, 4(%esp)
  18675. call fputarg
  18676. addl $8, %esp
  18677. jmp _label548
  18678. _label550:
  18679. movl -16(%ebp), %eax
  18680. movl %eax, %edx
  18681. movl $4, %eax
  18682. cmpl %eax, %edx
  18683. sete %al
  18684. movzbl %al, %eax
  18685. cmpl $0, %eax
  18686. je _label551
  18687. subl $8, %esp
  18688. movl -4(%ebp), %eax
  18689. movl %eax, 0(%esp)
  18690. movl -12(%ebp), %eax
  18691. pushl %edx
  18692. movl %eax, %edx
  18693. movl $2, %eax
  18694. leal (%edx,%eax,4), %eax
  18695. popl %edx
  18696. movl (%eax), %eax
  18697. movl %eax, 4(%esp)
  18698. call fputvar
  18699. addl $8, %esp
  18700. jmp _label548
  18701. _label551:
  18702. movl -16(%ebp), %eax
  18703. movl %eax, %edx
  18704. movl $8, %eax
  18705. cmpl %eax, %edx
  18706. sete %al
  18707. movzbl %al, %eax
  18708. cmpl $0, %eax
  18709. jne _label552
  18710. movl -16(%ebp), %eax
  18711. movl %eax, %edx
  18712. movl $13, %eax
  18713. cmpl %eax, %edx
  18714. sete %al
  18715. movzbl %al, %eax
  18716. cmpl $0, %eax
  18717. jne _label552
  18718. movl $0, %eax
  18719. jmp _label553
  18720. _label552:
  18721. movl $1, %eax
  18722. _label553:
  18723. cmpl $0, %eax
  18724. je _label554
  18725. subl $8, %esp
  18726. movl -4(%ebp), %eax
  18727. movl %eax, 0(%esp)
  18728. movl $strbuf+3466, %eax
  18729. movl %eax, 4(%esp)
  18730. call fputs
  18731. addl $8, %esp
  18732. jmp _label548
  18733. _label554:
  18734. subl $12, %esp
  18735. movl 8(%ebp), %eax
  18736. movl %eax, 0(%esp)
  18737. movl 12(%ebp), %eax
  18738. movl %eax, 4(%esp)
  18739. movl $strbuf+3473, %eax
  18740. movl %eax, 8(%esp)
  18741. call compiler_error
  18742. addl $12, %esp
  18743. _label548:
  18744. subl $8, %esp
  18745. movl -4(%ebp), %eax
  18746. movl %eax, 0(%esp)
  18747. movl $10, %eax
  18748. movl %eax, 4(%esp)
  18749. call fputc
  18750. addl $8, %esp
  18751. movl -8(%ebp), %eax
  18752. movl %eax, %edx
  18753. movl $46, %eax
  18754. cmpl %eax, %edx
  18755. sete %al
  18756. movzbl %al, %eax
  18757. cmpl $0, %eax
  18758. jne _label556
  18759. movl -8(%ebp), %eax
  18760. movl %eax, %edx
  18761. movl $47, %eax
  18762. cmpl %eax, %edx
  18763. sete %al
  18764. movzbl %al, %eax
  18765. cmpl $0, %eax
  18766. jne _label556
  18767. movl $0, %eax
  18768. jmp _label557
  18769. _label556:
  18770. movl $1, %eax
  18771. _label557:
  18772. cmpl $0, %eax
  18773. je _label555
  18774. subl $8, %esp
  18775. movl 8(%ebp), %eax
  18776. movl %eax, 0(%esp)
  18777. movl $3, %eax
  18778. movl %eax, 4(%esp)
  18779. call compiler_free_register
  18780. addl $8, %esp
  18781. _label555:
  18782. movl -16(%ebp), %eax
  18783. movl %eax, %edx
  18784. movl $8, %eax
  18785. cmpl %eax, %edx
  18786. sete %al
  18787. movzbl %al, %eax
  18788. cmpl $0, %eax
  18789. jne _label559
  18790. movl -16(%ebp), %eax
  18791. movl %eax, %edx
  18792. movl $13, %eax
  18793. cmpl %eax, %edx
  18794. sete %al
  18795. movzbl %al, %eax
  18796. cmpl $0, %eax
  18797. jne _label559
  18798. movl $0, %eax
  18799. jmp _label560
  18800. _label559:
  18801. movl $1, %eax
  18802. _label560:
  18803. cmpl $0, %eax
  18804. je _label558
  18805. subl $8, %esp
  18806. movl 8(%ebp), %eax
  18807. movl %eax, 0(%esp)
  18808. movl $1, %eax
  18809. movl %eax, 4(%esp)
  18810. call compiler_free_register
  18811. addl $8, %esp
  18812. _label558:
  18813. leave
  18814. ret
  18815. compile_integer_expression:
  18816. pushl %ebp
  18817. movl %esp, %ebp
  18818. subl $4, %esp
  18819. subl $4, %esp
  18820. movl 8(%ebp), %eax
  18821. movl %eax, 0(%esp)
  18822. call compiler_output_chan
  18823. addl $4, %esp
  18824. movl %eax, -4(%ebp)
  18825. subl $8, %esp
  18826. movl -4(%ebp), %eax
  18827. movl %eax, 0(%esp)
  18828. movl $strbuf+3042, %eax
  18829. movl %eax, 4(%esp)
  18830. call fputs
  18831. addl $8, %esp
  18832. subl $8, %esp
  18833. movl -4(%ebp), %eax
  18834. movl %eax, 0(%esp)
  18835. movl 12(%ebp), %eax
  18836. pushl %edx
  18837. movl %eax, %edx
  18838. movl $2, %eax
  18839. leal (%edx,%eax,4), %eax
  18840. popl %edx
  18841. movl (%eax), %eax
  18842. movl %eax, 4(%esp)
  18843. call fputd
  18844. addl $8, %esp
  18845. subl $8, %esp
  18846. movl -4(%ebp), %eax
  18847. movl %eax, 0(%esp)
  18848. movl $strbuf+2902, %eax
  18849. movl %eax, 4(%esp)
  18850. call fputs
  18851. addl $8, %esp
  18852. leave
  18853. ret
  18854. compile_string_expression:
  18855. pushl %ebp
  18856. movl %esp, %ebp
  18857. subl $4, %esp
  18858. subl $4, %esp
  18859. movl 8(%ebp), %eax
  18860. movl %eax, 0(%esp)
  18861. call compiler_output_chan
  18862. addl $4, %esp
  18863. movl %eax, -4(%ebp)
  18864. subl $8, %esp
  18865. movl -4(%ebp), %eax
  18866. movl %eax, 0(%esp)
  18867. movl $strbuf+3511, %eax
  18868. movl %eax, 4(%esp)
  18869. call fputs
  18870. addl $8, %esp
  18871. subl $8, %esp
  18872. movl -4(%ebp), %eax
  18873. movl %eax, 0(%esp)
  18874. movl 12(%ebp), %eax
  18875. pushl %edx
  18876. movl %eax, %edx
  18877. movl $2, %eax
  18878. leal (%edx,%eax,4), %eax
  18879. popl %edx
  18880. movl (%eax), %eax
  18881. movl %eax, 4(%esp)
  18882. call fputd
  18883. addl $8, %esp
  18884. subl $8, %esp
  18885. movl -4(%ebp), %eax
  18886. movl %eax, 0(%esp)
  18887. movl $strbuf+2902, %eax
  18888. movl %eax, 4(%esp)
  18889. call fputs
  18890. addl $8, %esp
  18891. leave
  18892. ret
  18893. compile_simple_value:
  18894. pushl %ebp
  18895. movl %esp, %ebp
  18896. subl $8, %esp
  18897. subl $4, %esp
  18898. movl 8(%ebp), %eax
  18899. movl %eax, 0(%esp)
  18900. call compiler_output_chan
  18901. addl $4, %esp
  18902. movl %eax, -4(%ebp)
  18903. movl 12(%ebp), %eax
  18904. movl %eax, %edx
  18905. movl $0, %eax
  18906. leal (%edx,%eax,4), %eax
  18907. movl (%eax), %eax
  18908. movl %eax, -8(%ebp)
  18909. movl -8(%ebp), %eax
  18910. movl %eax, %edx
  18911. movl $0, %eax
  18912. cmpl %eax, %edx
  18913. sete %al
  18914. movzbl %al, %eax
  18915. cmpl $0, %eax
  18916. je _label561
  18917. subl $8, %esp
  18918. movl -4(%ebp), %eax
  18919. movl %eax, 0(%esp)
  18920. movl 12(%ebp), %eax
  18921. pushl %edx
  18922. movl %eax, %edx
  18923. movl $2, %eax
  18924. leal (%edx,%eax,4), %eax
  18925. popl %edx
  18926. movl (%eax), %eax
  18927. movl %eax, 4(%esp)
  18928. call fputd
  18929. addl $8, %esp
  18930. leave
  18931. ret
  18932. _label561:
  18933. movl -8(%ebp), %eax
  18934. movl %eax, %edx
  18935. movl $1, %eax
  18936. cmpl %eax, %edx
  18937. sete %al
  18938. movzbl %al, %eax
  18939. cmpl $0, %eax
  18940. je _label562
  18941. subl $8, %esp
  18942. movl -4(%ebp), %eax
  18943. movl %eax, 0(%esp)
  18944. movl $strbuf+3526, %eax
  18945. movl %eax, 4(%esp)
  18946. call fputs
  18947. addl $8, %esp
  18948. subl $8, %esp
  18949. movl -4(%ebp), %eax
  18950. movl %eax, 0(%esp)
  18951. movl 12(%ebp), %eax
  18952. pushl %edx
  18953. movl %eax, %edx
  18954. movl $2, %eax
  18955. leal (%edx,%eax,4), %eax
  18956. popl %edx
  18957. movl (%eax), %eax
  18958. movl %eax, 4(%esp)
  18959. call fputd
  18960. addl $8, %esp
  18961. leave
  18962. ret
  18963. _label562:
  18964. movl -8(%ebp), %eax
  18965. movl %eax, %edx
  18966. movl $2, %eax
  18967. cmpl %eax, %edx
  18968. sete %al
  18969. movzbl %al, %eax
  18970. cmpl $0, %eax
  18971. je _label563
  18972. subl $8, %esp
  18973. movl -4(%ebp), %eax
  18974. movl %eax, 0(%esp)
  18975. movl 12(%ebp), %eax
  18976. pushl %edx
  18977. movl %eax, %edx
  18978. movl $2, %eax
  18979. leal (%edx,%eax,4), %eax
  18980. popl %edx
  18981. movl (%eax), %eax
  18982. movl %eax, 4(%esp)
  18983. call fputs
  18984. addl $8, %esp
  18985. leave
  18986. ret
  18987. _label563:
  18988. subl $12, %esp
  18989. movl 8(%ebp), %eax
  18990. movl %eax, 0(%esp)
  18991. movl 12(%ebp), %eax
  18992. movl %eax, 4(%esp)
  18993. movl $strbuf+3534, %eax
  18994. movl %eax, 8(%esp)
  18995. call compiler_error
  18996. addl $12, %esp
  18997. leave
  18998. ret
  18999. usage:
  19000. pushl %ebp
  19001. movl %esp, %ebp
  19002. subl $4, %esp
  19003. movl $strbuf+3574, %eax
  19004. movl %eax, 0(%esp)
  19005. call eputs
  19006. addl $4, %esp
  19007. subl $4, %esp
  19008. movl 8(%ebp), %eax
  19009. movl %eax, 0(%esp)
  19010. call eputs
  19011. addl $4, %esp
  19012. subl $4, %esp
  19013. movl $strbuf+3582, %eax
  19014. movl %eax, 0(%esp)
  19015. call eputs
  19016. addl $4, %esp
  19017. leave
  19018. ret
  19019. main:
  19020. pushl %ebp
  19021. movl %esp, %ebp
  19022. subl $28, %esp
  19023. movl 8(%ebp), %eax
  19024. movl %eax, %edx
  19025. movl $2, %eax
  19026. cmpl %eax, %edx
  19027. setl %al
  19028. movzbl %al, %eax
  19029. cmpl $0, %eax
  19030. je _label564
  19031. subl $4, %esp
  19032. movl 12(%ebp), %eax
  19033. pushl %edx
  19034. movl %eax, %edx
  19035. movl $0, %eax
  19036. leal (%edx,%eax,4), %eax
  19037. popl %edx
  19038. movl (%eax), %eax
  19039. movl %eax, 0(%esp)
  19040. call usage
  19041. addl $4, %esp
  19042. movl $1, %eax
  19043. leave
  19044. ret
  19045. _label564:
  19046. subl $4, %esp
  19047. movl 12(%ebp), %eax
  19048. pushl %edx
  19049. movl %eax, %edx
  19050. movl $1, %eax
  19051. leal (%edx,%eax,4), %eax
  19052. popl %edx
  19053. movl (%eax), %eax
  19054. movl %eax, 0(%esp)
  19055. call input_chan_file
  19056. addl $4, %esp
  19057. movl %eax, -4(%ebp)
  19058. subl $4, %esp
  19059. movl $strbuf+3603, %eax
  19060. movl %eax, 0(%esp)
  19061. call output_chan_file
  19062. addl $4, %esp
  19063. movl %eax, -8(%ebp)
  19064. subl $8, %esp
  19065. movl -4(%ebp), %eax
  19066. movl %eax, 0(%esp)
  19067. movl 12(%ebp), %eax
  19068. pushl %edx
  19069. movl %eax, %edx
  19070. movl $1, %eax
  19071. leal (%edx,%eax,4), %eax
  19072. popl %edx
  19073. movl (%eax), %eax
  19074. movl %eax, 4(%esp)
  19075. call lexer
  19076. addl $8, %esp
  19077. movl %eax, -12(%ebp)
  19078. call string_buffer
  19079. movl %eax, -16(%ebp)
  19080. subl $8, %esp
  19081. movl -12(%ebp), %eax
  19082. movl %eax, 0(%esp)
  19083. movl -16(%ebp), %eax
  19084. movl %eax, 4(%esp)
  19085. call parser
  19086. addl $8, %esp
  19087. movl %eax, -20(%ebp)
  19088. subl $4, %esp
  19089. movl -20(%ebp), %eax
  19090. movl %eax, 0(%esp)
  19091. call parser_parse
  19092. addl $4, %esp
  19093. movl %eax, -24(%ebp)
  19094. subl $8, %esp
  19095. movl -8(%ebp), %eax
  19096. movl %eax, 0(%esp)
  19097. movl -16(%ebp), %eax
  19098. movl %eax, 4(%esp)
  19099. call compiler
  19100. addl $8, %esp
  19101. movl %eax, -28(%ebp)
  19102. subl $8, %esp
  19103. movl -28(%ebp), %eax
  19104. movl %eax, 0(%esp)
  19105. movl -24(%ebp), %eax
  19106. movl %eax, 4(%esp)
  19107. call compiler_compile
  19108. addl $8, %esp
  19109. movl $0, %eax
  19110. leave
  19111. ret
  19112. .global _start
  19113. _start:
  19114. pushl %ebp
  19115. movl %esp, %ebp
  19116. call initialize_io
  19117. subl $4, %esp
  19118. pushl %ebx
  19119. pushl %ecx
  19120. pushl %edx
  19121. pushl %esi
  19122. pushl %edi
  19123. subl $8, %esp
  19124. leal 8(%ebp), %eax
  19125. pushl %ebx
  19126. pushl %eax
  19127. movl $4, %eax
  19128. movl %eax, %ebx
  19129. popl %eax
  19130. subl %ebx, %eax
  19131. popl %ebx
  19132. movl (%eax), %eax
  19133. movl %eax, 0(%esp)
  19134. leal 8(%ebp), %eax
  19135. movl %eax, 4(%esp)
  19136. call main
  19137. addl $8, %esp
  19138. popl %edi
  19139. popl %esi
  19140. popl %edx
  19141. popl %ecx
  19142. popl %ebx
  19143. movl %eax, 0(%esp)
  19144. call exit
  19145. addl $4, %esp
  19146. leave
  19147. ret
  19148. .section .rodata
  19149. strbuf:
  19150. .string "0123456789abcdefghijklmnopqrstuvwxyz"
  19151. .string "Couldn't open file input channel"
  19152. .string "Couldn't open file output channel"
  19153. .string "ASSERT: "
  19154. .string "assertion failed"
  19155. .string "if"
  19156. .string "else"
  19157. .string "break"
  19158. .string "continue"
  19159. .string "do"
  19160. .string "for"
  19161. .string "while"
  19162. .string "allocate"
  19163. .string "asm"
  19164. .string "return"
  19165. .string "syscall"
  19166. .string "global"
  19167. .string "goto"
  19168. .string "label"
  19169. .string "readchar"
  19170. .string "writechar"
  19171. .string "char"
  19172. .string "int"
  19173. .string "include"
  19174. .string "include_once"
  19175. .string "tried to hold two or more tokens"
  19176. .string ": "
  19177. .string "Invalid character"
  19178. .string "Unexpected second 0 char"
  19179. .string "Unexpected decimal digit (expected octal)"
  19180. .string "Unexpected hexadecimal digit (expected octal)"
  19181. .string "Unfinished hexadecimal number"
  19182. .string "Unexpected hexadecimal digit (expected decimal)"
  19183. .string "Unterminated character literal"
  19184. .string "Unterminated string literal"
  19185. .string "Unexpected assembly block close"
  19186. .string "Unexpected end of file"
  19187. .string "Syntax error - none of available top level statements matched"
  19188. .string "Invalid global statement"
  19189. .string "Global statement is not ended with semicolon"
  19190. .string "Invalid include statement"
  19191. .string "Include statement is not ended with semicolon"
  19192. .string "Macro declaration is not ended with semicolon"
  19193. .string "Invalid function arguments declaration syntax"
  19194. .string "Invalid array declaration syntax"
  19195. .string "Array statement is not ended with semicolon"
  19196. .string "Invalid type array declaration syntax"
  19197. .string "Type array statement is not ended with semicolon"
  19198. .string "Variable statement is not ended with semicolon"
  19199. .string "Invalid block statement syntax"
  19200. .string "Expression inside block is not ended with semicolon"
  19201. .string "Invalid if statement syntax"
  19202. .string "Put else branches with condition before last else branch."
  19203. .string "Invalid for statement syntax"
  19204. .string "Invalid do-while statement syntax"
  19205. .string "Do-while statement is not ended with semicolon"
  19206. .string "Invalid while statement syntax"
  19207. .string "Invalid allocate statement syntax"
  19208. .string "Allocate statement is not ended with semicolon"
  19209. .string "Invalid assembly statement syntax"
  19210. .string "Return statement is not ended with semicolon"
  19211. .string "Break/continue statement is not ended with semicolon"
  19212. .string "Invalid writechar statement"
  19213. .string "Writechar statement is not ended with semicolon"
  19214. .string "Invalidlabel statement syntax"
  19215. .string "Label statement is not ended with semicolon"
  19216. .string "Goto statement is not ended with semicolon"
  19217. .string "Incorrect ternary expression syntax"
  19218. .string "Invalid syscall expression"
  19219. .string "Too many arguments in syscall expression"
  19220. .string "Invalid readchar expression"
  19221. .string "Parantheses expression is not closed"
  19222. .string "Call expression is not closed"
  19223. .string "Index expression is not closed"
  19224. .string "Syntax error - none of available expressions matched"
  19225. .string "ERROR: string buffer is full.\n"
  19226. .string "strbuf:\n"
  19227. .string ".string "
  19228. .string "%eax"
  19229. .string "%ebx"
  19230. .string "%ecx"
  19231. .string "%edx"
  19232. .string "%esi"
  19233. .string "%edi"
  19234. .string "%ebp"
  19235. .string ".text\n"
  19236. .string ".data\n"
  19237. .string ".section .rodata\n"
  19238. .string "\tpushl "
  19239. .string "Tried to free not used register."
  19240. .string "\tpopl "
  19241. .string "Tried to pop loop from empty list."
  19242. .string "_label"
  19243. .string ":\n"
  19244. .string "ERROR: "
  19245. .string ".global "
  19246. .string "\tpushl %ebp\n"
  19247. .string "\tmovl %esp, %ebp\n"
  19248. .string "\tleave\n\tret\n"
  19249. .string ":.long "
  19250. .string "Only integers can be used for size of array"
  19251. .string ".comm "
  19252. .string "Unreachable code."
  19253. .string "\tjmp "
  19254. .string "\tcmpl $0, %eax\n"
  19255. .string "\tje "
  19256. .string "\tjne "
  19257. .string "Size must be integer in allocate statement."
  19258. .string "Size must be positive integer."
  19259. .string "\tsubl $"
  19260. .string ", %esp\n"
  19261. .string "Tried to break/continue with no loop there."
  19262. .string "\tmovl %eax, %edx\n"
  19263. .string "\taddl %eax, %edx\n"
  19264. .string "\tmovb %al, (%edx)\n"
  19265. .string "\tjmp *%eax\n"
  19266. .string "This expression can't be compiled."
  19267. .string "\tmovl %eax, %ebx\n"
  19268. .string "\tmovl %eax, "
  19269. .string "(%esp)\n"
  19270. .string "\tcall "
  19271. .string "\tcall *%ebx\n"
  19272. .string "\taddl $"
  19273. .string "\tmovl (%eax), %eax\n"
  19274. .string "\tmovl (%eax), %edx\n"
  19275. .string "\tleal "
  19276. .string "(,%eax,4), %eax\n"
  19277. .string "(%edx,%eax,4), %eax\n"
  19278. .string "\tmovl "
  19279. .string ", %eax\n"
  19280. .string "(%ebp)"
  19281. .string "\tpushl %eax\n"
  19282. .string "\tpopl %eax\n"
  19283. .string "\tint $0x80\n"
  19284. .string "\tpopl %ebp\n"
  19285. .string "\tmovsbl (%edx), %eax\n"
  19286. .string "\tnegl %eax\n"
  19287. .string "\tsete %al\n"
  19288. .string "\tmovzbl %al, %eax\n"
  19289. .string "\tnotl %eax\n"
  19290. .string "\tmovl $"
  19291. .string "Can't compile addressof for this expression."
  19292. .string "\tmovl %eax, %ecx\n"
  19293. .string "\tmovl %ebx, %eax\n"
  19294. .string "\movl $0, %edx\n"
  19295. .string "imull %ebx, %eax"
  19296. .string "divl %ebx"
  19297. .string "divl %ebx\n\tmovl %edx, %eax"
  19298. .string "addl %ebx, %eax"
  19299. .string "subl %ebx, %eax"
  19300. .string "shll %cl, %eax"
  19301. .string "shrl %cl, %eax"
  19302. .string "andl %ebx, %eax"
  19303. .string "xorl %ebx, %eax"
  19304. .string "orl %ebx, %eax"
  19305. .string "\tcmpl %eax, %edx\n"
  19306. .string "sete"
  19307. .string "setne"
  19308. .string "setl"
  19309. .string "setg"
  19310. .string "setle"
  19311. .string "setge"
  19312. .string " %al\n\tmovzbl %al, %eax\n"
  19313. .string "\tmovl $0, %eax\n"
  19314. .string "\tmovl $1, %eax\n"
  19315. .string "\tsubl $1, %eax\n"
  19316. .string "\taddl $1, %eax\n"
  19317. .string "1(%eax), %edx\n"
  19318. .string ", "
  19319. .string "(%ebx)"
  19320. .string "Can't use this as assignable operand."
  19321. .string "\tmovl $strbuf+"
  19322. .string "strbuf+"
  19323. .string "Expression can't be compiled as simple."
  19324. .string "usage: "
  19325. .string " [option]... <file>\n"
  19326. .string "output.S"