sem-compact-switch.c 137 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211
  1. /* Simulator instruction semantics for sh64.
  2. THIS FILE IS MACHINE GENERATED WITH CGEN.
  3. Copyright 1996-2015 Free Software Foundation, Inc.
  4. This file is part of the GNU simulators.
  5. This file is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 3, or (at your option)
  8. any later version.
  9. It is distributed in the hope that it will be useful, but WITHOUT
  10. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
  12. License for more details.
  13. You should have received a copy of the GNU General Public License along
  14. with this program; if not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #ifdef DEFINE_LABELS
  17. /* The labels have the case they have because the enum of insn types
  18. is all uppercase and in the non-stdc case the insn symbol is built
  19. into the enum name. */
  20. static struct {
  21. int index;
  22. void *label;
  23. } labels[] = {
  24. { SH64_COMPACT_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
  25. { SH64_COMPACT_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
  26. { SH64_COMPACT_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
  27. { SH64_COMPACT_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
  28. { SH64_COMPACT_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
  29. { SH64_COMPACT_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
  30. { SH64_COMPACT_INSN_ADD_COMPACT, && case_sem_INSN_ADD_COMPACT },
  31. { SH64_COMPACT_INSN_ADDI_COMPACT, && case_sem_INSN_ADDI_COMPACT },
  32. { SH64_COMPACT_INSN_ADDC_COMPACT, && case_sem_INSN_ADDC_COMPACT },
  33. { SH64_COMPACT_INSN_ADDV_COMPACT, && case_sem_INSN_ADDV_COMPACT },
  34. { SH64_COMPACT_INSN_AND_COMPACT, && case_sem_INSN_AND_COMPACT },
  35. { SH64_COMPACT_INSN_ANDI_COMPACT, && case_sem_INSN_ANDI_COMPACT },
  36. { SH64_COMPACT_INSN_ANDB_COMPACT, && case_sem_INSN_ANDB_COMPACT },
  37. { SH64_COMPACT_INSN_BF_COMPACT, && case_sem_INSN_BF_COMPACT },
  38. { SH64_COMPACT_INSN_BFS_COMPACT, && case_sem_INSN_BFS_COMPACT },
  39. { SH64_COMPACT_INSN_BRA_COMPACT, && case_sem_INSN_BRA_COMPACT },
  40. { SH64_COMPACT_INSN_BRAF_COMPACT, && case_sem_INSN_BRAF_COMPACT },
  41. { SH64_COMPACT_INSN_BRK_COMPACT, && case_sem_INSN_BRK_COMPACT },
  42. { SH64_COMPACT_INSN_BSR_COMPACT, && case_sem_INSN_BSR_COMPACT },
  43. { SH64_COMPACT_INSN_BSRF_COMPACT, && case_sem_INSN_BSRF_COMPACT },
  44. { SH64_COMPACT_INSN_BT_COMPACT, && case_sem_INSN_BT_COMPACT },
  45. { SH64_COMPACT_INSN_BTS_COMPACT, && case_sem_INSN_BTS_COMPACT },
  46. { SH64_COMPACT_INSN_CLRMAC_COMPACT, && case_sem_INSN_CLRMAC_COMPACT },
  47. { SH64_COMPACT_INSN_CLRS_COMPACT, && case_sem_INSN_CLRS_COMPACT },
  48. { SH64_COMPACT_INSN_CLRT_COMPACT, && case_sem_INSN_CLRT_COMPACT },
  49. { SH64_COMPACT_INSN_CMPEQ_COMPACT, && case_sem_INSN_CMPEQ_COMPACT },
  50. { SH64_COMPACT_INSN_CMPEQI_COMPACT, && case_sem_INSN_CMPEQI_COMPACT },
  51. { SH64_COMPACT_INSN_CMPGE_COMPACT, && case_sem_INSN_CMPGE_COMPACT },
  52. { SH64_COMPACT_INSN_CMPGT_COMPACT, && case_sem_INSN_CMPGT_COMPACT },
  53. { SH64_COMPACT_INSN_CMPHI_COMPACT, && case_sem_INSN_CMPHI_COMPACT },
  54. { SH64_COMPACT_INSN_CMPHS_COMPACT, && case_sem_INSN_CMPHS_COMPACT },
  55. { SH64_COMPACT_INSN_CMPPL_COMPACT, && case_sem_INSN_CMPPL_COMPACT },
  56. { SH64_COMPACT_INSN_CMPPZ_COMPACT, && case_sem_INSN_CMPPZ_COMPACT },
  57. { SH64_COMPACT_INSN_CMPSTR_COMPACT, && case_sem_INSN_CMPSTR_COMPACT },
  58. { SH64_COMPACT_INSN_DIV0S_COMPACT, && case_sem_INSN_DIV0S_COMPACT },
  59. { SH64_COMPACT_INSN_DIV0U_COMPACT, && case_sem_INSN_DIV0U_COMPACT },
  60. { SH64_COMPACT_INSN_DIV1_COMPACT, && case_sem_INSN_DIV1_COMPACT },
  61. { SH64_COMPACT_INSN_DIVU_COMPACT, && case_sem_INSN_DIVU_COMPACT },
  62. { SH64_COMPACT_INSN_MULR_COMPACT, && case_sem_INSN_MULR_COMPACT },
  63. { SH64_COMPACT_INSN_DMULSL_COMPACT, && case_sem_INSN_DMULSL_COMPACT },
  64. { SH64_COMPACT_INSN_DMULUL_COMPACT, && case_sem_INSN_DMULUL_COMPACT },
  65. { SH64_COMPACT_INSN_DT_COMPACT, && case_sem_INSN_DT_COMPACT },
  66. { SH64_COMPACT_INSN_EXTSB_COMPACT, && case_sem_INSN_EXTSB_COMPACT },
  67. { SH64_COMPACT_INSN_EXTSW_COMPACT, && case_sem_INSN_EXTSW_COMPACT },
  68. { SH64_COMPACT_INSN_EXTUB_COMPACT, && case_sem_INSN_EXTUB_COMPACT },
  69. { SH64_COMPACT_INSN_EXTUW_COMPACT, && case_sem_INSN_EXTUW_COMPACT },
  70. { SH64_COMPACT_INSN_FABS_COMPACT, && case_sem_INSN_FABS_COMPACT },
  71. { SH64_COMPACT_INSN_FADD_COMPACT, && case_sem_INSN_FADD_COMPACT },
  72. { SH64_COMPACT_INSN_FCMPEQ_COMPACT, && case_sem_INSN_FCMPEQ_COMPACT },
  73. { SH64_COMPACT_INSN_FCMPGT_COMPACT, && case_sem_INSN_FCMPGT_COMPACT },
  74. { SH64_COMPACT_INSN_FCNVDS_COMPACT, && case_sem_INSN_FCNVDS_COMPACT },
  75. { SH64_COMPACT_INSN_FCNVSD_COMPACT, && case_sem_INSN_FCNVSD_COMPACT },
  76. { SH64_COMPACT_INSN_FDIV_COMPACT, && case_sem_INSN_FDIV_COMPACT },
  77. { SH64_COMPACT_INSN_FIPR_COMPACT, && case_sem_INSN_FIPR_COMPACT },
  78. { SH64_COMPACT_INSN_FLDS_COMPACT, && case_sem_INSN_FLDS_COMPACT },
  79. { SH64_COMPACT_INSN_FLDI0_COMPACT, && case_sem_INSN_FLDI0_COMPACT },
  80. { SH64_COMPACT_INSN_FLDI1_COMPACT, && case_sem_INSN_FLDI1_COMPACT },
  81. { SH64_COMPACT_INSN_FLOAT_COMPACT, && case_sem_INSN_FLOAT_COMPACT },
  82. { SH64_COMPACT_INSN_FMAC_COMPACT, && case_sem_INSN_FMAC_COMPACT },
  83. { SH64_COMPACT_INSN_FMOV1_COMPACT, && case_sem_INSN_FMOV1_COMPACT },
  84. { SH64_COMPACT_INSN_FMOV2_COMPACT, && case_sem_INSN_FMOV2_COMPACT },
  85. { SH64_COMPACT_INSN_FMOV3_COMPACT, && case_sem_INSN_FMOV3_COMPACT },
  86. { SH64_COMPACT_INSN_FMOV4_COMPACT, && case_sem_INSN_FMOV4_COMPACT },
  87. { SH64_COMPACT_INSN_FMOV5_COMPACT, && case_sem_INSN_FMOV5_COMPACT },
  88. { SH64_COMPACT_INSN_FMOV6_COMPACT, && case_sem_INSN_FMOV6_COMPACT },
  89. { SH64_COMPACT_INSN_FMOV7_COMPACT, && case_sem_INSN_FMOV7_COMPACT },
  90. { SH64_COMPACT_INSN_FMOV8_COMPACT, && case_sem_INSN_FMOV8_COMPACT },
  91. { SH64_COMPACT_INSN_FMOV9_COMPACT, && case_sem_INSN_FMOV9_COMPACT },
  92. { SH64_COMPACT_INSN_FMUL_COMPACT, && case_sem_INSN_FMUL_COMPACT },
  93. { SH64_COMPACT_INSN_FNEG_COMPACT, && case_sem_INSN_FNEG_COMPACT },
  94. { SH64_COMPACT_INSN_FRCHG_COMPACT, && case_sem_INSN_FRCHG_COMPACT },
  95. { SH64_COMPACT_INSN_FSCHG_COMPACT, && case_sem_INSN_FSCHG_COMPACT },
  96. { SH64_COMPACT_INSN_FSQRT_COMPACT, && case_sem_INSN_FSQRT_COMPACT },
  97. { SH64_COMPACT_INSN_FSTS_COMPACT, && case_sem_INSN_FSTS_COMPACT },
  98. { SH64_COMPACT_INSN_FSUB_COMPACT, && case_sem_INSN_FSUB_COMPACT },
  99. { SH64_COMPACT_INSN_FTRC_COMPACT, && case_sem_INSN_FTRC_COMPACT },
  100. { SH64_COMPACT_INSN_FTRV_COMPACT, && case_sem_INSN_FTRV_COMPACT },
  101. { SH64_COMPACT_INSN_JMP_COMPACT, && case_sem_INSN_JMP_COMPACT },
  102. { SH64_COMPACT_INSN_JSR_COMPACT, && case_sem_INSN_JSR_COMPACT },
  103. { SH64_COMPACT_INSN_LDC_GBR_COMPACT, && case_sem_INSN_LDC_GBR_COMPACT },
  104. { SH64_COMPACT_INSN_LDC_VBR_COMPACT, && case_sem_INSN_LDC_VBR_COMPACT },
  105. { SH64_COMPACT_INSN_LDC_SR_COMPACT, && case_sem_INSN_LDC_SR_COMPACT },
  106. { SH64_COMPACT_INSN_LDCL_GBR_COMPACT, && case_sem_INSN_LDCL_GBR_COMPACT },
  107. { SH64_COMPACT_INSN_LDCL_VBR_COMPACT, && case_sem_INSN_LDCL_VBR_COMPACT },
  108. { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT, && case_sem_INSN_LDS_FPSCR_COMPACT },
  109. { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT, && case_sem_INSN_LDSL_FPSCR_COMPACT },
  110. { SH64_COMPACT_INSN_LDS_FPUL_COMPACT, && case_sem_INSN_LDS_FPUL_COMPACT },
  111. { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT, && case_sem_INSN_LDSL_FPUL_COMPACT },
  112. { SH64_COMPACT_INSN_LDS_MACH_COMPACT, && case_sem_INSN_LDS_MACH_COMPACT },
  113. { SH64_COMPACT_INSN_LDSL_MACH_COMPACT, && case_sem_INSN_LDSL_MACH_COMPACT },
  114. { SH64_COMPACT_INSN_LDS_MACL_COMPACT, && case_sem_INSN_LDS_MACL_COMPACT },
  115. { SH64_COMPACT_INSN_LDSL_MACL_COMPACT, && case_sem_INSN_LDSL_MACL_COMPACT },
  116. { SH64_COMPACT_INSN_LDS_PR_COMPACT, && case_sem_INSN_LDS_PR_COMPACT },
  117. { SH64_COMPACT_INSN_LDSL_PR_COMPACT, && case_sem_INSN_LDSL_PR_COMPACT },
  118. { SH64_COMPACT_INSN_MACL_COMPACT, && case_sem_INSN_MACL_COMPACT },
  119. { SH64_COMPACT_INSN_MACW_COMPACT, && case_sem_INSN_MACW_COMPACT },
  120. { SH64_COMPACT_INSN_MOV_COMPACT, && case_sem_INSN_MOV_COMPACT },
  121. { SH64_COMPACT_INSN_MOVI_COMPACT, && case_sem_INSN_MOVI_COMPACT },
  122. { SH64_COMPACT_INSN_MOVI20_COMPACT, && case_sem_INSN_MOVI20_COMPACT },
  123. { SH64_COMPACT_INSN_MOVB1_COMPACT, && case_sem_INSN_MOVB1_COMPACT },
  124. { SH64_COMPACT_INSN_MOVB2_COMPACT, && case_sem_INSN_MOVB2_COMPACT },
  125. { SH64_COMPACT_INSN_MOVB3_COMPACT, && case_sem_INSN_MOVB3_COMPACT },
  126. { SH64_COMPACT_INSN_MOVB4_COMPACT, && case_sem_INSN_MOVB4_COMPACT },
  127. { SH64_COMPACT_INSN_MOVB5_COMPACT, && case_sem_INSN_MOVB5_COMPACT },
  128. { SH64_COMPACT_INSN_MOVB6_COMPACT, && case_sem_INSN_MOVB6_COMPACT },
  129. { SH64_COMPACT_INSN_MOVB7_COMPACT, && case_sem_INSN_MOVB7_COMPACT },
  130. { SH64_COMPACT_INSN_MOVB8_COMPACT, && case_sem_INSN_MOVB8_COMPACT },
  131. { SH64_COMPACT_INSN_MOVB9_COMPACT, && case_sem_INSN_MOVB9_COMPACT },
  132. { SH64_COMPACT_INSN_MOVB10_COMPACT, && case_sem_INSN_MOVB10_COMPACT },
  133. { SH64_COMPACT_INSN_MOVL1_COMPACT, && case_sem_INSN_MOVL1_COMPACT },
  134. { SH64_COMPACT_INSN_MOVL2_COMPACT, && case_sem_INSN_MOVL2_COMPACT },
  135. { SH64_COMPACT_INSN_MOVL3_COMPACT, && case_sem_INSN_MOVL3_COMPACT },
  136. { SH64_COMPACT_INSN_MOVL4_COMPACT, && case_sem_INSN_MOVL4_COMPACT },
  137. { SH64_COMPACT_INSN_MOVL5_COMPACT, && case_sem_INSN_MOVL5_COMPACT },
  138. { SH64_COMPACT_INSN_MOVL6_COMPACT, && case_sem_INSN_MOVL6_COMPACT },
  139. { SH64_COMPACT_INSN_MOVL7_COMPACT, && case_sem_INSN_MOVL7_COMPACT },
  140. { SH64_COMPACT_INSN_MOVL8_COMPACT, && case_sem_INSN_MOVL8_COMPACT },
  141. { SH64_COMPACT_INSN_MOVL9_COMPACT, && case_sem_INSN_MOVL9_COMPACT },
  142. { SH64_COMPACT_INSN_MOVL10_COMPACT, && case_sem_INSN_MOVL10_COMPACT },
  143. { SH64_COMPACT_INSN_MOVL11_COMPACT, && case_sem_INSN_MOVL11_COMPACT },
  144. { SH64_COMPACT_INSN_MOVL12_COMPACT, && case_sem_INSN_MOVL12_COMPACT },
  145. { SH64_COMPACT_INSN_MOVL13_COMPACT, && case_sem_INSN_MOVL13_COMPACT },
  146. { SH64_COMPACT_INSN_MOVW1_COMPACT, && case_sem_INSN_MOVW1_COMPACT },
  147. { SH64_COMPACT_INSN_MOVW2_COMPACT, && case_sem_INSN_MOVW2_COMPACT },
  148. { SH64_COMPACT_INSN_MOVW3_COMPACT, && case_sem_INSN_MOVW3_COMPACT },
  149. { SH64_COMPACT_INSN_MOVW4_COMPACT, && case_sem_INSN_MOVW4_COMPACT },
  150. { SH64_COMPACT_INSN_MOVW5_COMPACT, && case_sem_INSN_MOVW5_COMPACT },
  151. { SH64_COMPACT_INSN_MOVW6_COMPACT, && case_sem_INSN_MOVW6_COMPACT },
  152. { SH64_COMPACT_INSN_MOVW7_COMPACT, && case_sem_INSN_MOVW7_COMPACT },
  153. { SH64_COMPACT_INSN_MOVW8_COMPACT, && case_sem_INSN_MOVW8_COMPACT },
  154. { SH64_COMPACT_INSN_MOVW9_COMPACT, && case_sem_INSN_MOVW9_COMPACT },
  155. { SH64_COMPACT_INSN_MOVW10_COMPACT, && case_sem_INSN_MOVW10_COMPACT },
  156. { SH64_COMPACT_INSN_MOVW11_COMPACT, && case_sem_INSN_MOVW11_COMPACT },
  157. { SH64_COMPACT_INSN_MOVA_COMPACT, && case_sem_INSN_MOVA_COMPACT },
  158. { SH64_COMPACT_INSN_MOVCAL_COMPACT, && case_sem_INSN_MOVCAL_COMPACT },
  159. { SH64_COMPACT_INSN_MOVCOL_COMPACT, && case_sem_INSN_MOVCOL_COMPACT },
  160. { SH64_COMPACT_INSN_MOVT_COMPACT, && case_sem_INSN_MOVT_COMPACT },
  161. { SH64_COMPACT_INSN_MOVUAL_COMPACT, && case_sem_INSN_MOVUAL_COMPACT },
  162. { SH64_COMPACT_INSN_MOVUAL2_COMPACT, && case_sem_INSN_MOVUAL2_COMPACT },
  163. { SH64_COMPACT_INSN_MULL_COMPACT, && case_sem_INSN_MULL_COMPACT },
  164. { SH64_COMPACT_INSN_MULSW_COMPACT, && case_sem_INSN_MULSW_COMPACT },
  165. { SH64_COMPACT_INSN_MULUW_COMPACT, && case_sem_INSN_MULUW_COMPACT },
  166. { SH64_COMPACT_INSN_NEG_COMPACT, && case_sem_INSN_NEG_COMPACT },
  167. { SH64_COMPACT_INSN_NEGC_COMPACT, && case_sem_INSN_NEGC_COMPACT },
  168. { SH64_COMPACT_INSN_NOP_COMPACT, && case_sem_INSN_NOP_COMPACT },
  169. { SH64_COMPACT_INSN_NOT_COMPACT, && case_sem_INSN_NOT_COMPACT },
  170. { SH64_COMPACT_INSN_OCBI_COMPACT, && case_sem_INSN_OCBI_COMPACT },
  171. { SH64_COMPACT_INSN_OCBP_COMPACT, && case_sem_INSN_OCBP_COMPACT },
  172. { SH64_COMPACT_INSN_OCBWB_COMPACT, && case_sem_INSN_OCBWB_COMPACT },
  173. { SH64_COMPACT_INSN_OR_COMPACT, && case_sem_INSN_OR_COMPACT },
  174. { SH64_COMPACT_INSN_ORI_COMPACT, && case_sem_INSN_ORI_COMPACT },
  175. { SH64_COMPACT_INSN_ORB_COMPACT, && case_sem_INSN_ORB_COMPACT },
  176. { SH64_COMPACT_INSN_PREF_COMPACT, && case_sem_INSN_PREF_COMPACT },
  177. { SH64_COMPACT_INSN_ROTCL_COMPACT, && case_sem_INSN_ROTCL_COMPACT },
  178. { SH64_COMPACT_INSN_ROTCR_COMPACT, && case_sem_INSN_ROTCR_COMPACT },
  179. { SH64_COMPACT_INSN_ROTL_COMPACT, && case_sem_INSN_ROTL_COMPACT },
  180. { SH64_COMPACT_INSN_ROTR_COMPACT, && case_sem_INSN_ROTR_COMPACT },
  181. { SH64_COMPACT_INSN_RTS_COMPACT, && case_sem_INSN_RTS_COMPACT },
  182. { SH64_COMPACT_INSN_SETS_COMPACT, && case_sem_INSN_SETS_COMPACT },
  183. { SH64_COMPACT_INSN_SETT_COMPACT, && case_sem_INSN_SETT_COMPACT },
  184. { SH64_COMPACT_INSN_SHAD_COMPACT, && case_sem_INSN_SHAD_COMPACT },
  185. { SH64_COMPACT_INSN_SHAL_COMPACT, && case_sem_INSN_SHAL_COMPACT },
  186. { SH64_COMPACT_INSN_SHAR_COMPACT, && case_sem_INSN_SHAR_COMPACT },
  187. { SH64_COMPACT_INSN_SHLD_COMPACT, && case_sem_INSN_SHLD_COMPACT },
  188. { SH64_COMPACT_INSN_SHLL_COMPACT, && case_sem_INSN_SHLL_COMPACT },
  189. { SH64_COMPACT_INSN_SHLL2_COMPACT, && case_sem_INSN_SHLL2_COMPACT },
  190. { SH64_COMPACT_INSN_SHLL8_COMPACT, && case_sem_INSN_SHLL8_COMPACT },
  191. { SH64_COMPACT_INSN_SHLL16_COMPACT, && case_sem_INSN_SHLL16_COMPACT },
  192. { SH64_COMPACT_INSN_SHLR_COMPACT, && case_sem_INSN_SHLR_COMPACT },
  193. { SH64_COMPACT_INSN_SHLR2_COMPACT, && case_sem_INSN_SHLR2_COMPACT },
  194. { SH64_COMPACT_INSN_SHLR8_COMPACT, && case_sem_INSN_SHLR8_COMPACT },
  195. { SH64_COMPACT_INSN_SHLR16_COMPACT, && case_sem_INSN_SHLR16_COMPACT },
  196. { SH64_COMPACT_INSN_STC_GBR_COMPACT, && case_sem_INSN_STC_GBR_COMPACT },
  197. { SH64_COMPACT_INSN_STC_VBR_COMPACT, && case_sem_INSN_STC_VBR_COMPACT },
  198. { SH64_COMPACT_INSN_STCL_GBR_COMPACT, && case_sem_INSN_STCL_GBR_COMPACT },
  199. { SH64_COMPACT_INSN_STCL_VBR_COMPACT, && case_sem_INSN_STCL_VBR_COMPACT },
  200. { SH64_COMPACT_INSN_STS_FPSCR_COMPACT, && case_sem_INSN_STS_FPSCR_COMPACT },
  201. { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT, && case_sem_INSN_STSL_FPSCR_COMPACT },
  202. { SH64_COMPACT_INSN_STS_FPUL_COMPACT, && case_sem_INSN_STS_FPUL_COMPACT },
  203. { SH64_COMPACT_INSN_STSL_FPUL_COMPACT, && case_sem_INSN_STSL_FPUL_COMPACT },
  204. { SH64_COMPACT_INSN_STS_MACH_COMPACT, && case_sem_INSN_STS_MACH_COMPACT },
  205. { SH64_COMPACT_INSN_STSL_MACH_COMPACT, && case_sem_INSN_STSL_MACH_COMPACT },
  206. { SH64_COMPACT_INSN_STS_MACL_COMPACT, && case_sem_INSN_STS_MACL_COMPACT },
  207. { SH64_COMPACT_INSN_STSL_MACL_COMPACT, && case_sem_INSN_STSL_MACL_COMPACT },
  208. { SH64_COMPACT_INSN_STS_PR_COMPACT, && case_sem_INSN_STS_PR_COMPACT },
  209. { SH64_COMPACT_INSN_STSL_PR_COMPACT, && case_sem_INSN_STSL_PR_COMPACT },
  210. { SH64_COMPACT_INSN_SUB_COMPACT, && case_sem_INSN_SUB_COMPACT },
  211. { SH64_COMPACT_INSN_SUBC_COMPACT, && case_sem_INSN_SUBC_COMPACT },
  212. { SH64_COMPACT_INSN_SUBV_COMPACT, && case_sem_INSN_SUBV_COMPACT },
  213. { SH64_COMPACT_INSN_SWAPB_COMPACT, && case_sem_INSN_SWAPB_COMPACT },
  214. { SH64_COMPACT_INSN_SWAPW_COMPACT, && case_sem_INSN_SWAPW_COMPACT },
  215. { SH64_COMPACT_INSN_TASB_COMPACT, && case_sem_INSN_TASB_COMPACT },
  216. { SH64_COMPACT_INSN_TRAPA_COMPACT, && case_sem_INSN_TRAPA_COMPACT },
  217. { SH64_COMPACT_INSN_TST_COMPACT, && case_sem_INSN_TST_COMPACT },
  218. { SH64_COMPACT_INSN_TSTI_COMPACT, && case_sem_INSN_TSTI_COMPACT },
  219. { SH64_COMPACT_INSN_TSTB_COMPACT, && case_sem_INSN_TSTB_COMPACT },
  220. { SH64_COMPACT_INSN_XOR_COMPACT, && case_sem_INSN_XOR_COMPACT },
  221. { SH64_COMPACT_INSN_XORI_COMPACT, && case_sem_INSN_XORI_COMPACT },
  222. { SH64_COMPACT_INSN_XORB_COMPACT, && case_sem_INSN_XORB_COMPACT },
  223. { SH64_COMPACT_INSN_XTRCT_COMPACT, && case_sem_INSN_XTRCT_COMPACT },
  224. { 0, 0 }
  225. };
  226. int i;
  227. for (i = 0; labels[i].label != 0; ++i)
  228. {
  229. #if FAST_P
  230. CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
  231. #else
  232. CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
  233. #endif
  234. }
  235. #undef DEFINE_LABELS
  236. #endif /* DEFINE_LABELS */
  237. #ifdef DEFINE_SWITCH
  238. /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
  239. off frills like tracing and profiling. */
  240. /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
  241. that can cause it to be optimized out. Another way would be to emit
  242. special handlers into the instruction "stream". */
  243. #if FAST_P
  244. #undef CGEN_TRACE_RESULT
  245. #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
  246. #endif
  247. #undef GET_ATTR
  248. #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
  249. {
  250. #if WITH_SCACHE_PBB
  251. /* Branch to next handler without going around main loop. */
  252. #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
  253. SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
  254. #else /* ! WITH_SCACHE_PBB */
  255. #define NEXT(vpc) BREAK (sem)
  256. #ifdef __GNUC__
  257. #if FAST_P
  258. SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
  259. #else
  260. SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
  261. #endif
  262. #else
  263. SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
  264. #endif
  265. #endif /* ! WITH_SCACHE_PBB */
  266. {
  267. CASE (sem, INSN_X_INVALID) : /* --invalid-- */
  268. {
  269. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  270. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  271. #define FLD(f) abuf->fields.sfmt_empty.f
  272. int UNUSED written = 0;
  273. IADDR UNUSED pc = abuf->addr;
  274. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  275. {
  276. /* Update the recorded pc in the cpu state struct.
  277. Only necessary for WITH_SCACHE case, but to avoid the
  278. conditional compilation .... */
  279. SET_H_PC (pc);
  280. /* Virtual insns have zero size. Overwrite vpc with address of next insn
  281. using the default-insn-bitsize spec. When executing insns in parallel
  282. we may want to queue the fault and continue execution. */
  283. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  284. vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
  285. }
  286. #undef FLD
  287. }
  288. NEXT (vpc);
  289. CASE (sem, INSN_X_AFTER) : /* --after-- */
  290. {
  291. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  292. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  293. #define FLD(f) abuf->fields.sfmt_empty.f
  294. int UNUSED written = 0;
  295. IADDR UNUSED pc = abuf->addr;
  296. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  297. {
  298. #if WITH_SCACHE_PBB_SH64_COMPACT
  299. sh64_compact_pbb_after (current_cpu, sem_arg);
  300. #endif
  301. }
  302. #undef FLD
  303. }
  304. NEXT (vpc);
  305. CASE (sem, INSN_X_BEFORE) : /* --before-- */
  306. {
  307. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  308. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  309. #define FLD(f) abuf->fields.sfmt_empty.f
  310. int UNUSED written = 0;
  311. IADDR UNUSED pc = abuf->addr;
  312. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  313. {
  314. #if WITH_SCACHE_PBB_SH64_COMPACT
  315. sh64_compact_pbb_before (current_cpu, sem_arg);
  316. #endif
  317. }
  318. #undef FLD
  319. }
  320. NEXT (vpc);
  321. CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
  322. {
  323. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  324. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  325. #define FLD(f) abuf->fields.sfmt_empty.f
  326. int UNUSED written = 0;
  327. IADDR UNUSED pc = abuf->addr;
  328. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  329. {
  330. #if WITH_SCACHE_PBB_SH64_COMPACT
  331. #ifdef DEFINE_SWITCH
  332. vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
  333. pbb_br_type, pbb_br_npc);
  334. BREAK (sem);
  335. #else
  336. /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
  337. vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
  338. CPU_PBB_BR_TYPE (current_cpu),
  339. CPU_PBB_BR_NPC (current_cpu));
  340. #endif
  341. #endif
  342. }
  343. #undef FLD
  344. }
  345. NEXT (vpc);
  346. CASE (sem, INSN_X_CHAIN) : /* --chain-- */
  347. {
  348. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  349. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  350. #define FLD(f) abuf->fields.sfmt_empty.f
  351. int UNUSED written = 0;
  352. IADDR UNUSED pc = abuf->addr;
  353. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  354. {
  355. #if WITH_SCACHE_PBB_SH64_COMPACT
  356. vpc = sh64_compact_pbb_chain (current_cpu, sem_arg);
  357. #ifdef DEFINE_SWITCH
  358. BREAK (sem);
  359. #endif
  360. #endif
  361. }
  362. #undef FLD
  363. }
  364. NEXT (vpc);
  365. CASE (sem, INSN_X_BEGIN) : /* --begin-- */
  366. {
  367. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  368. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  369. #define FLD(f) abuf->fields.sfmt_empty.f
  370. int UNUSED written = 0;
  371. IADDR UNUSED pc = abuf->addr;
  372. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  373. {
  374. #if WITH_SCACHE_PBB_SH64_COMPACT
  375. #if defined DEFINE_SWITCH || defined FAST_P
  376. /* In the switch case FAST_P is a constant, allowing several optimizations
  377. in any called inline functions. */
  378. vpc = sh64_compact_pbb_begin (current_cpu, FAST_P);
  379. #else
  380. #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
  381. vpc = sh64_compact_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
  382. #else
  383. vpc = sh64_compact_pbb_begin (current_cpu, 0);
  384. #endif
  385. #endif
  386. #endif
  387. }
  388. #undef FLD
  389. }
  390. NEXT (vpc);
  391. CASE (sem, INSN_ADD_COMPACT) : /* add $rm, $rn */
  392. {
  393. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  394. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  395. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  396. int UNUSED written = 0;
  397. IADDR UNUSED pc = abuf->addr;
  398. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  399. {
  400. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  401. SET_H_GRC (FLD (f_rn), opval);
  402. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  403. }
  404. #undef FLD
  405. }
  406. NEXT (vpc);
  407. CASE (sem, INSN_ADDI_COMPACT) : /* add #$imm8, $rn */
  408. {
  409. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  410. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  411. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  412. int UNUSED written = 0;
  413. IADDR UNUSED pc = abuf->addr;
  414. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  415. {
  416. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
  417. SET_H_GRC (FLD (f_rn), opval);
  418. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  419. }
  420. #undef FLD
  421. }
  422. NEXT (vpc);
  423. CASE (sem, INSN_ADDC_COMPACT) : /* addc $rm, $rn */
  424. {
  425. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  426. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  427. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  428. int UNUSED written = 0;
  429. IADDR UNUSED pc = abuf->addr;
  430. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  431. {
  432. BI tmp_flag;
  433. tmp_flag = ADDCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
  434. {
  435. SI opval = ADDCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
  436. SET_H_GRC (FLD (f_rn), opval);
  437. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  438. }
  439. {
  440. BI opval = tmp_flag;
  441. SET_H_TBIT (opval);
  442. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  443. }
  444. }
  445. #undef FLD
  446. }
  447. NEXT (vpc);
  448. CASE (sem, INSN_ADDV_COMPACT) : /* addv $rm, $rn */
  449. {
  450. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  451. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  452. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  453. int UNUSED written = 0;
  454. IADDR UNUSED pc = abuf->addr;
  455. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  456. {
  457. BI tmp_t;
  458. tmp_t = ADDOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
  459. {
  460. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  461. SET_H_GRC (FLD (f_rn), opval);
  462. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  463. }
  464. {
  465. BI opval = tmp_t;
  466. SET_H_TBIT (opval);
  467. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  468. }
  469. }
  470. #undef FLD
  471. }
  472. NEXT (vpc);
  473. CASE (sem, INSN_AND_COMPACT) : /* and $rm64, $rn64 */
  474. {
  475. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  476. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  477. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  478. int UNUSED written = 0;
  479. IADDR UNUSED pc = abuf->addr;
  480. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  481. {
  482. DI opval = ANDDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
  483. SET_H_GR (FLD (f_rn), opval);
  484. CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
  485. }
  486. #undef FLD
  487. }
  488. NEXT (vpc);
  489. CASE (sem, INSN_ANDI_COMPACT) : /* and #$uimm8, r0 */
  490. {
  491. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  492. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  493. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  494. int UNUSED written = 0;
  495. IADDR UNUSED pc = abuf->addr;
  496. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  497. {
  498. SI opval = ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
  499. SET_H_GRC (((UINT) 0), opval);
  500. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  501. }
  502. #undef FLD
  503. }
  504. NEXT (vpc);
  505. CASE (sem, INSN_ANDB_COMPACT) : /* and.b #$imm8, @(r0, gbr) */
  506. {
  507. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  508. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  509. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  510. int UNUSED written = 0;
  511. IADDR UNUSED pc = abuf->addr;
  512. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  513. {
  514. DI tmp_addr;
  515. UQI tmp_data;
  516. tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
  517. tmp_data = ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
  518. {
  519. UQI opval = tmp_data;
  520. SETMEMUQI (current_cpu, pc, tmp_addr, opval);
  521. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  522. }
  523. }
  524. #undef FLD
  525. }
  526. NEXT (vpc);
  527. CASE (sem, INSN_BF_COMPACT) : /* bf $disp8 */
  528. {
  529. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  530. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  531. #define FLD(f) abuf->fields.sfmt_bf_compact.f
  532. int UNUSED written = 0;
  533. IADDR UNUSED pc = abuf->addr;
  534. SEM_BRANCH_INIT
  535. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  536. if (NOTBI (GET_H_TBIT ())) {
  537. {
  538. UDI opval = FLD (i_disp8);
  539. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  540. written |= (1 << 2);
  541. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  542. }
  543. }
  544. abuf->written = written;
  545. SEM_BRANCH_FINI (vpc);
  546. #undef FLD
  547. }
  548. NEXT (vpc);
  549. CASE (sem, INSN_BFS_COMPACT) : /* bf/s $disp8 */
  550. {
  551. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  552. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  553. #define FLD(f) abuf->fields.sfmt_bf_compact.f
  554. int UNUSED written = 0;
  555. IADDR UNUSED pc = abuf->addr;
  556. SEM_BRANCH_INIT
  557. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  558. if (NOTBI (GET_H_TBIT ())) {
  559. {
  560. {
  561. UDI opval = ADDDI (pc, 2);
  562. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  563. written |= (1 << 3);
  564. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  565. }
  566. ((void) 0); /*nop*/
  567. {
  568. {
  569. UDI opval = FLD (i_disp8);
  570. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  571. written |= (1 << 3);
  572. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  573. }
  574. }
  575. }
  576. }
  577. abuf->written = written;
  578. SEM_BRANCH_FINI (vpc);
  579. #undef FLD
  580. }
  581. NEXT (vpc);
  582. CASE (sem, INSN_BRA_COMPACT) : /* bra $disp12 */
  583. {
  584. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  585. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  586. #define FLD(f) abuf->fields.sfmt_bra_compact.f
  587. int UNUSED written = 0;
  588. IADDR UNUSED pc = abuf->addr;
  589. SEM_BRANCH_INIT
  590. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  591. {
  592. {
  593. UDI opval = ADDDI (pc, 2);
  594. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  595. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  596. }
  597. ((void) 0); /*nop*/
  598. {
  599. {
  600. UDI opval = FLD (i_disp12);
  601. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  602. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  603. }
  604. }
  605. }
  606. SEM_BRANCH_FINI (vpc);
  607. #undef FLD
  608. }
  609. NEXT (vpc);
  610. CASE (sem, INSN_BRAF_COMPACT) : /* braf $rn */
  611. {
  612. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  613. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  614. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  615. int UNUSED written = 0;
  616. IADDR UNUSED pc = abuf->addr;
  617. SEM_BRANCH_INIT
  618. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  619. {
  620. {
  621. UDI opval = ADDDI (pc, 2);
  622. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  623. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  624. }
  625. ((void) 0); /*nop*/
  626. {
  627. {
  628. UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
  629. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  630. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  631. }
  632. }
  633. }
  634. SEM_BRANCH_FINI (vpc);
  635. #undef FLD
  636. }
  637. NEXT (vpc);
  638. CASE (sem, INSN_BRK_COMPACT) : /* brk */
  639. {
  640. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  641. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  642. #define FLD(f) abuf->fields.sfmt_empty.f
  643. int UNUSED written = 0;
  644. IADDR UNUSED pc = abuf->addr;
  645. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  646. sh64_break (current_cpu, pc);
  647. #undef FLD
  648. }
  649. NEXT (vpc);
  650. CASE (sem, INSN_BSR_COMPACT) : /* bsr $disp12 */
  651. {
  652. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  653. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  654. #define FLD(f) abuf->fields.sfmt_bra_compact.f
  655. int UNUSED written = 0;
  656. IADDR UNUSED pc = abuf->addr;
  657. SEM_BRANCH_INIT
  658. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  659. {
  660. {
  661. {
  662. SI opval = ADDDI (pc, 4);
  663. SET_H_PR (opval);
  664. CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
  665. }
  666. }
  667. {
  668. UDI opval = ADDDI (pc, 2);
  669. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  670. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  671. }
  672. ((void) 0); /*nop*/
  673. {
  674. {
  675. UDI opval = FLD (i_disp12);
  676. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  677. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  678. }
  679. }
  680. }
  681. SEM_BRANCH_FINI (vpc);
  682. #undef FLD
  683. }
  684. NEXT (vpc);
  685. CASE (sem, INSN_BSRF_COMPACT) : /* bsrf $rn */
  686. {
  687. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  688. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  689. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  690. int UNUSED written = 0;
  691. IADDR UNUSED pc = abuf->addr;
  692. SEM_BRANCH_INIT
  693. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  694. {
  695. {
  696. {
  697. SI opval = ADDDI (pc, 4);
  698. SET_H_PR (opval);
  699. CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
  700. }
  701. }
  702. {
  703. UDI opval = ADDDI (pc, 2);
  704. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  705. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  706. }
  707. ((void) 0); /*nop*/
  708. {
  709. {
  710. UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
  711. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  712. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  713. }
  714. }
  715. }
  716. SEM_BRANCH_FINI (vpc);
  717. #undef FLD
  718. }
  719. NEXT (vpc);
  720. CASE (sem, INSN_BT_COMPACT) : /* bt $disp8 */
  721. {
  722. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  723. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  724. #define FLD(f) abuf->fields.sfmt_bf_compact.f
  725. int UNUSED written = 0;
  726. IADDR UNUSED pc = abuf->addr;
  727. SEM_BRANCH_INIT
  728. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  729. if (GET_H_TBIT ()) {
  730. {
  731. UDI opval = FLD (i_disp8);
  732. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  733. written |= (1 << 2);
  734. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  735. }
  736. }
  737. abuf->written = written;
  738. SEM_BRANCH_FINI (vpc);
  739. #undef FLD
  740. }
  741. NEXT (vpc);
  742. CASE (sem, INSN_BTS_COMPACT) : /* bt/s $disp8 */
  743. {
  744. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  745. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  746. #define FLD(f) abuf->fields.sfmt_bf_compact.f
  747. int UNUSED written = 0;
  748. IADDR UNUSED pc = abuf->addr;
  749. SEM_BRANCH_INIT
  750. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  751. if (GET_H_TBIT ()) {
  752. {
  753. {
  754. UDI opval = ADDDI (pc, 2);
  755. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  756. written |= (1 << 3);
  757. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  758. }
  759. ((void) 0); /*nop*/
  760. {
  761. {
  762. UDI opval = FLD (i_disp8);
  763. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  764. written |= (1 << 3);
  765. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  766. }
  767. }
  768. }
  769. }
  770. abuf->written = written;
  771. SEM_BRANCH_FINI (vpc);
  772. #undef FLD
  773. }
  774. NEXT (vpc);
  775. CASE (sem, INSN_CLRMAC_COMPACT) : /* clrmac */
  776. {
  777. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  778. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  779. #define FLD(f) abuf->fields.sfmt_empty.f
  780. int UNUSED written = 0;
  781. IADDR UNUSED pc = abuf->addr;
  782. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  783. {
  784. {
  785. SI opval = 0;
  786. SET_H_MACL (opval);
  787. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  788. }
  789. {
  790. SI opval = 0;
  791. SET_H_MACH (opval);
  792. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  793. }
  794. }
  795. #undef FLD
  796. }
  797. NEXT (vpc);
  798. CASE (sem, INSN_CLRS_COMPACT) : /* clrs */
  799. {
  800. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  801. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  802. #define FLD(f) abuf->fields.sfmt_empty.f
  803. int UNUSED written = 0;
  804. IADDR UNUSED pc = abuf->addr;
  805. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  806. {
  807. BI opval = 0;
  808. SET_H_SBIT (opval);
  809. CGEN_TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
  810. }
  811. #undef FLD
  812. }
  813. NEXT (vpc);
  814. CASE (sem, INSN_CLRT_COMPACT) : /* clrt */
  815. {
  816. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  817. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  818. #define FLD(f) abuf->fields.sfmt_empty.f
  819. int UNUSED written = 0;
  820. IADDR UNUSED pc = abuf->addr;
  821. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  822. {
  823. BI opval = 0;
  824. SET_H_TBIT (opval);
  825. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  826. }
  827. #undef FLD
  828. }
  829. NEXT (vpc);
  830. CASE (sem, INSN_CMPEQ_COMPACT) : /* cmp/eq $rm, $rn */
  831. {
  832. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  833. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  834. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  835. int UNUSED written = 0;
  836. IADDR UNUSED pc = abuf->addr;
  837. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  838. {
  839. BI opval = EQSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
  840. SET_H_TBIT (opval);
  841. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  842. }
  843. #undef FLD
  844. }
  845. NEXT (vpc);
  846. CASE (sem, INSN_CMPEQI_COMPACT) : /* cmp/eq #$imm8, r0 */
  847. {
  848. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  849. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  850. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  851. int UNUSED written = 0;
  852. IADDR UNUSED pc = abuf->addr;
  853. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  854. {
  855. BI opval = EQSI (GET_H_GRC (((UINT) 0)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
  856. SET_H_TBIT (opval);
  857. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  858. }
  859. #undef FLD
  860. }
  861. NEXT (vpc);
  862. CASE (sem, INSN_CMPGE_COMPACT) : /* cmp/ge $rm, $rn */
  863. {
  864. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  865. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  866. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  867. int UNUSED written = 0;
  868. IADDR UNUSED pc = abuf->addr;
  869. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  870. {
  871. BI opval = GESI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  872. SET_H_TBIT (opval);
  873. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  874. }
  875. #undef FLD
  876. }
  877. NEXT (vpc);
  878. CASE (sem, INSN_CMPGT_COMPACT) : /* cmp/gt $rm, $rn */
  879. {
  880. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  881. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  882. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  883. int UNUSED written = 0;
  884. IADDR UNUSED pc = abuf->addr;
  885. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  886. {
  887. BI opval = GTSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  888. SET_H_TBIT (opval);
  889. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  890. }
  891. #undef FLD
  892. }
  893. NEXT (vpc);
  894. CASE (sem, INSN_CMPHI_COMPACT) : /* cmp/hi $rm, $rn */
  895. {
  896. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  897. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  898. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  899. int UNUSED written = 0;
  900. IADDR UNUSED pc = abuf->addr;
  901. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  902. {
  903. BI opval = GTUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  904. SET_H_TBIT (opval);
  905. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  906. }
  907. #undef FLD
  908. }
  909. NEXT (vpc);
  910. CASE (sem, INSN_CMPHS_COMPACT) : /* cmp/hs $rm, $rn */
  911. {
  912. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  913. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  914. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  915. int UNUSED written = 0;
  916. IADDR UNUSED pc = abuf->addr;
  917. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  918. {
  919. BI opval = GEUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  920. SET_H_TBIT (opval);
  921. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  922. }
  923. #undef FLD
  924. }
  925. NEXT (vpc);
  926. CASE (sem, INSN_CMPPL_COMPACT) : /* cmp/pl $rn */
  927. {
  928. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  929. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  930. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  931. int UNUSED written = 0;
  932. IADDR UNUSED pc = abuf->addr;
  933. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  934. {
  935. BI opval = GTSI (GET_H_GRC (FLD (f_rn)), 0);
  936. SET_H_TBIT (opval);
  937. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  938. }
  939. #undef FLD
  940. }
  941. NEXT (vpc);
  942. CASE (sem, INSN_CMPPZ_COMPACT) : /* cmp/pz $rn */
  943. {
  944. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  945. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  946. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  947. int UNUSED written = 0;
  948. IADDR UNUSED pc = abuf->addr;
  949. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  950. {
  951. BI opval = GESI (GET_H_GRC (FLD (f_rn)), 0);
  952. SET_H_TBIT (opval);
  953. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  954. }
  955. #undef FLD
  956. }
  957. NEXT (vpc);
  958. CASE (sem, INSN_CMPSTR_COMPACT) : /* cmp/str $rm, $rn */
  959. {
  960. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  961. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  962. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  963. int UNUSED written = 0;
  964. IADDR UNUSED pc = abuf->addr;
  965. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  966. {
  967. BI tmp_t;
  968. SI tmp_temp;
  969. tmp_temp = XORSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
  970. tmp_t = EQSI (ANDSI (tmp_temp, 0xff000000), 0);
  971. tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 16711680), 0), tmp_t);
  972. tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 65280), 0), tmp_t);
  973. tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 255), 0), tmp_t);
  974. {
  975. BI opval = ((GTUBI (tmp_t, 0)) ? (1) : (0));
  976. SET_H_TBIT (opval);
  977. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  978. }
  979. }
  980. #undef FLD
  981. }
  982. NEXT (vpc);
  983. CASE (sem, INSN_DIV0S_COMPACT) : /* div0s $rm, $rn */
  984. {
  985. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  986. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  987. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  988. int UNUSED written = 0;
  989. IADDR UNUSED pc = abuf->addr;
  990. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  991. {
  992. {
  993. BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
  994. SET_H_QBIT (opval);
  995. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  996. }
  997. {
  998. BI opval = SRLSI (GET_H_GRC (FLD (f_rm)), 31);
  999. SET_H_MBIT (opval);
  1000. CGEN_TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
  1001. }
  1002. {
  1003. BI opval = ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm)), 31), SRLSI (GET_H_GRC (FLD (f_rn)), 31))) ? (0) : (1));
  1004. SET_H_TBIT (opval);
  1005. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1006. }
  1007. }
  1008. #undef FLD
  1009. }
  1010. NEXT (vpc);
  1011. CASE (sem, INSN_DIV0U_COMPACT) : /* div0u */
  1012. {
  1013. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1014. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1015. #define FLD(f) abuf->fields.sfmt_empty.f
  1016. int UNUSED written = 0;
  1017. IADDR UNUSED pc = abuf->addr;
  1018. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1019. {
  1020. {
  1021. BI opval = 0;
  1022. SET_H_TBIT (opval);
  1023. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1024. }
  1025. {
  1026. BI opval = 0;
  1027. SET_H_QBIT (opval);
  1028. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1029. }
  1030. {
  1031. BI opval = 0;
  1032. SET_H_MBIT (opval);
  1033. CGEN_TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
  1034. }
  1035. }
  1036. #undef FLD
  1037. }
  1038. NEXT (vpc);
  1039. CASE (sem, INSN_DIV1_COMPACT) : /* div1 $rm, $rn */
  1040. {
  1041. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1042. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1043. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1044. int UNUSED written = 0;
  1045. IADDR UNUSED pc = abuf->addr;
  1046. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1047. {
  1048. BI tmp_oldq;
  1049. SI tmp_tmp0;
  1050. UQI tmp_tmp1;
  1051. tmp_oldq = GET_H_QBIT ();
  1052. {
  1053. BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
  1054. SET_H_QBIT (opval);
  1055. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1056. }
  1057. {
  1058. SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), ZEXTBISI (GET_H_TBIT ()));
  1059. SET_H_GRC (FLD (f_rn), opval);
  1060. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1061. }
  1062. if (NOTBI (tmp_oldq)) {
  1063. if (NOTBI (GET_H_MBIT ())) {
  1064. {
  1065. tmp_tmp0 = GET_H_GRC (FLD (f_rn));
  1066. {
  1067. SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  1068. SET_H_GRC (FLD (f_rn), opval);
  1069. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1070. }
  1071. tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
  1072. if (NOTBI (GET_H_QBIT ())) {
  1073. {
  1074. BI opval = ((tmp_tmp1) ? (1) : (0));
  1075. SET_H_QBIT (opval);
  1076. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1077. }
  1078. } else {
  1079. {
  1080. BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
  1081. SET_H_QBIT (opval);
  1082. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1083. }
  1084. }
  1085. }
  1086. } else {
  1087. {
  1088. tmp_tmp0 = GET_H_GRC (FLD (f_rn));
  1089. {
  1090. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  1091. SET_H_GRC (FLD (f_rn), opval);
  1092. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1093. }
  1094. tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
  1095. if (NOTBI (GET_H_QBIT ())) {
  1096. {
  1097. BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
  1098. SET_H_QBIT (opval);
  1099. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1100. }
  1101. } else {
  1102. {
  1103. BI opval = ((tmp_tmp1) ? (1) : (0));
  1104. SET_H_QBIT (opval);
  1105. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1106. }
  1107. }
  1108. }
  1109. }
  1110. } else {
  1111. if (NOTBI (GET_H_MBIT ())) {
  1112. {
  1113. tmp_tmp0 = GET_H_GRC (FLD (f_rn));
  1114. {
  1115. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
  1116. SET_H_GRC (FLD (f_rn), opval);
  1117. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1118. }
  1119. tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
  1120. if (NOTBI (GET_H_QBIT ())) {
  1121. {
  1122. BI opval = ((tmp_tmp1) ? (1) : (0));
  1123. SET_H_QBIT (opval);
  1124. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1125. }
  1126. } else {
  1127. {
  1128. BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
  1129. SET_H_QBIT (opval);
  1130. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1131. }
  1132. }
  1133. }
  1134. } else {
  1135. {
  1136. tmp_tmp0 = GET_H_GRC (FLD (f_rn));
  1137. {
  1138. SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  1139. SET_H_GRC (FLD (f_rn), opval);
  1140. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1141. }
  1142. tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
  1143. if (NOTBI (GET_H_QBIT ())) {
  1144. {
  1145. BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
  1146. SET_H_QBIT (opval);
  1147. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1148. }
  1149. } else {
  1150. {
  1151. BI opval = ((tmp_tmp1) ? (1) : (0));
  1152. SET_H_QBIT (opval);
  1153. CGEN_TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
  1154. }
  1155. }
  1156. }
  1157. }
  1158. }
  1159. {
  1160. BI opval = ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
  1161. SET_H_TBIT (opval);
  1162. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1163. }
  1164. }
  1165. #undef FLD
  1166. }
  1167. NEXT (vpc);
  1168. CASE (sem, INSN_DIVU_COMPACT) : /* divu r0, $rn */
  1169. {
  1170. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1171. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1172. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1173. int UNUSED written = 0;
  1174. IADDR UNUSED pc = abuf->addr;
  1175. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1176. {
  1177. SI opval = UDIVSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (((UINT) 0)));
  1178. SET_H_GRC (FLD (f_rn), opval);
  1179. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1180. }
  1181. #undef FLD
  1182. }
  1183. NEXT (vpc);
  1184. CASE (sem, INSN_MULR_COMPACT) : /* mulr r0, $rn */
  1185. {
  1186. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1187. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1188. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1189. int UNUSED written = 0;
  1190. IADDR UNUSED pc = abuf->addr;
  1191. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1192. {
  1193. SI opval = MULSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (((UINT) 0)));
  1194. SET_H_GRC (FLD (f_rn), opval);
  1195. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1196. }
  1197. #undef FLD
  1198. }
  1199. NEXT (vpc);
  1200. CASE (sem, INSN_DMULSL_COMPACT) : /* dmuls.l $rm, $rn */
  1201. {
  1202. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1203. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1204. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1205. int UNUSED written = 0;
  1206. IADDR UNUSED pc = abuf->addr;
  1207. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1208. {
  1209. DI tmp_result;
  1210. tmp_result = MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm))), EXTSIDI (GET_H_GRC (FLD (f_rn))));
  1211. {
  1212. SI opval = SUBWORDDISI (tmp_result, 0);
  1213. SET_H_MACH (opval);
  1214. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  1215. }
  1216. {
  1217. SI opval = SUBWORDDISI (tmp_result, 1);
  1218. SET_H_MACL (opval);
  1219. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  1220. }
  1221. }
  1222. #undef FLD
  1223. }
  1224. NEXT (vpc);
  1225. CASE (sem, INSN_DMULUL_COMPACT) : /* dmulu.l $rm, $rn */
  1226. {
  1227. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1228. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1229. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1230. int UNUSED written = 0;
  1231. IADDR UNUSED pc = abuf->addr;
  1232. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1233. {
  1234. DI tmp_result;
  1235. tmp_result = MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm))), ZEXTSIDI (GET_H_GRC (FLD (f_rn))));
  1236. {
  1237. SI opval = SUBWORDDISI (tmp_result, 0);
  1238. SET_H_MACH (opval);
  1239. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  1240. }
  1241. {
  1242. SI opval = SUBWORDDISI (tmp_result, 1);
  1243. SET_H_MACL (opval);
  1244. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  1245. }
  1246. }
  1247. #undef FLD
  1248. }
  1249. NEXT (vpc);
  1250. CASE (sem, INSN_DT_COMPACT) : /* dt $rn */
  1251. {
  1252. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1253. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1254. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1255. int UNUSED written = 0;
  1256. IADDR UNUSED pc = abuf->addr;
  1257. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1258. {
  1259. {
  1260. SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
  1261. SET_H_GRC (FLD (f_rn), opval);
  1262. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1263. }
  1264. {
  1265. BI opval = EQSI (GET_H_GRC (FLD (f_rn)), 0);
  1266. SET_H_TBIT (opval);
  1267. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1268. }
  1269. }
  1270. #undef FLD
  1271. }
  1272. NEXT (vpc);
  1273. CASE (sem, INSN_EXTSB_COMPACT) : /* exts.b $rm, $rn */
  1274. {
  1275. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1276. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1277. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1278. int UNUSED written = 0;
  1279. IADDR UNUSED pc = abuf->addr;
  1280. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1281. {
  1282. SI opval = EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
  1283. SET_H_GRC (FLD (f_rn), opval);
  1284. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1285. }
  1286. #undef FLD
  1287. }
  1288. NEXT (vpc);
  1289. CASE (sem, INSN_EXTSW_COMPACT) : /* exts.w $rm, $rn */
  1290. {
  1291. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1292. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1293. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1294. int UNUSED written = 0;
  1295. IADDR UNUSED pc = abuf->addr;
  1296. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1297. {
  1298. SI opval = EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
  1299. SET_H_GRC (FLD (f_rn), opval);
  1300. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1301. }
  1302. #undef FLD
  1303. }
  1304. NEXT (vpc);
  1305. CASE (sem, INSN_EXTUB_COMPACT) : /* extu.b $rm, $rn */
  1306. {
  1307. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1308. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1309. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1310. int UNUSED written = 0;
  1311. IADDR UNUSED pc = abuf->addr;
  1312. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1313. {
  1314. SI opval = ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
  1315. SET_H_GRC (FLD (f_rn), opval);
  1316. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1317. }
  1318. #undef FLD
  1319. }
  1320. NEXT (vpc);
  1321. CASE (sem, INSN_EXTUW_COMPACT) : /* extu.w $rm, $rn */
  1322. {
  1323. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1324. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1325. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1326. int UNUSED written = 0;
  1327. IADDR UNUSED pc = abuf->addr;
  1328. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1329. {
  1330. SI opval = ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
  1331. SET_H_GRC (FLD (f_rn), opval);
  1332. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1333. }
  1334. #undef FLD
  1335. }
  1336. NEXT (vpc);
  1337. CASE (sem, INSN_FABS_COMPACT) : /* fabs $fsdn */
  1338. {
  1339. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1340. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1341. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1342. int UNUSED written = 0;
  1343. IADDR UNUSED pc = abuf->addr;
  1344. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1345. if (GET_H_PRBIT ()) {
  1346. {
  1347. DF opval = sh64_fabsd (current_cpu, GET_H_FSD (FLD (f_rn)));
  1348. SET_H_FSD (FLD (f_rn), opval);
  1349. written |= (1 << 2);
  1350. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1351. }
  1352. } else {
  1353. {
  1354. DF opval = sh64_fabss (current_cpu, GET_H_FSD (FLD (f_rn)));
  1355. SET_H_FSD (FLD (f_rn), opval);
  1356. written |= (1 << 2);
  1357. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1358. }
  1359. }
  1360. abuf->written = written;
  1361. #undef FLD
  1362. }
  1363. NEXT (vpc);
  1364. CASE (sem, INSN_FADD_COMPACT) : /* fadd $fsdm, $fsdn */
  1365. {
  1366. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1367. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1368. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1369. int UNUSED written = 0;
  1370. IADDR UNUSED pc = abuf->addr;
  1371. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1372. if (GET_H_PRBIT ()) {
  1373. {
  1374. DF opval = sh64_faddd (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
  1375. SET_H_FSD (FLD (f_rn), opval);
  1376. written |= (1 << 3);
  1377. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1378. }
  1379. } else {
  1380. {
  1381. DF opval = sh64_fadds (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
  1382. SET_H_FSD (FLD (f_rn), opval);
  1383. written |= (1 << 3);
  1384. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1385. }
  1386. }
  1387. abuf->written = written;
  1388. #undef FLD
  1389. }
  1390. NEXT (vpc);
  1391. CASE (sem, INSN_FCMPEQ_COMPACT) : /* fcmp/eq $fsdm, $fsdn */
  1392. {
  1393. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1394. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1395. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1396. int UNUSED written = 0;
  1397. IADDR UNUSED pc = abuf->addr;
  1398. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1399. if (GET_H_PRBIT ()) {
  1400. {
  1401. BI opval = sh64_fcmpeqd (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
  1402. SET_H_TBIT (opval);
  1403. written |= (1 << 3);
  1404. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1405. }
  1406. } else {
  1407. {
  1408. BI opval = sh64_fcmpeqs (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
  1409. SET_H_TBIT (opval);
  1410. written |= (1 << 3);
  1411. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1412. }
  1413. }
  1414. abuf->written = written;
  1415. #undef FLD
  1416. }
  1417. NEXT (vpc);
  1418. CASE (sem, INSN_FCMPGT_COMPACT) : /* fcmp/gt $fsdm, $fsdn */
  1419. {
  1420. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1421. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1422. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1423. int UNUSED written = 0;
  1424. IADDR UNUSED pc = abuf->addr;
  1425. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1426. if (GET_H_PRBIT ()) {
  1427. {
  1428. BI opval = sh64_fcmpgtd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
  1429. SET_H_TBIT (opval);
  1430. written |= (1 << 3);
  1431. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1432. }
  1433. } else {
  1434. {
  1435. BI opval = sh64_fcmpgts (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
  1436. SET_H_TBIT (opval);
  1437. written |= (1 << 3);
  1438. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  1439. }
  1440. }
  1441. abuf->written = written;
  1442. #undef FLD
  1443. }
  1444. NEXT (vpc);
  1445. CASE (sem, INSN_FCNVDS_COMPACT) : /* fcnvds $drn, fpul */
  1446. {
  1447. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1448. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1449. #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
  1450. int UNUSED written = 0;
  1451. IADDR UNUSED pc = abuf->addr;
  1452. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1453. {
  1454. SF opval = sh64_fcnvds (current_cpu, GET_H_DRC (FLD (f_dn)));
  1455. CPU (h_fr[((UINT) 32)]) = opval;
  1456. CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
  1457. }
  1458. #undef FLD
  1459. }
  1460. NEXT (vpc);
  1461. CASE (sem, INSN_FCNVSD_COMPACT) : /* fcnvsd fpul, $drn */
  1462. {
  1463. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1464. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1465. #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
  1466. int UNUSED written = 0;
  1467. IADDR UNUSED pc = abuf->addr;
  1468. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1469. {
  1470. DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[((UINT) 32)]));
  1471. SET_H_DRC (FLD (f_dn), opval);
  1472. CGEN_TRACE_RESULT (current_cpu, abuf, "drc", 'f', opval);
  1473. }
  1474. #undef FLD
  1475. }
  1476. NEXT (vpc);
  1477. CASE (sem, INSN_FDIV_COMPACT) : /* fdiv $fsdm, $fsdn */
  1478. {
  1479. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1480. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1481. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1482. int UNUSED written = 0;
  1483. IADDR UNUSED pc = abuf->addr;
  1484. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1485. if (GET_H_PRBIT ()) {
  1486. {
  1487. DF opval = sh64_fdivd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
  1488. SET_H_FSD (FLD (f_rn), opval);
  1489. written |= (1 << 3);
  1490. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1491. }
  1492. } else {
  1493. {
  1494. DF opval = sh64_fdivs (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
  1495. SET_H_FSD (FLD (f_rn), opval);
  1496. written |= (1 << 3);
  1497. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1498. }
  1499. }
  1500. abuf->written = written;
  1501. #undef FLD
  1502. }
  1503. NEXT (vpc);
  1504. CASE (sem, INSN_FIPR_COMPACT) : /* fipr $fvm, $fvn */
  1505. {
  1506. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1507. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1508. #define FLD(f) abuf->fields.sfmt_fipr_compact.f
  1509. int UNUSED written = 0;
  1510. IADDR UNUSED pc = abuf->addr;
  1511. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1512. sh64_fipr (current_cpu, FLD (f_vm), FLD (f_vn));
  1513. #undef FLD
  1514. }
  1515. NEXT (vpc);
  1516. CASE (sem, INSN_FLDS_COMPACT) : /* flds $frn, fpul */
  1517. {
  1518. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1519. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1520. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1521. int UNUSED written = 0;
  1522. IADDR UNUSED pc = abuf->addr;
  1523. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1524. {
  1525. SF opval = GET_H_FRC (FLD (f_rn));
  1526. CPU (h_fr[((UINT) 32)]) = opval;
  1527. CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
  1528. }
  1529. #undef FLD
  1530. }
  1531. NEXT (vpc);
  1532. CASE (sem, INSN_FLDI0_COMPACT) : /* fldi0 $frn */
  1533. {
  1534. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1535. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1536. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1537. int UNUSED written = 0;
  1538. IADDR UNUSED pc = abuf->addr;
  1539. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1540. {
  1541. SF opval = sh64_fldi0 (current_cpu);
  1542. SET_H_FRC (FLD (f_rn), opval);
  1543. CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
  1544. }
  1545. #undef FLD
  1546. }
  1547. NEXT (vpc);
  1548. CASE (sem, INSN_FLDI1_COMPACT) : /* fldi1 $frn */
  1549. {
  1550. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1551. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1552. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1553. int UNUSED written = 0;
  1554. IADDR UNUSED pc = abuf->addr;
  1555. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1556. {
  1557. SF opval = sh64_fldi1 (current_cpu);
  1558. SET_H_FRC (FLD (f_rn), opval);
  1559. CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
  1560. }
  1561. #undef FLD
  1562. }
  1563. NEXT (vpc);
  1564. CASE (sem, INSN_FLOAT_COMPACT) : /* float fpul, $fsdn */
  1565. {
  1566. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1567. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1568. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1569. int UNUSED written = 0;
  1570. IADDR UNUSED pc = abuf->addr;
  1571. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1572. if (GET_H_PRBIT ()) {
  1573. {
  1574. DF opval = sh64_floatld (current_cpu, CPU (h_fr[((UINT) 32)]));
  1575. SET_H_FSD (FLD (f_rn), opval);
  1576. written |= (1 << 2);
  1577. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1578. }
  1579. } else {
  1580. {
  1581. DF opval = sh64_floatls (current_cpu, CPU (h_fr[((UINT) 32)]));
  1582. SET_H_FSD (FLD (f_rn), opval);
  1583. written |= (1 << 2);
  1584. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1585. }
  1586. }
  1587. abuf->written = written;
  1588. #undef FLD
  1589. }
  1590. NEXT (vpc);
  1591. CASE (sem, INSN_FMAC_COMPACT) : /* fmac fr0, $frm, $frn */
  1592. {
  1593. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1594. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1595. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1596. int UNUSED written = 0;
  1597. IADDR UNUSED pc = abuf->addr;
  1598. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1599. {
  1600. SF opval = sh64_fmacs (current_cpu, GET_H_FRC (((UINT) 0)), GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
  1601. SET_H_FRC (FLD (f_rn), opval);
  1602. CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
  1603. }
  1604. #undef FLD
  1605. }
  1606. NEXT (vpc);
  1607. CASE (sem, INSN_FMOV1_COMPACT) : /* fmov $fmovm, $fmovn */
  1608. {
  1609. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1610. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1611. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1612. int UNUSED written = 0;
  1613. IADDR UNUSED pc = abuf->addr;
  1614. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1615. {
  1616. DF opval = GET_H_FMOV (FLD (f_rm));
  1617. SET_H_FMOV (FLD (f_rn), opval);
  1618. CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
  1619. }
  1620. #undef FLD
  1621. }
  1622. NEXT (vpc);
  1623. CASE (sem, INSN_FMOV2_COMPACT) : /* fmov @$rm, $fmovn */
  1624. {
  1625. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1626. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1627. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1628. int UNUSED written = 0;
  1629. IADDR UNUSED pc = abuf->addr;
  1630. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1631. if (NOTBI (GET_H_SZBIT ())) {
  1632. {
  1633. DF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  1634. SET_H_FMOV (FLD (f_rn), opval);
  1635. written |= (1 << 4);
  1636. CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
  1637. }
  1638. } else {
  1639. {
  1640. DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  1641. SET_H_FMOV (FLD (f_rn), opval);
  1642. written |= (1 << 4);
  1643. CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
  1644. }
  1645. }
  1646. abuf->written = written;
  1647. #undef FLD
  1648. }
  1649. NEXT (vpc);
  1650. CASE (sem, INSN_FMOV3_COMPACT) : /* fmov @${rm}+, fmovn */
  1651. {
  1652. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1653. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1654. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1655. int UNUSED written = 0;
  1656. IADDR UNUSED pc = abuf->addr;
  1657. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1658. if (NOTBI (GET_H_SZBIT ())) {
  1659. {
  1660. {
  1661. DF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  1662. SET_H_FMOV (FLD (f_rn), opval);
  1663. written |= (1 << 4);
  1664. CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
  1665. }
  1666. {
  1667. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
  1668. SET_H_GRC (FLD (f_rm), opval);
  1669. written |= (1 << 5);
  1670. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1671. }
  1672. }
  1673. } else {
  1674. {
  1675. {
  1676. DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  1677. SET_H_FMOV (FLD (f_rn), opval);
  1678. written |= (1 << 4);
  1679. CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
  1680. }
  1681. {
  1682. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 8);
  1683. SET_H_GRC (FLD (f_rm), opval);
  1684. written |= (1 << 5);
  1685. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1686. }
  1687. }
  1688. }
  1689. abuf->written = written;
  1690. #undef FLD
  1691. }
  1692. NEXT (vpc);
  1693. CASE (sem, INSN_FMOV4_COMPACT) : /* fmov @(r0, $rm), $fmovn */
  1694. {
  1695. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1696. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1697. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1698. int UNUSED written = 0;
  1699. IADDR UNUSED pc = abuf->addr;
  1700. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1701. if (NOTBI (GET_H_SZBIT ())) {
  1702. {
  1703. DF opval = GETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
  1704. SET_H_FMOV (FLD (f_rn), opval);
  1705. written |= (1 << 5);
  1706. CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
  1707. }
  1708. } else {
  1709. {
  1710. DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
  1711. SET_H_FMOV (FLD (f_rn), opval);
  1712. written |= (1 << 5);
  1713. CGEN_TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
  1714. }
  1715. }
  1716. abuf->written = written;
  1717. #undef FLD
  1718. }
  1719. NEXT (vpc);
  1720. CASE (sem, INSN_FMOV5_COMPACT) : /* fmov $fmovm, @$rn */
  1721. {
  1722. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1723. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1724. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1725. int UNUSED written = 0;
  1726. IADDR UNUSED pc = abuf->addr;
  1727. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1728. if (NOTBI (GET_H_SZBIT ())) {
  1729. {
  1730. SF opval = GET_H_FMOV (FLD (f_rm));
  1731. SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  1732. written |= (1 << 4);
  1733. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  1734. }
  1735. } else {
  1736. {
  1737. DF opval = GET_H_FMOV (FLD (f_rm));
  1738. SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  1739. written |= (1 << 3);
  1740. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  1741. }
  1742. }
  1743. abuf->written = written;
  1744. #undef FLD
  1745. }
  1746. NEXT (vpc);
  1747. CASE (sem, INSN_FMOV6_COMPACT) : /* fmov $fmovm, @-$rn */
  1748. {
  1749. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1750. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1751. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1752. int UNUSED written = 0;
  1753. IADDR UNUSED pc = abuf->addr;
  1754. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1755. if (NOTBI (GET_H_SZBIT ())) {
  1756. {
  1757. {
  1758. SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  1759. SET_H_GRC (FLD (f_rn), opval);
  1760. written |= (1 << 5);
  1761. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1762. }
  1763. {
  1764. SF opval = GET_H_FMOV (FLD (f_rm));
  1765. SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  1766. written |= (1 << 4);
  1767. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  1768. }
  1769. }
  1770. } else {
  1771. {
  1772. {
  1773. SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 8);
  1774. SET_H_GRC (FLD (f_rn), opval);
  1775. written |= (1 << 5);
  1776. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  1777. }
  1778. {
  1779. DF opval = GET_H_FMOV (FLD (f_rm));
  1780. SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  1781. written |= (1 << 3);
  1782. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  1783. }
  1784. }
  1785. }
  1786. abuf->written = written;
  1787. #undef FLD
  1788. }
  1789. NEXT (vpc);
  1790. CASE (sem, INSN_FMOV7_COMPACT) : /* fmov $fmovm, @(r0, $rn) */
  1791. {
  1792. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1793. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1794. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1795. int UNUSED written = 0;
  1796. IADDR UNUSED pc = abuf->addr;
  1797. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1798. if (NOTBI (GET_H_SZBIT ())) {
  1799. {
  1800. SF opval = GET_H_FMOV (FLD (f_rm));
  1801. SETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
  1802. written |= (1 << 5);
  1803. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  1804. }
  1805. } else {
  1806. {
  1807. DF opval = GET_H_FMOV (FLD (f_rm));
  1808. SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
  1809. written |= (1 << 4);
  1810. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  1811. }
  1812. }
  1813. abuf->written = written;
  1814. #undef FLD
  1815. }
  1816. NEXT (vpc);
  1817. CASE (sem, INSN_FMOV8_COMPACT) : /* fmov.d @($imm12x8, $rm), $drn */
  1818. {
  1819. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1820. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1821. #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
  1822. int UNUSED written = 0;
  1823. IADDR UNUSED pc = abuf->addr;
  1824. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1825. {
  1826. DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm12x8)));
  1827. SET_H_DRC (FLD (f_dn), opval);
  1828. CGEN_TRACE_RESULT (current_cpu, abuf, "drc", 'f', opval);
  1829. }
  1830. #undef FLD
  1831. }
  1832. NEXT (vpc);
  1833. CASE (sem, INSN_FMOV9_COMPACT) : /* mov.l $drm, @($imm12x8, $rn) */
  1834. {
  1835. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1836. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1837. #define FLD(f) abuf->fields.sfmt_fmov9_compact.f
  1838. int UNUSED written = 0;
  1839. IADDR UNUSED pc = abuf->addr;
  1840. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1841. {
  1842. DF opval = GET_H_DRC (FLD (f_dm));
  1843. SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm12x8)), opval);
  1844. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  1845. }
  1846. #undef FLD
  1847. }
  1848. NEXT (vpc);
  1849. CASE (sem, INSN_FMUL_COMPACT) : /* fmul $fsdm, $fsdn */
  1850. {
  1851. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1852. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1853. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1854. int UNUSED written = 0;
  1855. IADDR UNUSED pc = abuf->addr;
  1856. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1857. if (GET_H_PRBIT ()) {
  1858. {
  1859. DF opval = sh64_fmuld (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
  1860. SET_H_FSD (FLD (f_rn), opval);
  1861. written |= (1 << 3);
  1862. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1863. }
  1864. } else {
  1865. {
  1866. DF opval = sh64_fmuls (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
  1867. SET_H_FSD (FLD (f_rn), opval);
  1868. written |= (1 << 3);
  1869. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1870. }
  1871. }
  1872. abuf->written = written;
  1873. #undef FLD
  1874. }
  1875. NEXT (vpc);
  1876. CASE (sem, INSN_FNEG_COMPACT) : /* fneg $fsdn */
  1877. {
  1878. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1879. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1880. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1881. int UNUSED written = 0;
  1882. IADDR UNUSED pc = abuf->addr;
  1883. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1884. if (GET_H_PRBIT ()) {
  1885. {
  1886. DF opval = sh64_fnegd (current_cpu, GET_H_FSD (FLD (f_rn)));
  1887. SET_H_FSD (FLD (f_rn), opval);
  1888. written |= (1 << 2);
  1889. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1890. }
  1891. } else {
  1892. {
  1893. DF opval = sh64_fnegs (current_cpu, GET_H_FSD (FLD (f_rn)));
  1894. SET_H_FSD (FLD (f_rn), opval);
  1895. written |= (1 << 2);
  1896. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1897. }
  1898. }
  1899. abuf->written = written;
  1900. #undef FLD
  1901. }
  1902. NEXT (vpc);
  1903. CASE (sem, INSN_FRCHG_COMPACT) : /* frchg */
  1904. {
  1905. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1906. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1907. #define FLD(f) abuf->fields.sfmt_empty.f
  1908. int UNUSED written = 0;
  1909. IADDR UNUSED pc = abuf->addr;
  1910. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1911. {
  1912. BI opval = NOTBI (GET_H_FRBIT ());
  1913. SET_H_FRBIT (opval);
  1914. CGEN_TRACE_RESULT (current_cpu, abuf, "frbit", 'x', opval);
  1915. }
  1916. #undef FLD
  1917. }
  1918. NEXT (vpc);
  1919. CASE (sem, INSN_FSCHG_COMPACT) : /* fschg */
  1920. {
  1921. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1922. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1923. #define FLD(f) abuf->fields.sfmt_empty.f
  1924. int UNUSED written = 0;
  1925. IADDR UNUSED pc = abuf->addr;
  1926. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1927. {
  1928. BI opval = NOTBI (GET_H_SZBIT ());
  1929. SET_H_SZBIT (opval);
  1930. CGEN_TRACE_RESULT (current_cpu, abuf, "szbit", 'x', opval);
  1931. }
  1932. #undef FLD
  1933. }
  1934. NEXT (vpc);
  1935. CASE (sem, INSN_FSQRT_COMPACT) : /* fsqrt $fsdn */
  1936. {
  1937. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1938. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1939. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1940. int UNUSED written = 0;
  1941. IADDR UNUSED pc = abuf->addr;
  1942. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1943. if (GET_H_PRBIT ()) {
  1944. {
  1945. DF opval = sh64_fsqrtd (current_cpu, GET_H_FSD (FLD (f_rn)));
  1946. SET_H_FSD (FLD (f_rn), opval);
  1947. written |= (1 << 2);
  1948. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1949. }
  1950. } else {
  1951. {
  1952. DF opval = sh64_fsqrts (current_cpu, GET_H_FSD (FLD (f_rn)));
  1953. SET_H_FSD (FLD (f_rn), opval);
  1954. written |= (1 << 2);
  1955. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1956. }
  1957. }
  1958. abuf->written = written;
  1959. #undef FLD
  1960. }
  1961. NEXT (vpc);
  1962. CASE (sem, INSN_FSTS_COMPACT) : /* fsts fpul, $frn */
  1963. {
  1964. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1965. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1966. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  1967. int UNUSED written = 0;
  1968. IADDR UNUSED pc = abuf->addr;
  1969. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1970. {
  1971. SF opval = CPU (h_fr[((UINT) 32)]);
  1972. SET_H_FRC (FLD (f_rn), opval);
  1973. CGEN_TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
  1974. }
  1975. #undef FLD
  1976. }
  1977. NEXT (vpc);
  1978. CASE (sem, INSN_FSUB_COMPACT) : /* fsub $fsdm, $fsdn */
  1979. {
  1980. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1981. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1982. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  1983. int UNUSED written = 0;
  1984. IADDR UNUSED pc = abuf->addr;
  1985. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  1986. if (GET_H_PRBIT ()) {
  1987. {
  1988. DF opval = sh64_fsubd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
  1989. SET_H_FSD (FLD (f_rn), opval);
  1990. written |= (1 << 3);
  1991. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1992. }
  1993. } else {
  1994. {
  1995. DF opval = sh64_fsubs (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
  1996. SET_H_FSD (FLD (f_rn), opval);
  1997. written |= (1 << 3);
  1998. CGEN_TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
  1999. }
  2000. }
  2001. abuf->written = written;
  2002. #undef FLD
  2003. }
  2004. NEXT (vpc);
  2005. CASE (sem, INSN_FTRC_COMPACT) : /* ftrc $fsdn, fpul */
  2006. {
  2007. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2008. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2009. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2010. int UNUSED written = 0;
  2011. IADDR UNUSED pc = abuf->addr;
  2012. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2013. {
  2014. 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)))));
  2015. CPU (h_fr[((UINT) 32)]) = opval;
  2016. CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
  2017. }
  2018. #undef FLD
  2019. }
  2020. NEXT (vpc);
  2021. CASE (sem, INSN_FTRV_COMPACT) : /* ftrv xmtrx, $fvn */
  2022. {
  2023. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2024. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2025. #define FLD(f) abuf->fields.sfmt_fipr_compact.f
  2026. int UNUSED written = 0;
  2027. IADDR UNUSED pc = abuf->addr;
  2028. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2029. sh64_ftrv (current_cpu, FLD (f_vn));
  2030. #undef FLD
  2031. }
  2032. NEXT (vpc);
  2033. CASE (sem, INSN_JMP_COMPACT) : /* jmp @$rn */
  2034. {
  2035. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2036. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2037. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2038. int UNUSED written = 0;
  2039. IADDR UNUSED pc = abuf->addr;
  2040. SEM_BRANCH_INIT
  2041. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2042. {
  2043. {
  2044. UDI opval = ADDDI (pc, 2);
  2045. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  2046. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  2047. }
  2048. ((void) 0); /*nop*/
  2049. {
  2050. {
  2051. UDI opval = GET_H_GRC (FLD (f_rn));
  2052. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  2053. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  2054. }
  2055. }
  2056. ((void) 0); /*nop*/
  2057. }
  2058. SEM_BRANCH_FINI (vpc);
  2059. #undef FLD
  2060. }
  2061. NEXT (vpc);
  2062. CASE (sem, INSN_JSR_COMPACT) : /* jsr @$rn */
  2063. {
  2064. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2065. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2066. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2067. int UNUSED written = 0;
  2068. IADDR UNUSED pc = abuf->addr;
  2069. SEM_BRANCH_INIT
  2070. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2071. {
  2072. {
  2073. {
  2074. SI opval = ADDDI (pc, 4);
  2075. SET_H_PR (opval);
  2076. CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
  2077. }
  2078. }
  2079. {
  2080. UDI opval = ADDDI (pc, 2);
  2081. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  2082. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  2083. }
  2084. ((void) 0); /*nop*/
  2085. {
  2086. {
  2087. UDI opval = GET_H_GRC (FLD (f_rn));
  2088. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  2089. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  2090. }
  2091. }
  2092. ((void) 0); /*nop*/
  2093. }
  2094. SEM_BRANCH_FINI (vpc);
  2095. #undef FLD
  2096. }
  2097. NEXT (vpc);
  2098. CASE (sem, INSN_LDC_GBR_COMPACT) : /* ldc $rn, gbr */
  2099. {
  2100. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2101. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2102. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2103. int UNUSED written = 0;
  2104. IADDR UNUSED pc = abuf->addr;
  2105. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2106. {
  2107. SI opval = GET_H_GRC (FLD (f_rn));
  2108. SET_H_GBR (opval);
  2109. CGEN_TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
  2110. }
  2111. #undef FLD
  2112. }
  2113. NEXT (vpc);
  2114. CASE (sem, INSN_LDC_VBR_COMPACT) : /* ldc $rn, vbr */
  2115. {
  2116. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2117. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2118. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2119. int UNUSED written = 0;
  2120. IADDR UNUSED pc = abuf->addr;
  2121. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2122. {
  2123. SI opval = GET_H_GRC (FLD (f_rn));
  2124. SET_H_VBR (opval);
  2125. CGEN_TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
  2126. }
  2127. #undef FLD
  2128. }
  2129. NEXT (vpc);
  2130. CASE (sem, INSN_LDC_SR_COMPACT) : /* ldc $rn, sr */
  2131. {
  2132. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2133. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2134. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2135. int UNUSED written = 0;
  2136. IADDR UNUSED pc = abuf->addr;
  2137. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2138. {
  2139. SI opval = GET_H_GRC (FLD (f_rn));
  2140. CPU (h_sr) = opval;
  2141. CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
  2142. }
  2143. #undef FLD
  2144. }
  2145. NEXT (vpc);
  2146. CASE (sem, INSN_LDCL_GBR_COMPACT) : /* ldc.l @${rn}+, gbr */
  2147. {
  2148. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2149. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2150. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2151. int UNUSED written = 0;
  2152. IADDR UNUSED pc = abuf->addr;
  2153. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2154. {
  2155. {
  2156. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2157. SET_H_GBR (opval);
  2158. CGEN_TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
  2159. }
  2160. {
  2161. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2162. SET_H_GRC (FLD (f_rn), opval);
  2163. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2164. }
  2165. }
  2166. #undef FLD
  2167. }
  2168. NEXT (vpc);
  2169. CASE (sem, INSN_LDCL_VBR_COMPACT) : /* ldc.l @${rn}+, vbr */
  2170. {
  2171. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2172. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2173. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2174. int UNUSED written = 0;
  2175. IADDR UNUSED pc = abuf->addr;
  2176. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2177. {
  2178. {
  2179. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2180. SET_H_VBR (opval);
  2181. CGEN_TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
  2182. }
  2183. {
  2184. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2185. SET_H_GRC (FLD (f_rn), opval);
  2186. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2187. }
  2188. }
  2189. #undef FLD
  2190. }
  2191. NEXT (vpc);
  2192. CASE (sem, INSN_LDS_FPSCR_COMPACT) : /* lds $rn, fpscr */
  2193. {
  2194. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2195. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2196. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2197. int UNUSED written = 0;
  2198. IADDR UNUSED pc = abuf->addr;
  2199. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2200. {
  2201. SI opval = GET_H_GRC (FLD (f_rn));
  2202. CPU (h_fpscr) = opval;
  2203. CGEN_TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
  2204. }
  2205. #undef FLD
  2206. }
  2207. NEXT (vpc);
  2208. CASE (sem, INSN_LDSL_FPSCR_COMPACT) : /* lds.l @${rn}+, fpscr */
  2209. {
  2210. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2211. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2212. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2213. int UNUSED written = 0;
  2214. IADDR UNUSED pc = abuf->addr;
  2215. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2216. {
  2217. {
  2218. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2219. CPU (h_fpscr) = opval;
  2220. CGEN_TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
  2221. }
  2222. {
  2223. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2224. SET_H_GRC (FLD (f_rn), opval);
  2225. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2226. }
  2227. }
  2228. #undef FLD
  2229. }
  2230. NEXT (vpc);
  2231. CASE (sem, INSN_LDS_FPUL_COMPACT) : /* lds $rn, fpul */
  2232. {
  2233. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2234. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2235. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2236. int UNUSED written = 0;
  2237. IADDR UNUSED pc = abuf->addr;
  2238. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2239. {
  2240. SF opval = SUBWORDSISF (GET_H_GRC (FLD (f_rn)));
  2241. CPU (h_fr[((UINT) 32)]) = opval;
  2242. CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
  2243. }
  2244. #undef FLD
  2245. }
  2246. NEXT (vpc);
  2247. CASE (sem, INSN_LDSL_FPUL_COMPACT) : /* lds.l @${rn}+, fpul */
  2248. {
  2249. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2250. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2251. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2252. int UNUSED written = 0;
  2253. IADDR UNUSED pc = abuf->addr;
  2254. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2255. {
  2256. {
  2257. SF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2258. CPU (h_fr[((UINT) 32)]) = opval;
  2259. CGEN_TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
  2260. }
  2261. {
  2262. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2263. SET_H_GRC (FLD (f_rn), opval);
  2264. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2265. }
  2266. }
  2267. #undef FLD
  2268. }
  2269. NEXT (vpc);
  2270. CASE (sem, INSN_LDS_MACH_COMPACT) : /* lds $rn, mach */
  2271. {
  2272. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2273. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2274. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2275. int UNUSED written = 0;
  2276. IADDR UNUSED pc = abuf->addr;
  2277. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2278. {
  2279. SI opval = GET_H_GRC (FLD (f_rn));
  2280. SET_H_MACH (opval);
  2281. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  2282. }
  2283. #undef FLD
  2284. }
  2285. NEXT (vpc);
  2286. CASE (sem, INSN_LDSL_MACH_COMPACT) : /* lds.l @${rn}+, mach */
  2287. {
  2288. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2289. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2290. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2291. int UNUSED written = 0;
  2292. IADDR UNUSED pc = abuf->addr;
  2293. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2294. {
  2295. {
  2296. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2297. SET_H_MACH (opval);
  2298. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  2299. }
  2300. {
  2301. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2302. SET_H_GRC (FLD (f_rn), opval);
  2303. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2304. }
  2305. }
  2306. #undef FLD
  2307. }
  2308. NEXT (vpc);
  2309. CASE (sem, INSN_LDS_MACL_COMPACT) : /* lds $rn, macl */
  2310. {
  2311. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2312. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2313. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2314. int UNUSED written = 0;
  2315. IADDR UNUSED pc = abuf->addr;
  2316. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2317. {
  2318. SI opval = GET_H_GRC (FLD (f_rn));
  2319. SET_H_MACL (opval);
  2320. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  2321. }
  2322. #undef FLD
  2323. }
  2324. NEXT (vpc);
  2325. CASE (sem, INSN_LDSL_MACL_COMPACT) : /* lds.l @${rn}+, macl */
  2326. {
  2327. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2328. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2329. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2330. int UNUSED written = 0;
  2331. IADDR UNUSED pc = abuf->addr;
  2332. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2333. {
  2334. {
  2335. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2336. SET_H_MACL (opval);
  2337. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  2338. }
  2339. {
  2340. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2341. SET_H_GRC (FLD (f_rn), opval);
  2342. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2343. }
  2344. }
  2345. #undef FLD
  2346. }
  2347. NEXT (vpc);
  2348. CASE (sem, INSN_LDS_PR_COMPACT) : /* lds $rn, pr */
  2349. {
  2350. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2351. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2352. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2353. int UNUSED written = 0;
  2354. IADDR UNUSED pc = abuf->addr;
  2355. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2356. {
  2357. SI opval = GET_H_GRC (FLD (f_rn));
  2358. SET_H_PR (opval);
  2359. CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
  2360. }
  2361. #undef FLD
  2362. }
  2363. NEXT (vpc);
  2364. CASE (sem, INSN_LDSL_PR_COMPACT) : /* lds.l @${rn}+, pr */
  2365. {
  2366. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2367. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2368. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  2369. int UNUSED written = 0;
  2370. IADDR UNUSED pc = abuf->addr;
  2371. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2372. {
  2373. {
  2374. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2375. SET_H_PR (opval);
  2376. CGEN_TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
  2377. }
  2378. {
  2379. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2380. SET_H_GRC (FLD (f_rn), opval);
  2381. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2382. }
  2383. }
  2384. #undef FLD
  2385. }
  2386. NEXT (vpc);
  2387. CASE (sem, INSN_MACL_COMPACT) : /* mac.l @${rm}+, @${rn}+ */
  2388. {
  2389. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2390. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2391. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2392. int UNUSED written = 0;
  2393. IADDR UNUSED pc = abuf->addr;
  2394. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2395. {
  2396. DI tmp_tmpry;
  2397. DI tmp_mac;
  2398. DI tmp_result;
  2399. SI tmp_x;
  2400. SI tmp_y;
  2401. tmp_x = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2402. {
  2403. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2404. SET_H_GRC (FLD (f_rn), opval);
  2405. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2406. }
  2407. if (EQSI (FLD (f_rn), FLD (f_rm))) {
  2408. {
  2409. {
  2410. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  2411. SET_H_GRC (FLD (f_rn), opval);
  2412. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2413. }
  2414. {
  2415. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
  2416. SET_H_GRC (FLD (f_rm), opval);
  2417. written |= (1 << 11);
  2418. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2419. }
  2420. }
  2421. }
  2422. tmp_y = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  2423. {
  2424. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
  2425. SET_H_GRC (FLD (f_rm), opval);
  2426. written |= (1 << 11);
  2427. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2428. }
  2429. tmp_tmpry = MULDI (ZEXTSIDI (tmp_x), ZEXTSIDI (tmp_y));
  2430. tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
  2431. tmp_result = ADDDI (tmp_mac, tmp_tmpry);
  2432. {
  2433. if (GET_H_SBIT ()) {
  2434. {
  2435. SI tmp_min;
  2436. SI tmp_max;
  2437. tmp_max = SRLDI (INVDI (0), 16);
  2438. tmp_min = SRLDI (INVDI (0), 15);
  2439. if (GTDI (tmp_result, tmp_max)) {
  2440. tmp_result = tmp_max;
  2441. } else {
  2442. if (LTDI (tmp_result, tmp_min)) {
  2443. tmp_result = tmp_min;
  2444. }
  2445. }
  2446. }
  2447. }
  2448. {
  2449. SI opval = SUBWORDDISI (tmp_result, 0);
  2450. SET_H_MACH (opval);
  2451. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  2452. }
  2453. {
  2454. SI opval = SUBWORDDISI (tmp_result, 1);
  2455. SET_H_MACL (opval);
  2456. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  2457. }
  2458. }
  2459. }
  2460. abuf->written = written;
  2461. #undef FLD
  2462. }
  2463. NEXT (vpc);
  2464. CASE (sem, INSN_MACW_COMPACT) : /* mac.w @${rm}+, @${rn}+ */
  2465. {
  2466. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2467. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2468. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2469. int UNUSED written = 0;
  2470. IADDR UNUSED pc = abuf->addr;
  2471. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2472. {
  2473. SI tmp_tmpry;
  2474. DI tmp_mac;
  2475. DI tmp_result;
  2476. HI tmp_x;
  2477. HI tmp_y;
  2478. tmp_x = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  2479. {
  2480. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
  2481. SET_H_GRC (FLD (f_rn), opval);
  2482. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2483. }
  2484. if (EQSI (FLD (f_rn), FLD (f_rm))) {
  2485. {
  2486. {
  2487. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
  2488. SET_H_GRC (FLD (f_rn), opval);
  2489. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2490. }
  2491. {
  2492. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
  2493. SET_H_GRC (FLD (f_rm), opval);
  2494. written |= (1 << 11);
  2495. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2496. }
  2497. }
  2498. }
  2499. tmp_y = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  2500. {
  2501. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
  2502. SET_H_GRC (FLD (f_rm), opval);
  2503. written |= (1 << 11);
  2504. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2505. }
  2506. tmp_tmpry = MULSI (ZEXTHISI (tmp_x), ZEXTHISI (tmp_y));
  2507. if (GET_H_SBIT ()) {
  2508. {
  2509. if (ADDOFSI (tmp_tmpry, GET_H_MACL (), 0)) {
  2510. {
  2511. SI opval = 1;
  2512. SET_H_MACH (opval);
  2513. written |= (1 << 9);
  2514. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  2515. }
  2516. }
  2517. {
  2518. SI opval = ADDSI (tmp_tmpry, GET_H_MACL ());
  2519. SET_H_MACL (opval);
  2520. written |= (1 << 10);
  2521. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  2522. }
  2523. }
  2524. } else {
  2525. {
  2526. tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
  2527. tmp_result = ADDDI (tmp_mac, EXTSIDI (tmp_tmpry));
  2528. {
  2529. SI opval = SUBWORDDISI (tmp_result, 0);
  2530. SET_H_MACH (opval);
  2531. written |= (1 << 9);
  2532. CGEN_TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
  2533. }
  2534. {
  2535. SI opval = SUBWORDDISI (tmp_result, 1);
  2536. SET_H_MACL (opval);
  2537. written |= (1 << 10);
  2538. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  2539. }
  2540. }
  2541. }
  2542. }
  2543. abuf->written = written;
  2544. #undef FLD
  2545. }
  2546. NEXT (vpc);
  2547. CASE (sem, INSN_MOV_COMPACT) : /* mov $rm64, $rn64 */
  2548. {
  2549. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2550. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2551. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2552. int UNUSED written = 0;
  2553. IADDR UNUSED pc = abuf->addr;
  2554. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2555. {
  2556. DI opval = GET_H_GR (FLD (f_rm));
  2557. SET_H_GR (FLD (f_rn), opval);
  2558. CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
  2559. }
  2560. #undef FLD
  2561. }
  2562. NEXT (vpc);
  2563. CASE (sem, INSN_MOVI_COMPACT) : /* mov #$imm8, $rn */
  2564. {
  2565. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2566. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2567. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  2568. int UNUSED written = 0;
  2569. IADDR UNUSED pc = abuf->addr;
  2570. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2571. {
  2572. SI opval = EXTQIDI (ANDQI (FLD (f_imm8), 255));
  2573. SET_H_GRC (FLD (f_rn), opval);
  2574. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2575. }
  2576. #undef FLD
  2577. }
  2578. NEXT (vpc);
  2579. CASE (sem, INSN_MOVI20_COMPACT) : /* movi20 #$imm20, $rn */
  2580. {
  2581. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2582. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2583. #define FLD(f) abuf->fields.sfmt_movi20_compact.f
  2584. int UNUSED written = 0;
  2585. IADDR UNUSED pc = abuf->addr;
  2586. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2587. {
  2588. SI opval = FLD (f_imm20);
  2589. SET_H_GRC (FLD (f_rn), opval);
  2590. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2591. }
  2592. #undef FLD
  2593. }
  2594. NEXT (vpc);
  2595. CASE (sem, INSN_MOVB1_COMPACT) : /* mov.b $rm, @$rn */
  2596. {
  2597. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2598. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2599. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2600. int UNUSED written = 0;
  2601. IADDR UNUSED pc = abuf->addr;
  2602. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2603. {
  2604. UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
  2605. SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  2606. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2607. }
  2608. #undef FLD
  2609. }
  2610. NEXT (vpc);
  2611. CASE (sem, INSN_MOVB2_COMPACT) : /* mov.b $rm, @-$rn */
  2612. {
  2613. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2614. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2615. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2616. int UNUSED written = 0;
  2617. IADDR UNUSED pc = abuf->addr;
  2618. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2619. {
  2620. DI tmp_addr;
  2621. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
  2622. {
  2623. UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
  2624. SETMEMUQI (current_cpu, pc, tmp_addr, opval);
  2625. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2626. }
  2627. {
  2628. SI opval = tmp_addr;
  2629. SET_H_GRC (FLD (f_rn), opval);
  2630. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2631. }
  2632. }
  2633. #undef FLD
  2634. }
  2635. NEXT (vpc);
  2636. CASE (sem, INSN_MOVB3_COMPACT) : /* mov.b $rm, @(r0,$rn) */
  2637. {
  2638. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2639. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2640. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2641. int UNUSED written = 0;
  2642. IADDR UNUSED pc = abuf->addr;
  2643. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2644. {
  2645. UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
  2646. SETMEMUQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
  2647. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2648. }
  2649. #undef FLD
  2650. }
  2651. NEXT (vpc);
  2652. CASE (sem, INSN_MOVB4_COMPACT) : /* mov.b r0, @($imm8, gbr) */
  2653. {
  2654. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2655. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2656. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  2657. int UNUSED written = 0;
  2658. IADDR UNUSED pc = abuf->addr;
  2659. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2660. {
  2661. DI tmp_addr;
  2662. tmp_addr = ADDSI (GET_H_GBR (), FLD (f_imm8));
  2663. {
  2664. UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
  2665. SETMEMUQI (current_cpu, pc, tmp_addr, opval);
  2666. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2667. }
  2668. }
  2669. #undef FLD
  2670. }
  2671. NEXT (vpc);
  2672. CASE (sem, INSN_MOVB5_COMPACT) : /* mov.b r0, @($imm4, $rm) */
  2673. {
  2674. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2675. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2676. #define FLD(f) abuf->fields.sfmt_movb5_compact.f
  2677. int UNUSED written = 0;
  2678. IADDR UNUSED pc = abuf->addr;
  2679. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2680. {
  2681. DI tmp_addr;
  2682. tmp_addr = ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4));
  2683. {
  2684. UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
  2685. SETMEMUQI (current_cpu, pc, tmp_addr, opval);
  2686. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2687. }
  2688. }
  2689. #undef FLD
  2690. }
  2691. NEXT (vpc);
  2692. CASE (sem, INSN_MOVB6_COMPACT) : /* mov.b @$rm, $rn */
  2693. {
  2694. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2695. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2696. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2697. int UNUSED written = 0;
  2698. IADDR UNUSED pc = abuf->addr;
  2699. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2700. {
  2701. SI opval = EXTQISI (GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
  2702. SET_H_GRC (FLD (f_rn), opval);
  2703. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2704. }
  2705. #undef FLD
  2706. }
  2707. NEXT (vpc);
  2708. CASE (sem, INSN_MOVB7_COMPACT) : /* mov.b @${rm}+, $rn */
  2709. {
  2710. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2711. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2712. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2713. int UNUSED written = 0;
  2714. IADDR UNUSED pc = abuf->addr;
  2715. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2716. {
  2717. QI tmp_data;
  2718. tmp_data = GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  2719. if (EQSI (FLD (f_rm), FLD (f_rn))) {
  2720. {
  2721. SI opval = EXTQISI (tmp_data);
  2722. SET_H_GRC (FLD (f_rm), opval);
  2723. written |= (1 << 4);
  2724. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2725. }
  2726. } else {
  2727. {
  2728. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 1);
  2729. SET_H_GRC (FLD (f_rm), opval);
  2730. written |= (1 << 4);
  2731. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2732. }
  2733. }
  2734. {
  2735. SI opval = EXTQISI (tmp_data);
  2736. SET_H_GRC (FLD (f_rn), opval);
  2737. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2738. }
  2739. }
  2740. abuf->written = written;
  2741. #undef FLD
  2742. }
  2743. NEXT (vpc);
  2744. CASE (sem, INSN_MOVB8_COMPACT) : /* mov.b @(r0, $rm), $rn */
  2745. {
  2746. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2747. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2748. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2749. int UNUSED written = 0;
  2750. IADDR UNUSED pc = abuf->addr;
  2751. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2752. {
  2753. SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
  2754. SET_H_GRC (FLD (f_rn), opval);
  2755. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2756. }
  2757. #undef FLD
  2758. }
  2759. NEXT (vpc);
  2760. CASE (sem, INSN_MOVB9_COMPACT) : /* mov.b @($imm8, gbr), r0 */
  2761. {
  2762. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2763. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2764. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  2765. int UNUSED written = 0;
  2766. IADDR UNUSED pc = abuf->addr;
  2767. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2768. {
  2769. SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8))));
  2770. SET_H_GRC (((UINT) 0), opval);
  2771. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2772. }
  2773. #undef FLD
  2774. }
  2775. NEXT (vpc);
  2776. CASE (sem, INSN_MOVB10_COMPACT) : /* mov.b @($imm4, $rm), r0 */
  2777. {
  2778. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2779. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2780. #define FLD(f) abuf->fields.sfmt_movb5_compact.f
  2781. int UNUSED written = 0;
  2782. IADDR UNUSED pc = abuf->addr;
  2783. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2784. {
  2785. SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4))));
  2786. SET_H_GRC (((UINT) 0), opval);
  2787. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2788. }
  2789. #undef FLD
  2790. }
  2791. NEXT (vpc);
  2792. CASE (sem, INSN_MOVL1_COMPACT) : /* mov.l $rm, @$rn */
  2793. {
  2794. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2795. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2796. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2797. int UNUSED written = 0;
  2798. IADDR UNUSED pc = abuf->addr;
  2799. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2800. {
  2801. SI opval = GET_H_GRC (FLD (f_rm));
  2802. SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  2803. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2804. }
  2805. #undef FLD
  2806. }
  2807. NEXT (vpc);
  2808. CASE (sem, INSN_MOVL2_COMPACT) : /* mov.l $rm, @-$rn */
  2809. {
  2810. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2811. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2812. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2813. int UNUSED written = 0;
  2814. IADDR UNUSED pc = abuf->addr;
  2815. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2816. {
  2817. SI tmp_addr;
  2818. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  2819. {
  2820. SI opval = GET_H_GRC (FLD (f_rm));
  2821. SETMEMSI (current_cpu, pc, tmp_addr, opval);
  2822. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2823. }
  2824. {
  2825. SI opval = tmp_addr;
  2826. SET_H_GRC (FLD (f_rn), opval);
  2827. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2828. }
  2829. }
  2830. #undef FLD
  2831. }
  2832. NEXT (vpc);
  2833. CASE (sem, INSN_MOVL3_COMPACT) : /* mov.l $rm, @(r0, $rn) */
  2834. {
  2835. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2836. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2837. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2838. int UNUSED written = 0;
  2839. IADDR UNUSED pc = abuf->addr;
  2840. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2841. {
  2842. SI opval = GET_H_GRC (FLD (f_rm));
  2843. SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
  2844. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2845. }
  2846. #undef FLD
  2847. }
  2848. NEXT (vpc);
  2849. CASE (sem, INSN_MOVL4_COMPACT) : /* mov.l r0, @($imm8x4, gbr) */
  2850. {
  2851. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2852. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2853. #define FLD(f) abuf->fields.sfmt_movl10_compact.f
  2854. int UNUSED written = 0;
  2855. IADDR UNUSED pc = abuf->addr;
  2856. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2857. {
  2858. SI opval = GET_H_GRC (((UINT) 0));
  2859. SETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)), opval);
  2860. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2861. }
  2862. #undef FLD
  2863. }
  2864. NEXT (vpc);
  2865. CASE (sem, INSN_MOVL5_COMPACT) : /* mov.l $rm, @($imm4x4, $rn) */
  2866. {
  2867. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2868. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2869. #define FLD(f) abuf->fields.sfmt_movl5_compact.f
  2870. int UNUSED written = 0;
  2871. IADDR UNUSED pc = abuf->addr;
  2872. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2873. {
  2874. SI opval = GET_H_GRC (FLD (f_rm));
  2875. SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm4x4)), opval);
  2876. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  2877. }
  2878. #undef FLD
  2879. }
  2880. NEXT (vpc);
  2881. CASE (sem, INSN_MOVL6_COMPACT) : /* mov.l @$rm, $rn */
  2882. {
  2883. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2884. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2885. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2886. int UNUSED written = 0;
  2887. IADDR UNUSED pc = abuf->addr;
  2888. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2889. {
  2890. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  2891. SET_H_GRC (FLD (f_rn), opval);
  2892. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2893. }
  2894. #undef FLD
  2895. }
  2896. NEXT (vpc);
  2897. CASE (sem, INSN_MOVL7_COMPACT) : /* mov.l @${rm}+, $rn */
  2898. {
  2899. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2900. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2901. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2902. int UNUSED written = 0;
  2903. IADDR UNUSED pc = abuf->addr;
  2904. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2905. {
  2906. {
  2907. SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  2908. SET_H_GRC (FLD (f_rn), opval);
  2909. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2910. }
  2911. if (EQSI (FLD (f_rm), FLD (f_rn))) {
  2912. {
  2913. SI opval = GET_H_GRC (FLD (f_rn));
  2914. SET_H_GRC (FLD (f_rm), opval);
  2915. written |= (1 << 5);
  2916. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2917. }
  2918. } else {
  2919. {
  2920. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
  2921. SET_H_GRC (FLD (f_rm), opval);
  2922. written |= (1 << 5);
  2923. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2924. }
  2925. }
  2926. }
  2927. abuf->written = written;
  2928. #undef FLD
  2929. }
  2930. NEXT (vpc);
  2931. CASE (sem, INSN_MOVL8_COMPACT) : /* mov.l @(r0, $rm), $rn */
  2932. {
  2933. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2934. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2935. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  2936. int UNUSED written = 0;
  2937. IADDR UNUSED pc = abuf->addr;
  2938. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2939. {
  2940. SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
  2941. SET_H_GRC (FLD (f_rn), opval);
  2942. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2943. }
  2944. #undef FLD
  2945. }
  2946. NEXT (vpc);
  2947. CASE (sem, INSN_MOVL9_COMPACT) : /* mov.l @($imm8x4, gbr), r0 */
  2948. {
  2949. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2950. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2951. #define FLD(f) abuf->fields.sfmt_movl10_compact.f
  2952. int UNUSED written = 0;
  2953. IADDR UNUSED pc = abuf->addr;
  2954. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2955. {
  2956. SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)));
  2957. SET_H_GRC (((UINT) 0), opval);
  2958. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2959. }
  2960. #undef FLD
  2961. }
  2962. NEXT (vpc);
  2963. CASE (sem, INSN_MOVL10_COMPACT) : /* mov.l @($imm8x4, pc), $rn */
  2964. {
  2965. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2966. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2967. #define FLD(f) abuf->fields.sfmt_movl10_compact.f
  2968. int UNUSED written = 0;
  2969. IADDR UNUSED pc = abuf->addr;
  2970. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2971. {
  2972. SI opval = GETMEMSI (current_cpu, pc, ADDSI (FLD (f_imm8x4), ANDDI (ADDDI (pc, 4), INVSI (3))));
  2973. SET_H_GRC (FLD (f_rn), opval);
  2974. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2975. }
  2976. #undef FLD
  2977. }
  2978. NEXT (vpc);
  2979. CASE (sem, INSN_MOVL11_COMPACT) : /* mov.l @($imm4x4, $rm), $rn */
  2980. {
  2981. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2982. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2983. #define FLD(f) abuf->fields.sfmt_movl5_compact.f
  2984. int UNUSED written = 0;
  2985. IADDR UNUSED pc = abuf->addr;
  2986. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  2987. {
  2988. SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x4)));
  2989. SET_H_GRC (FLD (f_rn), opval);
  2990. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  2991. }
  2992. #undef FLD
  2993. }
  2994. NEXT (vpc);
  2995. CASE (sem, INSN_MOVL12_COMPACT) : /* mov.l @($imm12x4, $rm), $rn */
  2996. {
  2997. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2998. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2999. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3000. int UNUSED written = 0;
  3001. IADDR UNUSED pc = abuf->addr;
  3002. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  3003. {
  3004. SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm12x4)));
  3005. SET_H_GRC (FLD (f_rn), opval);
  3006. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3007. }
  3008. #undef FLD
  3009. }
  3010. NEXT (vpc);
  3011. CASE (sem, INSN_MOVL13_COMPACT) : /* mov.l $rm, @($imm12x4, $rn) */
  3012. {
  3013. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3014. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3015. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3016. int UNUSED written = 0;
  3017. IADDR UNUSED pc = abuf->addr;
  3018. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  3019. {
  3020. SI opval = GET_H_GRC (FLD (f_rm));
  3021. SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm12x4)), opval);
  3022. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3023. }
  3024. #undef FLD
  3025. }
  3026. NEXT (vpc);
  3027. CASE (sem, INSN_MOVW1_COMPACT) : /* mov.w $rm, @$rn */
  3028. {
  3029. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3030. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3031. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3032. int UNUSED written = 0;
  3033. IADDR UNUSED pc = abuf->addr;
  3034. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3035. {
  3036. HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
  3037. SETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  3038. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3039. }
  3040. #undef FLD
  3041. }
  3042. NEXT (vpc);
  3043. CASE (sem, INSN_MOVW2_COMPACT) : /* mov.w $rm, @-$rn */
  3044. {
  3045. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3046. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3047. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3048. int UNUSED written = 0;
  3049. IADDR UNUSED pc = abuf->addr;
  3050. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3051. {
  3052. DI tmp_addr;
  3053. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 2);
  3054. {
  3055. HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
  3056. SETMEMHI (current_cpu, pc, tmp_addr, opval);
  3057. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3058. }
  3059. {
  3060. SI opval = tmp_addr;
  3061. SET_H_GRC (FLD (f_rn), opval);
  3062. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3063. }
  3064. }
  3065. #undef FLD
  3066. }
  3067. NEXT (vpc);
  3068. CASE (sem, INSN_MOVW3_COMPACT) : /* mov.w $rm, @(r0, $rn) */
  3069. {
  3070. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3071. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3072. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3073. int UNUSED written = 0;
  3074. IADDR UNUSED pc = abuf->addr;
  3075. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3076. {
  3077. HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
  3078. SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
  3079. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3080. }
  3081. #undef FLD
  3082. }
  3083. NEXT (vpc);
  3084. CASE (sem, INSN_MOVW4_COMPACT) : /* mov.w r0, @($imm8x2, gbr) */
  3085. {
  3086. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3087. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3088. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3089. int UNUSED written = 0;
  3090. IADDR UNUSED pc = abuf->addr;
  3091. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3092. {
  3093. HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
  3094. SETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2)), opval);
  3095. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3096. }
  3097. #undef FLD
  3098. }
  3099. NEXT (vpc);
  3100. CASE (sem, INSN_MOVW5_COMPACT) : /* mov.w r0, @($imm4x2, $rm) */
  3101. {
  3102. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3103. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3104. #define FLD(f) abuf->fields.sfmt_movw5_compact.f
  3105. int UNUSED written = 0;
  3106. IADDR UNUSED pc = abuf->addr;
  3107. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3108. {
  3109. HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
  3110. SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2)), opval);
  3111. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3112. }
  3113. #undef FLD
  3114. }
  3115. NEXT (vpc);
  3116. CASE (sem, INSN_MOVW6_COMPACT) : /* mov.w @$rm, $rn */
  3117. {
  3118. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3119. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3120. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3121. int UNUSED written = 0;
  3122. IADDR UNUSED pc = abuf->addr;
  3123. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3124. {
  3125. SI opval = EXTHISI (GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
  3126. SET_H_GRC (FLD (f_rn), opval);
  3127. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3128. }
  3129. #undef FLD
  3130. }
  3131. NEXT (vpc);
  3132. CASE (sem, INSN_MOVW7_COMPACT) : /* mov.w @${rm}+, $rn */
  3133. {
  3134. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3135. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3136. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3137. int UNUSED written = 0;
  3138. IADDR UNUSED pc = abuf->addr;
  3139. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3140. {
  3141. HI tmp_data;
  3142. tmp_data = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
  3143. if (EQSI (FLD (f_rm), FLD (f_rn))) {
  3144. {
  3145. SI opval = EXTHISI (tmp_data);
  3146. SET_H_GRC (FLD (f_rm), opval);
  3147. written |= (1 << 4);
  3148. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3149. }
  3150. } else {
  3151. {
  3152. SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
  3153. SET_H_GRC (FLD (f_rm), opval);
  3154. written |= (1 << 4);
  3155. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3156. }
  3157. }
  3158. {
  3159. SI opval = EXTHISI (tmp_data);
  3160. SET_H_GRC (FLD (f_rn), opval);
  3161. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3162. }
  3163. }
  3164. abuf->written = written;
  3165. #undef FLD
  3166. }
  3167. NEXT (vpc);
  3168. CASE (sem, INSN_MOVW8_COMPACT) : /* mov.w @(r0, $rm), $rn */
  3169. {
  3170. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3171. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3172. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3173. int UNUSED written = 0;
  3174. IADDR UNUSED pc = abuf->addr;
  3175. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3176. {
  3177. SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
  3178. SET_H_GRC (FLD (f_rn), opval);
  3179. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3180. }
  3181. #undef FLD
  3182. }
  3183. NEXT (vpc);
  3184. CASE (sem, INSN_MOVW9_COMPACT) : /* mov.w @($imm8x2, gbr), r0 */
  3185. {
  3186. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3187. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3188. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3189. int UNUSED written = 0;
  3190. IADDR UNUSED pc = abuf->addr;
  3191. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3192. {
  3193. SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2))));
  3194. SET_H_GRC (((UINT) 0), opval);
  3195. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3196. }
  3197. #undef FLD
  3198. }
  3199. NEXT (vpc);
  3200. CASE (sem, INSN_MOVW10_COMPACT) : /* mov.w @($imm8x2, pc), $rn */
  3201. {
  3202. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3203. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3204. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3205. int UNUSED written = 0;
  3206. IADDR UNUSED pc = abuf->addr;
  3207. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3208. {
  3209. SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDDI (ADDDI (pc, 4), FLD (f_imm8x2))));
  3210. SET_H_GRC (FLD (f_rn), opval);
  3211. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3212. }
  3213. #undef FLD
  3214. }
  3215. NEXT (vpc);
  3216. CASE (sem, INSN_MOVW11_COMPACT) : /* mov.w @($imm4x2, $rm), r0 */
  3217. {
  3218. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3219. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3220. #define FLD(f) abuf->fields.sfmt_movw5_compact.f
  3221. int UNUSED written = 0;
  3222. IADDR UNUSED pc = abuf->addr;
  3223. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3224. {
  3225. SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2))));
  3226. SET_H_GRC (((UINT) 0), opval);
  3227. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3228. }
  3229. #undef FLD
  3230. }
  3231. NEXT (vpc);
  3232. CASE (sem, INSN_MOVA_COMPACT) : /* mova @($imm8x4, pc), r0 */
  3233. {
  3234. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3235. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3236. #define FLD(f) abuf->fields.sfmt_movl10_compact.f
  3237. int UNUSED written = 0;
  3238. IADDR UNUSED pc = abuf->addr;
  3239. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3240. {
  3241. SI opval = ADDDI (ANDDI (ADDDI (pc, 4), INVSI (3)), FLD (f_imm8x4));
  3242. SET_H_GRC (((UINT) 0), opval);
  3243. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3244. }
  3245. #undef FLD
  3246. }
  3247. NEXT (vpc);
  3248. CASE (sem, INSN_MOVCAL_COMPACT) : /* movca.l r0, @$rn */
  3249. {
  3250. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3251. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3252. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3253. int UNUSED written = 0;
  3254. IADDR UNUSED pc = abuf->addr;
  3255. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3256. {
  3257. SI opval = GET_H_GRC (((UINT) 0));
  3258. SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  3259. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3260. }
  3261. #undef FLD
  3262. }
  3263. NEXT (vpc);
  3264. CASE (sem, INSN_MOVCOL_COMPACT) : /* movco.l r0, @$rn */
  3265. {
  3266. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3267. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3268. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3269. int UNUSED written = 0;
  3270. IADDR UNUSED pc = abuf->addr;
  3271. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3272. {
  3273. SI opval = GET_H_GRC (FLD (f_rn));
  3274. SET_H_GRC (FLD (f_rn), opval);
  3275. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3276. }
  3277. #undef FLD
  3278. }
  3279. NEXT (vpc);
  3280. CASE (sem, INSN_MOVT_COMPACT) : /* movt $rn */
  3281. {
  3282. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3283. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3284. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3285. int UNUSED written = 0;
  3286. IADDR UNUSED pc = abuf->addr;
  3287. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3288. {
  3289. SI opval = ZEXTBISI (GET_H_TBIT ());
  3290. SET_H_GRC (FLD (f_rn), opval);
  3291. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3292. }
  3293. #undef FLD
  3294. }
  3295. NEXT (vpc);
  3296. CASE (sem, INSN_MOVUAL_COMPACT) : /* movua.l @$rn, r0 */
  3297. {
  3298. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3299. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3300. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3301. int UNUSED written = 0;
  3302. IADDR UNUSED pc = abuf->addr;
  3303. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3304. {
  3305. SI opval = sh64_movua (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  3306. SET_H_GRC (((UINT) 0), opval);
  3307. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3308. }
  3309. #undef FLD
  3310. }
  3311. NEXT (vpc);
  3312. CASE (sem, INSN_MOVUAL2_COMPACT) : /* movua.l @$rn+, r0 */
  3313. {
  3314. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3315. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3316. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3317. int UNUSED written = 0;
  3318. IADDR UNUSED pc = abuf->addr;
  3319. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3320. {
  3321. {
  3322. SI opval = sh64_movua (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  3323. SET_H_GRC (((UINT) 0), opval);
  3324. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3325. }
  3326. {
  3327. SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
  3328. SET_H_GRC (FLD (f_rn), opval);
  3329. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3330. }
  3331. }
  3332. #undef FLD
  3333. }
  3334. NEXT (vpc);
  3335. CASE (sem, INSN_MULL_COMPACT) : /* mul.l $rm, $rn */
  3336. {
  3337. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3338. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3339. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3340. int UNUSED written = 0;
  3341. IADDR UNUSED pc = abuf->addr;
  3342. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3343. {
  3344. SI opval = MULSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
  3345. SET_H_MACL (opval);
  3346. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  3347. }
  3348. #undef FLD
  3349. }
  3350. NEXT (vpc);
  3351. CASE (sem, INSN_MULSW_COMPACT) : /* muls.w $rm, $rn */
  3352. {
  3353. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3354. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3355. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3356. int UNUSED written = 0;
  3357. IADDR UNUSED pc = abuf->addr;
  3358. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3359. {
  3360. SI opval = MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
  3361. SET_H_MACL (opval);
  3362. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  3363. }
  3364. #undef FLD
  3365. }
  3366. NEXT (vpc);
  3367. CASE (sem, INSN_MULUW_COMPACT) : /* mulu.w $rm, $rn */
  3368. {
  3369. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3370. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3371. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3372. int UNUSED written = 0;
  3373. IADDR UNUSED pc = abuf->addr;
  3374. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3375. {
  3376. SI opval = MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
  3377. SET_H_MACL (opval);
  3378. CGEN_TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
  3379. }
  3380. #undef FLD
  3381. }
  3382. NEXT (vpc);
  3383. CASE (sem, INSN_NEG_COMPACT) : /* neg $rm, $rn */
  3384. {
  3385. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3386. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3387. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3388. int UNUSED written = 0;
  3389. IADDR UNUSED pc = abuf->addr;
  3390. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3391. {
  3392. SI opval = NEGSI (GET_H_GRC (FLD (f_rm)));
  3393. SET_H_GRC (FLD (f_rn), opval);
  3394. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3395. }
  3396. #undef FLD
  3397. }
  3398. NEXT (vpc);
  3399. CASE (sem, INSN_NEGC_COMPACT) : /* negc $rm, $rn */
  3400. {
  3401. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3402. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3403. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3404. int UNUSED written = 0;
  3405. IADDR UNUSED pc = abuf->addr;
  3406. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3407. {
  3408. BI tmp_flag;
  3409. tmp_flag = SUBCFSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
  3410. {
  3411. SI opval = SUBCSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
  3412. SET_H_GRC (FLD (f_rn), opval);
  3413. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3414. }
  3415. {
  3416. BI opval = tmp_flag;
  3417. SET_H_TBIT (opval);
  3418. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3419. }
  3420. }
  3421. #undef FLD
  3422. }
  3423. NEXT (vpc);
  3424. CASE (sem, INSN_NOP_COMPACT) : /* nop */
  3425. {
  3426. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3427. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3428. #define FLD(f) abuf->fields.sfmt_empty.f
  3429. int UNUSED written = 0;
  3430. IADDR UNUSED pc = abuf->addr;
  3431. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3432. ((void) 0); /*nop*/
  3433. #undef FLD
  3434. }
  3435. NEXT (vpc);
  3436. CASE (sem, INSN_NOT_COMPACT) : /* not $rm64, $rn64 */
  3437. {
  3438. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3439. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3440. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3441. int UNUSED written = 0;
  3442. IADDR UNUSED pc = abuf->addr;
  3443. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3444. {
  3445. DI opval = INVDI (GET_H_GR (FLD (f_rm)));
  3446. SET_H_GR (FLD (f_rn), opval);
  3447. CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
  3448. }
  3449. #undef FLD
  3450. }
  3451. NEXT (vpc);
  3452. CASE (sem, INSN_OCBI_COMPACT) : /* ocbi @$rn */
  3453. {
  3454. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3455. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3456. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3457. int UNUSED written = 0;
  3458. IADDR UNUSED pc = abuf->addr;
  3459. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3460. {
  3461. {
  3462. SI opval = GET_H_GRC (FLD (f_rn));
  3463. SET_H_GRC (FLD (f_rn), opval);
  3464. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3465. }
  3466. ((void) 0); /*nop*/
  3467. }
  3468. #undef FLD
  3469. }
  3470. NEXT (vpc);
  3471. CASE (sem, INSN_OCBP_COMPACT) : /* ocbp @$rn */
  3472. {
  3473. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3474. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3475. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3476. int UNUSED written = 0;
  3477. IADDR UNUSED pc = abuf->addr;
  3478. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3479. {
  3480. {
  3481. SI opval = GET_H_GRC (FLD (f_rn));
  3482. SET_H_GRC (FLD (f_rn), opval);
  3483. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3484. }
  3485. ((void) 0); /*nop*/
  3486. }
  3487. #undef FLD
  3488. }
  3489. NEXT (vpc);
  3490. CASE (sem, INSN_OCBWB_COMPACT) : /* ocbwb @$rn */
  3491. {
  3492. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3493. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3494. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3495. int UNUSED written = 0;
  3496. IADDR UNUSED pc = abuf->addr;
  3497. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3498. {
  3499. {
  3500. SI opval = GET_H_GRC (FLD (f_rn));
  3501. SET_H_GRC (FLD (f_rn), opval);
  3502. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3503. }
  3504. ((void) 0); /*nop*/
  3505. }
  3506. #undef FLD
  3507. }
  3508. NEXT (vpc);
  3509. CASE (sem, INSN_OR_COMPACT) : /* or $rm64, $rn64 */
  3510. {
  3511. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3512. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3513. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3514. int UNUSED written = 0;
  3515. IADDR UNUSED pc = abuf->addr;
  3516. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3517. {
  3518. DI opval = ORDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
  3519. SET_H_GR (FLD (f_rn), opval);
  3520. CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
  3521. }
  3522. #undef FLD
  3523. }
  3524. NEXT (vpc);
  3525. CASE (sem, INSN_ORI_COMPACT) : /* or #$uimm8, r0 */
  3526. {
  3527. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3528. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3529. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  3530. int UNUSED written = 0;
  3531. IADDR UNUSED pc = abuf->addr;
  3532. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3533. {
  3534. SI opval = ORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
  3535. SET_H_GRC (((UINT) 0), opval);
  3536. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3537. }
  3538. #undef FLD
  3539. }
  3540. NEXT (vpc);
  3541. CASE (sem, INSN_ORB_COMPACT) : /* or.b #$imm8, @(r0, gbr) */
  3542. {
  3543. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3544. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3545. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  3546. int UNUSED written = 0;
  3547. IADDR UNUSED pc = abuf->addr;
  3548. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3549. {
  3550. DI tmp_addr;
  3551. UQI tmp_data;
  3552. tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
  3553. tmp_data = ORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
  3554. {
  3555. UQI opval = tmp_data;
  3556. SETMEMUQI (current_cpu, pc, tmp_addr, opval);
  3557. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  3558. }
  3559. }
  3560. #undef FLD
  3561. }
  3562. NEXT (vpc);
  3563. CASE (sem, INSN_PREF_COMPACT) : /* pref @$rn */
  3564. {
  3565. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3566. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3567. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3568. int UNUSED written = 0;
  3569. IADDR UNUSED pc = abuf->addr;
  3570. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3571. sh64_pref (current_cpu, GET_H_GRC (FLD (f_rn)));
  3572. #undef FLD
  3573. }
  3574. NEXT (vpc);
  3575. CASE (sem, INSN_ROTCL_COMPACT) : /* rotcl $rn */
  3576. {
  3577. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3578. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3579. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3580. int UNUSED written = 0;
  3581. IADDR UNUSED pc = abuf->addr;
  3582. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3583. {
  3584. BI tmp_temp;
  3585. tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
  3586. {
  3587. SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), GET_H_TBIT ());
  3588. SET_H_GRC (FLD (f_rn), opval);
  3589. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3590. }
  3591. {
  3592. BI opval = ((tmp_temp) ? (1) : (0));
  3593. SET_H_TBIT (opval);
  3594. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3595. }
  3596. }
  3597. #undef FLD
  3598. }
  3599. NEXT (vpc);
  3600. CASE (sem, INSN_ROTCR_COMPACT) : /* rotcr $rn */
  3601. {
  3602. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3603. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3604. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3605. int UNUSED written = 0;
  3606. IADDR UNUSED pc = abuf->addr;
  3607. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3608. {
  3609. BI tmp_lsbit;
  3610. SI tmp_temp;
  3611. tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
  3612. tmp_temp = GET_H_TBIT ();
  3613. {
  3614. SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
  3615. SET_H_GRC (FLD (f_rn), opval);
  3616. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3617. }
  3618. {
  3619. BI opval = ((tmp_lsbit) ? (1) : (0));
  3620. SET_H_TBIT (opval);
  3621. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3622. }
  3623. }
  3624. #undef FLD
  3625. }
  3626. NEXT (vpc);
  3627. CASE (sem, INSN_ROTL_COMPACT) : /* rotl $rn */
  3628. {
  3629. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3630. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3631. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3632. int UNUSED written = 0;
  3633. IADDR UNUSED pc = abuf->addr;
  3634. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3635. {
  3636. BI tmp_temp;
  3637. tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
  3638. {
  3639. SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), tmp_temp);
  3640. SET_H_GRC (FLD (f_rn), opval);
  3641. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3642. }
  3643. {
  3644. BI opval = ((tmp_temp) ? (1) : (0));
  3645. SET_H_TBIT (opval);
  3646. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3647. }
  3648. }
  3649. #undef FLD
  3650. }
  3651. NEXT (vpc);
  3652. CASE (sem, INSN_ROTR_COMPACT) : /* rotr $rn */
  3653. {
  3654. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3655. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3656. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3657. int UNUSED written = 0;
  3658. IADDR UNUSED pc = abuf->addr;
  3659. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3660. {
  3661. BI tmp_lsbit;
  3662. SI tmp_temp;
  3663. tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
  3664. tmp_temp = tmp_lsbit;
  3665. {
  3666. SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
  3667. SET_H_GRC (FLD (f_rn), opval);
  3668. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3669. }
  3670. {
  3671. BI opval = ((tmp_lsbit) ? (1) : (0));
  3672. SET_H_TBIT (opval);
  3673. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3674. }
  3675. }
  3676. #undef FLD
  3677. }
  3678. NEXT (vpc);
  3679. CASE (sem, INSN_RTS_COMPACT) : /* rts */
  3680. {
  3681. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3682. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3683. #define FLD(f) abuf->fields.sfmt_empty.f
  3684. int UNUSED written = 0;
  3685. IADDR UNUSED pc = abuf->addr;
  3686. SEM_BRANCH_INIT
  3687. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3688. {
  3689. {
  3690. UDI opval = ADDDI (pc, 2);
  3691. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  3692. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  3693. }
  3694. ((void) 0); /*nop*/
  3695. {
  3696. {
  3697. UDI opval = GET_H_PR ();
  3698. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  3699. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
  3700. }
  3701. }
  3702. ((void) 0); /*nop*/
  3703. }
  3704. SEM_BRANCH_FINI (vpc);
  3705. #undef FLD
  3706. }
  3707. NEXT (vpc);
  3708. CASE (sem, INSN_SETS_COMPACT) : /* sets */
  3709. {
  3710. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3711. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3712. #define FLD(f) abuf->fields.sfmt_empty.f
  3713. int UNUSED written = 0;
  3714. IADDR UNUSED pc = abuf->addr;
  3715. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3716. {
  3717. BI opval = 1;
  3718. SET_H_SBIT (opval);
  3719. CGEN_TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
  3720. }
  3721. #undef FLD
  3722. }
  3723. NEXT (vpc);
  3724. CASE (sem, INSN_SETT_COMPACT) : /* sett */
  3725. {
  3726. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3727. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3728. #define FLD(f) abuf->fields.sfmt_empty.f
  3729. int UNUSED written = 0;
  3730. IADDR UNUSED pc = abuf->addr;
  3731. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3732. {
  3733. BI opval = 1;
  3734. SET_H_TBIT (opval);
  3735. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3736. }
  3737. #undef FLD
  3738. }
  3739. NEXT (vpc);
  3740. CASE (sem, INSN_SHAD_COMPACT) : /* shad $rm, $rn */
  3741. {
  3742. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3743. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3744. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3745. int UNUSED written = 0;
  3746. IADDR UNUSED pc = abuf->addr;
  3747. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3748. {
  3749. SI tmp_shamt;
  3750. tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
  3751. if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
  3752. {
  3753. SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
  3754. SET_H_GRC (FLD (f_rn), opval);
  3755. written |= (1 << 2);
  3756. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3757. }
  3758. } else {
  3759. if (NESI (tmp_shamt, 0)) {
  3760. {
  3761. SI opval = SRASI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
  3762. SET_H_GRC (FLD (f_rn), opval);
  3763. written |= (1 << 2);
  3764. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3765. }
  3766. } else {
  3767. if (LTSI (GET_H_GRC (FLD (f_rn)), 0)) {
  3768. {
  3769. SI opval = NEGSI (1);
  3770. SET_H_GRC (FLD (f_rn), opval);
  3771. written |= (1 << 2);
  3772. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3773. }
  3774. } else {
  3775. {
  3776. SI opval = 0;
  3777. SET_H_GRC (FLD (f_rn), opval);
  3778. written |= (1 << 2);
  3779. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3780. }
  3781. }
  3782. }
  3783. }
  3784. }
  3785. abuf->written = written;
  3786. #undef FLD
  3787. }
  3788. NEXT (vpc);
  3789. CASE (sem, INSN_SHAL_COMPACT) : /* shal $rn */
  3790. {
  3791. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3792. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3793. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3794. int UNUSED written = 0;
  3795. IADDR UNUSED pc = abuf->addr;
  3796. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3797. {
  3798. BI tmp_t;
  3799. tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
  3800. {
  3801. SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
  3802. SET_H_GRC (FLD (f_rn), opval);
  3803. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3804. }
  3805. {
  3806. BI opval = ((tmp_t) ? (1) : (0));
  3807. SET_H_TBIT (opval);
  3808. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3809. }
  3810. }
  3811. #undef FLD
  3812. }
  3813. NEXT (vpc);
  3814. CASE (sem, INSN_SHAR_COMPACT) : /* shar $rn */
  3815. {
  3816. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3817. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3818. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3819. int UNUSED written = 0;
  3820. IADDR UNUSED pc = abuf->addr;
  3821. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3822. {
  3823. BI tmp_t;
  3824. tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
  3825. {
  3826. SI opval = SRASI (GET_H_GRC (FLD (f_rn)), 1);
  3827. SET_H_GRC (FLD (f_rn), opval);
  3828. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3829. }
  3830. {
  3831. BI opval = ((tmp_t) ? (1) : (0));
  3832. SET_H_TBIT (opval);
  3833. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3834. }
  3835. }
  3836. #undef FLD
  3837. }
  3838. NEXT (vpc);
  3839. CASE (sem, INSN_SHLD_COMPACT) : /* shld $rm, $rn */
  3840. {
  3841. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3842. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3843. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  3844. int UNUSED written = 0;
  3845. IADDR UNUSED pc = abuf->addr;
  3846. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3847. {
  3848. SI tmp_shamt;
  3849. tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
  3850. if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
  3851. {
  3852. SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
  3853. SET_H_GRC (FLD (f_rn), opval);
  3854. written |= (1 << 2);
  3855. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3856. }
  3857. } else {
  3858. if (NESI (tmp_shamt, 0)) {
  3859. {
  3860. SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
  3861. SET_H_GRC (FLD (f_rn), opval);
  3862. written |= (1 << 2);
  3863. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3864. }
  3865. } else {
  3866. {
  3867. SI opval = 0;
  3868. SET_H_GRC (FLD (f_rn), opval);
  3869. written |= (1 << 2);
  3870. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3871. }
  3872. }
  3873. }
  3874. }
  3875. abuf->written = written;
  3876. #undef FLD
  3877. }
  3878. NEXT (vpc);
  3879. CASE (sem, INSN_SHLL_COMPACT) : /* shll $rn */
  3880. {
  3881. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3882. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3883. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3884. int UNUSED written = 0;
  3885. IADDR UNUSED pc = abuf->addr;
  3886. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3887. {
  3888. BI tmp_t;
  3889. tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
  3890. {
  3891. SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
  3892. SET_H_GRC (FLD (f_rn), opval);
  3893. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3894. }
  3895. {
  3896. BI opval = ((tmp_t) ? (1) : (0));
  3897. SET_H_TBIT (opval);
  3898. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3899. }
  3900. }
  3901. #undef FLD
  3902. }
  3903. NEXT (vpc);
  3904. CASE (sem, INSN_SHLL2_COMPACT) : /* shll2 $rn */
  3905. {
  3906. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3907. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3908. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3909. int UNUSED written = 0;
  3910. IADDR UNUSED pc = abuf->addr;
  3911. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3912. {
  3913. SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 2);
  3914. SET_H_GRC (FLD (f_rn), opval);
  3915. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3916. }
  3917. #undef FLD
  3918. }
  3919. NEXT (vpc);
  3920. CASE (sem, INSN_SHLL8_COMPACT) : /* shll8 $rn */
  3921. {
  3922. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3923. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3924. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3925. int UNUSED written = 0;
  3926. IADDR UNUSED pc = abuf->addr;
  3927. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3928. {
  3929. SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 8);
  3930. SET_H_GRC (FLD (f_rn), opval);
  3931. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3932. }
  3933. #undef FLD
  3934. }
  3935. NEXT (vpc);
  3936. CASE (sem, INSN_SHLL16_COMPACT) : /* shll16 $rn */
  3937. {
  3938. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3939. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3940. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3941. int UNUSED written = 0;
  3942. IADDR UNUSED pc = abuf->addr;
  3943. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3944. {
  3945. SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 16);
  3946. SET_H_GRC (FLD (f_rn), opval);
  3947. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3948. }
  3949. #undef FLD
  3950. }
  3951. NEXT (vpc);
  3952. CASE (sem, INSN_SHLR_COMPACT) : /* shlr $rn */
  3953. {
  3954. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3955. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3956. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3957. int UNUSED written = 0;
  3958. IADDR UNUSED pc = abuf->addr;
  3959. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3960. {
  3961. BI tmp_t;
  3962. tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
  3963. {
  3964. SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 1);
  3965. SET_H_GRC (FLD (f_rn), opval);
  3966. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3967. }
  3968. {
  3969. BI opval = ((tmp_t) ? (1) : (0));
  3970. SET_H_TBIT (opval);
  3971. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  3972. }
  3973. }
  3974. #undef FLD
  3975. }
  3976. NEXT (vpc);
  3977. CASE (sem, INSN_SHLR2_COMPACT) : /* shlr2 $rn */
  3978. {
  3979. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3980. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3981. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3982. int UNUSED written = 0;
  3983. IADDR UNUSED pc = abuf->addr;
  3984. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  3985. {
  3986. SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 2);
  3987. SET_H_GRC (FLD (f_rn), opval);
  3988. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  3989. }
  3990. #undef FLD
  3991. }
  3992. NEXT (vpc);
  3993. CASE (sem, INSN_SHLR8_COMPACT) : /* shlr8 $rn */
  3994. {
  3995. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3996. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3997. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  3998. int UNUSED written = 0;
  3999. IADDR UNUSED pc = abuf->addr;
  4000. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4001. {
  4002. SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 8);
  4003. SET_H_GRC (FLD (f_rn), opval);
  4004. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4005. }
  4006. #undef FLD
  4007. }
  4008. NEXT (vpc);
  4009. CASE (sem, INSN_SHLR16_COMPACT) : /* shlr16 $rn */
  4010. {
  4011. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4012. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4013. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4014. int UNUSED written = 0;
  4015. IADDR UNUSED pc = abuf->addr;
  4016. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4017. {
  4018. SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 16);
  4019. SET_H_GRC (FLD (f_rn), opval);
  4020. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4021. }
  4022. #undef FLD
  4023. }
  4024. NEXT (vpc);
  4025. CASE (sem, INSN_STC_GBR_COMPACT) : /* stc gbr, $rn */
  4026. {
  4027. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4028. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4029. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4030. int UNUSED written = 0;
  4031. IADDR UNUSED pc = abuf->addr;
  4032. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4033. {
  4034. SI opval = GET_H_GBR ();
  4035. SET_H_GRC (FLD (f_rn), opval);
  4036. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4037. }
  4038. #undef FLD
  4039. }
  4040. NEXT (vpc);
  4041. CASE (sem, INSN_STC_VBR_COMPACT) : /* stc vbr, $rn */
  4042. {
  4043. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4044. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4045. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4046. int UNUSED written = 0;
  4047. IADDR UNUSED pc = abuf->addr;
  4048. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4049. {
  4050. SI opval = GET_H_VBR ();
  4051. SET_H_GRC (FLD (f_rn), opval);
  4052. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4053. }
  4054. #undef FLD
  4055. }
  4056. NEXT (vpc);
  4057. CASE (sem, INSN_STCL_GBR_COMPACT) : /* stc.l gbr, @-$rn */
  4058. {
  4059. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4060. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4061. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4062. int UNUSED written = 0;
  4063. IADDR UNUSED pc = abuf->addr;
  4064. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4065. {
  4066. DI tmp_addr;
  4067. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  4068. {
  4069. SI opval = GET_H_GBR ();
  4070. SETMEMSI (current_cpu, pc, tmp_addr, opval);
  4071. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4072. }
  4073. {
  4074. SI opval = tmp_addr;
  4075. SET_H_GRC (FLD (f_rn), opval);
  4076. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4077. }
  4078. }
  4079. #undef FLD
  4080. }
  4081. NEXT (vpc);
  4082. CASE (sem, INSN_STCL_VBR_COMPACT) : /* stc.l vbr, @-$rn */
  4083. {
  4084. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4085. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4086. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4087. int UNUSED written = 0;
  4088. IADDR UNUSED pc = abuf->addr;
  4089. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4090. {
  4091. DI tmp_addr;
  4092. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  4093. {
  4094. SI opval = GET_H_VBR ();
  4095. SETMEMSI (current_cpu, pc, tmp_addr, opval);
  4096. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4097. }
  4098. {
  4099. SI opval = tmp_addr;
  4100. SET_H_GRC (FLD (f_rn), opval);
  4101. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4102. }
  4103. }
  4104. #undef FLD
  4105. }
  4106. NEXT (vpc);
  4107. CASE (sem, INSN_STS_FPSCR_COMPACT) : /* sts fpscr, $rn */
  4108. {
  4109. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4110. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4111. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4112. int UNUSED written = 0;
  4113. IADDR UNUSED pc = abuf->addr;
  4114. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4115. {
  4116. SI opval = CPU (h_fpscr);
  4117. SET_H_GRC (FLD (f_rn), opval);
  4118. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4119. }
  4120. #undef FLD
  4121. }
  4122. NEXT (vpc);
  4123. CASE (sem, INSN_STSL_FPSCR_COMPACT) : /* sts.l fpscr, @-$rn */
  4124. {
  4125. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4126. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4127. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4128. int UNUSED written = 0;
  4129. IADDR UNUSED pc = abuf->addr;
  4130. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4131. {
  4132. DI tmp_addr;
  4133. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  4134. {
  4135. SI opval = CPU (h_fpscr);
  4136. SETMEMSI (current_cpu, pc, tmp_addr, opval);
  4137. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4138. }
  4139. {
  4140. SI opval = tmp_addr;
  4141. SET_H_GRC (FLD (f_rn), opval);
  4142. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4143. }
  4144. }
  4145. #undef FLD
  4146. }
  4147. NEXT (vpc);
  4148. CASE (sem, INSN_STS_FPUL_COMPACT) : /* sts fpul, $rn */
  4149. {
  4150. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4151. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4152. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4153. int UNUSED written = 0;
  4154. IADDR UNUSED pc = abuf->addr;
  4155. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4156. {
  4157. SI opval = SUBWORDSFSI (CPU (h_fr[((UINT) 32)]));
  4158. SET_H_GRC (FLD (f_rn), opval);
  4159. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4160. }
  4161. #undef FLD
  4162. }
  4163. NEXT (vpc);
  4164. CASE (sem, INSN_STSL_FPUL_COMPACT) : /* sts.l fpul, @-$rn */
  4165. {
  4166. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4167. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4168. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4169. int UNUSED written = 0;
  4170. IADDR UNUSED pc = abuf->addr;
  4171. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4172. {
  4173. DI tmp_addr;
  4174. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  4175. {
  4176. SF opval = CPU (h_fr[((UINT) 32)]);
  4177. SETMEMSF (current_cpu, pc, tmp_addr, opval);
  4178. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
  4179. }
  4180. {
  4181. SI opval = tmp_addr;
  4182. SET_H_GRC (FLD (f_rn), opval);
  4183. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4184. }
  4185. }
  4186. #undef FLD
  4187. }
  4188. NEXT (vpc);
  4189. CASE (sem, INSN_STS_MACH_COMPACT) : /* sts mach, $rn */
  4190. {
  4191. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4192. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4193. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4194. int UNUSED written = 0;
  4195. IADDR UNUSED pc = abuf->addr;
  4196. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4197. {
  4198. SI opval = GET_H_MACH ();
  4199. SET_H_GRC (FLD (f_rn), opval);
  4200. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4201. }
  4202. #undef FLD
  4203. }
  4204. NEXT (vpc);
  4205. CASE (sem, INSN_STSL_MACH_COMPACT) : /* sts.l mach, @-$rn */
  4206. {
  4207. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4208. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4209. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4210. int UNUSED written = 0;
  4211. IADDR UNUSED pc = abuf->addr;
  4212. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4213. {
  4214. DI tmp_addr;
  4215. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  4216. {
  4217. SI opval = GET_H_MACH ();
  4218. SETMEMSI (current_cpu, pc, tmp_addr, opval);
  4219. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4220. }
  4221. {
  4222. SI opval = tmp_addr;
  4223. SET_H_GRC (FLD (f_rn), opval);
  4224. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4225. }
  4226. }
  4227. #undef FLD
  4228. }
  4229. NEXT (vpc);
  4230. CASE (sem, INSN_STS_MACL_COMPACT) : /* sts macl, $rn */
  4231. {
  4232. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4233. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4234. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4235. int UNUSED written = 0;
  4236. IADDR UNUSED pc = abuf->addr;
  4237. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4238. {
  4239. SI opval = GET_H_MACL ();
  4240. SET_H_GRC (FLD (f_rn), opval);
  4241. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4242. }
  4243. #undef FLD
  4244. }
  4245. NEXT (vpc);
  4246. CASE (sem, INSN_STSL_MACL_COMPACT) : /* sts.l macl, @-$rn */
  4247. {
  4248. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4249. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4250. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4251. int UNUSED written = 0;
  4252. IADDR UNUSED pc = abuf->addr;
  4253. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4254. {
  4255. DI tmp_addr;
  4256. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  4257. {
  4258. SI opval = GET_H_MACL ();
  4259. SETMEMSI (current_cpu, pc, tmp_addr, opval);
  4260. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4261. }
  4262. {
  4263. SI opval = tmp_addr;
  4264. SET_H_GRC (FLD (f_rn), opval);
  4265. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4266. }
  4267. }
  4268. #undef FLD
  4269. }
  4270. NEXT (vpc);
  4271. CASE (sem, INSN_STS_PR_COMPACT) : /* sts pr, $rn */
  4272. {
  4273. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4274. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4275. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4276. int UNUSED written = 0;
  4277. IADDR UNUSED pc = abuf->addr;
  4278. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4279. {
  4280. SI opval = GET_H_PR ();
  4281. SET_H_GRC (FLD (f_rn), opval);
  4282. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4283. }
  4284. #undef FLD
  4285. }
  4286. NEXT (vpc);
  4287. CASE (sem, INSN_STSL_PR_COMPACT) : /* sts.l pr, @-$rn */
  4288. {
  4289. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4290. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4291. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4292. int UNUSED written = 0;
  4293. IADDR UNUSED pc = abuf->addr;
  4294. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4295. {
  4296. DI tmp_addr;
  4297. tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
  4298. {
  4299. SI opval = GET_H_PR ();
  4300. SETMEMSI (current_cpu, pc, tmp_addr, opval);
  4301. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4302. }
  4303. {
  4304. SI opval = tmp_addr;
  4305. SET_H_GRC (FLD (f_rn), opval);
  4306. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4307. }
  4308. }
  4309. #undef FLD
  4310. }
  4311. NEXT (vpc);
  4312. CASE (sem, INSN_SUB_COMPACT) : /* sub $rm, $rn */
  4313. {
  4314. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4315. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4316. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4317. int UNUSED written = 0;
  4318. IADDR UNUSED pc = abuf->addr;
  4319. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4320. {
  4321. SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  4322. SET_H_GRC (FLD (f_rn), opval);
  4323. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4324. }
  4325. #undef FLD
  4326. }
  4327. NEXT (vpc);
  4328. CASE (sem, INSN_SUBC_COMPACT) : /* subc $rm, $rn */
  4329. {
  4330. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4331. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4332. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4333. int UNUSED written = 0;
  4334. IADDR UNUSED pc = abuf->addr;
  4335. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4336. {
  4337. BI tmp_flag;
  4338. tmp_flag = SUBCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
  4339. {
  4340. SI opval = SUBCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
  4341. SET_H_GRC (FLD (f_rn), opval);
  4342. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4343. }
  4344. {
  4345. BI opval = tmp_flag;
  4346. SET_H_TBIT (opval);
  4347. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  4348. }
  4349. }
  4350. #undef FLD
  4351. }
  4352. NEXT (vpc);
  4353. CASE (sem, INSN_SUBV_COMPACT) : /* subv $rm, $rn */
  4354. {
  4355. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4356. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4357. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4358. int UNUSED written = 0;
  4359. IADDR UNUSED pc = abuf->addr;
  4360. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4361. {
  4362. BI tmp_t;
  4363. tmp_t = SUBOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
  4364. {
  4365. SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
  4366. SET_H_GRC (FLD (f_rn), opval);
  4367. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4368. }
  4369. {
  4370. BI opval = ((tmp_t) ? (1) : (0));
  4371. SET_H_TBIT (opval);
  4372. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  4373. }
  4374. }
  4375. #undef FLD
  4376. }
  4377. NEXT (vpc);
  4378. CASE (sem, INSN_SWAPB_COMPACT) : /* swap.b $rm, $rn */
  4379. {
  4380. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4381. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4382. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4383. int UNUSED written = 0;
  4384. IADDR UNUSED pc = abuf->addr;
  4385. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4386. {
  4387. UHI tmp_top_half;
  4388. UQI tmp_byte1;
  4389. UQI tmp_byte0;
  4390. tmp_top_half = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 0);
  4391. tmp_byte1 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 2);
  4392. tmp_byte0 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3);
  4393. {
  4394. SI opval = ORSI (SLLSI (tmp_top_half, 16), ORSI (SLLSI (tmp_byte0, 8), tmp_byte1));
  4395. SET_H_GRC (FLD (f_rn), opval);
  4396. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4397. }
  4398. }
  4399. #undef FLD
  4400. }
  4401. NEXT (vpc);
  4402. CASE (sem, INSN_SWAPW_COMPACT) : /* swap.w $rm, $rn */
  4403. {
  4404. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4405. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4406. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4407. int UNUSED written = 0;
  4408. IADDR UNUSED pc = abuf->addr;
  4409. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4410. {
  4411. SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rm)), 16), SLLSI (GET_H_GRC (FLD (f_rm)), 16));
  4412. SET_H_GRC (FLD (f_rn), opval);
  4413. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4414. }
  4415. #undef FLD
  4416. }
  4417. NEXT (vpc);
  4418. CASE (sem, INSN_TASB_COMPACT) : /* tas.b @$rn */
  4419. {
  4420. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4421. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4422. #define FLD(f) abuf->fields.sfmt_movw10_compact.f
  4423. int UNUSED written = 0;
  4424. IADDR UNUSED pc = abuf->addr;
  4425. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4426. {
  4427. UQI tmp_byte;
  4428. tmp_byte = GETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
  4429. {
  4430. BI opval = ((EQQI (tmp_byte, 0)) ? (1) : (0));
  4431. SET_H_TBIT (opval);
  4432. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  4433. }
  4434. tmp_byte = ORQI (tmp_byte, 128);
  4435. {
  4436. UQI opval = tmp_byte;
  4437. SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
  4438. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4439. }
  4440. }
  4441. #undef FLD
  4442. }
  4443. NEXT (vpc);
  4444. CASE (sem, INSN_TRAPA_COMPACT) : /* trapa #$uimm8 */
  4445. {
  4446. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4447. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4448. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  4449. int UNUSED written = 0;
  4450. IADDR UNUSED pc = abuf->addr;
  4451. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4452. sh64_compact_trapa (current_cpu, FLD (f_imm8), pc);
  4453. #undef FLD
  4454. }
  4455. NEXT (vpc);
  4456. CASE (sem, INSN_TST_COMPACT) : /* tst $rm, $rn */
  4457. {
  4458. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4459. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4460. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4461. int UNUSED written = 0;
  4462. IADDR UNUSED pc = abuf->addr;
  4463. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4464. {
  4465. BI opval = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn))), 0)) ? (1) : (0));
  4466. SET_H_TBIT (opval);
  4467. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  4468. }
  4469. #undef FLD
  4470. }
  4471. NEXT (vpc);
  4472. CASE (sem, INSN_TSTI_COMPACT) : /* tst #$uimm8, r0 */
  4473. {
  4474. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4475. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4476. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  4477. int UNUSED written = 0;
  4478. IADDR UNUSED pc = abuf->addr;
  4479. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4480. {
  4481. BI opval = ((EQSI (ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSISI (FLD (f_imm8))), 0)) ? (1) : (0));
  4482. SET_H_TBIT (opval);
  4483. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  4484. }
  4485. #undef FLD
  4486. }
  4487. NEXT (vpc);
  4488. CASE (sem, INSN_TSTB_COMPACT) : /* tst.b #$imm8, @(r0, gbr) */
  4489. {
  4490. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4491. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4492. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  4493. int UNUSED written = 0;
  4494. IADDR UNUSED pc = abuf->addr;
  4495. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4496. {
  4497. DI tmp_addr;
  4498. tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
  4499. {
  4500. BI opval = ((EQQI (ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8)), 0)) ? (1) : (0));
  4501. SET_H_TBIT (opval);
  4502. CGEN_TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
  4503. }
  4504. }
  4505. #undef FLD
  4506. }
  4507. NEXT (vpc);
  4508. CASE (sem, INSN_XOR_COMPACT) : /* xor $rm64, $rn64 */
  4509. {
  4510. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4511. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4512. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4513. int UNUSED written = 0;
  4514. IADDR UNUSED pc = abuf->addr;
  4515. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4516. {
  4517. DI opval = XORDI (GET_H_GR (FLD (f_rn)), GET_H_GR (FLD (f_rm)));
  4518. SET_H_GR (FLD (f_rn), opval);
  4519. CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
  4520. }
  4521. #undef FLD
  4522. }
  4523. NEXT (vpc);
  4524. CASE (sem, INSN_XORI_COMPACT) : /* xor #$uimm8, r0 */
  4525. {
  4526. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4527. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4528. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  4529. int UNUSED written = 0;
  4530. IADDR UNUSED pc = abuf->addr;
  4531. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4532. {
  4533. SI opval = XORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
  4534. SET_H_GRC (((UINT) 0), opval);
  4535. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4536. }
  4537. #undef FLD
  4538. }
  4539. NEXT (vpc);
  4540. CASE (sem, INSN_XORB_COMPACT) : /* xor.b #$imm8, @(r0, gbr) */
  4541. {
  4542. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4543. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4544. #define FLD(f) abuf->fields.sfmt_addi_compact.f
  4545. int UNUSED written = 0;
  4546. IADDR UNUSED pc = abuf->addr;
  4547. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4548. {
  4549. DI tmp_addr;
  4550. UQI tmp_data;
  4551. tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
  4552. tmp_data = XORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
  4553. {
  4554. UQI opval = tmp_data;
  4555. SETMEMUQI (current_cpu, pc, tmp_addr, opval);
  4556. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  4557. }
  4558. }
  4559. #undef FLD
  4560. }
  4561. NEXT (vpc);
  4562. CASE (sem, INSN_XTRCT_COMPACT) : /* xtrct $rm, $rn */
  4563. {
  4564. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  4565. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  4566. #define FLD(f) abuf->fields.sfmt_movl12_compact.f
  4567. int UNUSED written = 0;
  4568. IADDR UNUSED pc = abuf->addr;
  4569. vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
  4570. {
  4571. SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rm)), 16), SRLSI (GET_H_GRC (FLD (f_rn)), 16));
  4572. SET_H_GRC (FLD (f_rn), opval);
  4573. CGEN_TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
  4574. }
  4575. #undef FLD
  4576. }
  4577. NEXT (vpc);
  4578. }
  4579. ENDSWITCH (sem) /* End of semantic switch. */
  4580. /* At this point `vpc' contains the next insn to execute. */
  4581. }
  4582. #undef DEFINE_SWITCH
  4583. #endif /* DEFINE_SWITCH */