sem-switch.c 96 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499
  1. /* Simulator instruction semantics for or1k32bf.
  2. THIS FILE IS MACHINE GENERATED WITH CGEN.
  3. Copyright (C) 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, write to the Free Software Foundation, Inc.,
  15. 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
  16. */
  17. #ifdef DEFINE_LABELS
  18. /* The labels have the case they have because the enum of insn types
  19. is all uppercase and in the non-stdc case the insn symbol is built
  20. into the enum name. */
  21. static struct {
  22. int index;
  23. void *label;
  24. } labels[] = {
  25. { OR1K32BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
  26. { OR1K32BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
  27. { OR1K32BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
  28. { OR1K32BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
  29. { OR1K32BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
  30. { OR1K32BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
  31. { OR1K32BF_INSN_L_J, && case_sem_INSN_L_J },
  32. { OR1K32BF_INSN_L_ADRP, && case_sem_INSN_L_ADRP },
  33. { OR1K32BF_INSN_L_JAL, && case_sem_INSN_L_JAL },
  34. { OR1K32BF_INSN_L_JR, && case_sem_INSN_L_JR },
  35. { OR1K32BF_INSN_L_JALR, && case_sem_INSN_L_JALR },
  36. { OR1K32BF_INSN_L_BNF, && case_sem_INSN_L_BNF },
  37. { OR1K32BF_INSN_L_BF, && case_sem_INSN_L_BF },
  38. { OR1K32BF_INSN_L_TRAP, && case_sem_INSN_L_TRAP },
  39. { OR1K32BF_INSN_L_SYS, && case_sem_INSN_L_SYS },
  40. { OR1K32BF_INSN_L_MSYNC, && case_sem_INSN_L_MSYNC },
  41. { OR1K32BF_INSN_L_PSYNC, && case_sem_INSN_L_PSYNC },
  42. { OR1K32BF_INSN_L_CSYNC, && case_sem_INSN_L_CSYNC },
  43. { OR1K32BF_INSN_L_RFE, && case_sem_INSN_L_RFE },
  44. { OR1K32BF_INSN_L_NOP_IMM, && case_sem_INSN_L_NOP_IMM },
  45. { OR1K32BF_INSN_L_MOVHI, && case_sem_INSN_L_MOVHI },
  46. { OR1K32BF_INSN_L_MACRC, && case_sem_INSN_L_MACRC },
  47. { OR1K32BF_INSN_L_MFSPR, && case_sem_INSN_L_MFSPR },
  48. { OR1K32BF_INSN_L_MTSPR, && case_sem_INSN_L_MTSPR },
  49. { OR1K32BF_INSN_L_LWZ, && case_sem_INSN_L_LWZ },
  50. { OR1K32BF_INSN_L_LWS, && case_sem_INSN_L_LWS },
  51. { OR1K32BF_INSN_L_LWA, && case_sem_INSN_L_LWA },
  52. { OR1K32BF_INSN_L_LBZ, && case_sem_INSN_L_LBZ },
  53. { OR1K32BF_INSN_L_LBS, && case_sem_INSN_L_LBS },
  54. { OR1K32BF_INSN_L_LHZ, && case_sem_INSN_L_LHZ },
  55. { OR1K32BF_INSN_L_LHS, && case_sem_INSN_L_LHS },
  56. { OR1K32BF_INSN_L_SW, && case_sem_INSN_L_SW },
  57. { OR1K32BF_INSN_L_SB, && case_sem_INSN_L_SB },
  58. { OR1K32BF_INSN_L_SH, && case_sem_INSN_L_SH },
  59. { OR1K32BF_INSN_L_SWA, && case_sem_INSN_L_SWA },
  60. { OR1K32BF_INSN_L_SLL, && case_sem_INSN_L_SLL },
  61. { OR1K32BF_INSN_L_SLLI, && case_sem_INSN_L_SLLI },
  62. { OR1K32BF_INSN_L_SRL, && case_sem_INSN_L_SRL },
  63. { OR1K32BF_INSN_L_SRLI, && case_sem_INSN_L_SRLI },
  64. { OR1K32BF_INSN_L_SRA, && case_sem_INSN_L_SRA },
  65. { OR1K32BF_INSN_L_SRAI, && case_sem_INSN_L_SRAI },
  66. { OR1K32BF_INSN_L_ROR, && case_sem_INSN_L_ROR },
  67. { OR1K32BF_INSN_L_RORI, && case_sem_INSN_L_RORI },
  68. { OR1K32BF_INSN_L_AND, && case_sem_INSN_L_AND },
  69. { OR1K32BF_INSN_L_OR, && case_sem_INSN_L_OR },
  70. { OR1K32BF_INSN_L_XOR, && case_sem_INSN_L_XOR },
  71. { OR1K32BF_INSN_L_ADD, && case_sem_INSN_L_ADD },
  72. { OR1K32BF_INSN_L_SUB, && case_sem_INSN_L_SUB },
  73. { OR1K32BF_INSN_L_ADDC, && case_sem_INSN_L_ADDC },
  74. { OR1K32BF_INSN_L_MUL, && case_sem_INSN_L_MUL },
  75. { OR1K32BF_INSN_L_MULD, && case_sem_INSN_L_MULD },
  76. { OR1K32BF_INSN_L_MULU, && case_sem_INSN_L_MULU },
  77. { OR1K32BF_INSN_L_MULDU, && case_sem_INSN_L_MULDU },
  78. { OR1K32BF_INSN_L_DIV, && case_sem_INSN_L_DIV },
  79. { OR1K32BF_INSN_L_DIVU, && case_sem_INSN_L_DIVU },
  80. { OR1K32BF_INSN_L_FF1, && case_sem_INSN_L_FF1 },
  81. { OR1K32BF_INSN_L_FL1, && case_sem_INSN_L_FL1 },
  82. { OR1K32BF_INSN_L_ANDI, && case_sem_INSN_L_ANDI },
  83. { OR1K32BF_INSN_L_ORI, && case_sem_INSN_L_ORI },
  84. { OR1K32BF_INSN_L_XORI, && case_sem_INSN_L_XORI },
  85. { OR1K32BF_INSN_L_ADDI, && case_sem_INSN_L_ADDI },
  86. { OR1K32BF_INSN_L_ADDIC, && case_sem_INSN_L_ADDIC },
  87. { OR1K32BF_INSN_L_MULI, && case_sem_INSN_L_MULI },
  88. { OR1K32BF_INSN_L_EXTHS, && case_sem_INSN_L_EXTHS },
  89. { OR1K32BF_INSN_L_EXTBS, && case_sem_INSN_L_EXTBS },
  90. { OR1K32BF_INSN_L_EXTHZ, && case_sem_INSN_L_EXTHZ },
  91. { OR1K32BF_INSN_L_EXTBZ, && case_sem_INSN_L_EXTBZ },
  92. { OR1K32BF_INSN_L_EXTWS, && case_sem_INSN_L_EXTWS },
  93. { OR1K32BF_INSN_L_EXTWZ, && case_sem_INSN_L_EXTWZ },
  94. { OR1K32BF_INSN_L_CMOV, && case_sem_INSN_L_CMOV },
  95. { OR1K32BF_INSN_L_SFGTS, && case_sem_INSN_L_SFGTS },
  96. { OR1K32BF_INSN_L_SFGTSI, && case_sem_INSN_L_SFGTSI },
  97. { OR1K32BF_INSN_L_SFGTU, && case_sem_INSN_L_SFGTU },
  98. { OR1K32BF_INSN_L_SFGTUI, && case_sem_INSN_L_SFGTUI },
  99. { OR1K32BF_INSN_L_SFGES, && case_sem_INSN_L_SFGES },
  100. { OR1K32BF_INSN_L_SFGESI, && case_sem_INSN_L_SFGESI },
  101. { OR1K32BF_INSN_L_SFGEU, && case_sem_INSN_L_SFGEU },
  102. { OR1K32BF_INSN_L_SFGEUI, && case_sem_INSN_L_SFGEUI },
  103. { OR1K32BF_INSN_L_SFLTS, && case_sem_INSN_L_SFLTS },
  104. { OR1K32BF_INSN_L_SFLTSI, && case_sem_INSN_L_SFLTSI },
  105. { OR1K32BF_INSN_L_SFLTU, && case_sem_INSN_L_SFLTU },
  106. { OR1K32BF_INSN_L_SFLTUI, && case_sem_INSN_L_SFLTUI },
  107. { OR1K32BF_INSN_L_SFLES, && case_sem_INSN_L_SFLES },
  108. { OR1K32BF_INSN_L_SFLESI, && case_sem_INSN_L_SFLESI },
  109. { OR1K32BF_INSN_L_SFLEU, && case_sem_INSN_L_SFLEU },
  110. { OR1K32BF_INSN_L_SFLEUI, && case_sem_INSN_L_SFLEUI },
  111. { OR1K32BF_INSN_L_SFEQ, && case_sem_INSN_L_SFEQ },
  112. { OR1K32BF_INSN_L_SFEQI, && case_sem_INSN_L_SFEQI },
  113. { OR1K32BF_INSN_L_SFNE, && case_sem_INSN_L_SFNE },
  114. { OR1K32BF_INSN_L_SFNEI, && case_sem_INSN_L_SFNEI },
  115. { OR1K32BF_INSN_L_MAC, && case_sem_INSN_L_MAC },
  116. { OR1K32BF_INSN_L_MACI, && case_sem_INSN_L_MACI },
  117. { OR1K32BF_INSN_L_MACU, && case_sem_INSN_L_MACU },
  118. { OR1K32BF_INSN_L_MSB, && case_sem_INSN_L_MSB },
  119. { OR1K32BF_INSN_L_MSBU, && case_sem_INSN_L_MSBU },
  120. { OR1K32BF_INSN_L_CUST1, && case_sem_INSN_L_CUST1 },
  121. { OR1K32BF_INSN_L_CUST2, && case_sem_INSN_L_CUST2 },
  122. { OR1K32BF_INSN_L_CUST3, && case_sem_INSN_L_CUST3 },
  123. { OR1K32BF_INSN_L_CUST4, && case_sem_INSN_L_CUST4 },
  124. { OR1K32BF_INSN_L_CUST5, && case_sem_INSN_L_CUST5 },
  125. { OR1K32BF_INSN_L_CUST6, && case_sem_INSN_L_CUST6 },
  126. { OR1K32BF_INSN_L_CUST7, && case_sem_INSN_L_CUST7 },
  127. { OR1K32BF_INSN_L_CUST8, && case_sem_INSN_L_CUST8 },
  128. { OR1K32BF_INSN_LF_ADD_S, && case_sem_INSN_LF_ADD_S },
  129. { OR1K32BF_INSN_LF_ADD_D32, && case_sem_INSN_LF_ADD_D32 },
  130. { OR1K32BF_INSN_LF_SUB_S, && case_sem_INSN_LF_SUB_S },
  131. { OR1K32BF_INSN_LF_SUB_D32, && case_sem_INSN_LF_SUB_D32 },
  132. { OR1K32BF_INSN_LF_MUL_S, && case_sem_INSN_LF_MUL_S },
  133. { OR1K32BF_INSN_LF_MUL_D32, && case_sem_INSN_LF_MUL_D32 },
  134. { OR1K32BF_INSN_LF_DIV_S, && case_sem_INSN_LF_DIV_S },
  135. { OR1K32BF_INSN_LF_DIV_D32, && case_sem_INSN_LF_DIV_D32 },
  136. { OR1K32BF_INSN_LF_REM_S, && case_sem_INSN_LF_REM_S },
  137. { OR1K32BF_INSN_LF_REM_D32, && case_sem_INSN_LF_REM_D32 },
  138. { OR1K32BF_INSN_LF_ITOF_S, && case_sem_INSN_LF_ITOF_S },
  139. { OR1K32BF_INSN_LF_ITOF_D32, && case_sem_INSN_LF_ITOF_D32 },
  140. { OR1K32BF_INSN_LF_FTOI_S, && case_sem_INSN_LF_FTOI_S },
  141. { OR1K32BF_INSN_LF_FTOI_D32, && case_sem_INSN_LF_FTOI_D32 },
  142. { OR1K32BF_INSN_LF_SFEQ_S, && case_sem_INSN_LF_SFEQ_S },
  143. { OR1K32BF_INSN_LF_SFEQ_D32, && case_sem_INSN_LF_SFEQ_D32 },
  144. { OR1K32BF_INSN_LF_SFNE_S, && case_sem_INSN_LF_SFNE_S },
  145. { OR1K32BF_INSN_LF_SFNE_D32, && case_sem_INSN_LF_SFNE_D32 },
  146. { OR1K32BF_INSN_LF_SFGE_S, && case_sem_INSN_LF_SFGE_S },
  147. { OR1K32BF_INSN_LF_SFGE_D32, && case_sem_INSN_LF_SFGE_D32 },
  148. { OR1K32BF_INSN_LF_SFGT_S, && case_sem_INSN_LF_SFGT_S },
  149. { OR1K32BF_INSN_LF_SFGT_D32, && case_sem_INSN_LF_SFGT_D32 },
  150. { OR1K32BF_INSN_LF_SFLT_S, && case_sem_INSN_LF_SFLT_S },
  151. { OR1K32BF_INSN_LF_SFLT_D32, && case_sem_INSN_LF_SFLT_D32 },
  152. { OR1K32BF_INSN_LF_SFLE_S, && case_sem_INSN_LF_SFLE_S },
  153. { OR1K32BF_INSN_LF_SFLE_D32, && case_sem_INSN_LF_SFLE_D32 },
  154. { OR1K32BF_INSN_LF_SFUEQ_S, && case_sem_INSN_LF_SFUEQ_S },
  155. { OR1K32BF_INSN_LF_SFUEQ_D32, && case_sem_INSN_LF_SFUEQ_D32 },
  156. { OR1K32BF_INSN_LF_SFUNE_S, && case_sem_INSN_LF_SFUNE_S },
  157. { OR1K32BF_INSN_LF_SFUNE_D32, && case_sem_INSN_LF_SFUNE_D32 },
  158. { OR1K32BF_INSN_LF_SFUGT_S, && case_sem_INSN_LF_SFUGT_S },
  159. { OR1K32BF_INSN_LF_SFUGT_D32, && case_sem_INSN_LF_SFUGT_D32 },
  160. { OR1K32BF_INSN_LF_SFUGE_S, && case_sem_INSN_LF_SFUGE_S },
  161. { OR1K32BF_INSN_LF_SFUGE_D32, && case_sem_INSN_LF_SFUGE_D32 },
  162. { OR1K32BF_INSN_LF_SFULT_S, && case_sem_INSN_LF_SFULT_S },
  163. { OR1K32BF_INSN_LF_SFULT_D32, && case_sem_INSN_LF_SFULT_D32 },
  164. { OR1K32BF_INSN_LF_SFULE_S, && case_sem_INSN_LF_SFULE_S },
  165. { OR1K32BF_INSN_LF_SFULE_D32, && case_sem_INSN_LF_SFULE_D32 },
  166. { OR1K32BF_INSN_LF_SFUN_S, && case_sem_INSN_LF_SFUN_S },
  167. { OR1K32BF_INSN_LF_SFUN_D32, && case_sem_INSN_LF_SFUN_D32 },
  168. { OR1K32BF_INSN_LF_MADD_S, && case_sem_INSN_LF_MADD_S },
  169. { OR1K32BF_INSN_LF_MADD_D32, && case_sem_INSN_LF_MADD_D32 },
  170. { OR1K32BF_INSN_LF_CUST1_S, && case_sem_INSN_LF_CUST1_S },
  171. { OR1K32BF_INSN_LF_CUST1_D32, && case_sem_INSN_LF_CUST1_D32 },
  172. { 0, 0 }
  173. };
  174. int i;
  175. for (i = 0; labels[i].label != 0; ++i)
  176. {
  177. #if FAST_P
  178. CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
  179. #else
  180. CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
  181. #endif
  182. }
  183. #undef DEFINE_LABELS
  184. #endif /* DEFINE_LABELS */
  185. #ifdef DEFINE_SWITCH
  186. /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
  187. off frills like tracing and profiling. */
  188. /* FIXME: A better way would be to have TRACE_RESULT check for something
  189. that can cause it to be optimized out. Another way would be to emit
  190. special handlers into the instruction "stream". */
  191. #if FAST_P
  192. #undef CGEN_TRACE_RESULT
  193. #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
  194. #endif
  195. #undef GET_ATTR
  196. #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
  197. {
  198. #if WITH_SCACHE_PBB
  199. /* Branch to next handler without going around main loop. */
  200. #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
  201. SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
  202. #else /* ! WITH_SCACHE_PBB */
  203. #define NEXT(vpc) BREAK (sem)
  204. #ifdef __GNUC__
  205. #if FAST_P
  206. SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
  207. #else
  208. SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
  209. #endif
  210. #else
  211. SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
  212. #endif
  213. #endif /* ! WITH_SCACHE_PBB */
  214. {
  215. CASE (sem, INSN_X_INVALID) : /* --invalid-- */
  216. {
  217. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  218. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  219. #define FLD(f) abuf->fields.sfmt_empty.f
  220. int UNUSED written = 0;
  221. IADDR UNUSED pc = abuf->addr;
  222. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  223. {
  224. /* Update the recorded pc in the cpu state struct.
  225. Only necessary for WITH_SCACHE case, but to avoid the
  226. conditional compilation .... */
  227. SET_H_PC (pc);
  228. /* Virtual insns have zero size. Overwrite vpc with address of next insn
  229. using the default-insn-bitsize spec. When executing insns in parallel
  230. we may want to queue the fault and continue execution. */
  231. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  232. vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
  233. }
  234. #undef FLD
  235. }
  236. NEXT (vpc);
  237. CASE (sem, INSN_X_AFTER) : /* --after-- */
  238. {
  239. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  240. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  241. #define FLD(f) abuf->fields.sfmt_empty.f
  242. int UNUSED written = 0;
  243. IADDR UNUSED pc = abuf->addr;
  244. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  245. {
  246. #if WITH_SCACHE_PBB_OR1K32BF
  247. or1k32bf_pbb_after (current_cpu, sem_arg);
  248. #endif
  249. }
  250. #undef FLD
  251. }
  252. NEXT (vpc);
  253. CASE (sem, INSN_X_BEFORE) : /* --before-- */
  254. {
  255. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  256. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  257. #define FLD(f) abuf->fields.sfmt_empty.f
  258. int UNUSED written = 0;
  259. IADDR UNUSED pc = abuf->addr;
  260. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  261. {
  262. #if WITH_SCACHE_PBB_OR1K32BF
  263. or1k32bf_pbb_before (current_cpu, sem_arg);
  264. #endif
  265. }
  266. #undef FLD
  267. }
  268. NEXT (vpc);
  269. CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
  270. {
  271. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  272. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  273. #define FLD(f) abuf->fields.sfmt_empty.f
  274. int UNUSED written = 0;
  275. IADDR UNUSED pc = abuf->addr;
  276. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  277. {
  278. #if WITH_SCACHE_PBB_OR1K32BF
  279. #ifdef DEFINE_SWITCH
  280. vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
  281. pbb_br_type, pbb_br_npc);
  282. BREAK (sem);
  283. #else
  284. /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
  285. vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
  286. CPU_PBB_BR_TYPE (current_cpu),
  287. CPU_PBB_BR_NPC (current_cpu));
  288. #endif
  289. #endif
  290. }
  291. #undef FLD
  292. }
  293. NEXT (vpc);
  294. CASE (sem, INSN_X_CHAIN) : /* --chain-- */
  295. {
  296. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  297. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  298. #define FLD(f) abuf->fields.sfmt_empty.f
  299. int UNUSED written = 0;
  300. IADDR UNUSED pc = abuf->addr;
  301. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  302. {
  303. #if WITH_SCACHE_PBB_OR1K32BF
  304. vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
  305. #ifdef DEFINE_SWITCH
  306. BREAK (sem);
  307. #endif
  308. #endif
  309. }
  310. #undef FLD
  311. }
  312. NEXT (vpc);
  313. CASE (sem, INSN_X_BEGIN) : /* --begin-- */
  314. {
  315. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  316. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  317. #define FLD(f) abuf->fields.sfmt_empty.f
  318. int UNUSED written = 0;
  319. IADDR UNUSED pc = abuf->addr;
  320. vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
  321. {
  322. #if WITH_SCACHE_PBB_OR1K32BF
  323. #if defined DEFINE_SWITCH || defined FAST_P
  324. /* In the switch case FAST_P is a constant, allowing several optimizations
  325. in any called inline functions. */
  326. vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
  327. #else
  328. #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
  329. vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
  330. #else
  331. vpc = or1k32bf_pbb_begin (current_cpu, 0);
  332. #endif
  333. #endif
  334. #endif
  335. }
  336. #undef FLD
  337. }
  338. NEXT (vpc);
  339. CASE (sem, INSN_L_J) : /* l.j ${disp26} */
  340. {
  341. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  342. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  343. #define FLD(f) abuf->fields.sfmt_l_j.f
  344. int UNUSED written = 0;
  345. IADDR UNUSED pc = abuf->addr;
  346. SEM_BRANCH_INIT
  347. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  348. {
  349. {
  350. {
  351. USI opval = FLD (i_disp26);
  352. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  353. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  354. }
  355. }
  356. if (GET_H_SYS_CPUCFGR_ND ()) {
  357. if (1)
  358. SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
  359. }
  360. }
  361. SEM_BRANCH_FINI (vpc);
  362. #undef FLD
  363. }
  364. NEXT (vpc);
  365. CASE (sem, INSN_L_ADRP) : /* l.adrp $rD,${disp21} */
  366. {
  367. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  368. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  369. #define FLD(f) abuf->fields.sfmt_l_adrp.f
  370. int UNUSED written = 0;
  371. IADDR UNUSED pc = abuf->addr;
  372. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  373. {
  374. USI opval = FLD (i_disp21);
  375. SET_H_GPR (FLD (f_r1), opval);
  376. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  377. }
  378. #undef FLD
  379. }
  380. NEXT (vpc);
  381. CASE (sem, INSN_L_JAL) : /* l.jal ${disp26} */
  382. {
  383. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  384. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  385. #define FLD(f) abuf->fields.sfmt_l_j.f
  386. int UNUSED written = 0;
  387. IADDR UNUSED pc = abuf->addr;
  388. SEM_BRANCH_INIT
  389. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  390. {
  391. {
  392. USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
  393. SET_H_GPR (((UINT) 9), opval);
  394. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  395. }
  396. {
  397. {
  398. {
  399. USI opval = FLD (i_disp26);
  400. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  401. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  402. }
  403. }
  404. if (GET_H_SYS_CPUCFGR_ND ()) {
  405. if (1)
  406. SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
  407. }
  408. }
  409. }
  410. SEM_BRANCH_FINI (vpc);
  411. #undef FLD
  412. }
  413. NEXT (vpc);
  414. CASE (sem, INSN_L_JR) : /* l.jr $rB */
  415. {
  416. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  417. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  418. #define FLD(f) abuf->fields.sfmt_l_sll.f
  419. int UNUSED written = 0;
  420. IADDR UNUSED pc = abuf->addr;
  421. SEM_BRANCH_INIT
  422. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  423. {
  424. {
  425. {
  426. USI opval = GET_H_GPR (FLD (f_r3));
  427. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  428. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  429. }
  430. }
  431. if (GET_H_SYS_CPUCFGR_ND ()) {
  432. if (1)
  433. SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
  434. }
  435. }
  436. SEM_BRANCH_FINI (vpc);
  437. #undef FLD
  438. }
  439. NEXT (vpc);
  440. CASE (sem, INSN_L_JALR) : /* l.jalr $rB */
  441. {
  442. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  443. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  444. #define FLD(f) abuf->fields.sfmt_l_sll.f
  445. int UNUSED written = 0;
  446. IADDR UNUSED pc = abuf->addr;
  447. SEM_BRANCH_INIT
  448. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  449. {
  450. {
  451. USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
  452. SET_H_GPR (((UINT) 9), opval);
  453. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  454. }
  455. {
  456. {
  457. {
  458. USI opval = GET_H_GPR (FLD (f_r3));
  459. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  460. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  461. }
  462. }
  463. if (GET_H_SYS_CPUCFGR_ND ()) {
  464. if (1)
  465. SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
  466. }
  467. }
  468. }
  469. SEM_BRANCH_FINI (vpc);
  470. #undef FLD
  471. }
  472. NEXT (vpc);
  473. CASE (sem, INSN_L_BNF) : /* l.bnf ${disp26} */
  474. {
  475. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  476. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  477. #define FLD(f) abuf->fields.sfmt_l_j.f
  478. int UNUSED written = 0;
  479. IADDR UNUSED pc = abuf->addr;
  480. SEM_BRANCH_INIT
  481. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  482. {
  483. if (NOTSI (GET_H_SYS_SR_F ())) {
  484. {
  485. {
  486. USI opval = FLD (i_disp26);
  487. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  488. written |= (1 << 4);
  489. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  490. }
  491. }
  492. } else {
  493. if (GET_H_SYS_CPUCFGR_ND ()) {
  494. {
  495. {
  496. USI opval = ADDSI (pc, 4);
  497. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  498. written |= (1 << 4);
  499. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  500. }
  501. }
  502. }
  503. }
  504. if (GET_H_SYS_CPUCFGR_ND ()) {
  505. if (1)
  506. SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
  507. }
  508. }
  509. abuf->written = written;
  510. SEM_BRANCH_FINI (vpc);
  511. #undef FLD
  512. }
  513. NEXT (vpc);
  514. CASE (sem, INSN_L_BF) : /* l.bf ${disp26} */
  515. {
  516. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  517. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  518. #define FLD(f) abuf->fields.sfmt_l_j.f
  519. int UNUSED written = 0;
  520. IADDR UNUSED pc = abuf->addr;
  521. SEM_BRANCH_INIT
  522. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  523. {
  524. if (GET_H_SYS_SR_F ()) {
  525. {
  526. {
  527. USI opval = FLD (i_disp26);
  528. SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
  529. written |= (1 << 4);
  530. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  531. }
  532. }
  533. } else {
  534. if (GET_H_SYS_CPUCFGR_ND ()) {
  535. {
  536. {
  537. USI opval = ADDSI (pc, 4);
  538. SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
  539. written |= (1 << 4);
  540. CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
  541. }
  542. }
  543. }
  544. }
  545. if (GET_H_SYS_CPUCFGR_ND ()) {
  546. if (1)
  547. SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
  548. }
  549. }
  550. abuf->written = written;
  551. SEM_BRANCH_FINI (vpc);
  552. #undef FLD
  553. }
  554. NEXT (vpc);
  555. CASE (sem, INSN_L_TRAP) : /* l.trap ${uimm16} */
  556. {
  557. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  558. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  559. #define FLD(f) abuf->fields.sfmt_empty.f
  560. int UNUSED written = 0;
  561. IADDR UNUSED pc = abuf->addr;
  562. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  563. or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
  564. #undef FLD
  565. }
  566. NEXT (vpc);
  567. CASE (sem, INSN_L_SYS) : /* l.sys ${uimm16} */
  568. {
  569. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  570. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  571. #define FLD(f) abuf->fields.sfmt_empty.f
  572. int UNUSED written = 0;
  573. IADDR UNUSED pc = abuf->addr;
  574. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  575. or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
  576. #undef FLD
  577. }
  578. NEXT (vpc);
  579. CASE (sem, INSN_L_MSYNC) : /* l.msync */
  580. {
  581. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  582. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  583. #define FLD(f) abuf->fields.sfmt_empty.f
  584. int UNUSED written = 0;
  585. IADDR UNUSED pc = abuf->addr;
  586. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  587. ((void) 0); /*nop*/
  588. #undef FLD
  589. }
  590. NEXT (vpc);
  591. CASE (sem, INSN_L_PSYNC) : /* l.psync */
  592. {
  593. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  594. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  595. #define FLD(f) abuf->fields.sfmt_empty.f
  596. int UNUSED written = 0;
  597. IADDR UNUSED pc = abuf->addr;
  598. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  599. ((void) 0); /*nop*/
  600. #undef FLD
  601. }
  602. NEXT (vpc);
  603. CASE (sem, INSN_L_CSYNC) : /* l.csync */
  604. {
  605. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  606. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  607. #define FLD(f) abuf->fields.sfmt_empty.f
  608. int UNUSED written = 0;
  609. IADDR UNUSED pc = abuf->addr;
  610. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  611. ((void) 0); /*nop*/
  612. #undef FLD
  613. }
  614. NEXT (vpc);
  615. CASE (sem, INSN_L_RFE) : /* l.rfe */
  616. {
  617. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  618. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  619. #define FLD(f) abuf->fields.sfmt_empty.f
  620. int UNUSED written = 0;
  621. IADDR UNUSED pc = abuf->addr;
  622. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  623. or1k32bf_rfe (current_cpu);
  624. #undef FLD
  625. }
  626. NEXT (vpc);
  627. CASE (sem, INSN_L_NOP_IMM) : /* l.nop ${uimm16} */
  628. {
  629. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  630. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  631. #define FLD(f) abuf->fields.sfmt_l_mfspr.f
  632. int UNUSED written = 0;
  633. IADDR UNUSED pc = abuf->addr;
  634. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  635. or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
  636. #undef FLD
  637. }
  638. NEXT (vpc);
  639. CASE (sem, INSN_L_MOVHI) : /* l.movhi $rD,$uimm16 */
  640. {
  641. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  642. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  643. #define FLD(f) abuf->fields.sfmt_l_mfspr.f
  644. int UNUSED written = 0;
  645. IADDR UNUSED pc = abuf->addr;
  646. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  647. {
  648. USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
  649. SET_H_GPR (FLD (f_r1), opval);
  650. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  651. }
  652. #undef FLD
  653. }
  654. NEXT (vpc);
  655. CASE (sem, INSN_L_MACRC) : /* l.macrc $rD */
  656. {
  657. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  658. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  659. #define FLD(f) abuf->fields.sfmt_l_adrp.f
  660. int UNUSED written = 0;
  661. IADDR UNUSED pc = abuf->addr;
  662. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  663. {
  664. {
  665. USI opval = GET_H_MAC_MACLO ();
  666. SET_H_GPR (FLD (f_r1), opval);
  667. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  668. }
  669. {
  670. USI opval = 0;
  671. SET_H_MAC_MACLO (opval);
  672. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  673. }
  674. {
  675. USI opval = 0;
  676. SET_H_MAC_MACHI (opval);
  677. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  678. }
  679. }
  680. #undef FLD
  681. }
  682. NEXT (vpc);
  683. CASE (sem, INSN_L_MFSPR) : /* l.mfspr $rD,$rA,${uimm16} */
  684. {
  685. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  686. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  687. #define FLD(f) abuf->fields.sfmt_l_mfspr.f
  688. int UNUSED written = 0;
  689. IADDR UNUSED pc = abuf->addr;
  690. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  691. {
  692. USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
  693. SET_H_GPR (FLD (f_r1), opval);
  694. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  695. }
  696. #undef FLD
  697. }
  698. NEXT (vpc);
  699. CASE (sem, INSN_L_MTSPR) : /* l.mtspr $rA,$rB,${uimm16-split} */
  700. {
  701. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  702. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  703. #define FLD(f) abuf->fields.sfmt_l_mtspr.f
  704. int UNUSED written = 0;
  705. IADDR UNUSED pc = abuf->addr;
  706. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  707. or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3)));
  708. #undef FLD
  709. }
  710. NEXT (vpc);
  711. CASE (sem, INSN_L_LWZ) : /* l.lwz $rD,${simm16}($rA) */
  712. {
  713. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  714. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  715. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  716. int UNUSED written = 0;
  717. IADDR UNUSED pc = abuf->addr;
  718. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  719. {
  720. USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
  721. SET_H_GPR (FLD (f_r1), opval);
  722. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  723. }
  724. #undef FLD
  725. }
  726. NEXT (vpc);
  727. CASE (sem, INSN_L_LWS) : /* l.lws $rD,${simm16}($rA) */
  728. {
  729. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  730. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  731. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  732. int UNUSED written = 0;
  733. IADDR UNUSED pc = abuf->addr;
  734. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  735. {
  736. SI opval = EXTSISI (GETMEMSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
  737. SET_H_GPR (FLD (f_r1), opval);
  738. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  739. }
  740. #undef FLD
  741. }
  742. NEXT (vpc);
  743. CASE (sem, INSN_L_LWA) : /* l.lwa $rD,${simm16}($rA) */
  744. {
  745. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  746. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  747. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  748. int UNUSED written = 0;
  749. IADDR UNUSED pc = abuf->addr;
  750. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  751. {
  752. {
  753. USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
  754. SET_H_GPR (FLD (f_r1), opval);
  755. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  756. }
  757. {
  758. BI opval = 1;
  759. CPU (h_atomic_reserve) = opval;
  760. CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
  761. }
  762. {
  763. SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
  764. CPU (h_atomic_address) = opval;
  765. CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
  766. }
  767. }
  768. #undef FLD
  769. }
  770. NEXT (vpc);
  771. CASE (sem, INSN_L_LBZ) : /* l.lbz $rD,${simm16}($rA) */
  772. {
  773. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  774. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  775. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  776. int UNUSED written = 0;
  777. IADDR UNUSED pc = abuf->addr;
  778. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  779. {
  780. USI opval = ZEXTQISI (GETMEMUQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
  781. SET_H_GPR (FLD (f_r1), opval);
  782. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  783. }
  784. #undef FLD
  785. }
  786. NEXT (vpc);
  787. CASE (sem, INSN_L_LBS) : /* l.lbs $rD,${simm16}($rA) */
  788. {
  789. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  790. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  791. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  792. int UNUSED written = 0;
  793. IADDR UNUSED pc = abuf->addr;
  794. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  795. {
  796. SI opval = EXTQISI (GETMEMQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
  797. SET_H_GPR (FLD (f_r1), opval);
  798. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  799. }
  800. #undef FLD
  801. }
  802. NEXT (vpc);
  803. CASE (sem, INSN_L_LHZ) : /* l.lhz $rD,${simm16}($rA) */
  804. {
  805. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  806. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  807. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  808. int UNUSED written = 0;
  809. IADDR UNUSED pc = abuf->addr;
  810. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  811. {
  812. USI opval = ZEXTHISI (GETMEMUHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
  813. SET_H_GPR (FLD (f_r1), opval);
  814. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  815. }
  816. #undef FLD
  817. }
  818. NEXT (vpc);
  819. CASE (sem, INSN_L_LHS) : /* l.lhs $rD,${simm16}($rA) */
  820. {
  821. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  822. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  823. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  824. int UNUSED written = 0;
  825. IADDR UNUSED pc = abuf->addr;
  826. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  827. {
  828. SI opval = EXTHISI (GETMEMHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
  829. SET_H_GPR (FLD (f_r1), opval);
  830. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  831. }
  832. #undef FLD
  833. }
  834. NEXT (vpc);
  835. CASE (sem, INSN_L_SW) : /* l.sw ${simm16-split}($rA),$rB */
  836. {
  837. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  838. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  839. #define FLD(f) abuf->fields.sfmt_l_sw.f
  840. int UNUSED written = 0;
  841. IADDR UNUSED pc = abuf->addr;
  842. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  843. {
  844. SI tmp_addr;
  845. tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
  846. {
  847. USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
  848. SETMEMUSI (current_cpu, pc, tmp_addr, opval);
  849. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  850. }
  851. if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
  852. {
  853. BI opval = 0;
  854. CPU (h_atomic_reserve) = opval;
  855. written |= (1 << 4);
  856. CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
  857. }
  858. }
  859. }
  860. abuf->written = written;
  861. #undef FLD
  862. }
  863. NEXT (vpc);
  864. CASE (sem, INSN_L_SB) : /* l.sb ${simm16-split}($rA),$rB */
  865. {
  866. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  867. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  868. #define FLD(f) abuf->fields.sfmt_l_sw.f
  869. int UNUSED written = 0;
  870. IADDR UNUSED pc = abuf->addr;
  871. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  872. {
  873. SI tmp_addr;
  874. tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
  875. {
  876. UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
  877. SETMEMUQI (current_cpu, pc, tmp_addr, opval);
  878. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  879. }
  880. if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
  881. {
  882. BI opval = 0;
  883. CPU (h_atomic_reserve) = opval;
  884. written |= (1 << 4);
  885. CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
  886. }
  887. }
  888. }
  889. abuf->written = written;
  890. #undef FLD
  891. }
  892. NEXT (vpc);
  893. CASE (sem, INSN_L_SH) : /* l.sh ${simm16-split}($rA),$rB */
  894. {
  895. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  896. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  897. #define FLD(f) abuf->fields.sfmt_l_sw.f
  898. int UNUSED written = 0;
  899. IADDR UNUSED pc = abuf->addr;
  900. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  901. {
  902. SI tmp_addr;
  903. tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
  904. {
  905. UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
  906. SETMEMUHI (current_cpu, pc, tmp_addr, opval);
  907. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  908. }
  909. if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
  910. {
  911. BI opval = 0;
  912. CPU (h_atomic_reserve) = opval;
  913. written |= (1 << 4);
  914. CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
  915. }
  916. }
  917. }
  918. abuf->written = written;
  919. #undef FLD
  920. }
  921. NEXT (vpc);
  922. CASE (sem, INSN_L_SWA) : /* l.swa ${simm16-split}($rA),$rB */
  923. {
  924. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  925. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  926. #define FLD(f) abuf->fields.sfmt_l_sw.f
  927. int UNUSED written = 0;
  928. IADDR UNUSED pc = abuf->addr;
  929. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  930. {
  931. SI tmp_addr;
  932. BI tmp_flag;
  933. tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
  934. {
  935. USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
  936. SET_H_SYS_SR_F (opval);
  937. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  938. }
  939. if (GET_H_SYS_SR_F ()) {
  940. {
  941. USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
  942. SETMEMUSI (current_cpu, pc, tmp_addr, opval);
  943. written |= (1 << 7);
  944. CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
  945. }
  946. }
  947. {
  948. BI opval = 0;
  949. CPU (h_atomic_reserve) = opval;
  950. CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
  951. }
  952. }
  953. abuf->written = written;
  954. #undef FLD
  955. }
  956. NEXT (vpc);
  957. CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
  958. {
  959. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  960. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  961. #define FLD(f) abuf->fields.sfmt_l_sll.f
  962. int UNUSED written = 0;
  963. IADDR UNUSED pc = abuf->addr;
  964. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  965. {
  966. USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  967. SET_H_GPR (FLD (f_r1), opval);
  968. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  969. }
  970. #undef FLD
  971. }
  972. NEXT (vpc);
  973. CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
  974. {
  975. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  976. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  977. #define FLD(f) abuf->fields.sfmt_l_slli.f
  978. int UNUSED written = 0;
  979. IADDR UNUSED pc = abuf->addr;
  980. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  981. {
  982. USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
  983. SET_H_GPR (FLD (f_r1), opval);
  984. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  985. }
  986. #undef FLD
  987. }
  988. NEXT (vpc);
  989. CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
  990. {
  991. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  992. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  993. #define FLD(f) abuf->fields.sfmt_l_sll.f
  994. int UNUSED written = 0;
  995. IADDR UNUSED pc = abuf->addr;
  996. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  997. {
  998. USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  999. SET_H_GPR (FLD (f_r1), opval);
  1000. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1001. }
  1002. #undef FLD
  1003. }
  1004. NEXT (vpc);
  1005. CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
  1006. {
  1007. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1008. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1009. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1010. int UNUSED written = 0;
  1011. IADDR UNUSED pc = abuf->addr;
  1012. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1013. {
  1014. USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
  1015. SET_H_GPR (FLD (f_r1), opval);
  1016. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1017. }
  1018. #undef FLD
  1019. }
  1020. NEXT (vpc);
  1021. CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
  1022. {
  1023. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1024. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1025. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1026. int UNUSED written = 0;
  1027. IADDR UNUSED pc = abuf->addr;
  1028. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1029. {
  1030. USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1031. SET_H_GPR (FLD (f_r1), opval);
  1032. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1033. }
  1034. #undef FLD
  1035. }
  1036. NEXT (vpc);
  1037. CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
  1038. {
  1039. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1040. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1041. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1042. int UNUSED written = 0;
  1043. IADDR UNUSED pc = abuf->addr;
  1044. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1045. {
  1046. USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
  1047. SET_H_GPR (FLD (f_r1), opval);
  1048. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1049. }
  1050. #undef FLD
  1051. }
  1052. NEXT (vpc);
  1053. CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
  1054. {
  1055. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1056. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1057. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1058. int UNUSED written = 0;
  1059. IADDR UNUSED pc = abuf->addr;
  1060. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1061. {
  1062. USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1063. SET_H_GPR (FLD (f_r1), opval);
  1064. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1065. }
  1066. #undef FLD
  1067. }
  1068. NEXT (vpc);
  1069. CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
  1070. {
  1071. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1072. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1073. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1074. int UNUSED written = 0;
  1075. IADDR UNUSED pc = abuf->addr;
  1076. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1077. {
  1078. USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
  1079. SET_H_GPR (FLD (f_r1), opval);
  1080. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1081. }
  1082. #undef FLD
  1083. }
  1084. NEXT (vpc);
  1085. CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
  1086. {
  1087. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1088. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1089. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1090. int UNUSED written = 0;
  1091. IADDR UNUSED pc = abuf->addr;
  1092. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1093. {
  1094. USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1095. SET_H_GPR (FLD (f_r1), opval);
  1096. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1097. }
  1098. #undef FLD
  1099. }
  1100. NEXT (vpc);
  1101. CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
  1102. {
  1103. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1104. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1105. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1106. int UNUSED written = 0;
  1107. IADDR UNUSED pc = abuf->addr;
  1108. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1109. {
  1110. USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1111. SET_H_GPR (FLD (f_r1), opval);
  1112. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1113. }
  1114. #undef FLD
  1115. }
  1116. NEXT (vpc);
  1117. CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
  1118. {
  1119. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1120. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1121. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1122. int UNUSED written = 0;
  1123. IADDR UNUSED pc = abuf->addr;
  1124. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1125. {
  1126. USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1127. SET_H_GPR (FLD (f_r1), opval);
  1128. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1129. }
  1130. #undef FLD
  1131. }
  1132. NEXT (vpc);
  1133. CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
  1134. {
  1135. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1136. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1137. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1138. int UNUSED written = 0;
  1139. IADDR UNUSED pc = abuf->addr;
  1140. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1141. {
  1142. {
  1143. {
  1144. BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
  1145. SET_H_SYS_SR_CY (opval);
  1146. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1147. }
  1148. {
  1149. BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
  1150. SET_H_SYS_SR_OV (opval);
  1151. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1152. }
  1153. {
  1154. USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1155. SET_H_GPR (FLD (f_r1), opval);
  1156. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1157. }
  1158. }
  1159. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  1160. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1161. }
  1162. }
  1163. #undef FLD
  1164. }
  1165. NEXT (vpc);
  1166. CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
  1167. {
  1168. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1169. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1170. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1171. int UNUSED written = 0;
  1172. IADDR UNUSED pc = abuf->addr;
  1173. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1174. {
  1175. {
  1176. {
  1177. BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
  1178. SET_H_SYS_SR_CY (opval);
  1179. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1180. }
  1181. {
  1182. BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
  1183. SET_H_SYS_SR_OV (opval);
  1184. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1185. }
  1186. {
  1187. USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1188. SET_H_GPR (FLD (f_r1), opval);
  1189. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1190. }
  1191. }
  1192. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  1193. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1194. }
  1195. }
  1196. #undef FLD
  1197. }
  1198. NEXT (vpc);
  1199. CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
  1200. {
  1201. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1202. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1203. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1204. int UNUSED written = 0;
  1205. IADDR UNUSED pc = abuf->addr;
  1206. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1207. {
  1208. {
  1209. BI tmp_tmp_sys_sr_cy;
  1210. tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
  1211. {
  1212. BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
  1213. SET_H_SYS_SR_CY (opval);
  1214. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1215. }
  1216. {
  1217. BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
  1218. SET_H_SYS_SR_OV (opval);
  1219. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1220. }
  1221. {
  1222. USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
  1223. SET_H_GPR (FLD (f_r1), opval);
  1224. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1225. }
  1226. }
  1227. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  1228. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1229. }
  1230. }
  1231. #undef FLD
  1232. }
  1233. NEXT (vpc);
  1234. CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
  1235. {
  1236. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1237. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1238. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1239. int UNUSED written = 0;
  1240. IADDR UNUSED pc = abuf->addr;
  1241. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1242. {
  1243. {
  1244. {
  1245. BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1246. SET_H_SYS_SR_OV (opval);
  1247. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1248. }
  1249. {
  1250. USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1251. SET_H_GPR (FLD (f_r1), opval);
  1252. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1253. }
  1254. }
  1255. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  1256. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1257. }
  1258. }
  1259. #undef FLD
  1260. }
  1261. NEXT (vpc);
  1262. CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
  1263. {
  1264. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1265. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1266. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1267. int UNUSED written = 0;
  1268. IADDR UNUSED pc = abuf->addr;
  1269. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1270. {
  1271. DI tmp_result;
  1272. tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
  1273. {
  1274. SI opval = SUBWORDDISI (tmp_result, 0);
  1275. SET_H_MAC_MACHI (opval);
  1276. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  1277. }
  1278. {
  1279. SI opval = SUBWORDDISI (tmp_result, 1);
  1280. SET_H_MAC_MACLO (opval);
  1281. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  1282. }
  1283. }
  1284. #undef FLD
  1285. }
  1286. NEXT (vpc);
  1287. CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
  1288. {
  1289. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1290. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1291. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1292. int UNUSED written = 0;
  1293. IADDR UNUSED pc = abuf->addr;
  1294. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1295. {
  1296. {
  1297. {
  1298. BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1299. SET_H_SYS_SR_CY (opval);
  1300. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1301. }
  1302. {
  1303. USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1304. SET_H_GPR (FLD (f_r1), opval);
  1305. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1306. }
  1307. }
  1308. if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
  1309. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1310. }
  1311. }
  1312. #undef FLD
  1313. }
  1314. NEXT (vpc);
  1315. CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
  1316. {
  1317. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1318. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1319. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1320. int UNUSED written = 0;
  1321. IADDR UNUSED pc = abuf->addr;
  1322. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1323. {
  1324. DI tmp_result;
  1325. tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
  1326. {
  1327. SI opval = SUBWORDDISI (tmp_result, 0);
  1328. SET_H_MAC_MACHI (opval);
  1329. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  1330. }
  1331. {
  1332. SI opval = SUBWORDDISI (tmp_result, 1);
  1333. SET_H_MAC_MACLO (opval);
  1334. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  1335. }
  1336. }
  1337. #undef FLD
  1338. }
  1339. NEXT (vpc);
  1340. CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
  1341. {
  1342. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1343. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1344. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1345. int UNUSED written = 0;
  1346. IADDR UNUSED pc = abuf->addr;
  1347. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1348. if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
  1349. {
  1350. {
  1351. BI opval = 0;
  1352. SET_H_SYS_SR_OV (opval);
  1353. written |= (1 << 5);
  1354. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1355. }
  1356. {
  1357. SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1358. SET_H_GPR (FLD (f_r1), opval);
  1359. written |= (1 << 4);
  1360. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1361. }
  1362. }
  1363. } else {
  1364. {
  1365. {
  1366. BI opval = 1;
  1367. SET_H_SYS_SR_OV (opval);
  1368. written |= (1 << 5);
  1369. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1370. }
  1371. if (GET_H_SYS_SR_OVE ()) {
  1372. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1373. }
  1374. }
  1375. }
  1376. abuf->written = written;
  1377. #undef FLD
  1378. }
  1379. NEXT (vpc);
  1380. CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
  1381. {
  1382. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1383. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1384. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1385. int UNUSED written = 0;
  1386. IADDR UNUSED pc = abuf->addr;
  1387. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1388. if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
  1389. {
  1390. {
  1391. BI opval = 0;
  1392. SET_H_SYS_SR_CY (opval);
  1393. written |= (1 << 5);
  1394. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1395. }
  1396. {
  1397. USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1398. SET_H_GPR (FLD (f_r1), opval);
  1399. written |= (1 << 4);
  1400. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1401. }
  1402. }
  1403. } else {
  1404. {
  1405. {
  1406. BI opval = 1;
  1407. SET_H_SYS_SR_CY (opval);
  1408. written |= (1 << 5);
  1409. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1410. }
  1411. if (GET_H_SYS_SR_OVE ()) {
  1412. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1413. }
  1414. }
  1415. }
  1416. abuf->written = written;
  1417. #undef FLD
  1418. }
  1419. NEXT (vpc);
  1420. CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
  1421. {
  1422. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1423. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1424. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1425. int UNUSED written = 0;
  1426. IADDR UNUSED pc = abuf->addr;
  1427. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1428. {
  1429. USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
  1430. SET_H_GPR (FLD (f_r1), opval);
  1431. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1432. }
  1433. #undef FLD
  1434. }
  1435. NEXT (vpc);
  1436. CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
  1437. {
  1438. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1439. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1440. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1441. int UNUSED written = 0;
  1442. IADDR UNUSED pc = abuf->addr;
  1443. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1444. {
  1445. USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
  1446. SET_H_GPR (FLD (f_r1), opval);
  1447. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1448. }
  1449. #undef FLD
  1450. }
  1451. NEXT (vpc);
  1452. CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
  1453. {
  1454. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1455. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1456. #define FLD(f) abuf->fields.sfmt_l_mfspr.f
  1457. int UNUSED written = 0;
  1458. IADDR UNUSED pc = abuf->addr;
  1459. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1460. {
  1461. USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
  1462. SET_H_GPR (FLD (f_r1), opval);
  1463. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1464. }
  1465. #undef FLD
  1466. }
  1467. NEXT (vpc);
  1468. CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
  1469. {
  1470. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1471. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1472. #define FLD(f) abuf->fields.sfmt_l_mfspr.f
  1473. int UNUSED written = 0;
  1474. IADDR UNUSED pc = abuf->addr;
  1475. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1476. {
  1477. USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
  1478. SET_H_GPR (FLD (f_r1), opval);
  1479. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1480. }
  1481. #undef FLD
  1482. }
  1483. NEXT (vpc);
  1484. CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
  1485. {
  1486. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1487. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1488. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1489. int UNUSED written = 0;
  1490. IADDR UNUSED pc = abuf->addr;
  1491. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1492. {
  1493. USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1494. SET_H_GPR (FLD (f_r1), opval);
  1495. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1496. }
  1497. #undef FLD
  1498. }
  1499. NEXT (vpc);
  1500. CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
  1501. {
  1502. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1503. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1504. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1505. int UNUSED written = 0;
  1506. IADDR UNUSED pc = abuf->addr;
  1507. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1508. {
  1509. {
  1510. {
  1511. BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
  1512. SET_H_SYS_SR_CY (opval);
  1513. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1514. }
  1515. {
  1516. BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
  1517. SET_H_SYS_SR_OV (opval);
  1518. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1519. }
  1520. {
  1521. USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1522. SET_H_GPR (FLD (f_r1), opval);
  1523. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1524. }
  1525. }
  1526. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  1527. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1528. }
  1529. }
  1530. #undef FLD
  1531. }
  1532. NEXT (vpc);
  1533. CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
  1534. {
  1535. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1536. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1537. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1538. int UNUSED written = 0;
  1539. IADDR UNUSED pc = abuf->addr;
  1540. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1541. {
  1542. {
  1543. BI tmp_tmp_sys_sr_cy;
  1544. tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
  1545. {
  1546. BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
  1547. SET_H_SYS_SR_CY (opval);
  1548. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  1549. }
  1550. {
  1551. BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
  1552. SET_H_SYS_SR_OV (opval);
  1553. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1554. }
  1555. {
  1556. SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
  1557. SET_H_GPR (FLD (f_r1), opval);
  1558. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1559. }
  1560. }
  1561. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  1562. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1563. }
  1564. }
  1565. #undef FLD
  1566. }
  1567. NEXT (vpc);
  1568. CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
  1569. {
  1570. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1571. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1572. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1573. int UNUSED written = 0;
  1574. IADDR UNUSED pc = abuf->addr;
  1575. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1576. {
  1577. {
  1578. {
  1579. USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1580. SET_H_SYS_SR_OV (opval);
  1581. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  1582. }
  1583. {
  1584. USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1585. SET_H_GPR (FLD (f_r1), opval);
  1586. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1587. }
  1588. }
  1589. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  1590. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  1591. }
  1592. }
  1593. #undef FLD
  1594. }
  1595. NEXT (vpc);
  1596. CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
  1597. {
  1598. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1599. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1600. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1601. int UNUSED written = 0;
  1602. IADDR UNUSED pc = abuf->addr;
  1603. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1604. {
  1605. USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
  1606. SET_H_GPR (FLD (f_r1), opval);
  1607. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1608. }
  1609. #undef FLD
  1610. }
  1611. NEXT (vpc);
  1612. CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
  1613. {
  1614. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1615. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1616. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1617. int UNUSED written = 0;
  1618. IADDR UNUSED pc = abuf->addr;
  1619. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1620. {
  1621. USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
  1622. SET_H_GPR (FLD (f_r1), opval);
  1623. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1624. }
  1625. #undef FLD
  1626. }
  1627. NEXT (vpc);
  1628. CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
  1629. {
  1630. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1631. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1632. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1633. int UNUSED written = 0;
  1634. IADDR UNUSED pc = abuf->addr;
  1635. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1636. {
  1637. USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
  1638. SET_H_GPR (FLD (f_r1), opval);
  1639. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1640. }
  1641. #undef FLD
  1642. }
  1643. NEXT (vpc);
  1644. CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
  1645. {
  1646. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1647. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1648. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1649. int UNUSED written = 0;
  1650. IADDR UNUSED pc = abuf->addr;
  1651. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1652. {
  1653. USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
  1654. SET_H_GPR (FLD (f_r1), opval);
  1655. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1656. }
  1657. #undef FLD
  1658. }
  1659. NEXT (vpc);
  1660. CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
  1661. {
  1662. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1663. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1664. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1665. int UNUSED written = 0;
  1666. IADDR UNUSED pc = abuf->addr;
  1667. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1668. {
  1669. USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
  1670. SET_H_GPR (FLD (f_r1), opval);
  1671. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1672. }
  1673. #undef FLD
  1674. }
  1675. NEXT (vpc);
  1676. CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
  1677. {
  1678. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1679. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1680. #define FLD(f) abuf->fields.sfmt_l_slli.f
  1681. int UNUSED written = 0;
  1682. IADDR UNUSED pc = abuf->addr;
  1683. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1684. {
  1685. USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
  1686. SET_H_GPR (FLD (f_r1), opval);
  1687. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1688. }
  1689. #undef FLD
  1690. }
  1691. NEXT (vpc);
  1692. CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
  1693. {
  1694. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1695. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1696. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1697. int UNUSED written = 0;
  1698. IADDR UNUSED pc = abuf->addr;
  1699. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1700. if (GET_H_SYS_SR_F ()) {
  1701. {
  1702. USI opval = GET_H_GPR (FLD (f_r2));
  1703. SET_H_GPR (FLD (f_r1), opval);
  1704. written |= (1 << 3);
  1705. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1706. }
  1707. } else {
  1708. {
  1709. USI opval = GET_H_GPR (FLD (f_r3));
  1710. SET_H_GPR (FLD (f_r1), opval);
  1711. written |= (1 << 3);
  1712. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  1713. }
  1714. }
  1715. abuf->written = written;
  1716. #undef FLD
  1717. }
  1718. NEXT (vpc);
  1719. CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
  1720. {
  1721. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1722. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1723. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1724. int UNUSED written = 0;
  1725. IADDR UNUSED pc = abuf->addr;
  1726. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1727. {
  1728. USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1729. SET_H_SYS_SR_F (opval);
  1730. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1731. }
  1732. #undef FLD
  1733. }
  1734. NEXT (vpc);
  1735. CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
  1736. {
  1737. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1738. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1739. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1740. int UNUSED written = 0;
  1741. IADDR UNUSED pc = abuf->addr;
  1742. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1743. {
  1744. USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1745. SET_H_SYS_SR_F (opval);
  1746. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1747. }
  1748. #undef FLD
  1749. }
  1750. NEXT (vpc);
  1751. CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
  1752. {
  1753. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1754. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1755. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1756. int UNUSED written = 0;
  1757. IADDR UNUSED pc = abuf->addr;
  1758. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1759. {
  1760. USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1761. SET_H_SYS_SR_F (opval);
  1762. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1763. }
  1764. #undef FLD
  1765. }
  1766. NEXT (vpc);
  1767. CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
  1768. {
  1769. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1770. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1771. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1772. int UNUSED written = 0;
  1773. IADDR UNUSED pc = abuf->addr;
  1774. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1775. {
  1776. USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1777. SET_H_SYS_SR_F (opval);
  1778. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1779. }
  1780. #undef FLD
  1781. }
  1782. NEXT (vpc);
  1783. CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
  1784. {
  1785. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1786. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1787. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1788. int UNUSED written = 0;
  1789. IADDR UNUSED pc = abuf->addr;
  1790. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1791. {
  1792. USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1793. SET_H_SYS_SR_F (opval);
  1794. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1795. }
  1796. #undef FLD
  1797. }
  1798. NEXT (vpc);
  1799. CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
  1800. {
  1801. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1802. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1803. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1804. int UNUSED written = 0;
  1805. IADDR UNUSED pc = abuf->addr;
  1806. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1807. {
  1808. USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1809. SET_H_SYS_SR_F (opval);
  1810. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1811. }
  1812. #undef FLD
  1813. }
  1814. NEXT (vpc);
  1815. CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
  1816. {
  1817. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1818. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1819. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1820. int UNUSED written = 0;
  1821. IADDR UNUSED pc = abuf->addr;
  1822. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1823. {
  1824. USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1825. SET_H_SYS_SR_F (opval);
  1826. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1827. }
  1828. #undef FLD
  1829. }
  1830. NEXT (vpc);
  1831. CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
  1832. {
  1833. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1834. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1835. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1836. int UNUSED written = 0;
  1837. IADDR UNUSED pc = abuf->addr;
  1838. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1839. {
  1840. USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1841. SET_H_SYS_SR_F (opval);
  1842. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1843. }
  1844. #undef FLD
  1845. }
  1846. NEXT (vpc);
  1847. CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
  1848. {
  1849. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1850. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1851. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1852. int UNUSED written = 0;
  1853. IADDR UNUSED pc = abuf->addr;
  1854. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1855. {
  1856. USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1857. SET_H_SYS_SR_F (opval);
  1858. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1859. }
  1860. #undef FLD
  1861. }
  1862. NEXT (vpc);
  1863. CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
  1864. {
  1865. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1866. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1867. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1868. int UNUSED written = 0;
  1869. IADDR UNUSED pc = abuf->addr;
  1870. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1871. {
  1872. USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1873. SET_H_SYS_SR_F (opval);
  1874. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1875. }
  1876. #undef FLD
  1877. }
  1878. NEXT (vpc);
  1879. CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
  1880. {
  1881. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1882. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1883. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1884. int UNUSED written = 0;
  1885. IADDR UNUSED pc = abuf->addr;
  1886. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1887. {
  1888. USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1889. SET_H_SYS_SR_F (opval);
  1890. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1891. }
  1892. #undef FLD
  1893. }
  1894. NEXT (vpc);
  1895. CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
  1896. {
  1897. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1898. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1899. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1900. int UNUSED written = 0;
  1901. IADDR UNUSED pc = abuf->addr;
  1902. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1903. {
  1904. USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1905. SET_H_SYS_SR_F (opval);
  1906. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1907. }
  1908. #undef FLD
  1909. }
  1910. NEXT (vpc);
  1911. CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
  1912. {
  1913. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1914. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1915. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1916. int UNUSED written = 0;
  1917. IADDR UNUSED pc = abuf->addr;
  1918. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1919. {
  1920. USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1921. SET_H_SYS_SR_F (opval);
  1922. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1923. }
  1924. #undef FLD
  1925. }
  1926. NEXT (vpc);
  1927. CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
  1928. {
  1929. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1930. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1931. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1932. int UNUSED written = 0;
  1933. IADDR UNUSED pc = abuf->addr;
  1934. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1935. {
  1936. USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1937. SET_H_SYS_SR_F (opval);
  1938. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1939. }
  1940. #undef FLD
  1941. }
  1942. NEXT (vpc);
  1943. CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
  1944. {
  1945. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1946. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1947. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1948. int UNUSED written = 0;
  1949. IADDR UNUSED pc = abuf->addr;
  1950. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1951. {
  1952. USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1953. SET_H_SYS_SR_F (opval);
  1954. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1955. }
  1956. #undef FLD
  1957. }
  1958. NEXT (vpc);
  1959. CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
  1960. {
  1961. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1962. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1963. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1964. int UNUSED written = 0;
  1965. IADDR UNUSED pc = abuf->addr;
  1966. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1967. {
  1968. USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  1969. SET_H_SYS_SR_F (opval);
  1970. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1971. }
  1972. #undef FLD
  1973. }
  1974. NEXT (vpc);
  1975. CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
  1976. {
  1977. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1978. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1979. #define FLD(f) abuf->fields.sfmt_l_sll.f
  1980. int UNUSED written = 0;
  1981. IADDR UNUSED pc = abuf->addr;
  1982. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1983. {
  1984. USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  1985. SET_H_SYS_SR_F (opval);
  1986. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  1987. }
  1988. #undef FLD
  1989. }
  1990. NEXT (vpc);
  1991. CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
  1992. {
  1993. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  1994. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  1995. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  1996. int UNUSED written = 0;
  1997. IADDR UNUSED pc = abuf->addr;
  1998. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  1999. {
  2000. USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  2001. SET_H_SYS_SR_F (opval);
  2002. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2003. }
  2004. #undef FLD
  2005. }
  2006. NEXT (vpc);
  2007. CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
  2008. {
  2009. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2010. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2011. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2012. int UNUSED written = 0;
  2013. IADDR UNUSED pc = abuf->addr;
  2014. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2015. {
  2016. USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
  2017. SET_H_SYS_SR_F (opval);
  2018. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2019. }
  2020. #undef FLD
  2021. }
  2022. NEXT (vpc);
  2023. CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
  2024. {
  2025. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2026. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2027. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  2028. int UNUSED written = 0;
  2029. IADDR UNUSED pc = abuf->addr;
  2030. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2031. {
  2032. USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
  2033. SET_H_SYS_SR_F (opval);
  2034. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2035. }
  2036. #undef FLD
  2037. }
  2038. NEXT (vpc);
  2039. CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
  2040. {
  2041. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2042. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2043. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2044. int UNUSED written = 0;
  2045. IADDR UNUSED pc = abuf->addr;
  2046. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2047. {
  2048. {
  2049. DI tmp_prod;
  2050. DI tmp_mac;
  2051. DI tmp_result;
  2052. tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
  2053. tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
  2054. tmp_result = ADDDI (tmp_prod, tmp_mac);
  2055. {
  2056. SI opval = SUBWORDDISI (tmp_result, 0);
  2057. SET_H_MAC_MACHI (opval);
  2058. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  2059. }
  2060. {
  2061. SI opval = SUBWORDDISI (tmp_result, 1);
  2062. SET_H_MAC_MACLO (opval);
  2063. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  2064. }
  2065. {
  2066. BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
  2067. SET_H_SYS_SR_OV (opval);
  2068. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  2069. }
  2070. }
  2071. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  2072. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  2073. }
  2074. }
  2075. #undef FLD
  2076. }
  2077. NEXT (vpc);
  2078. CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
  2079. {
  2080. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2081. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2082. #define FLD(f) abuf->fields.sfmt_l_lwz.f
  2083. int UNUSED written = 0;
  2084. IADDR UNUSED pc = abuf->addr;
  2085. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2086. {
  2087. {
  2088. DI tmp_prod;
  2089. DI tmp_mac;
  2090. DI tmp_result;
  2091. tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
  2092. tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
  2093. tmp_result = ADDDI (tmp_mac, tmp_prod);
  2094. {
  2095. SI opval = SUBWORDDISI (tmp_result, 0);
  2096. SET_H_MAC_MACHI (opval);
  2097. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  2098. }
  2099. {
  2100. SI opval = SUBWORDDISI (tmp_result, 1);
  2101. SET_H_MAC_MACLO (opval);
  2102. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  2103. }
  2104. {
  2105. BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
  2106. SET_H_SYS_SR_OV (opval);
  2107. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  2108. }
  2109. }
  2110. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  2111. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  2112. }
  2113. }
  2114. #undef FLD
  2115. }
  2116. NEXT (vpc);
  2117. CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
  2118. {
  2119. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2120. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2121. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2122. int UNUSED written = 0;
  2123. IADDR UNUSED pc = abuf->addr;
  2124. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2125. {
  2126. {
  2127. DI tmp_prod;
  2128. DI tmp_mac;
  2129. DI tmp_result;
  2130. tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
  2131. tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
  2132. tmp_result = ADDDI (tmp_prod, tmp_mac);
  2133. {
  2134. SI opval = SUBWORDDISI (tmp_result, 0);
  2135. SET_H_MAC_MACHI (opval);
  2136. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  2137. }
  2138. {
  2139. SI opval = SUBWORDDISI (tmp_result, 1);
  2140. SET_H_MAC_MACLO (opval);
  2141. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  2142. }
  2143. {
  2144. BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
  2145. SET_H_SYS_SR_CY (opval);
  2146. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  2147. }
  2148. }
  2149. if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
  2150. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  2151. }
  2152. }
  2153. #undef FLD
  2154. }
  2155. NEXT (vpc);
  2156. CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
  2157. {
  2158. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2159. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2160. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2161. int UNUSED written = 0;
  2162. IADDR UNUSED pc = abuf->addr;
  2163. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2164. {
  2165. {
  2166. DI tmp_prod;
  2167. DI tmp_mac;
  2168. DI tmp_result;
  2169. tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
  2170. tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
  2171. tmp_result = SUBDI (tmp_mac, tmp_prod);
  2172. {
  2173. SI opval = SUBWORDDISI (tmp_result, 0);
  2174. SET_H_MAC_MACHI (opval);
  2175. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  2176. }
  2177. {
  2178. SI opval = SUBWORDDISI (tmp_result, 1);
  2179. SET_H_MAC_MACLO (opval);
  2180. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  2181. }
  2182. {
  2183. BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
  2184. SET_H_SYS_SR_OV (opval);
  2185. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
  2186. }
  2187. }
  2188. if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
  2189. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  2190. }
  2191. }
  2192. #undef FLD
  2193. }
  2194. NEXT (vpc);
  2195. CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
  2196. {
  2197. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2198. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2199. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2200. int UNUSED written = 0;
  2201. IADDR UNUSED pc = abuf->addr;
  2202. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2203. {
  2204. {
  2205. DI tmp_prod;
  2206. DI tmp_mac;
  2207. DI tmp_result;
  2208. tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
  2209. tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
  2210. tmp_result = SUBDI (tmp_mac, tmp_prod);
  2211. {
  2212. SI opval = SUBWORDDISI (tmp_result, 0);
  2213. SET_H_MAC_MACHI (opval);
  2214. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
  2215. }
  2216. {
  2217. SI opval = SUBWORDDISI (tmp_result, 1);
  2218. SET_H_MAC_MACLO (opval);
  2219. CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
  2220. }
  2221. {
  2222. BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
  2223. SET_H_SYS_SR_CY (opval);
  2224. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
  2225. }
  2226. }
  2227. if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
  2228. or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
  2229. }
  2230. }
  2231. #undef FLD
  2232. }
  2233. NEXT (vpc);
  2234. CASE (sem, INSN_L_CUST1) : /* l.cust1 */
  2235. {
  2236. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2237. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2238. #define FLD(f) abuf->fields.sfmt_empty.f
  2239. int UNUSED written = 0;
  2240. IADDR UNUSED pc = abuf->addr;
  2241. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2242. ((void) 0); /*nop*/
  2243. #undef FLD
  2244. }
  2245. NEXT (vpc);
  2246. CASE (sem, INSN_L_CUST2) : /* l.cust2 */
  2247. {
  2248. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2249. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2250. #define FLD(f) abuf->fields.sfmt_empty.f
  2251. int UNUSED written = 0;
  2252. IADDR UNUSED pc = abuf->addr;
  2253. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2254. ((void) 0); /*nop*/
  2255. #undef FLD
  2256. }
  2257. NEXT (vpc);
  2258. CASE (sem, INSN_L_CUST3) : /* l.cust3 */
  2259. {
  2260. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2261. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2262. #define FLD(f) abuf->fields.sfmt_empty.f
  2263. int UNUSED written = 0;
  2264. IADDR UNUSED pc = abuf->addr;
  2265. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2266. ((void) 0); /*nop*/
  2267. #undef FLD
  2268. }
  2269. NEXT (vpc);
  2270. CASE (sem, INSN_L_CUST4) : /* l.cust4 */
  2271. {
  2272. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2273. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2274. #define FLD(f) abuf->fields.sfmt_empty.f
  2275. int UNUSED written = 0;
  2276. IADDR UNUSED pc = abuf->addr;
  2277. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2278. ((void) 0); /*nop*/
  2279. #undef FLD
  2280. }
  2281. NEXT (vpc);
  2282. CASE (sem, INSN_L_CUST5) : /* l.cust5 */
  2283. {
  2284. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2285. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2286. #define FLD(f) abuf->fields.sfmt_empty.f
  2287. int UNUSED written = 0;
  2288. IADDR UNUSED pc = abuf->addr;
  2289. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2290. ((void) 0); /*nop*/
  2291. #undef FLD
  2292. }
  2293. NEXT (vpc);
  2294. CASE (sem, INSN_L_CUST6) : /* l.cust6 */
  2295. {
  2296. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2297. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2298. #define FLD(f) abuf->fields.sfmt_empty.f
  2299. int UNUSED written = 0;
  2300. IADDR UNUSED pc = abuf->addr;
  2301. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2302. ((void) 0); /*nop*/
  2303. #undef FLD
  2304. }
  2305. NEXT (vpc);
  2306. CASE (sem, INSN_L_CUST7) : /* l.cust7 */
  2307. {
  2308. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2309. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2310. #define FLD(f) abuf->fields.sfmt_empty.f
  2311. int UNUSED written = 0;
  2312. IADDR UNUSED pc = abuf->addr;
  2313. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2314. ((void) 0); /*nop*/
  2315. #undef FLD
  2316. }
  2317. NEXT (vpc);
  2318. CASE (sem, INSN_L_CUST8) : /* l.cust8 */
  2319. {
  2320. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2321. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2322. #define FLD(f) abuf->fields.sfmt_empty.f
  2323. int UNUSED written = 0;
  2324. IADDR UNUSED pc = abuf->addr;
  2325. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2326. ((void) 0); /*nop*/
  2327. #undef FLD
  2328. }
  2329. NEXT (vpc);
  2330. CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
  2331. {
  2332. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2333. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2334. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2335. int UNUSED written = 0;
  2336. IADDR UNUSED pc = abuf->addr;
  2337. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2338. {
  2339. SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2340. SET_H_FSR (FLD (f_r1), opval);
  2341. CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
  2342. }
  2343. #undef FLD
  2344. }
  2345. NEXT (vpc);
  2346. CASE (sem, INSN_LF_ADD_D32) : /* lf.add.d $rDD32F,$rAD32F,$rBD32F */
  2347. {
  2348. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2349. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2350. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2351. int UNUSED written = 0;
  2352. IADDR UNUSED pc = abuf->addr;
  2353. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2354. {
  2355. DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2356. SET_H_FD32R (FLD (f_rdd32), opval);
  2357. CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
  2358. }
  2359. #undef FLD
  2360. }
  2361. NEXT (vpc);
  2362. CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
  2363. {
  2364. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2365. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2366. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2367. int UNUSED written = 0;
  2368. IADDR UNUSED pc = abuf->addr;
  2369. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2370. {
  2371. SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2372. SET_H_FSR (FLD (f_r1), opval);
  2373. CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
  2374. }
  2375. #undef FLD
  2376. }
  2377. NEXT (vpc);
  2378. CASE (sem, INSN_LF_SUB_D32) : /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */
  2379. {
  2380. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2381. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2382. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2383. int UNUSED written = 0;
  2384. IADDR UNUSED pc = abuf->addr;
  2385. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2386. {
  2387. DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2388. SET_H_FD32R (FLD (f_rdd32), opval);
  2389. CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
  2390. }
  2391. #undef FLD
  2392. }
  2393. NEXT (vpc);
  2394. CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
  2395. {
  2396. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2397. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2398. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2399. int UNUSED written = 0;
  2400. IADDR UNUSED pc = abuf->addr;
  2401. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2402. {
  2403. SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2404. SET_H_FSR (FLD (f_r1), opval);
  2405. CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
  2406. }
  2407. #undef FLD
  2408. }
  2409. NEXT (vpc);
  2410. CASE (sem, INSN_LF_MUL_D32) : /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */
  2411. {
  2412. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2413. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2414. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2415. int UNUSED written = 0;
  2416. IADDR UNUSED pc = abuf->addr;
  2417. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2418. {
  2419. DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2420. SET_H_FD32R (FLD (f_rdd32), opval);
  2421. CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
  2422. }
  2423. #undef FLD
  2424. }
  2425. NEXT (vpc);
  2426. CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
  2427. {
  2428. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2429. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2430. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2431. int UNUSED written = 0;
  2432. IADDR UNUSED pc = abuf->addr;
  2433. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2434. {
  2435. SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2436. SET_H_FSR (FLD (f_r1), opval);
  2437. CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
  2438. }
  2439. #undef FLD
  2440. }
  2441. NEXT (vpc);
  2442. CASE (sem, INSN_LF_DIV_D32) : /* lf.div.d $rDD32F,$rAD32F,$rBD32F */
  2443. {
  2444. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2445. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2446. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2447. int UNUSED written = 0;
  2448. IADDR UNUSED pc = abuf->addr;
  2449. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2450. {
  2451. DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2452. SET_H_FD32R (FLD (f_rdd32), opval);
  2453. CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
  2454. }
  2455. #undef FLD
  2456. }
  2457. NEXT (vpc);
  2458. CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
  2459. {
  2460. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2461. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2462. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2463. int UNUSED written = 0;
  2464. IADDR UNUSED pc = abuf->addr;
  2465. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2466. {
  2467. SF opval = CGEN_CPU_FPU (current_cpu)->ops->remsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2468. SET_H_FSR (FLD (f_r1), opval);
  2469. CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
  2470. }
  2471. #undef FLD
  2472. }
  2473. NEXT (vpc);
  2474. CASE (sem, INSN_LF_REM_D32) : /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */
  2475. {
  2476. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2477. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2478. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2479. int UNUSED written = 0;
  2480. IADDR UNUSED pc = abuf->addr;
  2481. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2482. {
  2483. DF opval = CGEN_CPU_FPU (current_cpu)->ops->remdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2484. SET_H_FD32R (FLD (f_rdd32), opval);
  2485. CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
  2486. }
  2487. #undef FLD
  2488. }
  2489. NEXT (vpc);
  2490. CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
  2491. {
  2492. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2493. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2494. #define FLD(f) abuf->fields.sfmt_l_slli.f
  2495. int UNUSED written = 0;
  2496. IADDR UNUSED pc = abuf->addr;
  2497. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2498. {
  2499. SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), TRUNCSISI (GET_H_GPR (FLD (f_r2))));
  2500. SET_H_FSR (FLD (f_r1), opval);
  2501. CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
  2502. }
  2503. #undef FLD
  2504. }
  2505. NEXT (vpc);
  2506. CASE (sem, INSN_LF_ITOF_D32) : /* lf.itof.d $rDD32F,$rADI */
  2507. {
  2508. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2509. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2510. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2511. int UNUSED written = 0;
  2512. IADDR UNUSED pc = abuf->addr;
  2513. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2514. {
  2515. DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatdidf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_I64R (FLD (f_rad32)));
  2516. SET_H_FD32R (FLD (f_rdd32), opval);
  2517. CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
  2518. }
  2519. #undef FLD
  2520. }
  2521. NEXT (vpc);
  2522. CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
  2523. {
  2524. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2525. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2526. #define FLD(f) abuf->fields.sfmt_l_slli.f
  2527. int UNUSED written = 0;
  2528. IADDR UNUSED pc = abuf->addr;
  2529. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2530. {
  2531. SI opval = EXTSISI (CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FSR (FLD (f_r2))));
  2532. SET_H_GPR (FLD (f_r1), opval);
  2533. CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
  2534. }
  2535. #undef FLD
  2536. }
  2537. NEXT (vpc);
  2538. CASE (sem, INSN_LF_FTOI_D32) : /* lf.ftoi.d $rDDI,$rAD32F */
  2539. {
  2540. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2541. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2542. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2543. int UNUSED written = 0;
  2544. IADDR UNUSED pc = abuf->addr;
  2545. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2546. {
  2547. DI opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfdi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FD32R (FLD (f_rad32)));
  2548. SET_H_I64R (FLD (f_rdd32), opval);
  2549. CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
  2550. }
  2551. #undef FLD
  2552. }
  2553. NEXT (vpc);
  2554. CASE (sem, INSN_LF_SFEQ_S) : /* lf.sfeq.s $rASF,$rBSF */
  2555. {
  2556. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2557. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2558. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2559. int UNUSED written = 0;
  2560. IADDR UNUSED pc = abuf->addr;
  2561. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2562. {
  2563. BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2564. SET_H_SYS_SR_F (opval);
  2565. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2566. }
  2567. #undef FLD
  2568. }
  2569. NEXT (vpc);
  2570. CASE (sem, INSN_LF_SFEQ_D32) : /* lf.sfeq.d $rAD32F,$rBD32F */
  2571. {
  2572. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2573. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2574. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2575. int UNUSED written = 0;
  2576. IADDR UNUSED pc = abuf->addr;
  2577. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2578. {
  2579. BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2580. SET_H_SYS_SR_F (opval);
  2581. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2582. }
  2583. #undef FLD
  2584. }
  2585. NEXT (vpc);
  2586. CASE (sem, INSN_LF_SFNE_S) : /* lf.sfne.s $rASF,$rBSF */
  2587. {
  2588. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2589. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2590. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2591. int UNUSED written = 0;
  2592. IADDR UNUSED pc = abuf->addr;
  2593. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2594. {
  2595. BI opval = CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2596. SET_H_SYS_SR_F (opval);
  2597. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2598. }
  2599. #undef FLD
  2600. }
  2601. NEXT (vpc);
  2602. CASE (sem, INSN_LF_SFNE_D32) : /* lf.sfne.d $rAD32F,$rBD32F */
  2603. {
  2604. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2605. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2606. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2607. int UNUSED written = 0;
  2608. IADDR UNUSED pc = abuf->addr;
  2609. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2610. {
  2611. BI opval = CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2612. SET_H_SYS_SR_F (opval);
  2613. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2614. }
  2615. #undef FLD
  2616. }
  2617. NEXT (vpc);
  2618. CASE (sem, INSN_LF_SFGE_S) : /* lf.sfge.s $rASF,$rBSF */
  2619. {
  2620. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2621. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2622. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2623. int UNUSED written = 0;
  2624. IADDR UNUSED pc = abuf->addr;
  2625. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2626. {
  2627. BI opval = CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2628. SET_H_SYS_SR_F (opval);
  2629. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2630. }
  2631. #undef FLD
  2632. }
  2633. NEXT (vpc);
  2634. CASE (sem, INSN_LF_SFGE_D32) : /* lf.sfge.d $rAD32F,$rBD32F */
  2635. {
  2636. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2637. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2638. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2639. int UNUSED written = 0;
  2640. IADDR UNUSED pc = abuf->addr;
  2641. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2642. {
  2643. BI opval = CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2644. SET_H_SYS_SR_F (opval);
  2645. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2646. }
  2647. #undef FLD
  2648. }
  2649. NEXT (vpc);
  2650. CASE (sem, INSN_LF_SFGT_S) : /* lf.sfgt.s $rASF,$rBSF */
  2651. {
  2652. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2653. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2654. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2655. int UNUSED written = 0;
  2656. IADDR UNUSED pc = abuf->addr;
  2657. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2658. {
  2659. BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2660. SET_H_SYS_SR_F (opval);
  2661. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2662. }
  2663. #undef FLD
  2664. }
  2665. NEXT (vpc);
  2666. CASE (sem, INSN_LF_SFGT_D32) : /* lf.sfgt.d $rAD32F,$rBD32F */
  2667. {
  2668. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2669. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2670. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2671. int UNUSED written = 0;
  2672. IADDR UNUSED pc = abuf->addr;
  2673. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2674. {
  2675. BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2676. SET_H_SYS_SR_F (opval);
  2677. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2678. }
  2679. #undef FLD
  2680. }
  2681. NEXT (vpc);
  2682. CASE (sem, INSN_LF_SFLT_S) : /* lf.sflt.s $rASF,$rBSF */
  2683. {
  2684. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2685. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2686. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2687. int UNUSED written = 0;
  2688. IADDR UNUSED pc = abuf->addr;
  2689. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2690. {
  2691. BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2692. SET_H_SYS_SR_F (opval);
  2693. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2694. }
  2695. #undef FLD
  2696. }
  2697. NEXT (vpc);
  2698. CASE (sem, INSN_LF_SFLT_D32) : /* lf.sflt.d $rAD32F,$rBD32F */
  2699. {
  2700. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2701. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2702. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2703. int UNUSED written = 0;
  2704. IADDR UNUSED pc = abuf->addr;
  2705. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2706. {
  2707. BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2708. SET_H_SYS_SR_F (opval);
  2709. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2710. }
  2711. #undef FLD
  2712. }
  2713. NEXT (vpc);
  2714. CASE (sem, INSN_LF_SFLE_S) : /* lf.sfle.s $rASF,$rBSF */
  2715. {
  2716. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2717. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2718. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2719. int UNUSED written = 0;
  2720. IADDR UNUSED pc = abuf->addr;
  2721. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2722. {
  2723. BI opval = CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2724. SET_H_SYS_SR_F (opval);
  2725. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2726. }
  2727. #undef FLD
  2728. }
  2729. NEXT (vpc);
  2730. CASE (sem, INSN_LF_SFLE_D32) : /* lf.sfle.d $rAD32F,$rBD32F */
  2731. {
  2732. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2733. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2734. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2735. int UNUSED written = 0;
  2736. IADDR UNUSED pc = abuf->addr;
  2737. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2738. {
  2739. BI opval = CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2740. SET_H_SYS_SR_F (opval);
  2741. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2742. }
  2743. #undef FLD
  2744. }
  2745. NEXT (vpc);
  2746. CASE (sem, INSN_LF_SFUEQ_S) : /* lf.sfueq.s $rASF,$rBSF */
  2747. {
  2748. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2749. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2750. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2751. int UNUSED written = 0;
  2752. IADDR UNUSED pc = abuf->addr;
  2753. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2754. {
  2755. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
  2756. SET_H_SYS_SR_F (opval);
  2757. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2758. }
  2759. #undef FLD
  2760. }
  2761. NEXT (vpc);
  2762. CASE (sem, INSN_LF_SFUEQ_D32) : /* lf.sfueq.d $rAD32F,$rBD32F */
  2763. {
  2764. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2765. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2766. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2767. int UNUSED written = 0;
  2768. IADDR UNUSED pc = abuf->addr;
  2769. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2770. {
  2771. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
  2772. SET_H_SYS_SR_F (opval);
  2773. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2774. }
  2775. #undef FLD
  2776. }
  2777. NEXT (vpc);
  2778. CASE (sem, INSN_LF_SFUNE_S) : /* lf.sfune.s $rASF,$rBSF */
  2779. {
  2780. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2781. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2782. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2783. int UNUSED written = 0;
  2784. IADDR UNUSED pc = abuf->addr;
  2785. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2786. {
  2787. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
  2788. SET_H_SYS_SR_F (opval);
  2789. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2790. }
  2791. #undef FLD
  2792. }
  2793. NEXT (vpc);
  2794. CASE (sem, INSN_LF_SFUNE_D32) : /* lf.sfune.d $rAD32F,$rBD32F */
  2795. {
  2796. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2797. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2798. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2799. int UNUSED written = 0;
  2800. IADDR UNUSED pc = abuf->addr;
  2801. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2802. {
  2803. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
  2804. SET_H_SYS_SR_F (opval);
  2805. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2806. }
  2807. #undef FLD
  2808. }
  2809. NEXT (vpc);
  2810. CASE (sem, INSN_LF_SFUGT_S) : /* lf.sfugt.s $rASF,$rBSF */
  2811. {
  2812. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2813. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2814. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2815. int UNUSED written = 0;
  2816. IADDR UNUSED pc = abuf->addr;
  2817. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2818. {
  2819. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
  2820. SET_H_SYS_SR_F (opval);
  2821. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2822. }
  2823. #undef FLD
  2824. }
  2825. NEXT (vpc);
  2826. CASE (sem, INSN_LF_SFUGT_D32) : /* lf.sfugt.d $rAD32F,$rBD32F */
  2827. {
  2828. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2829. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2830. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2831. int UNUSED written = 0;
  2832. IADDR UNUSED pc = abuf->addr;
  2833. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2834. {
  2835. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
  2836. SET_H_SYS_SR_F (opval);
  2837. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2838. }
  2839. #undef FLD
  2840. }
  2841. NEXT (vpc);
  2842. CASE (sem, INSN_LF_SFUGE_S) : /* lf.sfuge.s $rASF,$rBSF */
  2843. {
  2844. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2845. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2846. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2847. int UNUSED written = 0;
  2848. IADDR UNUSED pc = abuf->addr;
  2849. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2850. {
  2851. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
  2852. SET_H_SYS_SR_F (opval);
  2853. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2854. }
  2855. #undef FLD
  2856. }
  2857. NEXT (vpc);
  2858. CASE (sem, INSN_LF_SFUGE_D32) : /* lf.sfuge.d $rAD32F,$rBD32F */
  2859. {
  2860. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2861. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2862. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2863. int UNUSED written = 0;
  2864. IADDR UNUSED pc = abuf->addr;
  2865. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2866. {
  2867. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
  2868. SET_H_SYS_SR_F (opval);
  2869. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2870. }
  2871. #undef FLD
  2872. }
  2873. NEXT (vpc);
  2874. CASE (sem, INSN_LF_SFULT_S) : /* lf.sfult.s $rASF,$rBSF */
  2875. {
  2876. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2877. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2878. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2879. int UNUSED written = 0;
  2880. IADDR UNUSED pc = abuf->addr;
  2881. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2882. {
  2883. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
  2884. SET_H_SYS_SR_F (opval);
  2885. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2886. }
  2887. #undef FLD
  2888. }
  2889. NEXT (vpc);
  2890. CASE (sem, INSN_LF_SFULT_D32) : /* lf.sfult.d $rAD32F,$rBD32F */
  2891. {
  2892. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2893. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2894. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2895. int UNUSED written = 0;
  2896. IADDR UNUSED pc = abuf->addr;
  2897. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2898. {
  2899. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
  2900. SET_H_SYS_SR_F (opval);
  2901. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2902. }
  2903. #undef FLD
  2904. }
  2905. NEXT (vpc);
  2906. CASE (sem, INSN_LF_SFULE_S) : /* lf.sfule.s $rASF,$rBSF */
  2907. {
  2908. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2909. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2910. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2911. int UNUSED written = 0;
  2912. IADDR UNUSED pc = abuf->addr;
  2913. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2914. {
  2915. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
  2916. SET_H_SYS_SR_F (opval);
  2917. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2918. }
  2919. #undef FLD
  2920. }
  2921. NEXT (vpc);
  2922. CASE (sem, INSN_LF_SFULE_D32) : /* lf.sfule.d $rAD32F,$rBD32F */
  2923. {
  2924. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2925. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2926. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2927. int UNUSED written = 0;
  2928. IADDR UNUSED pc = abuf->addr;
  2929. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2930. {
  2931. BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
  2932. SET_H_SYS_SR_F (opval);
  2933. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2934. }
  2935. #undef FLD
  2936. }
  2937. NEXT (vpc);
  2938. CASE (sem, INSN_LF_SFUN_S) : /* lf.sfun.s $rASF,$rBSF */
  2939. {
  2940. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2941. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2942. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2943. int UNUSED written = 0;
  2944. IADDR UNUSED pc = abuf->addr;
  2945. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2946. {
  2947. BI opval = CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
  2948. SET_H_SYS_SR_F (opval);
  2949. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2950. }
  2951. #undef FLD
  2952. }
  2953. NEXT (vpc);
  2954. CASE (sem, INSN_LF_SFUN_D32) : /* lf.sfun.d $rAD32F,$rBD32F */
  2955. {
  2956. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2957. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2958. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2959. int UNUSED written = 0;
  2960. IADDR UNUSED pc = abuf->addr;
  2961. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2962. {
  2963. BI opval = CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
  2964. SET_H_SYS_SR_F (opval);
  2965. CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
  2966. }
  2967. #undef FLD
  2968. }
  2969. NEXT (vpc);
  2970. CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
  2971. {
  2972. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2973. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2974. #define FLD(f) abuf->fields.sfmt_l_sll.f
  2975. int UNUSED written = 0;
  2976. IADDR UNUSED pc = abuf->addr;
  2977. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2978. {
  2979. SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), GET_H_FSR (FLD (f_r1)));
  2980. SET_H_FSR (FLD (f_r1), opval);
  2981. CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
  2982. }
  2983. #undef FLD
  2984. }
  2985. NEXT (vpc);
  2986. CASE (sem, INSN_LF_MADD_D32) : /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */
  2987. {
  2988. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  2989. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  2990. #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
  2991. int UNUSED written = 0;
  2992. IADDR UNUSED pc = abuf->addr;
  2993. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  2994. {
  2995. DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), GET_H_FD32R (FLD (f_rdd32)));
  2996. SET_H_FD32R (FLD (f_rdd32), opval);
  2997. CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
  2998. }
  2999. #undef FLD
  3000. }
  3001. NEXT (vpc);
  3002. CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
  3003. {
  3004. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3005. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3006. #define FLD(f) abuf->fields.sfmt_empty.f
  3007. int UNUSED written = 0;
  3008. IADDR UNUSED pc = abuf->addr;
  3009. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  3010. ((void) 0); /*nop*/
  3011. #undef FLD
  3012. }
  3013. NEXT (vpc);
  3014. CASE (sem, INSN_LF_CUST1_D32) : /* lf.cust1.d */
  3015. {
  3016. SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
  3017. ARGBUF *abuf = SEM_ARGBUF (sem_arg);
  3018. #define FLD(f) abuf->fields.sfmt_empty.f
  3019. int UNUSED written = 0;
  3020. IADDR UNUSED pc = abuf->addr;
  3021. vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
  3022. ((void) 0); /*nop*/
  3023. #undef FLD
  3024. }
  3025. NEXT (vpc);
  3026. }
  3027. ENDSWITCH (sem) /* End of semantic switch. */
  3028. /* At this point `vpc' contains the next insn to execute. */
  3029. }
  3030. #undef DEFINE_SWITCH
  3031. #endif /* DEFINE_SWITCH */