123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211 |
- /* Simulator instruction semantics for sh64.
- THIS FILE IS MACHINE GENERATED WITH CGEN.
- Copyright 1996-2015 Free Software Foundation, Inc.
- This file is part of the GNU simulators.
- This file is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
- It is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
- License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, see <http://www.gnu.org/licenses/>.
- */
- #ifdef DEFINE_LABELS
- /* The labels have the case they have because the enum of insn types
- is all uppercase and in the non-stdc case the insn symbol is built
- into the enum name. */
- static struct {
- int index;
- void *label;
- } labels[] = {
- { SH64_COMPACT_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
- { SH64_COMPACT_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
- { SH64_COMPACT_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
- { SH64_COMPACT_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
- { SH64_COMPACT_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
- { SH64_COMPACT_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
- { SH64_COMPACT_INSN_ADD_COMPACT, && case_sem_INSN_ADD_COMPACT },
- { SH64_COMPACT_INSN_ADDI_COMPACT, && case_sem_INSN_ADDI_COMPACT },
- { SH64_COMPACT_INSN_ADDC_COMPACT, && case_sem_INSN_ADDC_COMPACT },
- { SH64_COMPACT_INSN_ADDV_COMPACT, && case_sem_INSN_ADDV_COMPACT },
- { SH64_COMPACT_INSN_AND_COMPACT, && case_sem_INSN_AND_COMPACT },
- { SH64_COMPACT_INSN_ANDI_COMPACT, && case_sem_INSN_ANDI_COMPACT },
- { SH64_COMPACT_INSN_ANDB_COMPACT, && case_sem_INSN_ANDB_COMPACT },
- { SH64_COMPACT_INSN_BF_COMPACT, && case_sem_INSN_BF_COMPACT },
- { SH64_COMPACT_INSN_BFS_COMPACT, && case_sem_INSN_BFS_COMPACT },
- { SH64_COMPACT_INSN_BRA_COMPACT, && case_sem_INSN_BRA_COMPACT },
- { SH64_COMPACT_INSN_BRAF_COMPACT, && case_sem_INSN_BRAF_COMPACT },
- { SH64_COMPACT_INSN_BRK_COMPACT, && case_sem_INSN_BRK_COMPACT },
- { SH64_COMPACT_INSN_BSR_COMPACT, && case_sem_INSN_BSR_COMPACT },
- { SH64_COMPACT_INSN_BSRF_COMPACT, && case_sem_INSN_BSRF_COMPACT },
- { SH64_COMPACT_INSN_BT_COMPACT, && case_sem_INSN_BT_COMPACT },
- { SH64_COMPACT_INSN_BTS_COMPACT, && case_sem_INSN_BTS_COMPACT },
- { SH64_COMPACT_INSN_CLRMAC_COMPACT, && case_sem_INSN_CLRMAC_COMPACT },
- { SH64_COMPACT_INSN_CLRS_COMPACT, && case_sem_INSN_CLRS_COMPACT },
- { SH64_COMPACT_INSN_CLRT_COMPACT, && case_sem_INSN_CLRT_COMPACT },
- { SH64_COMPACT_INSN_CMPEQ_COMPACT, && case_sem_INSN_CMPEQ_COMPACT },
- { SH64_COMPACT_INSN_CMPEQI_COMPACT, && case_sem_INSN_CMPEQI_COMPACT },
- { SH64_COMPACT_INSN_CMPGE_COMPACT, && case_sem_INSN_CMPGE_COMPACT },
- { SH64_COMPACT_INSN_CMPGT_COMPACT, && case_sem_INSN_CMPGT_COMPACT },
- { SH64_COMPACT_INSN_CMPHI_COMPACT, && case_sem_INSN_CMPHI_COMPACT },
- { SH64_COMPACT_INSN_CMPHS_COMPACT, && case_sem_INSN_CMPHS_COMPACT },
- { SH64_COMPACT_INSN_CMPPL_COMPACT, && case_sem_INSN_CMPPL_COMPACT },
- { SH64_COMPACT_INSN_CMPPZ_COMPACT, && case_sem_INSN_CMPPZ_COMPACT },
- { SH64_COMPACT_INSN_CMPSTR_COMPACT, && case_sem_INSN_CMPSTR_COMPACT },
- { SH64_COMPACT_INSN_DIV0S_COMPACT, && case_sem_INSN_DIV0S_COMPACT },
- { SH64_COMPACT_INSN_DIV0U_COMPACT, && case_sem_INSN_DIV0U_COMPACT },
- { SH64_COMPACT_INSN_DIV1_COMPACT, && case_sem_INSN_DIV1_COMPACT },
- { SH64_COMPACT_INSN_DIVU_COMPACT, && case_sem_INSN_DIVU_COMPACT },
- { SH64_COMPACT_INSN_MULR_COMPACT, && case_sem_INSN_MULR_COMPACT },
- { SH64_COMPACT_INSN_DMULSL_COMPACT, && case_sem_INSN_DMULSL_COMPACT },
- { SH64_COMPACT_INSN_DMULUL_COMPACT, && case_sem_INSN_DMULUL_COMPACT },
- { SH64_COMPACT_INSN_DT_COMPACT, && case_sem_INSN_DT_COMPACT },
- { SH64_COMPACT_INSN_EXTSB_COMPACT, && case_sem_INSN_EXTSB_COMPACT },
- { SH64_COMPACT_INSN_EXTSW_COMPACT, && case_sem_INSN_EXTSW_COMPACT },
- { SH64_COMPACT_INSN_EXTUB_COMPACT, && case_sem_INSN_EXTUB_COMPACT },
- { SH64_COMPACT_INSN_EXTUW_COMPACT, && case_sem_INSN_EXTUW_COMPACT },
- { SH64_COMPACT_INSN_FABS_COMPACT, && case_sem_INSN_FABS_COMPACT },
- { SH64_COMPACT_INSN_FADD_COMPACT, && case_sem_INSN_FADD_COMPACT },
- { SH64_COMPACT_INSN_FCMPEQ_COMPACT, && case_sem_INSN_FCMPEQ_COMPACT },
- { SH64_COMPACT_INSN_FCMPGT_COMPACT, && case_sem_INSN_FCMPGT_COMPACT },
- { SH64_COMPACT_INSN_FCNVDS_COMPACT, && case_sem_INSN_FCNVDS_COMPACT },
- { SH64_COMPACT_INSN_FCNVSD_COMPACT, && case_sem_INSN_FCNVSD_COMPACT },
- { SH64_COMPACT_INSN_FDIV_COMPACT, && case_sem_INSN_FDIV_COMPACT },
- { SH64_COMPACT_INSN_FIPR_COMPACT, && case_sem_INSN_FIPR_COMPACT },
- { SH64_COMPACT_INSN_FLDS_COMPACT, && case_sem_INSN_FLDS_COMPACT },
- { SH64_COMPACT_INSN_FLDI0_COMPACT, && case_sem_INSN_FLDI0_COMPACT },
- { SH64_COMPACT_INSN_FLDI1_COMPACT, && case_sem_INSN_FLDI1_COMPACT },
- { SH64_COMPACT_INSN_FLOAT_COMPACT, && case_sem_INSN_FLOAT_COMPACT },
- { SH64_COMPACT_INSN_FMAC_COMPACT, && case_sem_INSN_FMAC_COMPACT },
- { SH64_COMPACT_INSN_FMOV1_COMPACT, && case_sem_INSN_FMOV1_COMPACT },
- { SH64_COMPACT_INSN_FMOV2_COMPACT, && case_sem_INSN_FMOV2_COMPACT },
- { SH64_COMPACT_INSN_FMOV3_COMPACT, && case_sem_INSN_FMOV3_COMPACT },
- { SH64_COMPACT_INSN_FMOV4_COMPACT, && case_sem_INSN_FMOV4_COMPACT },
- { SH64_COMPACT_INSN_FMOV5_COMPACT, && case_sem_INSN_FMOV5_COMPACT },
- { SH64_COMPACT_INSN_FMOV6_COMPACT, && case_sem_INSN_FMOV6_COMPACT },
- { SH64_COMPACT_INSN_FMOV7_COMPACT, && case_sem_INSN_FMOV7_COMPACT },
- { SH64_COMPACT_INSN_FMOV8_COMPACT, && case_sem_INSN_FMOV8_COMPACT },
- { SH64_COMPACT_INSN_FMOV9_COMPACT, && case_sem_INSN_FMOV9_COMPACT },
- { SH64_COMPACT_INSN_FMUL_COMPACT, && case_sem_INSN_FMUL_COMPACT },
- { SH64_COMPACT_INSN_FNEG_COMPACT, && case_sem_INSN_FNEG_COMPACT },
- { SH64_COMPACT_INSN_FRCHG_COMPACT, && case_sem_INSN_FRCHG_COMPACT },
- { SH64_COMPACT_INSN_FSCHG_COMPACT, && case_sem_INSN_FSCHG_COMPACT },
- { SH64_COMPACT_INSN_FSQRT_COMPACT, && case_sem_INSN_FSQRT_COMPACT },
- { SH64_COMPACT_INSN_FSTS_COMPACT, && case_sem_INSN_FSTS_COMPACT },
- { SH64_COMPACT_INSN_FSUB_COMPACT, && case_sem_INSN_FSUB_COMPACT },
- { SH64_COMPACT_INSN_FTRC_COMPACT, && case_sem_INSN_FTRC_COMPACT },
- { SH64_COMPACT_INSN_FTRV_COMPACT, && case_sem_INSN_FTRV_COMPACT },
- { SH64_COMPACT_INSN_JMP_COMPACT, && case_sem_INSN_JMP_COMPACT },
- { SH64_COMPACT_INSN_JSR_COMPACT, && case_sem_INSN_JSR_COMPACT },
- { SH64_COMPACT_INSN_LDC_GBR_COMPACT, && case_sem_INSN_LDC_GBR_COMPACT },
- { SH64_COMPACT_INSN_LDC_VBR_COMPACT, && case_sem_INSN_LDC_VBR_COMPACT },
- { SH64_COMPACT_INSN_LDC_SR_COMPACT, && case_sem_INSN_LDC_SR_COMPACT },
- { SH64_COMPACT_INSN_LDCL_GBR_COMPACT, && case_sem_INSN_LDCL_GBR_COMPACT },
- { SH64_COMPACT_INSN_LDCL_VBR_COMPACT, && case_sem_INSN_LDCL_VBR_COMPACT },
- { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT, && case_sem_INSN_LDS_FPSCR_COMPACT },
- { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT, && case_sem_INSN_LDSL_FPSCR_COMPACT },
- { SH64_COMPACT_INSN_LDS_FPUL_COMPACT, && case_sem_INSN_LDS_FPUL_COMPACT },
- { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT, && case_sem_INSN_LDSL_FPUL_COMPACT },
- { SH64_COMPACT_INSN_LDS_MACH_COMPACT, && case_sem_INSN_LDS_MACH_COMPACT },
- { SH64_COMPACT_INSN_LDSL_MACH_COMPACT, && case_sem_INSN_LDSL_MACH_COMPACT },
- { SH64_COMPACT_INSN_LDS_MACL_COMPACT, && case_sem_INSN_LDS_MACL_COMPACT },
- { SH64_COMPACT_INSN_LDSL_MACL_COMPACT, && case_sem_INSN_LDSL_MACL_COMPACT },
- { SH64_COMPACT_INSN_LDS_PR_COMPACT, && case_sem_INSN_LDS_PR_COMPACT },
- { SH64_COMPACT_INSN_LDSL_PR_COMPACT, && case_sem_INSN_LDSL_PR_COMPACT },
- { SH64_COMPACT_INSN_MACL_COMPACT, && case_sem_INSN_MACL_COMPACT },
- { SH64_COMPACT_INSN_MACW_COMPACT, && case_sem_INSN_MACW_COMPACT },
- { SH64_COMPACT_INSN_MOV_COMPACT, && case_sem_INSN_MOV_COMPACT },
- { SH64_COMPACT_INSN_MOVI_COMPACT, && case_sem_INSN_MOVI_COMPACT },
- { SH64_COMPACT_INSN_MOVI20_COMPACT, && case_sem_INSN_MOVI20_COMPACT },
- { SH64_COMPACT_INSN_MOVB1_COMPACT, && case_sem_INSN_MOVB1_COMPACT },
- { SH64_COMPACT_INSN_MOVB2_COMPACT, && case_sem_INSN_MOVB2_COMPACT },
- { SH64_COMPACT_INSN_MOVB3_COMPACT, && case_sem_INSN_MOVB3_COMPACT },
- { SH64_COMPACT_INSN_MOVB4_COMPACT, && case_sem_INSN_MOVB4_COMPACT },
- { SH64_COMPACT_INSN_MOVB5_COMPACT, && case_sem_INSN_MOVB5_COMPACT },
- { SH64_COMPACT_INSN_MOVB6_COMPACT, && case_sem_INSN_MOVB6_COMPACT },
- { SH64_COMPACT_INSN_MOVB7_COMPACT, && case_sem_INSN_MOVB7_COMPACT },
- { SH64_COMPACT_INSN_MOVB8_COMPACT, && case_sem_INSN_MOVB8_COMPACT },
- { SH64_COMPACT_INSN_MOVB9_COMPACT, && case_sem_INSN_MOVB9_COMPACT },
- { SH64_COMPACT_INSN_MOVB10_COMPACT, && case_sem_INSN_MOVB10_COMPACT },
- { SH64_COMPACT_INSN_MOVL1_COMPACT, && case_sem_INSN_MOVL1_COMPACT },
- { SH64_COMPACT_INSN_MOVL2_COMPACT, && case_sem_INSN_MOVL2_COMPACT },
- { SH64_COMPACT_INSN_MOVL3_COMPACT, && case_sem_INSN_MOVL3_COMPACT },
- { SH64_COMPACT_INSN_MOVL4_COMPACT, && case_sem_INSN_MOVL4_COMPACT },
- { SH64_COMPACT_INSN_MOVL5_COMPACT, && case_sem_INSN_MOVL5_COMPACT },
- { SH64_COMPACT_INSN_MOVL6_COMPACT, && case_sem_INSN_MOVL6_COMPACT },
- { SH64_COMPACT_INSN_MOVL7_COMPACT, && case_sem_INSN_MOVL7_COMPACT },
- { SH64_COMPACT_INSN_MOVL8_COMPACT, && case_sem_INSN_MOVL8_COMPACT },
- { SH64_COMPACT_INSN_MOVL9_COMPACT, && case_sem_INSN_MOVL9_COMPACT },
- { SH64_COMPACT_INSN_MOVL10_COMPACT, && case_sem_INSN_MOVL10_COMPACT },
- { SH64_COMPACT_INSN_MOVL11_COMPACT, && case_sem_INSN_MOVL11_COMPACT },
- { SH64_COMPACT_INSN_MOVL12_COMPACT, && case_sem_INSN_MOVL12_COMPACT },
- { SH64_COMPACT_INSN_MOVL13_COMPACT, && case_sem_INSN_MOVL13_COMPACT },
- { SH64_COMPACT_INSN_MOVW1_COMPACT, && case_sem_INSN_MOVW1_COMPACT },
- { SH64_COMPACT_INSN_MOVW2_COMPACT, && case_sem_INSN_MOVW2_COMPACT },
- { SH64_COMPACT_INSN_MOVW3_COMPACT, && case_sem_INSN_MOVW3_COMPACT },
- { SH64_COMPACT_INSN_MOVW4_COMPACT, && case_sem_INSN_MOVW4_COMPACT },
- { SH64_COMPACT_INSN_MOVW5_COMPACT, && case_sem_INSN_MOVW5_COMPACT },
- { SH64_COMPACT_INSN_MOVW6_COMPACT, && case_sem_INSN_MOVW6_COMPACT },
- { SH64_COMPACT_INSN_MOVW7_COMPACT, && case_sem_INSN_MOVW7_COMPACT },
- { SH64_COMPACT_INSN_MOVW8_COMPACT, && case_sem_INSN_MOVW8_COMPACT },
- { SH64_COMPACT_INSN_MOVW9_COMPACT, && case_sem_INSN_MOVW9_COMPACT },
- { SH64_COMPACT_INSN_MOVW10_COMPACT, && case_sem_INSN_MOVW10_COMPACT },
- { SH64_COMPACT_INSN_MOVW11_COMPACT, && case_sem_INSN_MOVW11_COMPACT },
- { SH64_COMPACT_INSN_MOVA_COMPACT, && case_sem_INSN_MOVA_COMPACT },
- { SH64_COMPACT_INSN_MOVCAL_COMPACT, && case_sem_INSN_MOVCAL_COMPACT },
- { SH64_COMPACT_INSN_MOVCOL_COMPACT, && case_sem_INSN_MOVCOL_COMPACT },
- { SH64_COMPACT_INSN_MOVT_COMPACT, && case_sem_INSN_MOVT_COMPACT },
- { SH64_COMPACT_INSN_MOVUAL_COMPACT, && case_sem_INSN_MOVUAL_COMPACT },
- { SH64_COMPACT_INSN_MOVUAL2_COMPACT, && case_sem_INSN_MOVUAL2_COMPACT },
- { SH64_COMPACT_INSN_MULL_COMPACT, && case_sem_INSN_MULL_COMPACT },
- { SH64_COMPACT_INSN_MULSW_COMPACT, && case_sem_INSN_MULSW_COMPACT },
- { SH64_COMPACT_INSN_MULUW_COMPACT, && case_sem_INSN_MULUW_COMPACT },
- { SH64_COMPACT_INSN_NEG_COMPACT, && case_sem_INSN_NEG_COMPACT },
- { SH64_COMPACT_INSN_NEGC_COMPACT, && case_sem_INSN_NEGC_COMPACT },
- { SH64_COMPACT_INSN_NOP_COMPACT, && case_sem_INSN_NOP_COMPACT },
- { SH64_COMPACT_INSN_NOT_COMPACT, && case_sem_INSN_NOT_COMPACT },
- { SH64_COMPACT_INSN_OCBI_COMPACT, && case_sem_INSN_OCBI_COMPACT },
- { SH64_COMPACT_INSN_OCBP_COMPACT, && case_sem_INSN_OCBP_COMPACT },
- { SH64_COMPACT_INSN_OCBWB_COMPACT, && case_sem_INSN_OCBWB_COMPACT },
- { SH64_COMPACT_INSN_OR_COMPACT, && case_sem_INSN_OR_COMPACT },
- { SH64_COMPACT_INSN_ORI_COMPACT, && case_sem_INSN_ORI_COMPACT },
- { SH64_COMPACT_INSN_ORB_COMPACT, && case_sem_INSN_ORB_COMPACT },
- { SH64_COMPACT_INSN_PREF_COMPACT, && case_sem_INSN_PREF_COMPACT },
- { SH64_COMPACT_INSN_ROTCL_COMPACT, && case_sem_INSN_ROTCL_COMPACT },
- { SH64_COMPACT_INSN_ROTCR_COMPACT, && case_sem_INSN_ROTCR_COMPACT },
- { SH64_COMPACT_INSN_ROTL_COMPACT, && case_sem_INSN_ROTL_COMPACT },
- { SH64_COMPACT_INSN_ROTR_COMPACT, && case_sem_INSN_ROTR_COMPACT },
- { SH64_COMPACT_INSN_RTS_COMPACT, && case_sem_INSN_RTS_COMPACT },
- { SH64_COMPACT_INSN_SETS_COMPACT, && case_sem_INSN_SETS_COMPACT },
- { SH64_COMPACT_INSN_SETT_COMPACT, && case_sem_INSN_SETT_COMPACT },
- { SH64_COMPACT_INSN_SHAD_COMPACT, && case_sem_INSN_SHAD_COMPACT },
- { SH64_COMPACT_INSN_SHAL_COMPACT, && case_sem_INSN_SHAL_COMPACT },
- { SH64_COMPACT_INSN_SHAR_COMPACT, && case_sem_INSN_SHAR_COMPACT },
- { SH64_COMPACT_INSN_SHLD_COMPACT, && case_sem_INSN_SHLD_COMPACT },
- { SH64_COMPACT_INSN_SHLL_COMPACT, && case_sem_INSN_SHLL_COMPACT },
- { SH64_COMPACT_INSN_SHLL2_COMPACT, && case_sem_INSN_SHLL2_COMPACT },
- { SH64_COMPACT_INSN_SHLL8_COMPACT, && case_sem_INSN_SHLL8_COMPACT },
- { SH64_COMPACT_INSN_SHLL16_COMPACT, && case_sem_INSN_SHLL16_COMPACT },
- { SH64_COMPACT_INSN_SHLR_COMPACT, && case_sem_INSN_SHLR_COMPACT },
- { SH64_COMPACT_INSN_SHLR2_COMPACT, && case_sem_INSN_SHLR2_COMPACT },
- { SH64_COMPACT_INSN_SHLR8_COMPACT, && case_sem_INSN_SHLR8_COMPACT },
- { SH64_COMPACT_INSN_SHLR16_COMPACT, && case_sem_INSN_SHLR16_COMPACT },
- { SH64_COMPACT_INSN_STC_GBR_COMPACT, && case_sem_INSN_STC_GBR_COMPACT },
- { SH64_COMPACT_INSN_STC_VBR_COMPACT, && case_sem_INSN_STC_VBR_COMPACT },
- { SH64_COMPACT_INSN_STCL_GBR_COMPACT, && case_sem_INSN_STCL_GBR_COMPACT },
- { SH64_COMPACT_INSN_STCL_VBR_COMPACT, && case_sem_INSN_STCL_VBR_COMPACT },
- { SH64_COMPACT_INSN_STS_FPSCR_COMPACT, && case_sem_INSN_STS_FPSCR_COMPACT },
- { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT, && case_sem_INSN_STSL_FPSCR_COMPACT },
- { SH64_COMPACT_INSN_STS_FPUL_COMPACT, && case_sem_INSN_STS_FPUL_COMPACT },
- { SH64_COMPACT_INSN_STSL_FPUL_COMPACT, && case_sem_INSN_STSL_FPUL_COMPACT },
- { SH64_COMPACT_INSN_STS_MACH_COMPACT, && case_sem_INSN_STS_MACH_COMPACT },
- { SH64_COMPACT_INSN_STSL_MACH_COMPACT, && case_sem_INSN_STSL_MACH_COMPACT },
- { SH64_COMPACT_INSN_STS_MACL_COMPACT, && case_sem_INSN_STS_MACL_COMPACT },
- { SH64_COMPACT_INSN_STSL_MACL_COMPACT, && case_sem_INSN_STSL_MACL_COMPACT },
- { SH64_COMPACT_INSN_STS_PR_COMPACT, && case_sem_INSN_STS_PR_COMPACT },
- { SH64_COMPACT_INSN_STSL_PR_COMPACT, && case_sem_INSN_STSL_PR_COMPACT },
- { SH64_COMPACT_INSN_SUB_COMPACT, && case_sem_INSN_SUB_COMPACT },
- { SH64_COMPACT_INSN_SUBC_COMPACT, && case_sem_INSN_SUBC_COMPACT },
- { SH64_COMPACT_INSN_SUBV_COMPACT, && case_sem_INSN_SUBV_COMPACT },
- { SH64_COMPACT_INSN_SWAPB_COMPACT, && case_sem_INSN_SWAPB_COMPACT },
- { SH64_COMPACT_INSN_SWAPW_COMPACT, && case_sem_INSN_SWAPW_COMPACT },
- { SH64_COMPACT_INSN_TASB_COMPACT, && case_sem_INSN_TASB_COMPACT },
- { SH64_COMPACT_INSN_TRAPA_COMPACT, && case_sem_INSN_TRAPA_COMPACT },
- { SH64_COMPACT_INSN_TST_COMPACT, && case_sem_INSN_TST_COMPACT },
- { SH64_COMPACT_INSN_TSTI_COMPACT, && case_sem_INSN_TSTI_COMPACT },
- { SH64_COMPACT_INSN_TSTB_COMPACT, && case_sem_INSN_TSTB_COMPACT },
- { SH64_COMPACT_INSN_XOR_COMPACT, && case_sem_INSN_XOR_COMPACT },
- { SH64_COMPACT_INSN_XORI_COMPACT, && case_sem_INSN_XORI_COMPACT },
- { SH64_COMPACT_INSN_XORB_COMPACT, && case_sem_INSN_XORB_COMPACT },
- { SH64_COMPACT_INSN_XTRCT_COMPACT, && case_sem_INSN_XTRCT_COMPACT },
- { 0, 0 }
- };
- int i;
- for (i = 0; labels[i].label != 0; ++i)
- {
- #if FAST_P
- CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
- #else
- CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
- #endif
- }
- #undef DEFINE_LABELS
- #endif /* DEFINE_LABELS */
- #ifdef DEFINE_SWITCH
- /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
- off frills like tracing and profiling. */
- /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
- that can cause it to be optimized out. Another way would be to emit
- special handlers into the instruction "stream". */
- #if FAST_P
- #undef CGEN_TRACE_RESULT
- #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
- #endif
- #undef GET_ATTR
- #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
- {
- #if WITH_SCACHE_PBB
- /* Branch to next handler without going around main loop. */
- #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
- SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
- #else /* ! WITH_SCACHE_PBB */
- #define NEXT(vpc) BREAK (sem)
- #ifdef __GNUC__
- #if FAST_P
- SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
- #else
- SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
- #endif
- #else
- SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
- #endif
- #endif /* ! WITH_SCACHE_PBB */
- {
- CASE (sem, INSN_X_INVALID) : /* --invalid-- */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
- {
- /* Update the recorded pc in the cpu state struct.
- Only necessary for WITH_SCACHE case, but to avoid the
- conditional compilation .... */
- SET_H_PC (pc);
- /* Virtual insns have zero size. Overwrite vpc with address of next insn
- using the default-insn-bitsize spec. When executing insns in parallel
- we may want to queue the fault and continue execution. */
- vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
- vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_X_AFTER) : /* --after-- */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
- {
- #if WITH_SCACHE_PBB_SH64_COMPACT
- sh64_compact_pbb_after (current_cpu, sem_arg);
- #endif
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_X_BEFORE) : /* --before-- */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
- {
- #if WITH_SCACHE_PBB_SH64_COMPACT
- sh64_compact_pbb_before (current_cpu, sem_arg);
- #endif
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
- {
- #if WITH_SCACHE_PBB_SH64_COMPACT
- #ifdef DEFINE_SWITCH
- vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
- pbb_br_type, pbb_br_npc);
- BREAK (sem);
- #else
- /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
- vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
- CPU_PBB_BR_TYPE (current_cpu),
- CPU_PBB_BR_NPC (current_cpu));
- #endif
- #endif
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_X_CHAIN) : /* --chain-- */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
- {
- #if WITH_SCACHE_PBB_SH64_COMPACT
- vpc = sh64_compact_pbb_chain (current_cpu, sem_arg);
- #ifdef DEFINE_SWITCH
- BREAK (sem);
- #endif
- #endif
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_X_BEGIN) : /* --begin-- */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
- {
- #if WITH_SCACHE_PBB_SH64_COMPACT
- #if defined DEFINE_SWITCH || defined FAST_P
- /* In the switch case FAST_P is a constant, allowing several optimizations
- in any called inline functions. */
- vpc = sh64_compact_pbb_begin (current_cpu, FAST_P);
- #else
- #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
- vpc = sh64_compact_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
- #else
- vpc = sh64_compact_pbb_begin (current_cpu, 0);
- #endif
- #endif
- #endif
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ADD_COMPACT) : /* add $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ADDI_COMPACT) : /* add #$imm8, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ADDC_COMPACT) : /* addc $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_flag;
- tmp_flag = ADDCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
- {
- SI opval = ADDCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = tmp_flag;
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ADDV_COMPACT) : /* addv $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_t;
- tmp_t = ADDOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = tmp_t;
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_AND_COMPACT) : /* and $rm64, $rn64 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI opval = ANDDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
- SET_H_GR (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ANDI_COMPACT) : /* and #$uimm8, r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ANDB_COMPACT) : /* and.b #$imm8, @(r0, gbr) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- UQI tmp_data;
- tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
- tmp_data = ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
- {
- UQI opval = tmp_data;
- SETMEMUQI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BF_COMPACT) : /* bf $disp8 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_bf_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_TBIT ())) {
- {
- UDI opval = FLD (i_disp8);
- SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- abuf->written = written;
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BFS_COMPACT) : /* bf/s $disp8 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_bf_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_TBIT ())) {
- {
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = FLD (i_disp8);
- SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- }
- }
- abuf->written = written;
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BRA_COMPACT) : /* bra $disp12 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_bra_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = FLD (i_disp12);
- SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- }
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BRAF_COMPACT) : /* braf $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- }
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BRK_COMPACT) : /* brk */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- sh64_break (current_cpu, pc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BSR_COMPACT) : /* bsr $disp12 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_bra_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- {
- SI opval = ADDDI (pc, 4);
- SET_H_PR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
- }
- }
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = FLD (i_disp12);
- SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- }
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BSRF_COMPACT) : /* bsrf $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- {
- SI opval = ADDDI (pc, 4);
- SET_H_PR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
- }
- }
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- }
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BT_COMPACT) : /* bt $disp8 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_bf_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_TBIT ()) {
- {
- UDI opval = FLD (i_disp8);
- SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- abuf->written = written;
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_BTS_COMPACT) : /* bt/s $disp8 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_bf_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_TBIT ()) {
- {
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = FLD (i_disp8);
- SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- }
- }
- abuf->written = written;
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CLRMAC_COMPACT) : /* clrmac */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = 0;
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- {
- SI opval = 0;
- SET_H_MACH (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CLRS_COMPACT) : /* clrs */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = 0;
- SET_H_SBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CLRT_COMPACT) : /* clrt */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = 0;
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPEQ_COMPACT) : /* cmp/eq $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = EQSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPEQI_COMPACT) : /* cmp/eq #$imm8, r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = EQSI (GET_H_GRC (((UINT) 0)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPGE_COMPACT) : /* cmp/ge $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = GESI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPGT_COMPACT) : /* cmp/gt $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = GTSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPHI_COMPACT) : /* cmp/hi $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = GTUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPHS_COMPACT) : /* cmp/hs $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = GEUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPPL_COMPACT) : /* cmp/pl $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = GTSI (GET_H_GRC (FLD (f_rn)), 0);
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPPZ_COMPACT) : /* cmp/pz $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = GESI (GET_H_GRC (FLD (f_rn)), 0);
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_CMPSTR_COMPACT) : /* cmp/str $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_t;
- SI tmp_temp;
- tmp_temp = XORSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
- tmp_t = EQSI (ANDSI (tmp_temp, 0xff000000), 0);
- tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 16711680), 0), tmp_t);
- tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 65280), 0), tmp_t);
- tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 255), 0), tmp_t);
- {
- BI opval = ((GTUBI (tmp_t, 0)) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_DIV0S_COMPACT) : /* div0s $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- {
- BI opval = SRLSI (GET_H_GRC (FLD (f_rm)), 31);
- SET_H_MBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
- }
- {
- BI opval = ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm)), 31), SRLSI (GET_H_GRC (FLD (f_rn)), 31))) ? (0) : (1));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_DIV0U_COMPACT) : /* div0u */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- BI opval = 0;
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- {
- BI opval = 0;
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- {
- BI opval = 0;
- SET_H_MBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_DIV1_COMPACT) : /* div1 $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_oldq;
- SI tmp_tmp0;
- UQI tmp_tmp1;
- tmp_oldq = GET_H_QBIT ();
- {
- BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- {
- SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), ZEXTBISI (GET_H_TBIT ()));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- if (NOTBI (tmp_oldq)) {
- if (NOTBI (GET_H_MBIT ())) {
- {
- tmp_tmp0 = GET_H_GRC (FLD (f_rn));
- {
- SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
- if (NOTBI (GET_H_QBIT ())) {
- {
- BI opval = ((tmp_tmp1) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- } else {
- {
- BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- }
- }
- } else {
- {
- tmp_tmp0 = GET_H_GRC (FLD (f_rn));
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
- if (NOTBI (GET_H_QBIT ())) {
- {
- BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- } else {
- {
- BI opval = ((tmp_tmp1) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- }
- }
- }
- } else {
- if (NOTBI (GET_H_MBIT ())) {
- {
- tmp_tmp0 = GET_H_GRC (FLD (f_rn));
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
- if (NOTBI (GET_H_QBIT ())) {
- {
- BI opval = ((tmp_tmp1) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- } else {
- {
- BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- }
- }
- } else {
- {
- tmp_tmp0 = GET_H_GRC (FLD (f_rn));
- {
- SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
- if (NOTBI (GET_H_QBIT ())) {
- {
- BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- } else {
- {
- BI opval = ((tmp_tmp1) ? (1) : (0));
- SET_H_QBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
- }
- }
- }
- }
- }
- {
- BI opval = ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_DIVU_COMPACT) : /* divu r0, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = UDIVSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (((UINT) 0)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MULR_COMPACT) : /* mulr r0, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = MULSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (((UINT) 0)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_DMULSL_COMPACT) : /* dmuls.l $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_result;
- tmp_result = MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm))), EXTSIDI (GET_H_GRC (FLD (f_rn))));
- {
- SI opval = SUBWORDDISI (tmp_result, 0);
- SET_H_MACH (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- {
- SI opval = SUBWORDDISI (tmp_result, 1);
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_DMULUL_COMPACT) : /* dmulu.l $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_result;
- tmp_result = MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm))), ZEXTSIDI (GET_H_GRC (FLD (f_rn))));
- {
- SI opval = SUBWORDDISI (tmp_result, 0);
- SET_H_MACH (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- {
- SI opval = SUBWORDDISI (tmp_result, 1);
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_DT_COMPACT) : /* dt $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = EQSI (GET_H_GRC (FLD (f_rn)), 0);
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_EXTSB_COMPACT) : /* exts.b $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_EXTSW_COMPACT) : /* exts.w $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_EXTUB_COMPACT) : /* extu.b $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_EXTUW_COMPACT) : /* extu.w $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FABS_COMPACT) : /* fabs $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_fabsd (current_cpu, GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_fabss (current_cpu, GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FADD_COMPACT) : /* fadd $fsdm, $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_faddd (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_fadds (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FCMPEQ_COMPACT) : /* fcmp/eq $fsdm, $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- BI opval = sh64_fcmpeqd (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
- SET_H_TBIT (opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- } else {
- {
- BI opval = sh64_fcmpeqs (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
- SET_H_TBIT (opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FCMPGT_COMPACT) : /* fcmp/gt $fsdm, $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- BI opval = sh64_fcmpgtd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
- SET_H_TBIT (opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- } else {
- {
- BI opval = sh64_fcmpgts (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
- SET_H_TBIT (opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FCNVDS_COMPACT) : /* fcnvds $drn, fpul */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = sh64_fcnvds (current_cpu, GET_H_DRC (FLD (f_dn)));
- CPU (h_fr[((UINT) 32)]) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FCNVSD_COMPACT) : /* fcnvsd fpul, $drn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[((UINT) 32)]));
- SET_H_DRC (FLD (f_dn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "drc", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FDIV_COMPACT) : /* fdiv $fsdm, $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_fdivd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_fdivs (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FIPR_COMPACT) : /* fipr $fvm, $fvn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_fipr_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- sh64_fipr (current_cpu, FLD (f_vm), FLD (f_vn));
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FLDS_COMPACT) : /* flds $frn, fpul */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = GET_H_FRC (FLD (f_rn));
- CPU (h_fr[((UINT) 32)]) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FLDI0_COMPACT) : /* fldi0 $frn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = sh64_fldi0 (current_cpu);
- SET_H_FRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FLDI1_COMPACT) : /* fldi1 $frn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = sh64_fldi1 (current_cpu);
- SET_H_FRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FLOAT_COMPACT) : /* float fpul, $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_floatld (current_cpu, CPU (h_fr[((UINT) 32)]));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_floatls (current_cpu, CPU (h_fr[((UINT) 32)]));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMAC_COMPACT) : /* fmac fr0, $frm, $frn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = sh64_fmacs (current_cpu, GET_H_FRC (((UINT) 0)), GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
- SET_H_FRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV1_COMPACT) : /* fmov $fmovm, $fmovn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DF opval = GET_H_FMOV (FLD (f_rm));
- SET_H_FMOV (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV2_COMPACT) : /* fmov @$rm, $fmovn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_SZBIT ())) {
- {
- DF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- SET_H_FMOV (FLD (f_rn), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
- }
- } else {
- {
- DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- SET_H_FMOV (FLD (f_rn), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV3_COMPACT) : /* fmov @${rm}+, fmovn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_SZBIT ())) {
- {
- {
- DF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- SET_H_FMOV (FLD (f_rn), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- } else {
- {
- {
- DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- SET_H_FMOV (FLD (f_rn), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 8);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV4_COMPACT) : /* fmov @(r0, $rm), $fmovn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_SZBIT ())) {
- {
- DF opval = GETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
- SET_H_FMOV (FLD (f_rn), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
- }
- } else {
- {
- DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
- SET_H_FMOV (FLD (f_rn), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV5_COMPACT) : /* fmov $fmovm, @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_SZBIT ())) {
- {
- SF opval = GET_H_FMOV (FLD (f_rm));
- SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- } else {
- {
- DF opval = GET_H_FMOV (FLD (f_rm));
- SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV6_COMPACT) : /* fmov $fmovm, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_SZBIT ())) {
- {
- {
- SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- SF opval = GET_H_FMOV (FLD (f_rm));
- SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- }
- } else {
- {
- {
- SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 8);
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- DF opval = GET_H_FMOV (FLD (f_rm));
- SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV7_COMPACT) : /* fmov $fmovm, @(r0, $rn) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (NOTBI (GET_H_SZBIT ())) {
- {
- SF opval = GET_H_FMOV (FLD (f_rm));
- SETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- } else {
- {
- DF opval = GET_H_FMOV (FLD (f_rm));
- SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV8_COMPACT) : /* fmov.d @($imm12x8, $rm), $drn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
- {
- DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm12x8)));
- SET_H_DRC (FLD (f_dn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "drc", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMOV9_COMPACT) : /* mov.l $drm, @($imm12x8, $rn) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_fmov9_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
- {
- DF opval = GET_H_DRC (FLD (f_dm));
- SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm12x8)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FMUL_COMPACT) : /* fmul $fsdm, $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_fmuld (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_fmuls (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FNEG_COMPACT) : /* fneg $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_fnegd (current_cpu, GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_fnegs (current_cpu, GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FRCHG_COMPACT) : /* frchg */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = NOTBI (GET_H_FRBIT ());
- SET_H_FRBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "frbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FSCHG_COMPACT) : /* fschg */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = NOTBI (GET_H_SZBIT ());
- SET_H_SZBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "szbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FSQRT_COMPACT) : /* fsqrt $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_fsqrtd (current_cpu, GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_fsqrts (current_cpu, GET_H_FSD (FLD (f_rn)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FSTS_COMPACT) : /* fsts fpul, $frn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = CPU (h_fr[((UINT) 32)]);
- SET_H_FRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FSUB_COMPACT) : /* fsub $fsdm, $fsdn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- if (GET_H_PRBIT ()) {
- {
- DF opval = sh64_fsubd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- } else {
- {
- DF opval = sh64_fsubs (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
- SET_H_FSD (FLD (f_rn), opval);
- written |= (1 << 3);
- CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FTRC_COMPACT) : /* ftrc $fsdn, fpul */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = ((GET_H_PRBIT ()) ? (sh64_ftrcdl (current_cpu, GET_H_FSD (FLD (f_rn)))) : (sh64_ftrcsl (current_cpu, GET_H_FSD (FLD (f_rn)))));
- CPU (h_fr[((UINT) 32)]) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_FTRV_COMPACT) : /* ftrv xmtrx, $fvn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_fipr_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- sh64_ftrv (current_cpu, FLD (f_vn));
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_JMP_COMPACT) : /* jmp @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = GET_H_GRC (FLD (f_rn));
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- ((void) 0); /*nop*/
- }
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_JSR_COMPACT) : /* jsr @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- {
- SI opval = ADDDI (pc, 4);
- SET_H_PR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
- }
- }
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = GET_H_GRC (FLD (f_rn));
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- ((void) 0); /*nop*/
- }
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDC_GBR_COMPACT) : /* ldc $rn, gbr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_GBR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDC_VBR_COMPACT) : /* ldc $rn, vbr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_VBR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDC_SR_COMPACT) : /* ldc $rn, sr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- CPU (h_sr) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDCL_GBR_COMPACT) : /* ldc.l @${rn}+, gbr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- SET_H_GBR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDCL_VBR_COMPACT) : /* ldc.l @${rn}+, vbr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- SET_H_VBR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDS_FPSCR_COMPACT) : /* lds $rn, fpscr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- CPU (h_fpscr) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDSL_FPSCR_COMPACT) : /* lds.l @${rn}+, fpscr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- CPU (h_fpscr) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDS_FPUL_COMPACT) : /* lds $rn, fpul */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SF opval = SUBWORDSISF (GET_H_GRC (FLD (f_rn)));
- CPU (h_fr[((UINT) 32)]) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDSL_FPUL_COMPACT) : /* lds.l @${rn}+, fpul */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- CPU (h_fr[((UINT) 32)]) = opval;
- CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDS_MACH_COMPACT) : /* lds $rn, mach */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_MACH (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDSL_MACH_COMPACT) : /* lds.l @${rn}+, mach */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- SET_H_MACH (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDS_MACL_COMPACT) : /* lds $rn, macl */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDSL_MACL_COMPACT) : /* lds.l @${rn}+, macl */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDS_PR_COMPACT) : /* lds $rn, pr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_PR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_LDSL_PR_COMPACT) : /* lds.l @${rn}+, pr */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- SET_H_PR (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MACL_COMPACT) : /* mac.l @${rm}+, @${rn}+ */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_tmpry;
- DI tmp_mac;
- DI tmp_result;
- SI tmp_x;
- SI tmp_y;
- tmp_x = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- if (EQSI (FLD (f_rn), FLD (f_rm))) {
- {
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 11);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- }
- tmp_y = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 11);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- tmp_tmpry = MULDI (ZEXTSIDI (tmp_x), ZEXTSIDI (tmp_y));
- tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
- tmp_result = ADDDI (tmp_mac, tmp_tmpry);
- {
- if (GET_H_SBIT ()) {
- {
- SI tmp_min;
- SI tmp_max;
- tmp_max = SRLDI (INVDI (0), 16);
- tmp_min = SRLDI (INVDI (0), 15);
- if (GTDI (tmp_result, tmp_max)) {
- tmp_result = tmp_max;
- } else {
- if (LTDI (tmp_result, tmp_min)) {
- tmp_result = tmp_min;
- }
- }
- }
- }
- {
- SI opval = SUBWORDDISI (tmp_result, 0);
- SET_H_MACH (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- {
- SI opval = SUBWORDDISI (tmp_result, 1);
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MACW_COMPACT) : /* mac.w @${rm}+, @${rn}+ */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI tmp_tmpry;
- DI tmp_mac;
- DI tmp_result;
- HI tmp_x;
- HI tmp_y;
- tmp_x = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- if (EQSI (FLD (f_rn), FLD (f_rm))) {
- {
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 11);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- }
- tmp_y = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 11);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- tmp_tmpry = MULSI (ZEXTHISI (tmp_x), ZEXTHISI (tmp_y));
- if (GET_H_SBIT ()) {
- {
- if (ADDOFSI (tmp_tmpry, GET_H_MACL (), 0)) {
- {
- SI opval = 1;
- SET_H_MACH (opval);
- written |= (1 << 9);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- }
- {
- SI opval = ADDSI (tmp_tmpry, GET_H_MACL ());
- SET_H_MACL (opval);
- written |= (1 << 10);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- }
- } else {
- {
- tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
- tmp_result = ADDDI (tmp_mac, EXTSIDI (tmp_tmpry));
- {
- SI opval = SUBWORDDISI (tmp_result, 0);
- SET_H_MACH (opval);
- written |= (1 << 9);
- CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
- }
- {
- SI opval = SUBWORDDISI (tmp_result, 1);
- SET_H_MACL (opval);
- written |= (1 << 10);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- }
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOV_COMPACT) : /* mov $rm64, $rn64 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI opval = GET_H_GR (FLD (f_rm));
- SET_H_GR (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVI_COMPACT) : /* mov #$imm8, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTQIDI (ANDQI (FLD (f_imm8), 255));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVI20_COMPACT) : /* movi20 #$imm20, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movi20_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
- {
- SI opval = FLD (f_imm20);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB1_COMPACT) : /* mov.b $rm, @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
- SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB2_COMPACT) : /* mov.b $rm, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
- {
- UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
- SETMEMUQI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB3_COMPACT) : /* mov.b $rm, @(r0,$rn) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
- SETMEMUQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB4_COMPACT) : /* mov.b r0, @($imm8, gbr) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = ADDSI (GET_H_GBR (), FLD (f_imm8));
- {
- UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
- SETMEMUQI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB5_COMPACT) : /* mov.b r0, @($imm4, $rm) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movb5_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4));
- {
- UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
- SETMEMUQI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB6_COMPACT) : /* mov.b @$rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTQISI (GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB7_COMPACT) : /* mov.b @${rm}+, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- QI tmp_data;
- tmp_data = GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- if (EQSI (FLD (f_rm), FLD (f_rn))) {
- {
- SI opval = EXTQISI (tmp_data);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 1);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- {
- SI opval = EXTQISI (tmp_data);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB8_COMPACT) : /* mov.b @(r0, $rm), $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB9_COMPACT) : /* mov.b @($imm8, gbr), r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8))));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVB10_COMPACT) : /* mov.b @($imm4, $rm), r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movb5_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4))));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL1_COMPACT) : /* mov.l $rm, @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rm));
- SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL2_COMPACT) : /* mov.l $rm, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SI opval = GET_H_GRC (FLD (f_rm));
- SETMEMSI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL3_COMPACT) : /* mov.l $rm, @(r0, $rn) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rm));
- SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL4_COMPACT) : /* mov.l r0, @($imm8x4, gbr) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (((UINT) 0));
- SETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL5_COMPACT) : /* mov.l $rm, @($imm4x4, $rn) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl5_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rm));
- SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm4x4)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL6_COMPACT) : /* mov.l @$rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL7_COMPACT) : /* mov.l @${rm}+, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- if (EQSI (FLD (f_rm), FLD (f_rn))) {
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 5);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL8_COMPACT) : /* mov.l @(r0, $rm), $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL9_COMPACT) : /* mov.l @($imm8x4, gbr), r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL10_COMPACT) : /* mov.l @($imm8x4, pc), $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GETMEMSI (current_cpu, pc, ADDSI (FLD (f_imm8x4), ANDDI (ADDDI (pc, 4), INVSI (3))));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL11_COMPACT) : /* mov.l @($imm4x4, $rm), $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl5_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x4)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL12_COMPACT) : /* mov.l @($imm12x4, $rm), $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
- {
- SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm12x4)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVL13_COMPACT) : /* mov.l $rm, @($imm12x4, $rn) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
- {
- SI opval = GET_H_GRC (FLD (f_rm));
- SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm12x4)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW1_COMPACT) : /* mov.w $rm, @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
- SETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW2_COMPACT) : /* mov.w $rm, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 2);
- {
- HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
- SETMEMHI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW3_COMPACT) : /* mov.w $rm, @(r0, $rn) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
- SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW4_COMPACT) : /* mov.w r0, @($imm8x2, gbr) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
- SETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW5_COMPACT) : /* mov.w r0, @($imm4x2, $rm) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw5_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
- SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW6_COMPACT) : /* mov.w @$rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTHISI (GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW7_COMPACT) : /* mov.w @${rm}+, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- HI tmp_data;
- tmp_data = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
- if (EQSI (FLD (f_rm), FLD (f_rn))) {
- {
- SI opval = EXTHISI (tmp_data);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
- SET_H_GRC (FLD (f_rm), opval);
- written |= (1 << 4);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- {
- SI opval = EXTHISI (tmp_data);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW8_COMPACT) : /* mov.w @(r0, $rm), $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW9_COMPACT) : /* mov.w @($imm8x2, gbr), r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2))));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW10_COMPACT) : /* mov.w @($imm8x2, pc), $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDDI (ADDDI (pc, 4), FLD (f_imm8x2))));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVW11_COMPACT) : /* mov.w @($imm4x2, $rm), r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw5_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2))));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVA_COMPACT) : /* mova @($imm8x4, pc), r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ADDDI (ANDDI (ADDDI (pc, 4), INVSI (3)), FLD (f_imm8x4));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVCAL_COMPACT) : /* movca.l r0, @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (((UINT) 0));
- SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVCOL_COMPACT) : /* movco.l r0, @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVT_COMPACT) : /* movt $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ZEXTBISI (GET_H_TBIT ());
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVUAL_COMPACT) : /* movua.l @$rn, r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = sh64_movua (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MOVUAL2_COMPACT) : /* movua.l @$rn+, r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = sh64_movua (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MULL_COMPACT) : /* mul.l $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = MULSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MULSW_COMPACT) : /* muls.w $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_MULUW_COMPACT) : /* mulu.w $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
- SET_H_MACL (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_NEG_COMPACT) : /* neg $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = NEGSI (GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_NEGC_COMPACT) : /* negc $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_flag;
- tmp_flag = SUBCFSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
- {
- SI opval = SUBCSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = tmp_flag;
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_NOP_COMPACT) : /* nop */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- ((void) 0); /*nop*/
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_NOT_COMPACT) : /* not $rm64, $rn64 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI opval = INVDI (GET_H_GR (FLD (f_rm)));
- SET_H_GR (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_OCBI_COMPACT) : /* ocbi @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- ((void) 0); /*nop*/
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_OCBP_COMPACT) : /* ocbp @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- ((void) 0); /*nop*/
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_OCBWB_COMPACT) : /* ocbwb @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- SI opval = GET_H_GRC (FLD (f_rn));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- ((void) 0); /*nop*/
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_OR_COMPACT) : /* or $rm64, $rn64 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI opval = ORDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
- SET_H_GR (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ORI_COMPACT) : /* or #$uimm8, r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ORB_COMPACT) : /* or.b #$imm8, @(r0, gbr) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- UQI tmp_data;
- tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
- tmp_data = ORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
- {
- UQI opval = tmp_data;
- SETMEMUQI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_PREF_COMPACT) : /* pref @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- sh64_pref (current_cpu, GET_H_GRC (FLD (f_rn)));
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ROTCL_COMPACT) : /* rotcl $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_temp;
- tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
- {
- SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), GET_H_TBIT ());
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_temp) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ROTCR_COMPACT) : /* rotcr $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_lsbit;
- SI tmp_temp;
- tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
- tmp_temp = GET_H_TBIT ();
- {
- SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_lsbit) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ROTL_COMPACT) : /* rotl $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_temp;
- tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
- {
- SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), tmp_temp);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_temp) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_ROTR_COMPACT) : /* rotr $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_lsbit;
- SI tmp_temp;
- tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
- tmp_temp = tmp_lsbit;
- {
- SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_lsbit) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_RTS_COMPACT) : /* rts */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- SEM_BRANCH_INIT
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- {
- UDI opval = ADDDI (pc, 2);
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- ((void) 0); /*nop*/
- {
- {
- UDI opval = GET_H_PR ();
- SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
- CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
- }
- }
- ((void) 0); /*nop*/
- }
- SEM_BRANCH_FINI (vpc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SETS_COMPACT) : /* sets */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = 1;
- SET_H_SBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SETT_COMPACT) : /* sett */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_empty.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = 1;
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHAD_COMPACT) : /* shad $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI tmp_shamt;
- tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
- if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
- {
- SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- if (NESI (tmp_shamt, 0)) {
- {
- SI opval = SRASI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- if (LTSI (GET_H_GRC (FLD (f_rn)), 0)) {
- {
- SI opval = NEGSI (1);
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- {
- SI opval = 0;
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- }
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHAL_COMPACT) : /* shal $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_t;
- tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
- {
- SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_t) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHAR_COMPACT) : /* shar $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_t;
- tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
- {
- SI opval = SRASI (GET_H_GRC (FLD (f_rn)), 1);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_t) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLD_COMPACT) : /* shld $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI tmp_shamt;
- tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
- if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
- {
- SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- if (NESI (tmp_shamt, 0)) {
- {
- SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- } else {
- {
- SI opval = 0;
- SET_H_GRC (FLD (f_rn), opval);
- written |= (1 << 2);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- }
- }
- abuf->written = written;
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLL_COMPACT) : /* shll $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_t;
- tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
- {
- SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_t) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLL2_COMPACT) : /* shll2 $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 2);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLL8_COMPACT) : /* shll8 $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 8);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLL16_COMPACT) : /* shll16 $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 16);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLR_COMPACT) : /* shlr $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_t;
- tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
- {
- SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 1);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_t) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLR2_COMPACT) : /* shlr2 $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 2);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLR8_COMPACT) : /* shlr8 $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 8);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SHLR16_COMPACT) : /* shlr16 $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 16);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STC_GBR_COMPACT) : /* stc gbr, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_GBR ();
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STC_VBR_COMPACT) : /* stc vbr, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_VBR ();
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STCL_GBR_COMPACT) : /* stc.l gbr, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SI opval = GET_H_GBR ();
- SETMEMSI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STCL_VBR_COMPACT) : /* stc.l vbr, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SI opval = GET_H_VBR ();
- SETMEMSI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STS_FPSCR_COMPACT) : /* sts fpscr, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = CPU (h_fpscr);
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STSL_FPSCR_COMPACT) : /* sts.l fpscr, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SI opval = CPU (h_fpscr);
- SETMEMSI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STS_FPUL_COMPACT) : /* sts fpul, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SUBWORDSFSI (CPU (h_fr[((UINT) 32)]));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STSL_FPUL_COMPACT) : /* sts.l fpul, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SF opval = CPU (h_fr[((UINT) 32)]);
- SETMEMSF (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STS_MACH_COMPACT) : /* sts mach, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_MACH ();
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STSL_MACH_COMPACT) : /* sts.l mach, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SI opval = GET_H_MACH ();
- SETMEMSI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STS_MACL_COMPACT) : /* sts macl, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_MACL ();
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STSL_MACL_COMPACT) : /* sts.l macl, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SI opval = GET_H_MACL ();
- SETMEMSI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STS_PR_COMPACT) : /* sts pr, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = GET_H_PR ();
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_STSL_PR_COMPACT) : /* sts.l pr, @-$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
- {
- SI opval = GET_H_PR ();
- SETMEMSI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- {
- SI opval = tmp_addr;
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SUB_COMPACT) : /* sub $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SUBC_COMPACT) : /* subc $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_flag;
- tmp_flag = SUBCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
- {
- SI opval = SUBCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = tmp_flag;
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SUBV_COMPACT) : /* subv $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI tmp_t;
- tmp_t = SUBOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
- {
- SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- {
- BI opval = ((tmp_t) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SWAPB_COMPACT) : /* swap.b $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- UHI tmp_top_half;
- UQI tmp_byte1;
- UQI tmp_byte0;
- tmp_top_half = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 0);
- tmp_byte1 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 2);
- tmp_byte0 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3);
- {
- SI opval = ORSI (SLLSI (tmp_top_half, 16), ORSI (SLLSI (tmp_byte0, 8), tmp_byte1));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_SWAPW_COMPACT) : /* swap.w $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rm)), 16), SLLSI (GET_H_GRC (FLD (f_rm)), 16));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_TASB_COMPACT) : /* tas.b @$rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movw10_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- UQI tmp_byte;
- tmp_byte = GETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
- {
- BI opval = ((EQQI (tmp_byte, 0)) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- tmp_byte = ORQI (tmp_byte, 128);
- {
- UQI opval = tmp_byte;
- SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_TRAPA_COMPACT) : /* trapa #$uimm8 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- sh64_compact_trapa (current_cpu, FLD (f_imm8), pc);
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_TST_COMPACT) : /* tst $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn))), 0)) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_TSTI_COMPACT) : /* tst #$uimm8, r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- BI opval = ((EQSI (ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSISI (FLD (f_imm8))), 0)) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_TSTB_COMPACT) : /* tst.b #$imm8, @(r0, gbr) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
- {
- BI opval = ((EQQI (ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8)), 0)) ? (1) : (0));
- SET_H_TBIT (opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_XOR_COMPACT) : /* xor $rm64, $rn64 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI opval = XORDI (GET_H_GR (FLD (f_rn)), GET_H_GR (FLD (f_rm)));
- SET_H_GR (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_XORI_COMPACT) : /* xor #$uimm8, r0 */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = XORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
- SET_H_GRC (((UINT) 0), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_XORB_COMPACT) : /* xor.b #$imm8, @(r0, gbr) */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_addi_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- DI tmp_addr;
- UQI tmp_data;
- tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
- tmp_data = XORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
- {
- UQI opval = tmp_data;
- SETMEMUQI (current_cpu, pc, tmp_addr, opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
- }
- }
- #undef FLD
- }
- NEXT (vpc);
- CASE (sem, INSN_XTRCT_COMPACT) : /* xtrct $rm, $rn */
- {
- SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
- ARGBUF *abuf = SEM_ARGBUF (sem_arg);
- #define FLD(f) abuf->fields.sfmt_movl12_compact.f
- int UNUSED written = 0;
- IADDR UNUSED pc = abuf->addr;
- vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
- {
- SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rm)), 16), SRLSI (GET_H_GRC (FLD (f_rn)), 16));
- SET_H_GRC (FLD (f_rn), opval);
- CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
- }
- #undef FLD
- }
- NEXT (vpc);
- }
- ENDSWITCH (sem) /* End of semantic switch. */
- /* At this point `vpc' contains the next insn to execute. */
- }
- #undef DEFINE_SWITCH
- #endif /* DEFINE_SWITCH */
|