decodex.c 90 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700
  1. /* Simulator instruction decoder for m32rxf.
  2. THIS FILE IS MACHINE GENERATED WITH CGEN.
  3. Copyright 1996-2022 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. #define WANT_CPU m32rxf
  17. #define WANT_CPU_M32RXF
  18. #include "sim-main.h"
  19. #include "sim-assert.h"
  20. /* Insn can't be executed in parallel.
  21. Or is that "do NOt Pass to Air defense Radar"? :-) */
  22. #define NOPAR (-1)
  23. /* The instruction descriptor array.
  24. This is computed at runtime. Space for it is not malloc'd to save a
  25. teensy bit of cpu in the decoder. Moving it to malloc space is trivial
  26. but won't be done until necessary (we don't currently support the runtime
  27. addition of instructions nor an SMP machine with different cpus). */
  28. static IDESC m32rxf_insn_data[M32RXF_INSN__MAX];
  29. /* Commas between elements are contained in the macros.
  30. Some of these are conditionally compiled out. */
  31. static const struct insn_sem m32rxf_insn_sem[] =
  32. {
  33. { VIRTUAL_INSN_X_INVALID, M32RXF_INSN_X_INVALID, M32RXF_SFMT_EMPTY, NOPAR, NOPAR },
  34. { VIRTUAL_INSN_X_AFTER, M32RXF_INSN_X_AFTER, M32RXF_SFMT_EMPTY, NOPAR, NOPAR },
  35. { VIRTUAL_INSN_X_BEFORE, M32RXF_INSN_X_BEFORE, M32RXF_SFMT_EMPTY, NOPAR, NOPAR },
  36. { VIRTUAL_INSN_X_CTI_CHAIN, M32RXF_INSN_X_CTI_CHAIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR },
  37. { VIRTUAL_INSN_X_CHAIN, M32RXF_INSN_X_CHAIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR },
  38. { VIRTUAL_INSN_X_BEGIN, M32RXF_INSN_X_BEGIN, M32RXF_SFMT_EMPTY, NOPAR, NOPAR },
  39. { M32R_INSN_ADD, M32RXF_INSN_ADD, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_ADD, M32RXF_INSN_WRITE_ADD },
  40. { M32R_INSN_ADD3, M32RXF_INSN_ADD3, M32RXF_SFMT_ADD3, NOPAR, NOPAR },
  41. { M32R_INSN_AND, M32RXF_INSN_AND, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_AND, M32RXF_INSN_WRITE_AND },
  42. { M32R_INSN_AND3, M32RXF_INSN_AND3, M32RXF_SFMT_AND3, NOPAR, NOPAR },
  43. { M32R_INSN_OR, M32RXF_INSN_OR, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_OR, M32RXF_INSN_WRITE_OR },
  44. { M32R_INSN_OR3, M32RXF_INSN_OR3, M32RXF_SFMT_OR3, NOPAR, NOPAR },
  45. { M32R_INSN_XOR, M32RXF_INSN_XOR, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_XOR, M32RXF_INSN_WRITE_XOR },
  46. { M32R_INSN_XOR3, M32RXF_INSN_XOR3, M32RXF_SFMT_AND3, NOPAR, NOPAR },
  47. { M32R_INSN_ADDI, M32RXF_INSN_ADDI, M32RXF_SFMT_ADDI, M32RXF_INSN_PAR_ADDI, M32RXF_INSN_WRITE_ADDI },
  48. { M32R_INSN_ADDV, M32RXF_INSN_ADDV, M32RXF_SFMT_ADDV, M32RXF_INSN_PAR_ADDV, M32RXF_INSN_WRITE_ADDV },
  49. { M32R_INSN_ADDV3, M32RXF_INSN_ADDV3, M32RXF_SFMT_ADDV3, NOPAR, NOPAR },
  50. { M32R_INSN_ADDX, M32RXF_INSN_ADDX, M32RXF_SFMT_ADDX, M32RXF_INSN_PAR_ADDX, M32RXF_INSN_WRITE_ADDX },
  51. { M32R_INSN_BC8, M32RXF_INSN_BC8, M32RXF_SFMT_BC8, M32RXF_INSN_PAR_BC8, M32RXF_INSN_WRITE_BC8 },
  52. { M32R_INSN_BC24, M32RXF_INSN_BC24, M32RXF_SFMT_BC24, NOPAR, NOPAR },
  53. { M32R_INSN_BEQ, M32RXF_INSN_BEQ, M32RXF_SFMT_BEQ, NOPAR, NOPAR },
  54. { M32R_INSN_BEQZ, M32RXF_INSN_BEQZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR },
  55. { M32R_INSN_BGEZ, M32RXF_INSN_BGEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR },
  56. { M32R_INSN_BGTZ, M32RXF_INSN_BGTZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR },
  57. { M32R_INSN_BLEZ, M32RXF_INSN_BLEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR },
  58. { M32R_INSN_BLTZ, M32RXF_INSN_BLTZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR },
  59. { M32R_INSN_BNEZ, M32RXF_INSN_BNEZ, M32RXF_SFMT_BEQZ, NOPAR, NOPAR },
  60. { M32R_INSN_BL8, M32RXF_INSN_BL8, M32RXF_SFMT_BL8, M32RXF_INSN_PAR_BL8, M32RXF_INSN_WRITE_BL8 },
  61. { M32R_INSN_BL24, M32RXF_INSN_BL24, M32RXF_SFMT_BL24, NOPAR, NOPAR },
  62. { M32R_INSN_BCL8, M32RXF_INSN_BCL8, M32RXF_SFMT_BCL8, M32RXF_INSN_PAR_BCL8, M32RXF_INSN_WRITE_BCL8 },
  63. { M32R_INSN_BCL24, M32RXF_INSN_BCL24, M32RXF_SFMT_BCL24, NOPAR, NOPAR },
  64. { M32R_INSN_BNC8, M32RXF_INSN_BNC8, M32RXF_SFMT_BC8, M32RXF_INSN_PAR_BNC8, M32RXF_INSN_WRITE_BNC8 },
  65. { M32R_INSN_BNC24, M32RXF_INSN_BNC24, M32RXF_SFMT_BC24, NOPAR, NOPAR },
  66. { M32R_INSN_BNE, M32RXF_INSN_BNE, M32RXF_SFMT_BEQ, NOPAR, NOPAR },
  67. { M32R_INSN_BRA8, M32RXF_INSN_BRA8, M32RXF_SFMT_BRA8, M32RXF_INSN_PAR_BRA8, M32RXF_INSN_WRITE_BRA8 },
  68. { M32R_INSN_BRA24, M32RXF_INSN_BRA24, M32RXF_SFMT_BRA24, NOPAR, NOPAR },
  69. { M32R_INSN_BNCL8, M32RXF_INSN_BNCL8, M32RXF_SFMT_BCL8, M32RXF_INSN_PAR_BNCL8, M32RXF_INSN_WRITE_BNCL8 },
  70. { M32R_INSN_BNCL24, M32RXF_INSN_BNCL24, M32RXF_SFMT_BCL24, NOPAR, NOPAR },
  71. { M32R_INSN_CMP, M32RXF_INSN_CMP, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMP, M32RXF_INSN_WRITE_CMP },
  72. { M32R_INSN_CMPI, M32RXF_INSN_CMPI, M32RXF_SFMT_CMPI, NOPAR, NOPAR },
  73. { M32R_INSN_CMPU, M32RXF_INSN_CMPU, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMPU, M32RXF_INSN_WRITE_CMPU },
  74. { M32R_INSN_CMPUI, M32RXF_INSN_CMPUI, M32RXF_SFMT_CMPI, NOPAR, NOPAR },
  75. { M32R_INSN_CMPEQ, M32RXF_INSN_CMPEQ, M32RXF_SFMT_CMP, M32RXF_INSN_PAR_CMPEQ, M32RXF_INSN_WRITE_CMPEQ },
  76. { M32R_INSN_CMPZ, M32RXF_INSN_CMPZ, M32RXF_SFMT_CMPZ, M32RXF_INSN_PAR_CMPZ, M32RXF_INSN_WRITE_CMPZ },
  77. { M32R_INSN_DIV, M32RXF_INSN_DIV, M32RXF_SFMT_DIV, NOPAR, NOPAR },
  78. { M32R_INSN_DIVU, M32RXF_INSN_DIVU, M32RXF_SFMT_DIV, NOPAR, NOPAR },
  79. { M32R_INSN_REM, M32RXF_INSN_REM, M32RXF_SFMT_DIV, NOPAR, NOPAR },
  80. { M32R_INSN_REMU, M32RXF_INSN_REMU, M32RXF_SFMT_DIV, NOPAR, NOPAR },
  81. { M32R_INSN_DIVH, M32RXF_INSN_DIVH, M32RXF_SFMT_DIV, NOPAR, NOPAR },
  82. { M32R_INSN_JC, M32RXF_INSN_JC, M32RXF_SFMT_JC, M32RXF_INSN_PAR_JC, M32RXF_INSN_WRITE_JC },
  83. { M32R_INSN_JNC, M32RXF_INSN_JNC, M32RXF_SFMT_JC, M32RXF_INSN_PAR_JNC, M32RXF_INSN_WRITE_JNC },
  84. { M32R_INSN_JL, M32RXF_INSN_JL, M32RXF_SFMT_JL, M32RXF_INSN_PAR_JL, M32RXF_INSN_WRITE_JL },
  85. { M32R_INSN_JMP, M32RXF_INSN_JMP, M32RXF_SFMT_JMP, M32RXF_INSN_PAR_JMP, M32RXF_INSN_WRITE_JMP },
  86. { M32R_INSN_LD, M32RXF_INSN_LD, M32RXF_SFMT_LD, M32RXF_INSN_PAR_LD, M32RXF_INSN_WRITE_LD },
  87. { M32R_INSN_LD_D, M32RXF_INSN_LD_D, M32RXF_SFMT_LD_D, NOPAR, NOPAR },
  88. { M32R_INSN_LDB, M32RXF_INSN_LDB, M32RXF_SFMT_LDB, M32RXF_INSN_PAR_LDB, M32RXF_INSN_WRITE_LDB },
  89. { M32R_INSN_LDB_D, M32RXF_INSN_LDB_D, M32RXF_SFMT_LDB_D, NOPAR, NOPAR },
  90. { M32R_INSN_LDH, M32RXF_INSN_LDH, M32RXF_SFMT_LDH, M32RXF_INSN_PAR_LDH, M32RXF_INSN_WRITE_LDH },
  91. { M32R_INSN_LDH_D, M32RXF_INSN_LDH_D, M32RXF_SFMT_LDH_D, NOPAR, NOPAR },
  92. { M32R_INSN_LDUB, M32RXF_INSN_LDUB, M32RXF_SFMT_LDB, M32RXF_INSN_PAR_LDUB, M32RXF_INSN_WRITE_LDUB },
  93. { M32R_INSN_LDUB_D, M32RXF_INSN_LDUB_D, M32RXF_SFMT_LDB_D, NOPAR, NOPAR },
  94. { M32R_INSN_LDUH, M32RXF_INSN_LDUH, M32RXF_SFMT_LDH, M32RXF_INSN_PAR_LDUH, M32RXF_INSN_WRITE_LDUH },
  95. { M32R_INSN_LDUH_D, M32RXF_INSN_LDUH_D, M32RXF_SFMT_LDH_D, NOPAR, NOPAR },
  96. { M32R_INSN_LD_PLUS, M32RXF_INSN_LD_PLUS, M32RXF_SFMT_LD_PLUS, M32RXF_INSN_PAR_LD_PLUS, M32RXF_INSN_WRITE_LD_PLUS },
  97. { M32R_INSN_LD24, M32RXF_INSN_LD24, M32RXF_SFMT_LD24, NOPAR, NOPAR },
  98. { M32R_INSN_LDI8, M32RXF_INSN_LDI8, M32RXF_SFMT_LDI8, M32RXF_INSN_PAR_LDI8, M32RXF_INSN_WRITE_LDI8 },
  99. { M32R_INSN_LDI16, M32RXF_INSN_LDI16, M32RXF_SFMT_LDI16, NOPAR, NOPAR },
  100. { M32R_INSN_LOCK, M32RXF_INSN_LOCK, M32RXF_SFMT_LOCK, M32RXF_INSN_PAR_LOCK, M32RXF_INSN_WRITE_LOCK },
  101. { M32R_INSN_MACHI_A, M32RXF_INSN_MACHI_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACHI_A, M32RXF_INSN_WRITE_MACHI_A },
  102. { M32R_INSN_MACLO_A, M32RXF_INSN_MACLO_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACLO_A, M32RXF_INSN_WRITE_MACLO_A },
  103. { M32R_INSN_MACWHI_A, M32RXF_INSN_MACWHI_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACWHI_A, M32RXF_INSN_WRITE_MACWHI_A },
  104. { M32R_INSN_MACWLO_A, M32RXF_INSN_MACWLO_A, M32RXF_SFMT_MACHI_A, M32RXF_INSN_PAR_MACWLO_A, M32RXF_INSN_WRITE_MACWLO_A },
  105. { M32R_INSN_MUL, M32RXF_INSN_MUL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_MUL, M32RXF_INSN_WRITE_MUL },
  106. { M32R_INSN_MULHI_A, M32RXF_INSN_MULHI_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULHI_A, M32RXF_INSN_WRITE_MULHI_A },
  107. { M32R_INSN_MULLO_A, M32RXF_INSN_MULLO_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULLO_A, M32RXF_INSN_WRITE_MULLO_A },
  108. { M32R_INSN_MULWHI_A, M32RXF_INSN_MULWHI_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULWHI_A, M32RXF_INSN_WRITE_MULWHI_A },
  109. { M32R_INSN_MULWLO_A, M32RXF_INSN_MULWLO_A, M32RXF_SFMT_MULHI_A, M32RXF_INSN_PAR_MULWLO_A, M32RXF_INSN_WRITE_MULWLO_A },
  110. { M32R_INSN_MV, M32RXF_INSN_MV, M32RXF_SFMT_MV, M32RXF_INSN_PAR_MV, M32RXF_INSN_WRITE_MV },
  111. { M32R_INSN_MVFACHI_A, M32RXF_INSN_MVFACHI_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACHI_A, M32RXF_INSN_WRITE_MVFACHI_A },
  112. { M32R_INSN_MVFACLO_A, M32RXF_INSN_MVFACLO_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACLO_A, M32RXF_INSN_WRITE_MVFACLO_A },
  113. { M32R_INSN_MVFACMI_A, M32RXF_INSN_MVFACMI_A, M32RXF_SFMT_MVFACHI_A, M32RXF_INSN_PAR_MVFACMI_A, M32RXF_INSN_WRITE_MVFACMI_A },
  114. { M32R_INSN_MVFC, M32RXF_INSN_MVFC, M32RXF_SFMT_MVFC, M32RXF_INSN_PAR_MVFC, M32RXF_INSN_WRITE_MVFC },
  115. { M32R_INSN_MVTACHI_A, M32RXF_INSN_MVTACHI_A, M32RXF_SFMT_MVTACHI_A, M32RXF_INSN_PAR_MVTACHI_A, M32RXF_INSN_WRITE_MVTACHI_A },
  116. { M32R_INSN_MVTACLO_A, M32RXF_INSN_MVTACLO_A, M32RXF_SFMT_MVTACHI_A, M32RXF_INSN_PAR_MVTACLO_A, M32RXF_INSN_WRITE_MVTACLO_A },
  117. { M32R_INSN_MVTC, M32RXF_INSN_MVTC, M32RXF_SFMT_MVTC, M32RXF_INSN_PAR_MVTC, M32RXF_INSN_WRITE_MVTC },
  118. { M32R_INSN_NEG, M32RXF_INSN_NEG, M32RXF_SFMT_MV, M32RXF_INSN_PAR_NEG, M32RXF_INSN_WRITE_NEG },
  119. { M32R_INSN_NOP, M32RXF_INSN_NOP, M32RXF_SFMT_NOP, M32RXF_INSN_PAR_NOP, M32RXF_INSN_WRITE_NOP },
  120. { M32R_INSN_NOT, M32RXF_INSN_NOT, M32RXF_SFMT_MV, M32RXF_INSN_PAR_NOT, M32RXF_INSN_WRITE_NOT },
  121. { M32R_INSN_RAC_DSI, M32RXF_INSN_RAC_DSI, M32RXF_SFMT_RAC_DSI, M32RXF_INSN_PAR_RAC_DSI, M32RXF_INSN_WRITE_RAC_DSI },
  122. { M32R_INSN_RACH_DSI, M32RXF_INSN_RACH_DSI, M32RXF_SFMT_RAC_DSI, M32RXF_INSN_PAR_RACH_DSI, M32RXF_INSN_WRITE_RACH_DSI },
  123. { M32R_INSN_RTE, M32RXF_INSN_RTE, M32RXF_SFMT_RTE, M32RXF_INSN_PAR_RTE, M32RXF_INSN_WRITE_RTE },
  124. { M32R_INSN_SETH, M32RXF_INSN_SETH, M32RXF_SFMT_SETH, NOPAR, NOPAR },
  125. { M32R_INSN_SLL, M32RXF_INSN_SLL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SLL, M32RXF_INSN_WRITE_SLL },
  126. { M32R_INSN_SLL3, M32RXF_INSN_SLL3, M32RXF_SFMT_SLL3, NOPAR, NOPAR },
  127. { M32R_INSN_SLLI, M32RXF_INSN_SLLI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SLLI, M32RXF_INSN_WRITE_SLLI },
  128. { M32R_INSN_SRA, M32RXF_INSN_SRA, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SRA, M32RXF_INSN_WRITE_SRA },
  129. { M32R_INSN_SRA3, M32RXF_INSN_SRA3, M32RXF_SFMT_SLL3, NOPAR, NOPAR },
  130. { M32R_INSN_SRAI, M32RXF_INSN_SRAI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SRAI, M32RXF_INSN_WRITE_SRAI },
  131. { M32R_INSN_SRL, M32RXF_INSN_SRL, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SRL, M32RXF_INSN_WRITE_SRL },
  132. { M32R_INSN_SRL3, M32RXF_INSN_SRL3, M32RXF_SFMT_SLL3, NOPAR, NOPAR },
  133. { M32R_INSN_SRLI, M32RXF_INSN_SRLI, M32RXF_SFMT_SLLI, M32RXF_INSN_PAR_SRLI, M32RXF_INSN_WRITE_SRLI },
  134. { M32R_INSN_ST, M32RXF_INSN_ST, M32RXF_SFMT_ST, M32RXF_INSN_PAR_ST, M32RXF_INSN_WRITE_ST },
  135. { M32R_INSN_ST_D, M32RXF_INSN_ST_D, M32RXF_SFMT_ST_D, NOPAR, NOPAR },
  136. { M32R_INSN_STB, M32RXF_INSN_STB, M32RXF_SFMT_STB, M32RXF_INSN_PAR_STB, M32RXF_INSN_WRITE_STB },
  137. { M32R_INSN_STB_D, M32RXF_INSN_STB_D, M32RXF_SFMT_STB_D, NOPAR, NOPAR },
  138. { M32R_INSN_STH, M32RXF_INSN_STH, M32RXF_SFMT_STH, M32RXF_INSN_PAR_STH, M32RXF_INSN_WRITE_STH },
  139. { M32R_INSN_STH_D, M32RXF_INSN_STH_D, M32RXF_SFMT_STH_D, NOPAR, NOPAR },
  140. { M32R_INSN_ST_PLUS, M32RXF_INSN_ST_PLUS, M32RXF_SFMT_ST_PLUS, M32RXF_INSN_PAR_ST_PLUS, M32RXF_INSN_WRITE_ST_PLUS },
  141. { M32R_INSN_STH_PLUS, M32RXF_INSN_STH_PLUS, M32RXF_SFMT_STH_PLUS, M32RXF_INSN_PAR_STH_PLUS, M32RXF_INSN_WRITE_STH_PLUS },
  142. { M32R_INSN_STB_PLUS, M32RXF_INSN_STB_PLUS, M32RXF_SFMT_STB_PLUS, M32RXF_INSN_PAR_STB_PLUS, M32RXF_INSN_WRITE_STB_PLUS },
  143. { M32R_INSN_ST_MINUS, M32RXF_INSN_ST_MINUS, M32RXF_SFMT_ST_PLUS, M32RXF_INSN_PAR_ST_MINUS, M32RXF_INSN_WRITE_ST_MINUS },
  144. { M32R_INSN_SUB, M32RXF_INSN_SUB, M32RXF_SFMT_ADD, M32RXF_INSN_PAR_SUB, M32RXF_INSN_WRITE_SUB },
  145. { M32R_INSN_SUBV, M32RXF_INSN_SUBV, M32RXF_SFMT_ADDV, M32RXF_INSN_PAR_SUBV, M32RXF_INSN_WRITE_SUBV },
  146. { M32R_INSN_SUBX, M32RXF_INSN_SUBX, M32RXF_SFMT_ADDX, M32RXF_INSN_PAR_SUBX, M32RXF_INSN_WRITE_SUBX },
  147. { M32R_INSN_TRAP, M32RXF_INSN_TRAP, M32RXF_SFMT_TRAP, M32RXF_INSN_PAR_TRAP, M32RXF_INSN_WRITE_TRAP },
  148. { M32R_INSN_UNLOCK, M32RXF_INSN_UNLOCK, M32RXF_SFMT_UNLOCK, M32RXF_INSN_PAR_UNLOCK, M32RXF_INSN_WRITE_UNLOCK },
  149. { M32R_INSN_SATB, M32RXF_INSN_SATB, M32RXF_SFMT_SATB, NOPAR, NOPAR },
  150. { M32R_INSN_SATH, M32RXF_INSN_SATH, M32RXF_SFMT_SATB, NOPAR, NOPAR },
  151. { M32R_INSN_SAT, M32RXF_INSN_SAT, M32RXF_SFMT_SAT, NOPAR, NOPAR },
  152. { M32R_INSN_PCMPBZ, M32RXF_INSN_PCMPBZ, M32RXF_SFMT_CMPZ, M32RXF_INSN_PAR_PCMPBZ, M32RXF_INSN_WRITE_PCMPBZ },
  153. { M32R_INSN_SADD, M32RXF_INSN_SADD, M32RXF_SFMT_SADD, M32RXF_INSN_PAR_SADD, M32RXF_INSN_WRITE_SADD },
  154. { M32R_INSN_MACWU1, M32RXF_INSN_MACWU1, M32RXF_SFMT_MACWU1, M32RXF_INSN_PAR_MACWU1, M32RXF_INSN_WRITE_MACWU1 },
  155. { M32R_INSN_MSBLO, M32RXF_INSN_MSBLO, M32RXF_SFMT_MSBLO, M32RXF_INSN_PAR_MSBLO, M32RXF_INSN_WRITE_MSBLO },
  156. { M32R_INSN_MULWU1, M32RXF_INSN_MULWU1, M32RXF_SFMT_MULWU1, M32RXF_INSN_PAR_MULWU1, M32RXF_INSN_WRITE_MULWU1 },
  157. { M32R_INSN_MACLH1, M32RXF_INSN_MACLH1, M32RXF_SFMT_MACWU1, M32RXF_INSN_PAR_MACLH1, M32RXF_INSN_WRITE_MACLH1 },
  158. { M32R_INSN_SC, M32RXF_INSN_SC, M32RXF_SFMT_SC, M32RXF_INSN_PAR_SC, M32RXF_INSN_WRITE_SC },
  159. { M32R_INSN_SNC, M32RXF_INSN_SNC, M32RXF_SFMT_SC, M32RXF_INSN_PAR_SNC, M32RXF_INSN_WRITE_SNC },
  160. { M32R_INSN_CLRPSW, M32RXF_INSN_CLRPSW, M32RXF_SFMT_CLRPSW, M32RXF_INSN_PAR_CLRPSW, M32RXF_INSN_WRITE_CLRPSW },
  161. { M32R_INSN_SETPSW, M32RXF_INSN_SETPSW, M32RXF_SFMT_SETPSW, M32RXF_INSN_PAR_SETPSW, M32RXF_INSN_WRITE_SETPSW },
  162. { M32R_INSN_BSET, M32RXF_INSN_BSET, M32RXF_SFMT_BSET, NOPAR, NOPAR },
  163. { M32R_INSN_BCLR, M32RXF_INSN_BCLR, M32RXF_SFMT_BSET, NOPAR, NOPAR },
  164. { M32R_INSN_BTST, M32RXF_INSN_BTST, M32RXF_SFMT_BTST, M32RXF_INSN_PAR_BTST, M32RXF_INSN_WRITE_BTST },
  165. };
  166. static const struct insn_sem m32rxf_insn_sem_invalid =
  167. {
  168. VIRTUAL_INSN_X_INVALID, M32RXF_INSN_X_INVALID, M32RXF_SFMT_EMPTY, NOPAR, NOPAR
  169. };
  170. /* Initialize an IDESC from the compile-time computable parts. */
  171. static INLINE void
  172. init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
  173. {
  174. const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
  175. id->num = t->index;
  176. id->sfmt = t->sfmt;
  177. if ((int) t->type <= 0)
  178. id->idata = & cgen_virtual_insn_table[- (int) t->type];
  179. else
  180. id->idata = & insn_table[t->type];
  181. id->attrs = CGEN_INSN_ATTRS (id->idata);
  182. /* Oh my god, a magic number. */
  183. id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
  184. #if WITH_PROFILE_MODEL_P
  185. id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
  186. {
  187. SIM_DESC sd = CPU_STATE (cpu);
  188. SIM_ASSERT (t->index == id->timing->num);
  189. }
  190. #endif
  191. /* Semantic pointers are initialized elsewhere. */
  192. }
  193. /* Initialize the instruction descriptor table. */
  194. void
  195. m32rxf_init_idesc_table (SIM_CPU *cpu)
  196. {
  197. IDESC *id,*tabend;
  198. const struct insn_sem *t,*tend;
  199. int tabsize = M32RXF_INSN__MAX;
  200. IDESC *table = m32rxf_insn_data;
  201. memset (table, 0, tabsize * sizeof (IDESC));
  202. /* First set all entries to the `invalid insn'. */
  203. t = & m32rxf_insn_sem_invalid;
  204. for (id = table, tabend = table + tabsize; id < tabend; ++id)
  205. init_idesc (cpu, id, t);
  206. /* Now fill in the values for the chosen cpu. */
  207. for (t = m32rxf_insn_sem, tend = t + ARRAY_SIZE (m32rxf_insn_sem);
  208. t != tend; ++t)
  209. {
  210. init_idesc (cpu, & table[t->index], t);
  211. if (t->par_index != NOPAR)
  212. {
  213. init_idesc (cpu, &table[t->par_index], t);
  214. table[t->index].par_idesc = &table[t->par_index];
  215. }
  216. if (t->par_index != NOPAR)
  217. {
  218. init_idesc (cpu, &table[t->write_index], t);
  219. table[t->par_index].par_idesc = &table[t->write_index];
  220. }
  221. }
  222. /* Link the IDESC table into the cpu. */
  223. CPU_IDESC (cpu) = table;
  224. }
  225. /* Given an instruction, return a pointer to its IDESC entry. */
  226. const IDESC *
  227. m32rxf_decode (SIM_CPU *current_cpu, IADDR pc,
  228. CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn,
  229. ARGBUF *abuf)
  230. {
  231. /* Result of decoder. */
  232. M32RXF_INSN_TYPE itype;
  233. {
  234. CGEN_INSN_WORD insn = base_insn;
  235. {
  236. unsigned int val = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0)));
  237. switch (val)
  238. {
  239. case 0 : itype = M32RXF_INSN_SUBV; goto extract_sfmt_addv;
  240. case 1 : itype = M32RXF_INSN_SUBX; goto extract_sfmt_addx;
  241. case 2 : itype = M32RXF_INSN_SUB; goto extract_sfmt_add;
  242. case 3 : itype = M32RXF_INSN_NEG; goto extract_sfmt_mv;
  243. case 4 : itype = M32RXF_INSN_CMP; goto extract_sfmt_cmp;
  244. case 5 : itype = M32RXF_INSN_CMPU; goto extract_sfmt_cmp;
  245. case 6 : itype = M32RXF_INSN_CMPEQ; goto extract_sfmt_cmp;
  246. case 7 :
  247. {
  248. unsigned int val = (((insn >> 8) & (3 << 0)));
  249. switch (val)
  250. {
  251. case 0 :
  252. if ((entire_insn & 0xfff0) == 0x70)
  253. { itype = M32RXF_INSN_CMPZ; goto extract_sfmt_cmpz; }
  254. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  255. case 3 :
  256. if ((entire_insn & 0xfff0) == 0x370)
  257. { itype = M32RXF_INSN_PCMPBZ; goto extract_sfmt_cmpz; }
  258. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  259. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  260. }
  261. }
  262. case 8 : itype = M32RXF_INSN_ADDV; goto extract_sfmt_addv;
  263. case 9 : itype = M32RXF_INSN_ADDX; goto extract_sfmt_addx;
  264. case 10 : itype = M32RXF_INSN_ADD; goto extract_sfmt_add;
  265. case 11 : itype = M32RXF_INSN_NOT; goto extract_sfmt_mv;
  266. case 12 : itype = M32RXF_INSN_AND; goto extract_sfmt_add;
  267. case 13 : itype = M32RXF_INSN_XOR; goto extract_sfmt_add;
  268. case 14 : itype = M32RXF_INSN_OR; goto extract_sfmt_add;
  269. case 15 :
  270. if ((entire_insn & 0xf8f0) == 0xf0)
  271. { itype = M32RXF_INSN_BTST; goto extract_sfmt_btst; }
  272. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  273. case 16 : itype = M32RXF_INSN_SRL; goto extract_sfmt_add;
  274. case 18 : itype = M32RXF_INSN_SRA; goto extract_sfmt_add;
  275. case 20 : itype = M32RXF_INSN_SLL; goto extract_sfmt_add;
  276. case 22 : itype = M32RXF_INSN_MUL; goto extract_sfmt_add;
  277. case 24 : itype = M32RXF_INSN_MV; goto extract_sfmt_mv;
  278. case 25 : itype = M32RXF_INSN_MVFC; goto extract_sfmt_mvfc;
  279. case 26 : itype = M32RXF_INSN_MVTC; goto extract_sfmt_mvtc;
  280. case 28 :
  281. {
  282. unsigned int val = (((insn >> 8) & (3 << 0)));
  283. switch (val)
  284. {
  285. case 0 :
  286. if ((entire_insn & 0xfff0) == 0x1cc0)
  287. { itype = M32RXF_INSN_JC; goto extract_sfmt_jc; }
  288. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  289. case 1 :
  290. if ((entire_insn & 0xfff0) == 0x1dc0)
  291. { itype = M32RXF_INSN_JNC; goto extract_sfmt_jc; }
  292. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  293. case 2 :
  294. if ((entire_insn & 0xfff0) == 0x1ec0)
  295. { itype = M32RXF_INSN_JL; goto extract_sfmt_jl; }
  296. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  297. case 3 :
  298. if ((entire_insn & 0xfff0) == 0x1fc0)
  299. { itype = M32RXF_INSN_JMP; goto extract_sfmt_jmp; }
  300. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  301. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  302. }
  303. }
  304. case 29 :
  305. if ((entire_insn & 0xffff) == 0x10d6)
  306. { itype = M32RXF_INSN_RTE; goto extract_sfmt_rte; }
  307. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  308. case 31 :
  309. if ((entire_insn & 0xfff0) == 0x10f0)
  310. { itype = M32RXF_INSN_TRAP; goto extract_sfmt_trap; }
  311. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  312. case 32 : itype = M32RXF_INSN_STB; goto extract_sfmt_stb;
  313. case 33 : itype = M32RXF_INSN_STB_PLUS; goto extract_sfmt_stb_plus;
  314. case 34 : itype = M32RXF_INSN_STH; goto extract_sfmt_sth;
  315. case 35 : itype = M32RXF_INSN_STH_PLUS; goto extract_sfmt_sth_plus;
  316. case 36 : itype = M32RXF_INSN_ST; goto extract_sfmt_st;
  317. case 37 : itype = M32RXF_INSN_UNLOCK; goto extract_sfmt_unlock;
  318. case 38 : itype = M32RXF_INSN_ST_PLUS; goto extract_sfmt_st_plus;
  319. case 39 : itype = M32RXF_INSN_ST_MINUS; goto extract_sfmt_st_plus;
  320. case 40 : itype = M32RXF_INSN_LDB; goto extract_sfmt_ldb;
  321. case 41 : itype = M32RXF_INSN_LDUB; goto extract_sfmt_ldb;
  322. case 42 : itype = M32RXF_INSN_LDH; goto extract_sfmt_ldh;
  323. case 43 : itype = M32RXF_INSN_LDUH; goto extract_sfmt_ldh;
  324. case 44 : itype = M32RXF_INSN_LD; goto extract_sfmt_ld;
  325. case 45 : itype = M32RXF_INSN_LOCK; goto extract_sfmt_lock;
  326. case 46 : itype = M32RXF_INSN_LD_PLUS; goto extract_sfmt_ld_plus;
  327. case 48 : /* fall through */
  328. case 56 : itype = M32RXF_INSN_MULHI_A; goto extract_sfmt_mulhi_a;
  329. case 49 : /* fall through */
  330. case 57 : itype = M32RXF_INSN_MULLO_A; goto extract_sfmt_mulhi_a;
  331. case 50 : /* fall through */
  332. case 58 : itype = M32RXF_INSN_MULWHI_A; goto extract_sfmt_mulhi_a;
  333. case 51 : /* fall through */
  334. case 59 : itype = M32RXF_INSN_MULWLO_A; goto extract_sfmt_mulhi_a;
  335. case 52 : /* fall through */
  336. case 60 : itype = M32RXF_INSN_MACHI_A; goto extract_sfmt_machi_a;
  337. case 53 : /* fall through */
  338. case 61 : itype = M32RXF_INSN_MACLO_A; goto extract_sfmt_machi_a;
  339. case 54 : /* fall through */
  340. case 62 : itype = M32RXF_INSN_MACWHI_A; goto extract_sfmt_machi_a;
  341. case 55 : /* fall through */
  342. case 63 : itype = M32RXF_INSN_MACWLO_A; goto extract_sfmt_machi_a;
  343. case 64 : /* fall through */
  344. case 65 : /* fall through */
  345. case 66 : /* fall through */
  346. case 67 : /* fall through */
  347. case 68 : /* fall through */
  348. case 69 : /* fall through */
  349. case 70 : /* fall through */
  350. case 71 : /* fall through */
  351. case 72 : /* fall through */
  352. case 73 : /* fall through */
  353. case 74 : /* fall through */
  354. case 75 : /* fall through */
  355. case 76 : /* fall through */
  356. case 77 : /* fall through */
  357. case 78 : /* fall through */
  358. case 79 : itype = M32RXF_INSN_ADDI; goto extract_sfmt_addi;
  359. case 80 : /* fall through */
  360. case 81 : itype = M32RXF_INSN_SRLI; goto extract_sfmt_slli;
  361. case 82 : /* fall through */
  362. case 83 : itype = M32RXF_INSN_SRAI; goto extract_sfmt_slli;
  363. case 84 : /* fall through */
  364. case 85 : itype = M32RXF_INSN_SLLI; goto extract_sfmt_slli;
  365. case 87 :
  366. {
  367. unsigned int val = (((insn >> 0) & (1 << 0)));
  368. switch (val)
  369. {
  370. case 0 :
  371. if ((entire_insn & 0xf0f3) == 0x5070)
  372. { itype = M32RXF_INSN_MVTACHI_A; goto extract_sfmt_mvtachi_a; }
  373. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  374. case 1 :
  375. if ((entire_insn & 0xf0f3) == 0x5071)
  376. { itype = M32RXF_INSN_MVTACLO_A; goto extract_sfmt_mvtachi_a; }
  377. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  378. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  379. }
  380. }
  381. case 88 :
  382. if ((entire_insn & 0xf3f2) == 0x5080)
  383. { itype = M32RXF_INSN_RACH_DSI; goto extract_sfmt_rac_dsi; }
  384. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  385. case 89 :
  386. if ((entire_insn & 0xf3f2) == 0x5090)
  387. { itype = M32RXF_INSN_RAC_DSI; goto extract_sfmt_rac_dsi; }
  388. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  389. case 90 : itype = M32RXF_INSN_MULWU1; goto extract_sfmt_mulwu1;
  390. case 91 : itype = M32RXF_INSN_MACWU1; goto extract_sfmt_macwu1;
  391. case 92 : itype = M32RXF_INSN_MACLH1; goto extract_sfmt_macwu1;
  392. case 93 : itype = M32RXF_INSN_MSBLO; goto extract_sfmt_msblo;
  393. case 94 :
  394. if ((entire_insn & 0xffff) == 0x50e4)
  395. { itype = M32RXF_INSN_SADD; goto extract_sfmt_sadd; }
  396. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  397. case 95 :
  398. {
  399. unsigned int val = (((insn >> 0) & (3 << 0)));
  400. switch (val)
  401. {
  402. case 0 : itype = M32RXF_INSN_MVFACHI_A; goto extract_sfmt_mvfachi_a;
  403. case 1 : itype = M32RXF_INSN_MVFACLO_A; goto extract_sfmt_mvfachi_a;
  404. case 2 : itype = M32RXF_INSN_MVFACMI_A; goto extract_sfmt_mvfachi_a;
  405. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  406. }
  407. }
  408. case 96 : /* fall through */
  409. case 97 : /* fall through */
  410. case 98 : /* fall through */
  411. case 99 : /* fall through */
  412. case 100 : /* fall through */
  413. case 101 : /* fall through */
  414. case 102 : /* fall through */
  415. case 103 : /* fall through */
  416. case 104 : /* fall through */
  417. case 105 : /* fall through */
  418. case 106 : /* fall through */
  419. case 107 : /* fall through */
  420. case 108 : /* fall through */
  421. case 109 : /* fall through */
  422. case 110 : /* fall through */
  423. case 111 : itype = M32RXF_INSN_LDI8; goto extract_sfmt_ldi8;
  424. case 112 :
  425. {
  426. unsigned int val = (((insn >> 7) & (15 << 1)) | ((insn >> 0) & (1 << 0)));
  427. switch (val)
  428. {
  429. case 0 :
  430. if ((entire_insn & 0xffff) == 0x7000)
  431. { itype = M32RXF_INSN_NOP; goto extract_sfmt_nop; }
  432. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  433. case 2 : /* fall through */
  434. case 3 : itype = M32RXF_INSN_SETPSW; goto extract_sfmt_setpsw;
  435. case 4 : /* fall through */
  436. case 5 : itype = M32RXF_INSN_CLRPSW; goto extract_sfmt_clrpsw;
  437. case 9 :
  438. if ((entire_insn & 0xffff) == 0x7401)
  439. { itype = M32RXF_INSN_SC; goto extract_sfmt_sc; }
  440. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  441. case 11 :
  442. if ((entire_insn & 0xffff) == 0x7501)
  443. { itype = M32RXF_INSN_SNC; goto extract_sfmt_sc; }
  444. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  445. case 16 : /* fall through */
  446. case 17 : itype = M32RXF_INSN_BCL8; goto extract_sfmt_bcl8;
  447. case 18 : /* fall through */
  448. case 19 : itype = M32RXF_INSN_BNCL8; goto extract_sfmt_bcl8;
  449. case 24 : /* fall through */
  450. case 25 : itype = M32RXF_INSN_BC8; goto extract_sfmt_bc8;
  451. case 26 : /* fall through */
  452. case 27 : itype = M32RXF_INSN_BNC8; goto extract_sfmt_bc8;
  453. case 28 : /* fall through */
  454. case 29 : itype = M32RXF_INSN_BL8; goto extract_sfmt_bl8;
  455. case 30 : /* fall through */
  456. case 31 : itype = M32RXF_INSN_BRA8; goto extract_sfmt_bra8;
  457. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  458. }
  459. }
  460. case 113 : /* fall through */
  461. case 114 : /* fall through */
  462. case 115 : /* fall through */
  463. case 116 : /* fall through */
  464. case 117 : /* fall through */
  465. case 118 : /* fall through */
  466. case 119 : /* fall through */
  467. case 120 : /* fall through */
  468. case 121 : /* fall through */
  469. case 122 : /* fall through */
  470. case 123 : /* fall through */
  471. case 124 : /* fall through */
  472. case 125 : /* fall through */
  473. case 126 : /* fall through */
  474. case 127 :
  475. {
  476. unsigned int val = (((insn >> 8) & (15 << 0)));
  477. switch (val)
  478. {
  479. case 1 : itype = M32RXF_INSN_SETPSW; goto extract_sfmt_setpsw;
  480. case 2 : itype = M32RXF_INSN_CLRPSW; goto extract_sfmt_clrpsw;
  481. case 8 : itype = M32RXF_INSN_BCL8; goto extract_sfmt_bcl8;
  482. case 9 : itype = M32RXF_INSN_BNCL8; goto extract_sfmt_bcl8;
  483. case 12 : itype = M32RXF_INSN_BC8; goto extract_sfmt_bc8;
  484. case 13 : itype = M32RXF_INSN_BNC8; goto extract_sfmt_bc8;
  485. case 14 : itype = M32RXF_INSN_BL8; goto extract_sfmt_bl8;
  486. case 15 : itype = M32RXF_INSN_BRA8; goto extract_sfmt_bra8;
  487. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  488. }
  489. }
  490. case 132 :
  491. if ((entire_insn & 0xfff00000) == 0x80400000)
  492. { itype = M32RXF_INSN_CMPI; goto extract_sfmt_cmpi; }
  493. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  494. case 133 :
  495. if ((entire_insn & 0xfff00000) == 0x80500000)
  496. { itype = M32RXF_INSN_CMPUI; goto extract_sfmt_cmpi; }
  497. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  498. case 134 :
  499. {
  500. unsigned int val = (((entire_insn >> 8) & (3 << 0)));
  501. switch (val)
  502. {
  503. case 0 :
  504. if ((entire_insn & 0xf0f0ffff) == 0x80600000)
  505. { itype = M32RXF_INSN_SAT; goto extract_sfmt_sat; }
  506. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  507. case 2 :
  508. if ((entire_insn & 0xf0f0ffff) == 0x80600200)
  509. { itype = M32RXF_INSN_SATH; goto extract_sfmt_satb; }
  510. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  511. case 3 :
  512. if ((entire_insn & 0xf0f0ffff) == 0x80600300)
  513. { itype = M32RXF_INSN_SATB; goto extract_sfmt_satb; }
  514. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  515. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  516. }
  517. }
  518. case 136 : itype = M32RXF_INSN_ADDV3; goto extract_sfmt_addv3;
  519. case 138 : itype = M32RXF_INSN_ADD3; goto extract_sfmt_add3;
  520. case 140 : itype = M32RXF_INSN_AND3; goto extract_sfmt_and3;
  521. case 141 : itype = M32RXF_INSN_XOR3; goto extract_sfmt_and3;
  522. case 142 : itype = M32RXF_INSN_OR3; goto extract_sfmt_or3;
  523. case 144 :
  524. {
  525. unsigned int val = (((entire_insn >> 4) & (1 << 0)));
  526. switch (val)
  527. {
  528. case 0 :
  529. if ((entire_insn & 0xf0f0ffff) == 0x90000000)
  530. { itype = M32RXF_INSN_DIV; goto extract_sfmt_div; }
  531. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  532. case 1 :
  533. if ((entire_insn & 0xf0f0ffff) == 0x90000010)
  534. { itype = M32RXF_INSN_DIVH; goto extract_sfmt_div; }
  535. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  536. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  537. }
  538. }
  539. case 145 :
  540. if ((entire_insn & 0xf0f0ffff) == 0x90100000)
  541. { itype = M32RXF_INSN_DIVU; goto extract_sfmt_div; }
  542. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  543. case 146 :
  544. if ((entire_insn & 0xf0f0ffff) == 0x90200000)
  545. { itype = M32RXF_INSN_REM; goto extract_sfmt_div; }
  546. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  547. case 147 :
  548. if ((entire_insn & 0xf0f0ffff) == 0x90300000)
  549. { itype = M32RXF_INSN_REMU; goto extract_sfmt_div; }
  550. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  551. case 152 : itype = M32RXF_INSN_SRL3; goto extract_sfmt_sll3;
  552. case 154 : itype = M32RXF_INSN_SRA3; goto extract_sfmt_sll3;
  553. case 156 : itype = M32RXF_INSN_SLL3; goto extract_sfmt_sll3;
  554. case 159 :
  555. if ((entire_insn & 0xf0ff0000) == 0x90f00000)
  556. { itype = M32RXF_INSN_LDI16; goto extract_sfmt_ldi16; }
  557. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  558. case 160 : itype = M32RXF_INSN_STB_D; goto extract_sfmt_stb_d;
  559. case 162 : itype = M32RXF_INSN_STH_D; goto extract_sfmt_sth_d;
  560. case 164 : itype = M32RXF_INSN_ST_D; goto extract_sfmt_st_d;
  561. case 166 :
  562. if ((entire_insn & 0xf8f00000) == 0xa0600000)
  563. { itype = M32RXF_INSN_BSET; goto extract_sfmt_bset; }
  564. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  565. case 167 :
  566. if ((entire_insn & 0xf8f00000) == 0xa0700000)
  567. { itype = M32RXF_INSN_BCLR; goto extract_sfmt_bset; }
  568. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  569. case 168 : itype = M32RXF_INSN_LDB_D; goto extract_sfmt_ldb_d;
  570. case 169 : itype = M32RXF_INSN_LDUB_D; goto extract_sfmt_ldb_d;
  571. case 170 : itype = M32RXF_INSN_LDH_D; goto extract_sfmt_ldh_d;
  572. case 171 : itype = M32RXF_INSN_LDUH_D; goto extract_sfmt_ldh_d;
  573. case 172 : itype = M32RXF_INSN_LD_D; goto extract_sfmt_ld_d;
  574. case 176 : itype = M32RXF_INSN_BEQ; goto extract_sfmt_beq;
  575. case 177 : itype = M32RXF_INSN_BNE; goto extract_sfmt_beq;
  576. case 184 :
  577. if ((entire_insn & 0xfff00000) == 0xb0800000)
  578. { itype = M32RXF_INSN_BEQZ; goto extract_sfmt_beqz; }
  579. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  580. case 185 :
  581. if ((entire_insn & 0xfff00000) == 0xb0900000)
  582. { itype = M32RXF_INSN_BNEZ; goto extract_sfmt_beqz; }
  583. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  584. case 186 :
  585. if ((entire_insn & 0xfff00000) == 0xb0a00000)
  586. { itype = M32RXF_INSN_BLTZ; goto extract_sfmt_beqz; }
  587. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  588. case 187 :
  589. if ((entire_insn & 0xfff00000) == 0xb0b00000)
  590. { itype = M32RXF_INSN_BGEZ; goto extract_sfmt_beqz; }
  591. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  592. case 188 :
  593. if ((entire_insn & 0xfff00000) == 0xb0c00000)
  594. { itype = M32RXF_INSN_BLEZ; goto extract_sfmt_beqz; }
  595. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  596. case 189 :
  597. if ((entire_insn & 0xfff00000) == 0xb0d00000)
  598. { itype = M32RXF_INSN_BGTZ; goto extract_sfmt_beqz; }
  599. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  600. case 220 :
  601. if ((entire_insn & 0xf0ff0000) == 0xd0c00000)
  602. { itype = M32RXF_INSN_SETH; goto extract_sfmt_seth; }
  603. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  604. case 224 : /* fall through */
  605. case 225 : /* fall through */
  606. case 226 : /* fall through */
  607. case 227 : /* fall through */
  608. case 228 : /* fall through */
  609. case 229 : /* fall through */
  610. case 230 : /* fall through */
  611. case 231 : /* fall through */
  612. case 232 : /* fall through */
  613. case 233 : /* fall through */
  614. case 234 : /* fall through */
  615. case 235 : /* fall through */
  616. case 236 : /* fall through */
  617. case 237 : /* fall through */
  618. case 238 : /* fall through */
  619. case 239 : itype = M32RXF_INSN_LD24; goto extract_sfmt_ld24;
  620. case 240 : /* fall through */
  621. case 241 : /* fall through */
  622. case 242 : /* fall through */
  623. case 243 : /* fall through */
  624. case 244 : /* fall through */
  625. case 245 : /* fall through */
  626. case 246 : /* fall through */
  627. case 247 : /* fall through */
  628. case 248 : /* fall through */
  629. case 249 : /* fall through */
  630. case 250 : /* fall through */
  631. case 251 : /* fall through */
  632. case 252 : /* fall through */
  633. case 253 : /* fall through */
  634. case 254 : /* fall through */
  635. case 255 :
  636. {
  637. unsigned int val = (((insn >> 8) & (7 << 0)));
  638. switch (val)
  639. {
  640. case 0 :
  641. if ((entire_insn & 0xff000000) == 0xf8000000)
  642. { itype = M32RXF_INSN_BCL24; goto extract_sfmt_bcl24; }
  643. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  644. case 1 :
  645. if ((entire_insn & 0xff000000) == 0xf9000000)
  646. { itype = M32RXF_INSN_BNCL24; goto extract_sfmt_bcl24; }
  647. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  648. case 4 :
  649. if ((entire_insn & 0xff000000) == 0xfc000000)
  650. { itype = M32RXF_INSN_BC24; goto extract_sfmt_bc24; }
  651. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  652. case 5 :
  653. if ((entire_insn & 0xff000000) == 0xfd000000)
  654. { itype = M32RXF_INSN_BNC24; goto extract_sfmt_bc24; }
  655. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  656. case 6 :
  657. if ((entire_insn & 0xff000000) == 0xfe000000)
  658. { itype = M32RXF_INSN_BL24; goto extract_sfmt_bl24; }
  659. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  660. case 7 :
  661. if ((entire_insn & 0xff000000) == 0xff000000)
  662. { itype = M32RXF_INSN_BRA24; goto extract_sfmt_bra24; }
  663. itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  664. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  665. }
  666. }
  667. default : itype = M32RXF_INSN_X_INVALID; goto extract_sfmt_empty;
  668. }
  669. }
  670. }
  671. /* The instruction has been decoded, now extract the fields. */
  672. extract_sfmt_empty:
  673. {
  674. const IDESC *idesc = &m32rxf_insn_data[itype];
  675. #define FLD(f) abuf->fields.sfmt_empty.f
  676. /* Record the fields for the semantic handler. */
  677. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));
  678. #undef FLD
  679. return idesc;
  680. }
  681. extract_sfmt_add:
  682. {
  683. const IDESC *idesc = &m32rxf_insn_data[itype];
  684. CGEN_INSN_WORD insn = entire_insn;
  685. #define FLD(f) abuf->fields.sfmt_add.f
  686. UINT f_r1;
  687. UINT f_r2;
  688. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  689. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  690. /* Record the fields for the semantic handler. */
  691. FLD (f_r1) = f_r1;
  692. FLD (f_r2) = f_r2;
  693. FLD (i_dr) = & CPU (h_gr)[f_r1];
  694. FLD (i_sr) = & CPU (h_gr)[f_r2];
  695. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
  696. #if WITH_PROFILE_MODEL_P
  697. /* Record the fields for profiling. */
  698. if (PROFILE_MODEL_P (current_cpu))
  699. {
  700. FLD (in_dr) = f_r1;
  701. FLD (in_sr) = f_r2;
  702. FLD (out_dr) = f_r1;
  703. }
  704. #endif
  705. #undef FLD
  706. return idesc;
  707. }
  708. extract_sfmt_add3:
  709. {
  710. const IDESC *idesc = &m32rxf_insn_data[itype];
  711. CGEN_INSN_WORD insn = entire_insn;
  712. #define FLD(f) abuf->fields.sfmt_add3.f
  713. UINT f_r1;
  714. UINT f_r2;
  715. INT f_simm16;
  716. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  717. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  718. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  719. /* Record the fields for the semantic handler. */
  720. FLD (f_simm16) = f_simm16;
  721. FLD (f_r2) = f_r2;
  722. FLD (f_r1) = f_r1;
  723. FLD (i_sr) = & CPU (h_gr)[f_r2];
  724. FLD (i_dr) = & CPU (h_gr)[f_r1];
  725. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  726. #if WITH_PROFILE_MODEL_P
  727. /* Record the fields for profiling. */
  728. if (PROFILE_MODEL_P (current_cpu))
  729. {
  730. FLD (in_sr) = f_r2;
  731. FLD (out_dr) = f_r1;
  732. }
  733. #endif
  734. #undef FLD
  735. return idesc;
  736. }
  737. extract_sfmt_and3:
  738. {
  739. const IDESC *idesc = &m32rxf_insn_data[itype];
  740. CGEN_INSN_WORD insn = entire_insn;
  741. #define FLD(f) abuf->fields.sfmt_and3.f
  742. UINT f_r1;
  743. UINT f_r2;
  744. UINT f_uimm16;
  745. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  746. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  747. f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
  748. /* Record the fields for the semantic handler. */
  749. FLD (f_r2) = f_r2;
  750. FLD (f_uimm16) = f_uimm16;
  751. FLD (f_r1) = f_r1;
  752. FLD (i_sr) = & CPU (h_gr)[f_r2];
  753. FLD (i_dr) = & CPU (h_gr)[f_r1];
  754. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  755. #if WITH_PROFILE_MODEL_P
  756. /* Record the fields for profiling. */
  757. if (PROFILE_MODEL_P (current_cpu))
  758. {
  759. FLD (in_sr) = f_r2;
  760. FLD (out_dr) = f_r1;
  761. }
  762. #endif
  763. #undef FLD
  764. return idesc;
  765. }
  766. extract_sfmt_or3:
  767. {
  768. const IDESC *idesc = &m32rxf_insn_data[itype];
  769. CGEN_INSN_WORD insn = entire_insn;
  770. #define FLD(f) abuf->fields.sfmt_and3.f
  771. UINT f_r1;
  772. UINT f_r2;
  773. UINT f_uimm16;
  774. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  775. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  776. f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
  777. /* Record the fields for the semantic handler. */
  778. FLD (f_r2) = f_r2;
  779. FLD (f_uimm16) = f_uimm16;
  780. FLD (f_r1) = f_r1;
  781. FLD (i_sr) = & CPU (h_gr)[f_r2];
  782. FLD (i_dr) = & CPU (h_gr)[f_r1];
  783. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_or3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  784. #if WITH_PROFILE_MODEL_P
  785. /* Record the fields for profiling. */
  786. if (PROFILE_MODEL_P (current_cpu))
  787. {
  788. FLD (in_sr) = f_r2;
  789. FLD (out_dr) = f_r1;
  790. }
  791. #endif
  792. #undef FLD
  793. return idesc;
  794. }
  795. extract_sfmt_addi:
  796. {
  797. const IDESC *idesc = &m32rxf_insn_data[itype];
  798. CGEN_INSN_WORD insn = entire_insn;
  799. #define FLD(f) abuf->fields.sfmt_addi.f
  800. UINT f_r1;
  801. INT f_simm8;
  802. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  803. f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
  804. /* Record the fields for the semantic handler. */
  805. FLD (f_r1) = f_r1;
  806. FLD (f_simm8) = f_simm8;
  807. FLD (i_dr) = & CPU (h_gr)[f_r1];
  808. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi", "f_r1 0x%x", 'x', f_r1, "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
  809. #if WITH_PROFILE_MODEL_P
  810. /* Record the fields for profiling. */
  811. if (PROFILE_MODEL_P (current_cpu))
  812. {
  813. FLD (in_dr) = f_r1;
  814. FLD (out_dr) = f_r1;
  815. }
  816. #endif
  817. #undef FLD
  818. return idesc;
  819. }
  820. extract_sfmt_addv:
  821. {
  822. const IDESC *idesc = &m32rxf_insn_data[itype];
  823. CGEN_INSN_WORD insn = entire_insn;
  824. #define FLD(f) abuf->fields.sfmt_add.f
  825. UINT f_r1;
  826. UINT f_r2;
  827. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  828. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  829. /* Record the fields for the semantic handler. */
  830. FLD (f_r1) = f_r1;
  831. FLD (f_r2) = f_r2;
  832. FLD (i_dr) = & CPU (h_gr)[f_r1];
  833. FLD (i_sr) = & CPU (h_gr)[f_r2];
  834. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
  835. #if WITH_PROFILE_MODEL_P
  836. /* Record the fields for profiling. */
  837. if (PROFILE_MODEL_P (current_cpu))
  838. {
  839. FLD (in_dr) = f_r1;
  840. FLD (in_sr) = f_r2;
  841. FLD (out_dr) = f_r1;
  842. }
  843. #endif
  844. #undef FLD
  845. return idesc;
  846. }
  847. extract_sfmt_addv3:
  848. {
  849. const IDESC *idesc = &m32rxf_insn_data[itype];
  850. CGEN_INSN_WORD insn = entire_insn;
  851. #define FLD(f) abuf->fields.sfmt_add3.f
  852. UINT f_r1;
  853. UINT f_r2;
  854. INT f_simm16;
  855. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  856. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  857. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  858. /* Record the fields for the semantic handler. */
  859. FLD (f_simm16) = f_simm16;
  860. FLD (f_r2) = f_r2;
  861. FLD (f_r1) = f_r1;
  862. FLD (i_sr) = & CPU (h_gr)[f_r2];
  863. FLD (i_dr) = & CPU (h_gr)[f_r1];
  864. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  865. #if WITH_PROFILE_MODEL_P
  866. /* Record the fields for profiling. */
  867. if (PROFILE_MODEL_P (current_cpu))
  868. {
  869. FLD (in_sr) = f_r2;
  870. FLD (out_dr) = f_r1;
  871. }
  872. #endif
  873. #undef FLD
  874. return idesc;
  875. }
  876. extract_sfmt_addx:
  877. {
  878. const IDESC *idesc = &m32rxf_insn_data[itype];
  879. CGEN_INSN_WORD insn = entire_insn;
  880. #define FLD(f) abuf->fields.sfmt_add.f
  881. UINT f_r1;
  882. UINT f_r2;
  883. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  884. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  885. /* Record the fields for the semantic handler. */
  886. FLD (f_r1) = f_r1;
  887. FLD (f_r2) = f_r2;
  888. FLD (i_dr) = & CPU (h_gr)[f_r1];
  889. FLD (i_sr) = & CPU (h_gr)[f_r2];
  890. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addx", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
  891. #if WITH_PROFILE_MODEL_P
  892. /* Record the fields for profiling. */
  893. if (PROFILE_MODEL_P (current_cpu))
  894. {
  895. FLD (in_dr) = f_r1;
  896. FLD (in_sr) = f_r2;
  897. FLD (out_dr) = f_r1;
  898. }
  899. #endif
  900. #undef FLD
  901. return idesc;
  902. }
  903. extract_sfmt_bc8:
  904. {
  905. const IDESC *idesc = &m32rxf_insn_data[itype];
  906. CGEN_INSN_WORD insn = entire_insn;
  907. #define FLD(f) abuf->fields.sfmt_bl8.f
  908. SI f_disp8;
  909. f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
  910. /* Record the fields for the semantic handler. */
  911. FLD (i_disp8) = f_disp8;
  912. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
  913. #if WITH_PROFILE_MODEL_P
  914. /* Record the fields for profiling. */
  915. if (PROFILE_MODEL_P (current_cpu))
  916. {
  917. }
  918. #endif
  919. #undef FLD
  920. return idesc;
  921. }
  922. extract_sfmt_bc24:
  923. {
  924. const IDESC *idesc = &m32rxf_insn_data[itype];
  925. CGEN_INSN_WORD insn = entire_insn;
  926. #define FLD(f) abuf->fields.sfmt_bl24.f
  927. SI f_disp24;
  928. f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
  929. /* Record the fields for the semantic handler. */
  930. FLD (i_disp24) = f_disp24;
  931. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
  932. #if WITH_PROFILE_MODEL_P
  933. /* Record the fields for profiling. */
  934. if (PROFILE_MODEL_P (current_cpu))
  935. {
  936. }
  937. #endif
  938. #undef FLD
  939. return idesc;
  940. }
  941. extract_sfmt_beq:
  942. {
  943. const IDESC *idesc = &m32rxf_insn_data[itype];
  944. CGEN_INSN_WORD insn = entire_insn;
  945. #define FLD(f) abuf->fields.sfmt_beq.f
  946. UINT f_r1;
  947. UINT f_r2;
  948. SI f_disp16;
  949. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  950. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  951. f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc));
  952. /* Record the fields for the semantic handler. */
  953. FLD (f_r1) = f_r1;
  954. FLD (f_r2) = f_r2;
  955. FLD (i_disp16) = f_disp16;
  956. FLD (i_src1) = & CPU (h_gr)[f_r1];
  957. FLD (i_src2) = & CPU (h_gr)[f_r2];
  958. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beq", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  959. #if WITH_PROFILE_MODEL_P
  960. /* Record the fields for profiling. */
  961. if (PROFILE_MODEL_P (current_cpu))
  962. {
  963. FLD (in_src1) = f_r1;
  964. FLD (in_src2) = f_r2;
  965. }
  966. #endif
  967. #undef FLD
  968. return idesc;
  969. }
  970. extract_sfmt_beqz:
  971. {
  972. const IDESC *idesc = &m32rxf_insn_data[itype];
  973. CGEN_INSN_WORD insn = entire_insn;
  974. #define FLD(f) abuf->fields.sfmt_beq.f
  975. UINT f_r2;
  976. SI f_disp16;
  977. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  978. f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc));
  979. /* Record the fields for the semantic handler. */
  980. FLD (f_r2) = f_r2;
  981. FLD (i_disp16) = f_disp16;
  982. FLD (i_src2) = & CPU (h_gr)[f_r2];
  983. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beqz", "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src2 0x%x", 'x', f_r2, (char *) 0));
  984. #if WITH_PROFILE_MODEL_P
  985. /* Record the fields for profiling. */
  986. if (PROFILE_MODEL_P (current_cpu))
  987. {
  988. FLD (in_src2) = f_r2;
  989. }
  990. #endif
  991. #undef FLD
  992. return idesc;
  993. }
  994. extract_sfmt_bl8:
  995. {
  996. const IDESC *idesc = &m32rxf_insn_data[itype];
  997. CGEN_INSN_WORD insn = entire_insn;
  998. #define FLD(f) abuf->fields.sfmt_bl8.f
  999. SI f_disp8;
  1000. f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
  1001. /* Record the fields for the semantic handler. */
  1002. FLD (i_disp8) = f_disp8;
  1003. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
  1004. #if WITH_PROFILE_MODEL_P
  1005. /* Record the fields for profiling. */
  1006. if (PROFILE_MODEL_P (current_cpu))
  1007. {
  1008. FLD (out_h_gr_SI_14) = 14;
  1009. }
  1010. #endif
  1011. #undef FLD
  1012. return idesc;
  1013. }
  1014. extract_sfmt_bl24:
  1015. {
  1016. const IDESC *idesc = &m32rxf_insn_data[itype];
  1017. CGEN_INSN_WORD insn = entire_insn;
  1018. #define FLD(f) abuf->fields.sfmt_bl24.f
  1019. SI f_disp24;
  1020. f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
  1021. /* Record the fields for the semantic handler. */
  1022. FLD (i_disp24) = f_disp24;
  1023. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
  1024. #if WITH_PROFILE_MODEL_P
  1025. /* Record the fields for profiling. */
  1026. if (PROFILE_MODEL_P (current_cpu))
  1027. {
  1028. FLD (out_h_gr_SI_14) = 14;
  1029. }
  1030. #endif
  1031. #undef FLD
  1032. return idesc;
  1033. }
  1034. extract_sfmt_bcl8:
  1035. {
  1036. const IDESC *idesc = &m32rxf_insn_data[itype];
  1037. CGEN_INSN_WORD insn = entire_insn;
  1038. #define FLD(f) abuf->fields.sfmt_bl8.f
  1039. SI f_disp8;
  1040. f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
  1041. /* Record the fields for the semantic handler. */
  1042. FLD (i_disp8) = f_disp8;
  1043. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
  1044. #if WITH_PROFILE_MODEL_P
  1045. /* Record the fields for profiling. */
  1046. if (PROFILE_MODEL_P (current_cpu))
  1047. {
  1048. FLD (out_h_gr_SI_14) = 14;
  1049. }
  1050. #endif
  1051. #undef FLD
  1052. return idesc;
  1053. }
  1054. extract_sfmt_bcl24:
  1055. {
  1056. const IDESC *idesc = &m32rxf_insn_data[itype];
  1057. CGEN_INSN_WORD insn = entire_insn;
  1058. #define FLD(f) abuf->fields.sfmt_bl24.f
  1059. SI f_disp24;
  1060. f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
  1061. /* Record the fields for the semantic handler. */
  1062. FLD (i_disp24) = f_disp24;
  1063. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
  1064. #if WITH_PROFILE_MODEL_P
  1065. /* Record the fields for profiling. */
  1066. if (PROFILE_MODEL_P (current_cpu))
  1067. {
  1068. FLD (out_h_gr_SI_14) = 14;
  1069. }
  1070. #endif
  1071. #undef FLD
  1072. return idesc;
  1073. }
  1074. extract_sfmt_bra8:
  1075. {
  1076. const IDESC *idesc = &m32rxf_insn_data[itype];
  1077. CGEN_INSN_WORD insn = entire_insn;
  1078. #define FLD(f) abuf->fields.sfmt_bl8.f
  1079. SI f_disp8;
  1080. f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
  1081. /* Record the fields for the semantic handler. */
  1082. FLD (i_disp8) = f_disp8;
  1083. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
  1084. #if WITH_PROFILE_MODEL_P
  1085. /* Record the fields for profiling. */
  1086. if (PROFILE_MODEL_P (current_cpu))
  1087. {
  1088. }
  1089. #endif
  1090. #undef FLD
  1091. return idesc;
  1092. }
  1093. extract_sfmt_bra24:
  1094. {
  1095. const IDESC *idesc = &m32rxf_insn_data[itype];
  1096. CGEN_INSN_WORD insn = entire_insn;
  1097. #define FLD(f) abuf->fields.sfmt_bl24.f
  1098. SI f_disp24;
  1099. f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
  1100. /* Record the fields for the semantic handler. */
  1101. FLD (i_disp24) = f_disp24;
  1102. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
  1103. #if WITH_PROFILE_MODEL_P
  1104. /* Record the fields for profiling. */
  1105. if (PROFILE_MODEL_P (current_cpu))
  1106. {
  1107. }
  1108. #endif
  1109. #undef FLD
  1110. return idesc;
  1111. }
  1112. extract_sfmt_cmp:
  1113. {
  1114. const IDESC *idesc = &m32rxf_insn_data[itype];
  1115. CGEN_INSN_WORD insn = entire_insn;
  1116. #define FLD(f) abuf->fields.sfmt_st_plus.f
  1117. UINT f_r1;
  1118. UINT f_r2;
  1119. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1120. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1121. /* Record the fields for the semantic handler. */
  1122. FLD (f_r1) = f_r1;
  1123. FLD (f_r2) = f_r2;
  1124. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1125. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1126. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1127. #if WITH_PROFILE_MODEL_P
  1128. /* Record the fields for profiling. */
  1129. if (PROFILE_MODEL_P (current_cpu))
  1130. {
  1131. FLD (in_src1) = f_r1;
  1132. FLD (in_src2) = f_r2;
  1133. }
  1134. #endif
  1135. #undef FLD
  1136. return idesc;
  1137. }
  1138. extract_sfmt_cmpi:
  1139. {
  1140. const IDESC *idesc = &m32rxf_insn_data[itype];
  1141. CGEN_INSN_WORD insn = entire_insn;
  1142. #define FLD(f) abuf->fields.sfmt_st_d.f
  1143. UINT f_r2;
  1144. INT f_simm16;
  1145. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1146. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1147. /* Record the fields for the semantic handler. */
  1148. FLD (f_simm16) = f_simm16;
  1149. FLD (f_r2) = f_r2;
  1150. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1151. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpi", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "src2 0x%x", 'x', f_r2, (char *) 0));
  1152. #if WITH_PROFILE_MODEL_P
  1153. /* Record the fields for profiling. */
  1154. if (PROFILE_MODEL_P (current_cpu))
  1155. {
  1156. FLD (in_src2) = f_r2;
  1157. }
  1158. #endif
  1159. #undef FLD
  1160. return idesc;
  1161. }
  1162. extract_sfmt_cmpz:
  1163. {
  1164. const IDESC *idesc = &m32rxf_insn_data[itype];
  1165. CGEN_INSN_WORD insn = entire_insn;
  1166. #define FLD(f) abuf->fields.sfmt_st_plus.f
  1167. UINT f_r2;
  1168. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1169. /* Record the fields for the semantic handler. */
  1170. FLD (f_r2) = f_r2;
  1171. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1172. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpz", "f_r2 0x%x", 'x', f_r2, "src2 0x%x", 'x', f_r2, (char *) 0));
  1173. #if WITH_PROFILE_MODEL_P
  1174. /* Record the fields for profiling. */
  1175. if (PROFILE_MODEL_P (current_cpu))
  1176. {
  1177. FLD (in_src2) = f_r2;
  1178. }
  1179. #endif
  1180. #undef FLD
  1181. return idesc;
  1182. }
  1183. extract_sfmt_div:
  1184. {
  1185. const IDESC *idesc = &m32rxf_insn_data[itype];
  1186. CGEN_INSN_WORD insn = entire_insn;
  1187. #define FLD(f) abuf->fields.sfmt_add.f
  1188. UINT f_r1;
  1189. UINT f_r2;
  1190. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1191. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1192. /* Record the fields for the semantic handler. */
  1193. FLD (f_r1) = f_r1;
  1194. FLD (f_r2) = f_r2;
  1195. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1196. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1197. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_div", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
  1198. #if WITH_PROFILE_MODEL_P
  1199. /* Record the fields for profiling. */
  1200. if (PROFILE_MODEL_P (current_cpu))
  1201. {
  1202. FLD (in_dr) = f_r1;
  1203. FLD (in_sr) = f_r2;
  1204. FLD (out_dr) = f_r1;
  1205. }
  1206. #endif
  1207. #undef FLD
  1208. return idesc;
  1209. }
  1210. extract_sfmt_jc:
  1211. {
  1212. const IDESC *idesc = &m32rxf_insn_data[itype];
  1213. CGEN_INSN_WORD insn = entire_insn;
  1214. #define FLD(f) abuf->fields.sfmt_jl.f
  1215. UINT f_r2;
  1216. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1217. /* Record the fields for the semantic handler. */
  1218. FLD (f_r2) = f_r2;
  1219. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1220. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jc", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
  1221. #if WITH_PROFILE_MODEL_P
  1222. /* Record the fields for profiling. */
  1223. if (PROFILE_MODEL_P (current_cpu))
  1224. {
  1225. FLD (in_sr) = f_r2;
  1226. }
  1227. #endif
  1228. #undef FLD
  1229. return idesc;
  1230. }
  1231. extract_sfmt_jl:
  1232. {
  1233. const IDESC *idesc = &m32rxf_insn_data[itype];
  1234. CGEN_INSN_WORD insn = entire_insn;
  1235. #define FLD(f) abuf->fields.sfmt_jl.f
  1236. UINT f_r2;
  1237. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1238. /* Record the fields for the semantic handler. */
  1239. FLD (f_r2) = f_r2;
  1240. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1241. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jl", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
  1242. #if WITH_PROFILE_MODEL_P
  1243. /* Record the fields for profiling. */
  1244. if (PROFILE_MODEL_P (current_cpu))
  1245. {
  1246. FLD (in_sr) = f_r2;
  1247. FLD (out_h_gr_SI_14) = 14;
  1248. }
  1249. #endif
  1250. #undef FLD
  1251. return idesc;
  1252. }
  1253. extract_sfmt_jmp:
  1254. {
  1255. const IDESC *idesc = &m32rxf_insn_data[itype];
  1256. CGEN_INSN_WORD insn = entire_insn;
  1257. #define FLD(f) abuf->fields.sfmt_jl.f
  1258. UINT f_r2;
  1259. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1260. /* Record the fields for the semantic handler. */
  1261. FLD (f_r2) = f_r2;
  1262. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1263. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jmp", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
  1264. #if WITH_PROFILE_MODEL_P
  1265. /* Record the fields for profiling. */
  1266. if (PROFILE_MODEL_P (current_cpu))
  1267. {
  1268. FLD (in_sr) = f_r2;
  1269. }
  1270. #endif
  1271. #undef FLD
  1272. return idesc;
  1273. }
  1274. extract_sfmt_ld:
  1275. {
  1276. const IDESC *idesc = &m32rxf_insn_data[itype];
  1277. CGEN_INSN_WORD insn = entire_insn;
  1278. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1279. UINT f_r1;
  1280. UINT f_r2;
  1281. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1282. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1283. /* Record the fields for the semantic handler. */
  1284. FLD (f_r2) = f_r2;
  1285. FLD (f_r1) = f_r1;
  1286. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1287. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1288. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1289. #if WITH_PROFILE_MODEL_P
  1290. /* Record the fields for profiling. */
  1291. if (PROFILE_MODEL_P (current_cpu))
  1292. {
  1293. FLD (in_sr) = f_r2;
  1294. FLD (out_dr) = f_r1;
  1295. }
  1296. #endif
  1297. #undef FLD
  1298. return idesc;
  1299. }
  1300. extract_sfmt_ld_d:
  1301. {
  1302. const IDESC *idesc = &m32rxf_insn_data[itype];
  1303. CGEN_INSN_WORD insn = entire_insn;
  1304. #define FLD(f) abuf->fields.sfmt_add3.f
  1305. UINT f_r1;
  1306. UINT f_r2;
  1307. INT f_simm16;
  1308. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1309. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1310. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1311. /* Record the fields for the semantic handler. */
  1312. FLD (f_simm16) = f_simm16;
  1313. FLD (f_r2) = f_r2;
  1314. FLD (f_r1) = f_r1;
  1315. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1316. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1317. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1318. #if WITH_PROFILE_MODEL_P
  1319. /* Record the fields for profiling. */
  1320. if (PROFILE_MODEL_P (current_cpu))
  1321. {
  1322. FLD (in_sr) = f_r2;
  1323. FLD (out_dr) = f_r1;
  1324. }
  1325. #endif
  1326. #undef FLD
  1327. return idesc;
  1328. }
  1329. extract_sfmt_ldb:
  1330. {
  1331. const IDESC *idesc = &m32rxf_insn_data[itype];
  1332. CGEN_INSN_WORD insn = entire_insn;
  1333. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1334. UINT f_r1;
  1335. UINT f_r2;
  1336. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1337. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1338. /* Record the fields for the semantic handler. */
  1339. FLD (f_r2) = f_r2;
  1340. FLD (f_r1) = f_r1;
  1341. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1342. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1343. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1344. #if WITH_PROFILE_MODEL_P
  1345. /* Record the fields for profiling. */
  1346. if (PROFILE_MODEL_P (current_cpu))
  1347. {
  1348. FLD (in_sr) = f_r2;
  1349. FLD (out_dr) = f_r1;
  1350. }
  1351. #endif
  1352. #undef FLD
  1353. return idesc;
  1354. }
  1355. extract_sfmt_ldb_d:
  1356. {
  1357. const IDESC *idesc = &m32rxf_insn_data[itype];
  1358. CGEN_INSN_WORD insn = entire_insn;
  1359. #define FLD(f) abuf->fields.sfmt_add3.f
  1360. UINT f_r1;
  1361. UINT f_r2;
  1362. INT f_simm16;
  1363. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1364. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1365. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1366. /* Record the fields for the semantic handler. */
  1367. FLD (f_simm16) = f_simm16;
  1368. FLD (f_r2) = f_r2;
  1369. FLD (f_r1) = f_r1;
  1370. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1371. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1372. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1373. #if WITH_PROFILE_MODEL_P
  1374. /* Record the fields for profiling. */
  1375. if (PROFILE_MODEL_P (current_cpu))
  1376. {
  1377. FLD (in_sr) = f_r2;
  1378. FLD (out_dr) = f_r1;
  1379. }
  1380. #endif
  1381. #undef FLD
  1382. return idesc;
  1383. }
  1384. extract_sfmt_ldh:
  1385. {
  1386. const IDESC *idesc = &m32rxf_insn_data[itype];
  1387. CGEN_INSN_WORD insn = entire_insn;
  1388. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1389. UINT f_r1;
  1390. UINT f_r2;
  1391. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1392. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1393. /* Record the fields for the semantic handler. */
  1394. FLD (f_r2) = f_r2;
  1395. FLD (f_r1) = f_r1;
  1396. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1397. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1398. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1399. #if WITH_PROFILE_MODEL_P
  1400. /* Record the fields for profiling. */
  1401. if (PROFILE_MODEL_P (current_cpu))
  1402. {
  1403. FLD (in_sr) = f_r2;
  1404. FLD (out_dr) = f_r1;
  1405. }
  1406. #endif
  1407. #undef FLD
  1408. return idesc;
  1409. }
  1410. extract_sfmt_ldh_d:
  1411. {
  1412. const IDESC *idesc = &m32rxf_insn_data[itype];
  1413. CGEN_INSN_WORD insn = entire_insn;
  1414. #define FLD(f) abuf->fields.sfmt_add3.f
  1415. UINT f_r1;
  1416. UINT f_r2;
  1417. INT f_simm16;
  1418. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1419. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1420. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1421. /* Record the fields for the semantic handler. */
  1422. FLD (f_simm16) = f_simm16;
  1423. FLD (f_r2) = f_r2;
  1424. FLD (f_r1) = f_r1;
  1425. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1426. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1427. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1428. #if WITH_PROFILE_MODEL_P
  1429. /* Record the fields for profiling. */
  1430. if (PROFILE_MODEL_P (current_cpu))
  1431. {
  1432. FLD (in_sr) = f_r2;
  1433. FLD (out_dr) = f_r1;
  1434. }
  1435. #endif
  1436. #undef FLD
  1437. return idesc;
  1438. }
  1439. extract_sfmt_ld_plus:
  1440. {
  1441. const IDESC *idesc = &m32rxf_insn_data[itype];
  1442. CGEN_INSN_WORD insn = entire_insn;
  1443. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1444. UINT f_r1;
  1445. UINT f_r2;
  1446. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1447. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1448. /* Record the fields for the semantic handler. */
  1449. FLD (f_r2) = f_r2;
  1450. FLD (f_r1) = f_r1;
  1451. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1452. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1453. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_plus", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1454. #if WITH_PROFILE_MODEL_P
  1455. /* Record the fields for profiling. */
  1456. if (PROFILE_MODEL_P (current_cpu))
  1457. {
  1458. FLD (in_sr) = f_r2;
  1459. FLD (out_dr) = f_r1;
  1460. FLD (out_sr) = f_r2;
  1461. }
  1462. #endif
  1463. #undef FLD
  1464. return idesc;
  1465. }
  1466. extract_sfmt_ld24:
  1467. {
  1468. const IDESC *idesc = &m32rxf_insn_data[itype];
  1469. CGEN_INSN_WORD insn = entire_insn;
  1470. #define FLD(f) abuf->fields.sfmt_ld24.f
  1471. UINT f_r1;
  1472. UINT f_uimm24;
  1473. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1474. f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24);
  1475. /* Record the fields for the semantic handler. */
  1476. FLD (f_r1) = f_r1;
  1477. FLD (i_uimm24) = f_uimm24;
  1478. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1479. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld24", "f_r1 0x%x", 'x', f_r1, "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0));
  1480. #if WITH_PROFILE_MODEL_P
  1481. /* Record the fields for profiling. */
  1482. if (PROFILE_MODEL_P (current_cpu))
  1483. {
  1484. FLD (out_dr) = f_r1;
  1485. }
  1486. #endif
  1487. #undef FLD
  1488. return idesc;
  1489. }
  1490. extract_sfmt_ldi8:
  1491. {
  1492. const IDESC *idesc = &m32rxf_insn_data[itype];
  1493. CGEN_INSN_WORD insn = entire_insn;
  1494. #define FLD(f) abuf->fields.sfmt_addi.f
  1495. UINT f_r1;
  1496. INT f_simm8;
  1497. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1498. f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
  1499. /* Record the fields for the semantic handler. */
  1500. FLD (f_simm8) = f_simm8;
  1501. FLD (f_r1) = f_r1;
  1502. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1503. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi8", "f_simm8 0x%x", 'x', f_simm8, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
  1504. #if WITH_PROFILE_MODEL_P
  1505. /* Record the fields for profiling. */
  1506. if (PROFILE_MODEL_P (current_cpu))
  1507. {
  1508. FLD (out_dr) = f_r1;
  1509. }
  1510. #endif
  1511. #undef FLD
  1512. return idesc;
  1513. }
  1514. extract_sfmt_ldi16:
  1515. {
  1516. const IDESC *idesc = &m32rxf_insn_data[itype];
  1517. CGEN_INSN_WORD insn = entire_insn;
  1518. #define FLD(f) abuf->fields.sfmt_add3.f
  1519. UINT f_r1;
  1520. INT f_simm16;
  1521. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1522. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1523. /* Record the fields for the semantic handler. */
  1524. FLD (f_simm16) = f_simm16;
  1525. FLD (f_r1) = f_r1;
  1526. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1527. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi16", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
  1528. #if WITH_PROFILE_MODEL_P
  1529. /* Record the fields for profiling. */
  1530. if (PROFILE_MODEL_P (current_cpu))
  1531. {
  1532. FLD (out_dr) = f_r1;
  1533. }
  1534. #endif
  1535. #undef FLD
  1536. return idesc;
  1537. }
  1538. extract_sfmt_lock:
  1539. {
  1540. const IDESC *idesc = &m32rxf_insn_data[itype];
  1541. CGEN_INSN_WORD insn = entire_insn;
  1542. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1543. UINT f_r1;
  1544. UINT f_r2;
  1545. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1546. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1547. /* Record the fields for the semantic handler. */
  1548. FLD (f_r2) = f_r2;
  1549. FLD (f_r1) = f_r1;
  1550. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1551. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1552. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lock", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1553. #if WITH_PROFILE_MODEL_P
  1554. /* Record the fields for profiling. */
  1555. if (PROFILE_MODEL_P (current_cpu))
  1556. {
  1557. FLD (in_sr) = f_r2;
  1558. FLD (out_dr) = f_r1;
  1559. }
  1560. #endif
  1561. #undef FLD
  1562. return idesc;
  1563. }
  1564. extract_sfmt_machi_a:
  1565. {
  1566. const IDESC *idesc = &m32rxf_insn_data[itype];
  1567. CGEN_INSN_WORD insn = entire_insn;
  1568. #define FLD(f) abuf->fields.sfmt_machi_a.f
  1569. UINT f_r1;
  1570. UINT f_acc;
  1571. UINT f_r2;
  1572. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1573. f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1);
  1574. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1575. /* Record the fields for the semantic handler. */
  1576. FLD (f_acc) = f_acc;
  1577. FLD (f_r1) = f_r1;
  1578. FLD (f_r2) = f_r2;
  1579. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1580. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1581. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_machi_a", "f_acc 0x%x", 'x', f_acc, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1582. #if WITH_PROFILE_MODEL_P
  1583. /* Record the fields for profiling. */
  1584. if (PROFILE_MODEL_P (current_cpu))
  1585. {
  1586. FLD (in_src1) = f_r1;
  1587. FLD (in_src2) = f_r2;
  1588. }
  1589. #endif
  1590. #undef FLD
  1591. return idesc;
  1592. }
  1593. extract_sfmt_mulhi_a:
  1594. {
  1595. const IDESC *idesc = &m32rxf_insn_data[itype];
  1596. CGEN_INSN_WORD insn = entire_insn;
  1597. #define FLD(f) abuf->fields.sfmt_machi_a.f
  1598. UINT f_r1;
  1599. UINT f_acc;
  1600. UINT f_r2;
  1601. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1602. f_acc = EXTRACT_MSB0_UINT (insn, 16, 8, 1);
  1603. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1604. /* Record the fields for the semantic handler. */
  1605. FLD (f_r1) = f_r1;
  1606. FLD (f_r2) = f_r2;
  1607. FLD (f_acc) = f_acc;
  1608. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1609. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1610. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulhi_a", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "f_acc 0x%x", 'x', f_acc, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1611. #if WITH_PROFILE_MODEL_P
  1612. /* Record the fields for profiling. */
  1613. if (PROFILE_MODEL_P (current_cpu))
  1614. {
  1615. FLD (in_src1) = f_r1;
  1616. FLD (in_src2) = f_r2;
  1617. }
  1618. #endif
  1619. #undef FLD
  1620. return idesc;
  1621. }
  1622. extract_sfmt_mv:
  1623. {
  1624. const IDESC *idesc = &m32rxf_insn_data[itype];
  1625. CGEN_INSN_WORD insn = entire_insn;
  1626. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1627. UINT f_r1;
  1628. UINT f_r2;
  1629. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1630. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1631. /* Record the fields for the semantic handler. */
  1632. FLD (f_r2) = f_r2;
  1633. FLD (f_r1) = f_r1;
  1634. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1635. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1636. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mv", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1637. #if WITH_PROFILE_MODEL_P
  1638. /* Record the fields for profiling. */
  1639. if (PROFILE_MODEL_P (current_cpu))
  1640. {
  1641. FLD (in_sr) = f_r2;
  1642. FLD (out_dr) = f_r1;
  1643. }
  1644. #endif
  1645. #undef FLD
  1646. return idesc;
  1647. }
  1648. extract_sfmt_mvfachi_a:
  1649. {
  1650. const IDESC *idesc = &m32rxf_insn_data[itype];
  1651. CGEN_INSN_WORD insn = entire_insn;
  1652. #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
  1653. UINT f_r1;
  1654. UINT f_accs;
  1655. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1656. f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2);
  1657. /* Record the fields for the semantic handler. */
  1658. FLD (f_accs) = f_accs;
  1659. FLD (f_r1) = f_r1;
  1660. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1661. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfachi_a", "f_accs 0x%x", 'x', f_accs, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
  1662. #if WITH_PROFILE_MODEL_P
  1663. /* Record the fields for profiling. */
  1664. if (PROFILE_MODEL_P (current_cpu))
  1665. {
  1666. FLD (out_dr) = f_r1;
  1667. }
  1668. #endif
  1669. #undef FLD
  1670. return idesc;
  1671. }
  1672. extract_sfmt_mvfc:
  1673. {
  1674. const IDESC *idesc = &m32rxf_insn_data[itype];
  1675. CGEN_INSN_WORD insn = entire_insn;
  1676. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1677. UINT f_r1;
  1678. UINT f_r2;
  1679. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1680. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1681. /* Record the fields for the semantic handler. */
  1682. FLD (f_r2) = f_r2;
  1683. FLD (f_r1) = f_r1;
  1684. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1685. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
  1686. #if WITH_PROFILE_MODEL_P
  1687. /* Record the fields for profiling. */
  1688. if (PROFILE_MODEL_P (current_cpu))
  1689. {
  1690. FLD (out_dr) = f_r1;
  1691. }
  1692. #endif
  1693. #undef FLD
  1694. return idesc;
  1695. }
  1696. extract_sfmt_mvtachi_a:
  1697. {
  1698. const IDESC *idesc = &m32rxf_insn_data[itype];
  1699. CGEN_INSN_WORD insn = entire_insn;
  1700. #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
  1701. UINT f_r1;
  1702. UINT f_accs;
  1703. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1704. f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2);
  1705. /* Record the fields for the semantic handler. */
  1706. FLD (f_accs) = f_accs;
  1707. FLD (f_r1) = f_r1;
  1708. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1709. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtachi_a", "f_accs 0x%x", 'x', f_accs, "f_r1 0x%x", 'x', f_r1, "src1 0x%x", 'x', f_r1, (char *) 0));
  1710. #if WITH_PROFILE_MODEL_P
  1711. /* Record the fields for profiling. */
  1712. if (PROFILE_MODEL_P (current_cpu))
  1713. {
  1714. FLD (in_src1) = f_r1;
  1715. }
  1716. #endif
  1717. #undef FLD
  1718. return idesc;
  1719. }
  1720. extract_sfmt_mvtc:
  1721. {
  1722. const IDESC *idesc = &m32rxf_insn_data[itype];
  1723. CGEN_INSN_WORD insn = entire_insn;
  1724. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  1725. UINT f_r1;
  1726. UINT f_r2;
  1727. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1728. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1729. /* Record the fields for the semantic handler. */
  1730. FLD (f_r2) = f_r2;
  1731. FLD (f_r1) = f_r1;
  1732. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1733. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
  1734. #if WITH_PROFILE_MODEL_P
  1735. /* Record the fields for profiling. */
  1736. if (PROFILE_MODEL_P (current_cpu))
  1737. {
  1738. FLD (in_sr) = f_r2;
  1739. }
  1740. #endif
  1741. #undef FLD
  1742. return idesc;
  1743. }
  1744. extract_sfmt_nop:
  1745. {
  1746. const IDESC *idesc = &m32rxf_insn_data[itype];
  1747. #define FLD(f) abuf->fields.sfmt_empty.f
  1748. /* Record the fields for the semantic handler. */
  1749. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0));
  1750. #undef FLD
  1751. return idesc;
  1752. }
  1753. extract_sfmt_rac_dsi:
  1754. {
  1755. const IDESC *idesc = &m32rxf_insn_data[itype];
  1756. CGEN_INSN_WORD insn = entire_insn;
  1757. #define FLD(f) abuf->fields.sfmt_rac_dsi.f
  1758. UINT f_accd;
  1759. UINT f_accs;
  1760. SI f_imm1;
  1761. f_accd = EXTRACT_MSB0_UINT (insn, 16, 4, 2);
  1762. f_accs = EXTRACT_MSB0_UINT (insn, 16, 12, 2);
  1763. f_imm1 = ((EXTRACT_MSB0_UINT (insn, 16, 15, 1)) + (1));
  1764. /* Record the fields for the semantic handler. */
  1765. FLD (f_accs) = f_accs;
  1766. FLD (f_imm1) = f_imm1;
  1767. FLD (f_accd) = f_accd;
  1768. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rac_dsi", "f_accs 0x%x", 'x', f_accs, "f_imm1 0x%x", 'x', f_imm1, "f_accd 0x%x", 'x', f_accd, (char *) 0));
  1769. #undef FLD
  1770. return idesc;
  1771. }
  1772. extract_sfmt_rte:
  1773. {
  1774. const IDESC *idesc = &m32rxf_insn_data[itype];
  1775. #define FLD(f) abuf->fields.sfmt_empty.f
  1776. /* Record the fields for the semantic handler. */
  1777. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0));
  1778. #if WITH_PROFILE_MODEL_P
  1779. /* Record the fields for profiling. */
  1780. if (PROFILE_MODEL_P (current_cpu))
  1781. {
  1782. }
  1783. #endif
  1784. #undef FLD
  1785. return idesc;
  1786. }
  1787. extract_sfmt_seth:
  1788. {
  1789. const IDESC *idesc = &m32rxf_insn_data[itype];
  1790. CGEN_INSN_WORD insn = entire_insn;
  1791. #define FLD(f) abuf->fields.sfmt_seth.f
  1792. UINT f_r1;
  1793. UINT f_hi16;
  1794. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1795. f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
  1796. /* Record the fields for the semantic handler. */
  1797. FLD (f_hi16) = f_hi16;
  1798. FLD (f_r1) = f_r1;
  1799. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1800. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_seth", "f_hi16 0x%x", 'x', f_hi16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
  1801. #if WITH_PROFILE_MODEL_P
  1802. /* Record the fields for profiling. */
  1803. if (PROFILE_MODEL_P (current_cpu))
  1804. {
  1805. FLD (out_dr) = f_r1;
  1806. }
  1807. #endif
  1808. #undef FLD
  1809. return idesc;
  1810. }
  1811. extract_sfmt_sll3:
  1812. {
  1813. const IDESC *idesc = &m32rxf_insn_data[itype];
  1814. CGEN_INSN_WORD insn = entire_insn;
  1815. #define FLD(f) abuf->fields.sfmt_add3.f
  1816. UINT f_r1;
  1817. UINT f_r2;
  1818. INT f_simm16;
  1819. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1820. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1821. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1822. /* Record the fields for the semantic handler. */
  1823. FLD (f_simm16) = f_simm16;
  1824. FLD (f_r2) = f_r2;
  1825. FLD (f_r1) = f_r1;
  1826. FLD (i_sr) = & CPU (h_gr)[f_r2];
  1827. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1828. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sll3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  1829. #if WITH_PROFILE_MODEL_P
  1830. /* Record the fields for profiling. */
  1831. if (PROFILE_MODEL_P (current_cpu))
  1832. {
  1833. FLD (in_sr) = f_r2;
  1834. FLD (out_dr) = f_r1;
  1835. }
  1836. #endif
  1837. #undef FLD
  1838. return idesc;
  1839. }
  1840. extract_sfmt_slli:
  1841. {
  1842. const IDESC *idesc = &m32rxf_insn_data[itype];
  1843. CGEN_INSN_WORD insn = entire_insn;
  1844. #define FLD(f) abuf->fields.sfmt_slli.f
  1845. UINT f_r1;
  1846. UINT f_uimm5;
  1847. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1848. f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5);
  1849. /* Record the fields for the semantic handler. */
  1850. FLD (f_r1) = f_r1;
  1851. FLD (f_uimm5) = f_uimm5;
  1852. FLD (i_dr) = & CPU (h_gr)[f_r1];
  1853. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slli", "f_r1 0x%x", 'x', f_r1, "f_uimm5 0x%x", 'x', f_uimm5, "dr 0x%x", 'x', f_r1, (char *) 0));
  1854. #if WITH_PROFILE_MODEL_P
  1855. /* Record the fields for profiling. */
  1856. if (PROFILE_MODEL_P (current_cpu))
  1857. {
  1858. FLD (in_dr) = f_r1;
  1859. FLD (out_dr) = f_r1;
  1860. }
  1861. #endif
  1862. #undef FLD
  1863. return idesc;
  1864. }
  1865. extract_sfmt_st:
  1866. {
  1867. const IDESC *idesc = &m32rxf_insn_data[itype];
  1868. CGEN_INSN_WORD insn = entire_insn;
  1869. #define FLD(f) abuf->fields.sfmt_st_plus.f
  1870. UINT f_r1;
  1871. UINT f_r2;
  1872. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1873. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1874. /* Record the fields for the semantic handler. */
  1875. FLD (f_r1) = f_r1;
  1876. FLD (f_r2) = f_r2;
  1877. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1878. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1879. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1880. #if WITH_PROFILE_MODEL_P
  1881. /* Record the fields for profiling. */
  1882. if (PROFILE_MODEL_P (current_cpu))
  1883. {
  1884. FLD (in_src1) = f_r1;
  1885. FLD (in_src2) = f_r2;
  1886. }
  1887. #endif
  1888. #undef FLD
  1889. return idesc;
  1890. }
  1891. extract_sfmt_st_d:
  1892. {
  1893. const IDESC *idesc = &m32rxf_insn_data[itype];
  1894. CGEN_INSN_WORD insn = entire_insn;
  1895. #define FLD(f) abuf->fields.sfmt_st_d.f
  1896. UINT f_r1;
  1897. UINT f_r2;
  1898. INT f_simm16;
  1899. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1900. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1901. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1902. /* Record the fields for the semantic handler. */
  1903. FLD (f_simm16) = f_simm16;
  1904. FLD (f_r1) = f_r1;
  1905. FLD (f_r2) = f_r2;
  1906. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1907. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1908. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1909. #if WITH_PROFILE_MODEL_P
  1910. /* Record the fields for profiling. */
  1911. if (PROFILE_MODEL_P (current_cpu))
  1912. {
  1913. FLD (in_src1) = f_r1;
  1914. FLD (in_src2) = f_r2;
  1915. }
  1916. #endif
  1917. #undef FLD
  1918. return idesc;
  1919. }
  1920. extract_sfmt_stb:
  1921. {
  1922. const IDESC *idesc = &m32rxf_insn_data[itype];
  1923. CGEN_INSN_WORD insn = entire_insn;
  1924. #define FLD(f) abuf->fields.sfmt_st_plus.f
  1925. UINT f_r1;
  1926. UINT f_r2;
  1927. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1928. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1929. /* Record the fields for the semantic handler. */
  1930. FLD (f_r1) = f_r1;
  1931. FLD (f_r2) = f_r2;
  1932. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1933. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1934. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1935. #if WITH_PROFILE_MODEL_P
  1936. /* Record the fields for profiling. */
  1937. if (PROFILE_MODEL_P (current_cpu))
  1938. {
  1939. FLD (in_src1) = f_r1;
  1940. FLD (in_src2) = f_r2;
  1941. }
  1942. #endif
  1943. #undef FLD
  1944. return idesc;
  1945. }
  1946. extract_sfmt_stb_d:
  1947. {
  1948. const IDESC *idesc = &m32rxf_insn_data[itype];
  1949. CGEN_INSN_WORD insn = entire_insn;
  1950. #define FLD(f) abuf->fields.sfmt_st_d.f
  1951. UINT f_r1;
  1952. UINT f_r2;
  1953. INT f_simm16;
  1954. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  1955. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  1956. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  1957. /* Record the fields for the semantic handler. */
  1958. FLD (f_simm16) = f_simm16;
  1959. FLD (f_r1) = f_r1;
  1960. FLD (f_r2) = f_r2;
  1961. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1962. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1963. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1964. #if WITH_PROFILE_MODEL_P
  1965. /* Record the fields for profiling. */
  1966. if (PROFILE_MODEL_P (current_cpu))
  1967. {
  1968. FLD (in_src1) = f_r1;
  1969. FLD (in_src2) = f_r2;
  1970. }
  1971. #endif
  1972. #undef FLD
  1973. return idesc;
  1974. }
  1975. extract_sfmt_sth:
  1976. {
  1977. const IDESC *idesc = &m32rxf_insn_data[itype];
  1978. CGEN_INSN_WORD insn = entire_insn;
  1979. #define FLD(f) abuf->fields.sfmt_st_plus.f
  1980. UINT f_r1;
  1981. UINT f_r2;
  1982. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  1983. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  1984. /* Record the fields for the semantic handler. */
  1985. FLD (f_r1) = f_r1;
  1986. FLD (f_r2) = f_r2;
  1987. FLD (i_src1) = & CPU (h_gr)[f_r1];
  1988. FLD (i_src2) = & CPU (h_gr)[f_r2];
  1989. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  1990. #if WITH_PROFILE_MODEL_P
  1991. /* Record the fields for profiling. */
  1992. if (PROFILE_MODEL_P (current_cpu))
  1993. {
  1994. FLD (in_src1) = f_r1;
  1995. FLD (in_src2) = f_r2;
  1996. }
  1997. #endif
  1998. #undef FLD
  1999. return idesc;
  2000. }
  2001. extract_sfmt_sth_d:
  2002. {
  2003. const IDESC *idesc = &m32rxf_insn_data[itype];
  2004. CGEN_INSN_WORD insn = entire_insn;
  2005. #define FLD(f) abuf->fields.sfmt_st_d.f
  2006. UINT f_r1;
  2007. UINT f_r2;
  2008. INT f_simm16;
  2009. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  2010. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  2011. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  2012. /* Record the fields for the semantic handler. */
  2013. FLD (f_simm16) = f_simm16;
  2014. FLD (f_r1) = f_r1;
  2015. FLD (f_r2) = f_r2;
  2016. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2017. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2018. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2019. #if WITH_PROFILE_MODEL_P
  2020. /* Record the fields for profiling. */
  2021. if (PROFILE_MODEL_P (current_cpu))
  2022. {
  2023. FLD (in_src1) = f_r1;
  2024. FLD (in_src2) = f_r2;
  2025. }
  2026. #endif
  2027. #undef FLD
  2028. return idesc;
  2029. }
  2030. extract_sfmt_st_plus:
  2031. {
  2032. const IDESC *idesc = &m32rxf_insn_data[itype];
  2033. CGEN_INSN_WORD insn = entire_insn;
  2034. #define FLD(f) abuf->fields.sfmt_st_plus.f
  2035. UINT f_r1;
  2036. UINT f_r2;
  2037. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  2038. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2039. /* Record the fields for the semantic handler. */
  2040. FLD (f_r1) = f_r1;
  2041. FLD (f_r2) = f_r2;
  2042. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2043. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2044. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2045. #if WITH_PROFILE_MODEL_P
  2046. /* Record the fields for profiling. */
  2047. if (PROFILE_MODEL_P (current_cpu))
  2048. {
  2049. FLD (in_src1) = f_r1;
  2050. FLD (in_src2) = f_r2;
  2051. FLD (out_src2) = f_r2;
  2052. }
  2053. #endif
  2054. #undef FLD
  2055. return idesc;
  2056. }
  2057. extract_sfmt_sth_plus:
  2058. {
  2059. const IDESC *idesc = &m32rxf_insn_data[itype];
  2060. CGEN_INSN_WORD insn = entire_insn;
  2061. #define FLD(f) abuf->fields.sfmt_st_plus.f
  2062. UINT f_r1;
  2063. UINT f_r2;
  2064. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  2065. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2066. /* Record the fields for the semantic handler. */
  2067. FLD (f_r1) = f_r1;
  2068. FLD (f_r2) = f_r2;
  2069. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2070. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2071. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2072. #if WITH_PROFILE_MODEL_P
  2073. /* Record the fields for profiling. */
  2074. if (PROFILE_MODEL_P (current_cpu))
  2075. {
  2076. FLD (in_src1) = f_r1;
  2077. FLD (in_src2) = f_r2;
  2078. FLD (out_src2) = f_r2;
  2079. }
  2080. #endif
  2081. #undef FLD
  2082. return idesc;
  2083. }
  2084. extract_sfmt_stb_plus:
  2085. {
  2086. const IDESC *idesc = &m32rxf_insn_data[itype];
  2087. CGEN_INSN_WORD insn = entire_insn;
  2088. #define FLD(f) abuf->fields.sfmt_st_plus.f
  2089. UINT f_r1;
  2090. UINT f_r2;
  2091. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  2092. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2093. /* Record the fields for the semantic handler. */
  2094. FLD (f_r1) = f_r1;
  2095. FLD (f_r2) = f_r2;
  2096. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2097. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2098. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2099. #if WITH_PROFILE_MODEL_P
  2100. /* Record the fields for profiling. */
  2101. if (PROFILE_MODEL_P (current_cpu))
  2102. {
  2103. FLD (in_src1) = f_r1;
  2104. FLD (in_src2) = f_r2;
  2105. FLD (out_src2) = f_r2;
  2106. }
  2107. #endif
  2108. #undef FLD
  2109. return idesc;
  2110. }
  2111. extract_sfmt_trap:
  2112. {
  2113. const IDESC *idesc = &m32rxf_insn_data[itype];
  2114. CGEN_INSN_WORD insn = entire_insn;
  2115. #define FLD(f) abuf->fields.sfmt_trap.f
  2116. UINT f_uimm4;
  2117. f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2118. /* Record the fields for the semantic handler. */
  2119. FLD (f_uimm4) = f_uimm4;
  2120. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0));
  2121. #if WITH_PROFILE_MODEL_P
  2122. /* Record the fields for profiling. */
  2123. if (PROFILE_MODEL_P (current_cpu))
  2124. {
  2125. }
  2126. #endif
  2127. #undef FLD
  2128. return idesc;
  2129. }
  2130. extract_sfmt_unlock:
  2131. {
  2132. const IDESC *idesc = &m32rxf_insn_data[itype];
  2133. CGEN_INSN_WORD insn = entire_insn;
  2134. #define FLD(f) abuf->fields.sfmt_st_plus.f
  2135. UINT f_r1;
  2136. UINT f_r2;
  2137. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  2138. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2139. /* Record the fields for the semantic handler. */
  2140. FLD (f_r1) = f_r1;
  2141. FLD (f_r2) = f_r2;
  2142. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2143. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2144. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_unlock", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2145. #if WITH_PROFILE_MODEL_P
  2146. /* Record the fields for profiling. */
  2147. if (PROFILE_MODEL_P (current_cpu))
  2148. {
  2149. FLD (in_src1) = f_r1;
  2150. FLD (in_src2) = f_r2;
  2151. }
  2152. #endif
  2153. #undef FLD
  2154. return idesc;
  2155. }
  2156. extract_sfmt_satb:
  2157. {
  2158. const IDESC *idesc = &m32rxf_insn_data[itype];
  2159. CGEN_INSN_WORD insn = entire_insn;
  2160. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  2161. UINT f_r1;
  2162. UINT f_r2;
  2163. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  2164. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  2165. /* Record the fields for the semantic handler. */
  2166. FLD (f_r2) = f_r2;
  2167. FLD (f_r1) = f_r1;
  2168. FLD (i_sr) = & CPU (h_gr)[f_r2];
  2169. FLD (i_dr) = & CPU (h_gr)[f_r1];
  2170. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_satb", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  2171. #if WITH_PROFILE_MODEL_P
  2172. /* Record the fields for profiling. */
  2173. if (PROFILE_MODEL_P (current_cpu))
  2174. {
  2175. FLD (in_sr) = f_r2;
  2176. FLD (out_dr) = f_r1;
  2177. }
  2178. #endif
  2179. #undef FLD
  2180. return idesc;
  2181. }
  2182. extract_sfmt_sat:
  2183. {
  2184. const IDESC *idesc = &m32rxf_insn_data[itype];
  2185. CGEN_INSN_WORD insn = entire_insn;
  2186. #define FLD(f) abuf->fields.sfmt_ld_plus.f
  2187. UINT f_r1;
  2188. UINT f_r2;
  2189. f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
  2190. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  2191. /* Record the fields for the semantic handler. */
  2192. FLD (f_r2) = f_r2;
  2193. FLD (f_r1) = f_r1;
  2194. FLD (i_sr) = & CPU (h_gr)[f_r2];
  2195. FLD (i_dr) = & CPU (h_gr)[f_r1];
  2196. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sat", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
  2197. #if WITH_PROFILE_MODEL_P
  2198. /* Record the fields for profiling. */
  2199. if (PROFILE_MODEL_P (current_cpu))
  2200. {
  2201. FLD (in_sr) = f_r2;
  2202. FLD (out_dr) = f_r1;
  2203. }
  2204. #endif
  2205. #undef FLD
  2206. return idesc;
  2207. }
  2208. extract_sfmt_sadd:
  2209. {
  2210. const IDESC *idesc = &m32rxf_insn_data[itype];
  2211. #define FLD(f) abuf->fields.sfmt_empty.f
  2212. /* Record the fields for the semantic handler. */
  2213. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sadd", (char *) 0));
  2214. #undef FLD
  2215. return idesc;
  2216. }
  2217. extract_sfmt_macwu1:
  2218. {
  2219. const IDESC *idesc = &m32rxf_insn_data[itype];
  2220. CGEN_INSN_WORD insn = entire_insn;
  2221. #define FLD(f) abuf->fields.sfmt_st_plus.f
  2222. UINT f_r1;
  2223. UINT f_r2;
  2224. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  2225. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2226. /* Record the fields for the semantic handler. */
  2227. FLD (f_r1) = f_r1;
  2228. FLD (f_r2) = f_r2;
  2229. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2230. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2231. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_macwu1", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2232. #if WITH_PROFILE_MODEL_P
  2233. /* Record the fields for profiling. */
  2234. if (PROFILE_MODEL_P (current_cpu))
  2235. {
  2236. FLD (in_src1) = f_r1;
  2237. FLD (in_src2) = f_r2;
  2238. }
  2239. #endif
  2240. #undef FLD
  2241. return idesc;
  2242. }
  2243. extract_sfmt_msblo:
  2244. {
  2245. const IDESC *idesc = &m32rxf_insn_data[itype];
  2246. CGEN_INSN_WORD insn = entire_insn;
  2247. #define FLD(f) abuf->fields.sfmt_st_plus.f
  2248. UINT f_r1;
  2249. UINT f_r2;
  2250. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  2251. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2252. /* Record the fields for the semantic handler. */
  2253. FLD (f_r1) = f_r1;
  2254. FLD (f_r2) = f_r2;
  2255. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2256. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2257. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_msblo", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2258. #if WITH_PROFILE_MODEL_P
  2259. /* Record the fields for profiling. */
  2260. if (PROFILE_MODEL_P (current_cpu))
  2261. {
  2262. FLD (in_src1) = f_r1;
  2263. FLD (in_src2) = f_r2;
  2264. }
  2265. #endif
  2266. #undef FLD
  2267. return idesc;
  2268. }
  2269. extract_sfmt_mulwu1:
  2270. {
  2271. const IDESC *idesc = &m32rxf_insn_data[itype];
  2272. CGEN_INSN_WORD insn = entire_insn;
  2273. #define FLD(f) abuf->fields.sfmt_st_plus.f
  2274. UINT f_r1;
  2275. UINT f_r2;
  2276. f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
  2277. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2278. /* Record the fields for the semantic handler. */
  2279. FLD (f_r1) = f_r1;
  2280. FLD (f_r2) = f_r2;
  2281. FLD (i_src1) = & CPU (h_gr)[f_r1];
  2282. FLD (i_src2) = & CPU (h_gr)[f_r2];
  2283. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulwu1", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
  2284. #if WITH_PROFILE_MODEL_P
  2285. /* Record the fields for profiling. */
  2286. if (PROFILE_MODEL_P (current_cpu))
  2287. {
  2288. FLD (in_src1) = f_r1;
  2289. FLD (in_src2) = f_r2;
  2290. }
  2291. #endif
  2292. #undef FLD
  2293. return idesc;
  2294. }
  2295. extract_sfmt_sc:
  2296. {
  2297. const IDESC *idesc = &m32rxf_insn_data[itype];
  2298. #define FLD(f) abuf->fields.sfmt_empty.f
  2299. /* Record the fields for the semantic handler. */
  2300. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sc", (char *) 0));
  2301. #undef FLD
  2302. return idesc;
  2303. }
  2304. extract_sfmt_clrpsw:
  2305. {
  2306. const IDESC *idesc = &m32rxf_insn_data[itype];
  2307. CGEN_INSN_WORD insn = entire_insn;
  2308. #define FLD(f) abuf->fields.sfmt_clrpsw.f
  2309. UINT f_uimm8;
  2310. f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
  2311. /* Record the fields for the semantic handler. */
  2312. FLD (f_uimm8) = f_uimm8;
  2313. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
  2314. #undef FLD
  2315. return idesc;
  2316. }
  2317. extract_sfmt_setpsw:
  2318. {
  2319. const IDESC *idesc = &m32rxf_insn_data[itype];
  2320. CGEN_INSN_WORD insn = entire_insn;
  2321. #define FLD(f) abuf->fields.sfmt_clrpsw.f
  2322. UINT f_uimm8;
  2323. f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
  2324. /* Record the fields for the semantic handler. */
  2325. FLD (f_uimm8) = f_uimm8;
  2326. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
  2327. #undef FLD
  2328. return idesc;
  2329. }
  2330. extract_sfmt_bset:
  2331. {
  2332. const IDESC *idesc = &m32rxf_insn_data[itype];
  2333. CGEN_INSN_WORD insn = entire_insn;
  2334. #define FLD(f) abuf->fields.sfmt_bset.f
  2335. UINT f_uimm3;
  2336. UINT f_r2;
  2337. INT f_simm16;
  2338. f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3);
  2339. f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
  2340. f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
  2341. /* Record the fields for the semantic handler. */
  2342. FLD (f_simm16) = f_simm16;
  2343. FLD (f_r2) = f_r2;
  2344. FLD (f_uimm3) = f_uimm3;
  2345. FLD (i_sr) = & CPU (h_gr)[f_r2];
  2346. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bset", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
  2347. #if WITH_PROFILE_MODEL_P
  2348. /* Record the fields for profiling. */
  2349. if (PROFILE_MODEL_P (current_cpu))
  2350. {
  2351. FLD (in_sr) = f_r2;
  2352. }
  2353. #endif
  2354. #undef FLD
  2355. return idesc;
  2356. }
  2357. extract_sfmt_btst:
  2358. {
  2359. const IDESC *idesc = &m32rxf_insn_data[itype];
  2360. CGEN_INSN_WORD insn = entire_insn;
  2361. #define FLD(f) abuf->fields.sfmt_bset.f
  2362. UINT f_uimm3;
  2363. UINT f_r2;
  2364. f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3);
  2365. f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
  2366. /* Record the fields for the semantic handler. */
  2367. FLD (f_r2) = f_r2;
  2368. FLD (f_uimm3) = f_uimm3;
  2369. FLD (i_sr) = & CPU (h_gr)[f_r2];
  2370. CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_btst", "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
  2371. #if WITH_PROFILE_MODEL_P
  2372. /* Record the fields for profiling. */
  2373. if (PROFILE_MODEL_P (current_cpu))
  2374. {
  2375. FLD (in_sr) = f_r2;
  2376. }
  2377. #endif
  2378. #undef FLD
  2379. return idesc;
  2380. }
  2381. }