1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080 |
- /* Imagination Technologies Meta opcode table.
- Copyright (C) 2013-2015 Free Software Foundation, Inc.
- Contributed by Imagination Technologies Ltd.
- This file is part of GDB and GAS.
- GDB and GAS are free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 3, or (at
- your option) any later version.
- GDB and GAS are distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with GDB or GAS; see the file COPYING3. If not, write to the
- Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
- MA 02110-1301, USA. */
- enum metag_unit
- {
- UNIT_CT,
- UNIT_D0,
- UNIT_D1,
- UNIT_A0,
- UNIT_A1,
- UNIT_PC,
- UNIT_RD,
- UNIT_TR,
- UNIT_TT,
- UNIT_FX,
- UNIT_DT, /* DSP Template Table */
- UNIT_ACC_D0,
- UNIT_ACC_D1,
- UNIT_RAM_D0,
- UNIT_RAM_D1,
- };
- typedef struct
- {
- const char * name;
- enum metag_unit unit;
- unsigned int no;
- } metag_reg;
- static const metag_reg metag_regtab[] =
- {
- { "TXENABLE", UNIT_CT, 0 },
- { "CT.0", UNIT_CT, 0 },
- { "TXMODE", UNIT_CT, 1 },
- { "CT.1", UNIT_CT, 1 },
- { "TXSTATUS", UNIT_CT, 2 },
- { "CT.2", UNIT_CT, 2 },
- { "TXRPT", UNIT_CT, 3 },
- { "CT.3", UNIT_CT, 3 },
- { "TXTIMER", UNIT_CT, 4 },
- { "CT.4", UNIT_CT, 4 },
- { "TXL1START", UNIT_CT, 5 },
- { "CT.5", UNIT_CT, 5 },
- { "TXL1END", UNIT_CT, 6 },
- { "CT.6", UNIT_CT, 6 },
- { "TXL1COUNT", UNIT_CT, 7 },
- { "CT.7", UNIT_CT, 7 },
- { "TXL2START", UNIT_CT, 8 },
- { "CT.8", UNIT_CT, 8 },
- { "TXL2END", UNIT_CT, 9 },
- { "CT.9", UNIT_CT, 9 },
- { "TXL2COUNT", UNIT_CT, 10 },
- { "CT.10", UNIT_CT, 10 },
- { "TXBPOBITS", UNIT_CT, 11 },
- { "CT.11", UNIT_CT, 11 },
- { "TXMRSIZE", UNIT_CT, 12 },
- { "CT.12", UNIT_CT, 12 },
- { "TXTIMERI", UNIT_CT, 13 },
- { "CT.13", UNIT_CT, 13 },
- { "TXDRCTRL", UNIT_CT, 14 },
- { "CT.14", UNIT_CT, 14 },
- { "TXDRSIZE", UNIT_CT, 15 },
- { "CT.15", UNIT_CT, 15 },
- { "TXCATCH0", UNIT_CT, 16 },
- { "CT.16", UNIT_CT, 16 },
- { "TXCATCH1", UNIT_CT, 17 },
- { "CT.17", UNIT_CT, 17 },
- { "TXCATCH2", UNIT_CT, 18 },
- { "CT.18", UNIT_CT, 18 },
- { "TXCATCH3", UNIT_CT, 19 },
- { "CT.19", UNIT_CT, 19 },
- { "TXDEFR", UNIT_CT, 20 },
- { "CT.20", UNIT_CT, 20 },
- { "TXCPRS", UNIT_CT, 21 },
- { "CT.21", UNIT_CT, 21 },
- { "TXCLKCTRL", UNIT_CT, 22 },
- { "CT.22", UNIT_CT, 22 },
- { "TXINTERN0", UNIT_CT, 23 },
- { "TXSTATE", UNIT_CT, 23 },
- { "CT.23", UNIT_CT, 23 },
- { "TXAMAREG0", UNIT_CT, 24 },
- { "CT.24", UNIT_CT, 24 },
- { "TXAMAREG1", UNIT_CT, 25 },
- { "CT.25", UNIT_CT, 25 },
- { "TXAMAREG2", UNIT_CT, 26 },
- { "CT.26", UNIT_CT, 26 },
- { "TXAMAREG3", UNIT_CT, 27 },
- { "CT.27", UNIT_CT, 27 },
- { "TXDIVTIME", UNIT_CT, 28 },
- { "CT.28", UNIT_CT, 28 },
- { "TXPRIVEXT", UNIT_CT, 29 },
- { "CT.29", UNIT_CT, 29 },
- { "TXTACTCYC", UNIT_CT, 30 },
- { "TXACTCYC", UNIT_CT, 30 },
- { "CT.30", UNIT_CT, 30 },
- { "TXIDLECYC", UNIT_CT, 31 },
- { "CT.31", UNIT_CT, 31 },
- { "D0Re0", UNIT_D0, 0 },
- { "D0.0", UNIT_D0, 0 },
- { "D0Ar6", UNIT_D0, 1 },
- { "D0.1", UNIT_D0, 1 },
- { "D0Ar4", UNIT_D0, 2 },
- { "D0.2", UNIT_D0, 2 },
- { "D0Ar2", UNIT_D0, 3 },
- { "D0.3", UNIT_D0, 3 },
- { "D0FrT", UNIT_D0, 4 },
- { "D0.4", UNIT_D0, 4 },
- { "D0.5", UNIT_D0, 5 },
- { "D0.6", UNIT_D0, 6 },
- { "D0.7", UNIT_D0, 7 },
- { "D0.8", UNIT_D0, 8 },
- { "D0.9", UNIT_D0, 9 },
- { "D0.10", UNIT_D0, 10 },
- { "D0.11", UNIT_D0, 11 },
- { "D0.12", UNIT_D0, 12 },
- { "D0.13", UNIT_D0, 13 },
- { "D0.14", UNIT_D0, 14 },
- { "D0.15", UNIT_D0, 15 },
- { "D0.16", UNIT_D0, 16 },
- { "D0.17", UNIT_D0, 17 },
- { "D0.18", UNIT_D0, 18 },
- { "D0.19", UNIT_D0, 19 },
- { "D0.20", UNIT_D0, 20 },
- { "D0.21", UNIT_D0, 21 },
- { "D0.22", UNIT_D0, 22 },
- { "D0.23", UNIT_D0, 23 },
- { "D0.24", UNIT_D0, 24 },
- { "D0.25", UNIT_D0, 25 },
- { "D0.26", UNIT_D0, 26 },
- { "D0.27", UNIT_D0, 27 },
- { "D0.28", UNIT_D0, 28 },
- { "D0.29", UNIT_D0, 29 },
- { "D0.30", UNIT_D0, 30 },
- { "D0.31", UNIT_D0, 31 },
- { "D1Re0", UNIT_D1, 0 },
- { "D1.0", UNIT_D1, 0 },
- { "D1Ar5", UNIT_D1, 1 },
- { "D1.1", UNIT_D1, 1 },
- { "D1Ar3", UNIT_D1, 2 },
- { "D1.2", UNIT_D1, 2 },
- { "D1Ar1", UNIT_D1, 3 },
- { "D1.3", UNIT_D1, 3 },
- { "D1RtP", UNIT_D1, 4 },
- { "D1.4", UNIT_D1, 4 },
- { "D1.5", UNIT_D1, 5 },
- { "D1.6", UNIT_D1, 6 },
- { "D1.7", UNIT_D1, 7 },
- { "D1.8", UNIT_D1, 8 },
- { "D1.9", UNIT_D1, 9 },
- { "D1.10", UNIT_D1, 10 },
- { "D1.11", UNIT_D1, 11 },
- { "D1.12", UNIT_D1, 12 },
- { "D1.13", UNIT_D1, 13 },
- { "D1.14", UNIT_D1, 14 },
- { "D1.15", UNIT_D1, 15 },
- { "D1.16", UNIT_D1, 16 },
- { "D1.17", UNIT_D1, 17 },
- { "D1.18", UNIT_D1, 18 },
- { "D1.19", UNIT_D1, 19 },
- { "D1.20", UNIT_D1, 20 },
- { "D1.21", UNIT_D1, 21 },
- { "D1.22", UNIT_D1, 22 },
- { "D1.23", UNIT_D1, 23 },
- { "D1.24", UNIT_D1, 24 },
- { "D1.25", UNIT_D1, 25 },
- { "D1.26", UNIT_D1, 26 },
- { "D1.27", UNIT_D1, 27 },
- { "D1.28", UNIT_D1, 28 },
- { "D1.29", UNIT_D1, 29 },
- { "D1.30", UNIT_D1, 30 },
- { "D1.31", UNIT_D1, 31 },
- { "A0StP", UNIT_A0, 0 },
- { "A0.0", UNIT_A0, 0 },
- { "A0FrP", UNIT_A0, 1 },
- { "A0.1", UNIT_A0, 1 },
- { "A0.2", UNIT_A0, 2 },
- { "A0.3", UNIT_A0, 3 },
- { "A0.4", UNIT_A0, 4 },
- { "A0.5", UNIT_A0, 5 },
- { "A0.6", UNIT_A0, 6 },
- { "A0.7", UNIT_A0, 7 },
- { "A0.8", UNIT_A0, 8 },
- { "A0.9", UNIT_A0, 9 },
- { "A0.10", UNIT_A0, 10 },
- { "A0.11", UNIT_A0, 11 },
- { "A0.12", UNIT_A0, 12 },
- { "A0.13", UNIT_A0, 13 },
- { "A0.14", UNIT_A0, 14 },
- { "A0.15", UNIT_A0, 15 },
- { "CPC0", UNIT_A0, 16 },
- { "A1GbP", UNIT_A1, 0 },
- { "A1.0", UNIT_A1, 0 },
- { "A1LbP", UNIT_A1, 1 },
- { "A1.1", UNIT_A1, 1 },
- { "A1.2", UNIT_A1, 2 },
- { "A1.3", UNIT_A1, 3 },
- { "A1.4", UNIT_A1, 4 },
- { "A1.5", UNIT_A1, 5 },
- { "A1.6", UNIT_A1, 6 },
- { "A1.7", UNIT_A1, 7 },
- { "A1.8", UNIT_A1, 8 },
- { "A1.9", UNIT_A1, 9 },
- { "A1.10", UNIT_A1, 10 },
- { "A1.11", UNIT_A1, 11 },
- { "A1.12", UNIT_A1, 12 },
- { "A1.13", UNIT_A1, 13 },
- { "A1.14", UNIT_A1, 14 },
- { "A1.15", UNIT_A1, 15 },
- { "CPC1", UNIT_A1, 16 },
- { "PC", UNIT_PC, 0 },
- { "PCX", UNIT_PC, 1 },
- { "RD", UNIT_RD, 0 },
- { "RA", UNIT_RD, 16 },
- { "RD", UNIT_RD, 16 },
- { "RAPF", UNIT_RD, 17 },
- { "RAM8X32", UNIT_RD, 22 },
- { "RAM8X", UNIT_RD, 23 },
- { "RABZ", UNIT_RD, 24 },
- { "RAWZ", UNIT_RD, 25 },
- { "RADZ", UNIT_RD, 26 },
- { "RABX", UNIT_RD, 28 },
- { "RAWX", UNIT_RD, 29 },
- { "RADX", UNIT_RD, 30 },
- { "RAMX", UNIT_RD, 31 },
- { "RAM16X", UNIT_RD, 31 },
- { "TXSTAT", UNIT_TR, 0 },
- { "TR.0", UNIT_TR, 0 },
- { "TXMASK", UNIT_TR, 1 },
- { "TR.1", UNIT_TR, 1 },
- { "TXSTATI", UNIT_TR, 2 },
- { "TR.2", UNIT_TR, 2 },
- { "TXMASKI", UNIT_TR, 3 },
- { "TR.3", UNIT_TR, 3 },
- { "TXPOLL", UNIT_TR, 4 },
- { "TR.4", UNIT_TR, 4 },
- { "TXGPIOI", UNIT_TR, 5 },
- { "TR.5", UNIT_TR, 5 },
- { "TXPOLLI", UNIT_TR, 6 },
- { "TR.6", UNIT_TR, 6 },
- { "TXGPIOO", UNIT_TR, 7 },
- { "TR.7", UNIT_TR, 7 },
- { "TTEXEC", UNIT_TT, 0 },
- { "TT.0", UNIT_TT, 0 },
- { "TTCTRL", UNIT_TT, 1 },
- { "TT.1", UNIT_TT, 1 },
- { "TTMARK", UNIT_TT, 2 },
- { "TT.2", UNIT_TT, 2 },
- { "TTREC", UNIT_TT, 3 },
- { "TT.3", UNIT_TT, 3 },
- { "GTEXEC", UNIT_TT, 4 },
- { "TT.4", UNIT_TT, 4 },
- { "FX.0", UNIT_FX, 0 },
- { "FX.1", UNIT_FX, 1 },
- { "FX.2", UNIT_FX, 2 },
- { "FX.3", UNIT_FX, 3 },
- { "FX.4", UNIT_FX, 4 },
- { "FX.5", UNIT_FX, 5 },
- { "FX.6", UNIT_FX, 6 },
- { "FX.7", UNIT_FX, 7 },
- { "FX.8", UNIT_FX, 8 },
- { "FX.9", UNIT_FX, 9 },
- { "FX.10", UNIT_FX, 10 },
- { "FX.11", UNIT_FX, 11 },
- { "FX.12", UNIT_FX, 12 },
- { "FX.13", UNIT_FX, 13 },
- { "FX.14", UNIT_FX, 14 },
- { "FX.15", UNIT_FX, 15 },
- };
- static const metag_reg metag_dsp_regtab[] =
- {
- { "D0AR.0", UNIT_RAM_D0, 0 },
- { "D0AR.1", UNIT_RAM_D0, 1 },
- { "D0AW.0", UNIT_RAM_D0, 2 },
- { "D0AW.1", UNIT_RAM_D0, 3 },
- { "D0BR.0", UNIT_RAM_D0, 4 },
- { "D0BR.1", UNIT_RAM_D0, 5 },
- { "D0BW.0", UNIT_RAM_D0, 6 },
- { "D0BW.1", UNIT_RAM_D0, 7 },
- { "D0ARI.0", UNIT_RAM_D0, 8 },
- { "D0ARI.1", UNIT_RAM_D0, 9 },
- { "D0AWI.0", UNIT_RAM_D0, 10 },
- { "D0AWI.1", UNIT_RAM_D0, 11 },
- { "D0BRI.0", UNIT_RAM_D0, 12 },
- { "D0BRI.1", UNIT_RAM_D0, 13 },
- { "D0BWI.0", UNIT_RAM_D0, 14 },
- { "D0BWI.1", UNIT_RAM_D0, 15 },
- { "AC0.0", UNIT_ACC_D0, 16 },
- { "AC0.1", UNIT_ACC_D0, 17 },
- { "AC0.2", UNIT_ACC_D0, 18 },
- { "AC0.3", UNIT_ACC_D0, 19 },
- { "D1AR.0", UNIT_RAM_D1, 0 },
- { "D1AR.1", UNIT_RAM_D1, 1 },
- { "D1AW.0", UNIT_RAM_D1, 2 },
- { "D1AW.1", UNIT_RAM_D1, 3 },
- { "D1BR.0", UNIT_RAM_D1, 4 },
- { "D1BR.1", UNIT_RAM_D1, 5 },
- { "D1BW.0", UNIT_RAM_D1, 6 },
- { "D1BW.1", UNIT_RAM_D1, 7 },
- { "D1ARI.0", UNIT_RAM_D1, 8 },
- { "D1ARI.1", UNIT_RAM_D1, 9 },
- { "D1AWI.0", UNIT_RAM_D1, 10 },
- { "D1AWI.1", UNIT_RAM_D1, 11 },
- { "D1BRI.0", UNIT_RAM_D1, 12 },
- { "D1BRI.1", UNIT_RAM_D1, 13 },
- { "D1BWI.0", UNIT_RAM_D1, 14 },
- { "D1BWI.1", UNIT_RAM_D1, 15 },
- { "AC1.0", UNIT_ACC_D1, 16 },
- { "AC1.1", UNIT_ACC_D1, 17 },
- { "AC1.2", UNIT_ACC_D1, 18 },
- { "AC1.3", UNIT_ACC_D1, 19 },
- { "T0", UNIT_DT, 0 },
- { "T1", UNIT_DT, 1 },
- { "T2", UNIT_DT, 2 },
- { "T3", UNIT_DT, 3 },
- { "T4", UNIT_DT, 4 },
- { "T5", UNIT_DT, 5 },
- { "T6", UNIT_DT, 6 },
- { "T7", UNIT_DT, 7 },
- { "T8", UNIT_DT, 8 },
- { "T9", UNIT_DT, 9 },
- { "TA", UNIT_DT, 10 },
- { "TB", UNIT_DT, 11 },
- { "TC", UNIT_DT, 12 },
- { "TD", UNIT_DT, 13 },
- { "TE", UNIT_DT, 14 },
- { "TF", UNIT_DT, 15 },
- };
- /* This table differs from 'metag_dsp_regtab' in that the number
- fields in this table are suitable for insertion into DSPRAM
- template definition instruction encodings.
- The table is indexed by "load". The main benefit of this is that we
- can implicitly check that the correct DSPRAM register has been used
- when parsing, e.g. the read pointer only appears in the load table
- and the write pointer only exists in the store table.
- The ordering of the table entries might look a bit weird but it is
- based on matching the longest register string. */
- static const metag_reg metag_dsp_tmpl_regtab[2][56] =
- {
- {
- { "D0AW.0+D0AWI.0++", UNIT_RAM_D0, 18 },
- { "D0AW.0+D0AWI.0", UNIT_RAM_D0, 18 },
- { "D0AW.0+D0AWI.1++", UNIT_RAM_D0, 19 },
- { "D0AW.0+D0AWI.1", UNIT_RAM_D0, 19 },
- { "D0AW.0++", UNIT_RAM_D0, 17 },
- { "D0AW.0", UNIT_RAM_D0, 16 },
- { "D0AWI.0", UNIT_RAM_D0, 18 },
- { "D0AWI.1", UNIT_RAM_D0, 19 },
- { "D0AW.1+D0AWI.0++", UNIT_RAM_D0, 22 },
- { "D0AW.1+D0AWI.0", UNIT_RAM_D0, 22 },
- { "D0AW.1+D0AWI.1++", UNIT_RAM_D0, 23 },
- { "D0AW.1+D0AWI.1", UNIT_RAM_D0, 23 },
- { "D0AW.1++", UNIT_RAM_D0, 21 },
- { "D0AW.1", UNIT_RAM_D0, 20 },
- { "D0BW.0+D0BWI.0++", UNIT_RAM_D0, 26 },
- { "D0BW.0+D0BWI.0", UNIT_RAM_D0, 26 },
- { "D0BW.0+D0BWI.1++", UNIT_RAM_D0, 27 },
- { "D0BW.0+D0BWI.1", UNIT_RAM_D0, 27 },
- { "D0BW.0++", UNIT_RAM_D0, 25 },
- { "D0BW.0", UNIT_RAM_D0, 24 },
- { "D0BWI.0", UNIT_RAM_D0, 18 },
- { "D0BWI.1", UNIT_RAM_D0, 19 },
- { "D0BW.1+D0BWI.0++", UNIT_RAM_D0, 30 },
- { "D0BW.1+D0BWI.0", UNIT_RAM_D0, 30 },
- { "D0BW.1+D0BWI.1++", UNIT_RAM_D0, 31 },
- { "D0BW.1+D0BWI.1", UNIT_RAM_D0, 31 },
- { "D0BW.1++", UNIT_RAM_D0, 29 },
- { "D0BW.1", UNIT_RAM_D0, 28 },
- { "D1AW.0+D1AWI.0++", UNIT_RAM_D1, 18 },
- { "D1AW.0+D1AWI.0", UNIT_RAM_D1, 18 },
- { "D1AW.0+D1AWI.1++", UNIT_RAM_D1, 19 },
- { "D1AW.0+D1AWI.1", UNIT_RAM_D1, 19 },
- { "D1AW.0++", UNIT_RAM_D1, 17 },
- { "D1AW.0", UNIT_RAM_D1, 16 },
- { "D1AWI.0", UNIT_RAM_D1, 18 },
- { "D1AWI.1", UNIT_RAM_D1, 19 },
- { "D1AW.1+D1AWI.0++", UNIT_RAM_D1, 22 },
- { "D1AW.1+D1AWI.0", UNIT_RAM_D1, 22 },
- { "D1AW.1+D1AWI.1++", UNIT_RAM_D1, 23 },
- { "D1AW.1+D1AWI.1", UNIT_RAM_D1, 23 },
- { "D1AW.1++", UNIT_RAM_D1, 21 },
- { "D1AW.1", UNIT_RAM_D1, 20 },
- { "D1BW.0+D1BWI.0++", UNIT_RAM_D1, 26 },
- { "D1BW.0+D1BWI.0", UNIT_RAM_D1, 26 },
- { "D1BW.0+D1BWI.1++", UNIT_RAM_D1, 27 },
- { "D1BW.0+D1BWI.1", UNIT_RAM_D1, 27 },
- { "D1BW.0++", UNIT_RAM_D1, 25 },
- { "D1BW.0", UNIT_RAM_D1, 24 },
- { "D1BWI.0", UNIT_RAM_D1, 18 },
- { "D1BWI.1", UNIT_RAM_D1, 19 },
- { "D1BW.1+D1BWI.0++", UNIT_RAM_D1, 30 },
- { "D1BW.1+D1BWI.0", UNIT_RAM_D1, 30 },
- { "D1BW.1+D1BWI.1++", UNIT_RAM_D1, 31 },
- { "D1BW.1+D1BWI.1", UNIT_RAM_D1, 31 },
- { "D1BW.1++", UNIT_RAM_D1, 29 },
- { "D1BW.1", UNIT_RAM_D1, 28 },
- },
- {
- { "D0AR.0+D0ARI.0++", UNIT_RAM_D0, 18 },
- { "D0AR.0+D0ARI.0", UNIT_RAM_D0, 18 },
- { "D0AR.0+D0ARI.1++", UNIT_RAM_D0, 19 },
- { "D0AR.0+D0ARI.1", UNIT_RAM_D0, 19 },
- { "D0AR.0++", UNIT_RAM_D0, 17 },
- { "D0AR.0", UNIT_RAM_D0, 16 },
- { "D0ARI.0", UNIT_RAM_D0, 18 },
- { "D0ARI.1", UNIT_RAM_D0, 19 },
- { "D0AR.1+D0ARI.0++", UNIT_RAM_D0, 22 },
- { "D0AR.1+D0ARI.0", UNIT_RAM_D0, 22 },
- { "D0AR.1+D0ARI.1++", UNIT_RAM_D0, 23 },
- { "D0AR.1+D0ARI.1", UNIT_RAM_D0, 23 },
- { "D0AR.1++", UNIT_RAM_D0, 21 },
- { "D0AR.1", UNIT_RAM_D0, 20 },
- { "D0BR.0+D0BRI.0++", UNIT_RAM_D0, 26 },
- { "D0BR.0+D0BRI.0", UNIT_RAM_D0, 26 },
- { "D0BR.0+D0BRI.1++", UNIT_RAM_D0, 27 },
- { "D0BR.0+D0BRI.1", UNIT_RAM_D0, 27 },
- { "D0BR.0++", UNIT_RAM_D0, 25 },
- { "D0BR.0", UNIT_RAM_D0, 24 },
- { "D0BRI.0", UNIT_RAM_D0, 18 },
- { "D0BRI.1", UNIT_RAM_D0, 19 },
- { "D0BR.1+D0BRI.0++", UNIT_RAM_D0, 30 },
- { "D0BR.1+D0BRI.0", UNIT_RAM_D0, 30 },
- { "D0BR.1+D0BRI.1++", UNIT_RAM_D0, 31 },
- { "D0BR.1+D0BRI.1", UNIT_RAM_D0, 31 },
- { "D0BR.1++", UNIT_RAM_D0, 29 },
- { "D0BR.1", UNIT_RAM_D0, 28 },
- { "D1AR.0+D1ARI.0++", UNIT_RAM_D1, 18 },
- { "D1AR.0+D1ARI.0", UNIT_RAM_D1, 18 },
- { "D1AR.0+D1ARI.1++", UNIT_RAM_D1, 19 },
- { "D1AR.0+D1ARI.1", UNIT_RAM_D1, 19 },
- { "D1AR.0++", UNIT_RAM_D1, 17 },
- { "D1AR.0", UNIT_RAM_D1, 16 },
- { "D1ARI.0", UNIT_RAM_D1, 18 },
- { "D1ARI.1", UNIT_RAM_D1, 19 },
- { "D1AR.1+D1ARI.0++", UNIT_RAM_D1, 22 },
- { "D1AR.1+D1ARI.0", UNIT_RAM_D1, 22 },
- { "D1AR.1+D1ARI.1++", UNIT_RAM_D1, 23 },
- { "D1AR.1+D1ARI.1", UNIT_RAM_D1, 23 },
- { "D1AR.1++", UNIT_RAM_D1, 21 },
- { "D1AR.1", UNIT_RAM_D1, 20 },
- { "D1BR.0+D1BRI.0++", UNIT_RAM_D1, 26 },
- { "D1BR.0+D1BRI.0", UNIT_RAM_D1, 26 },
- { "D1BR.0+D1BRI.1++", UNIT_RAM_D1, 27 },
- { "D1BR.0+D1BRI.1", UNIT_RAM_D1, 27 },
- { "D1BR.0++", UNIT_RAM_D1, 25 },
- { "D1BR.0", UNIT_RAM_D1, 24 },
- { "D1BR.1+D1BRI.0++", UNIT_RAM_D1, 30 },
- { "D1BR.1+D1BRI.0", UNIT_RAM_D1, 30 },
- { "D1BR.1+D1BRI.1++", UNIT_RAM_D1, 31 },
- { "D1BR.1+D1BRI.1", UNIT_RAM_D1, 31 },
- { "D1BR.1++", UNIT_RAM_D1, 29 },
- { "D1BR.1", UNIT_RAM_D1, 28 },
- { "D1BRI.0", UNIT_RAM_D1, 18 },
- { "D1BRI.1", UNIT_RAM_D1, 19 },
- },
- };
- typedef struct
- {
- const char * name;
- unsigned int part;
- } metag_acf;
- static const metag_acf metag_acftab[] =
- {
- { "ACF.0", 0},
- { "ACF.1", 1},
- { "ACF.2", 2},
- { "ACF.3", 3},
- };
- enum insn_encoding
- {
- ENC_NONE,
- ENC_MOV_U2U,
- ENC_MOV_PORT,
- ENC_MMOV,
- ENC_MDRD,
- ENC_MOVL_TTREC,
- ENC_GET_SET,
- ENC_GET_SET_EXT,
- ENC_MGET_MSET,
- ENC_COND_SET,
- ENC_XFR,
- ENC_MOV_CT,
- ENC_SWAP,
- ENC_JUMP,
- ENC_CALLR,
- ENC_ALU,
- ENC_SHIFT,
- ENC_MIN_MAX,
- ENC_BITOP,
- ENC_CMP,
- ENC_BRANCH,
- ENC_KICK,
- ENC_SWITCH,
- ENC_CACHER,
- ENC_CACHEW,
- ENC_ICACHE,
- ENC_LNKGET,
- ENC_FMOV,
- ENC_FMMOV,
- ENC_FMOV_DATA,
- ENC_FMOV_I,
- ENC_FPACK,
- ENC_FSWAP,
- ENC_FCMP,
- ENC_FMINMAX,
- ENC_FCONV,
- ENC_FCONVX,
- ENC_FBARITH,
- ENC_FEARITH,
- ENC_FREC,
- ENC_FSIMD,
- ENC_FGET_SET_ACF,
- ENC_DGET_SET,
- ENC_DTEMPLATE,
- ENC_DALU,
- ENC_MAX,
- };
- enum insn_type
- {
- INSN_GP,
- INSN_FPU,
- INSN_DSP,
- INSN_DSP_FPU,
- };
- typedef struct
- {
- const char *name;
- unsigned int core_flags;
- #define CoreMeta11 0x1 /* The earliest Meta core we support */
- #define CoreMeta12 0x2
- #define CoreMeta21 0x4
- #define FpuMeta21 0x21
- #define DspMeta21 0x100
- unsigned int meta_opcode;
- unsigned int meta_mask;
- enum insn_type insn_type;
- enum insn_encoding encoding;
- #define DSP_ARGS_1 0x0000001 /* De.r,Dx.r,De.r (3 register operands) */
- #define DSP_ARGS_ACC2 0x0000002 /* Accumulator source operand 2 */
- #define DSP_ARGS_QR 0x0000004 /* QUICKRoT */
- #define DSP_ARGS_XACC 0x0000008 /* Cross-unit accumulator op */
- #define DSP_ARGS_DACC 0x0000010 /* Target accumulator as destination */
- #define DSP_ARGS_SRD 0x0000020 /* Source the RD port */
- #define DSP_ARGS_2 0x0000040 /* De.r,Dx.r (2 register operands) */
- #define DSP_ARGS_DSP_SRC1 0x0000080 /* Source a DSP register */
- #define DSP_ARGS_DSP_SRC2 0x0000100 /* Source a DSP register */
- #define DSP_ARGS_IMM 0x0000200 /* Immediate value for src 2 */
- #define DSP_ARGS_SPLIT8 0x0000400 /* Data unit split 8 operations */
- #define DSP_ARGS_12 0x0000800 /* De.r,Dx.r */
- #define DSP_ARGS_13 0x0001000 /* Dx.r,Rx.r */
- #define DSP_ARGS_14 0x0002000 /* DSPe.r,Dx.r */
- #define DSP_ARGS_15 0x0004000 /* DSPx.r,#I16 */
- #define DSP_ARGS_16 0x0008000 /* De.r,DSPx.r */
- #define DSP_ARGS_17 0x0010000 /* De.r|ACe.r,Dx.r,Rx.r|RD */
- #define DSP_ARGS_18 0x0020000 /* De.r,Dx.r|ACx.r */
- #define DSP_ARGS_20 0x0080000 /* De.r,Dx.r|ACx.r,De.r */
- #define DSP_ARGS_21 0x0100000 /* De.r,Dx.r|ACx.r,#I5 */
- #define DSP_ARGS_22 0x0200000 /* De.r,Dx.r|ACx.r,De.r|#I5 */
- #define DSP_ARGS_23 0x0400000 /* Ux.r,Dx.r|ACx.r,De.r|#I5 */
- #define GP_ARGS_QR 0x0000001 /* QUICKRoT */
- unsigned int arg_type;
- } insn_template;
- enum major_opcode
- {
- OPC_ADD,
- OPC_SUB,
- OPC_AND,
- OPC_OR,
- OPC_XOR,
- OPC_SHIFT,
- OPC_MUL,
- OPC_CMP,
- OPC_ADDR,
- OPC_9,
- OPC_MISC,
- OPC_SET,
- OPC_GET,
- OPC_XFR,
- OPC_CPR,
- OPC_FPU,
- };
- #define GET_EXT_MINOR 0x7
- #define MOV_EXT_MINOR 0x6
- #define MOVL_MINOR 0x2
- #define MAJOR_OPCODE(opcode) (((opcode) >> 28) & 0xf)
- #define MINOR_OPCODE(opcode) (((opcode) >> 24) & 0xf)
- enum cond_code
- {
- COND_A,
- COND_EQ,
- COND_NE,
- COND_CS,
- COND_CC,
- COND_MI,
- COND_PL,
- COND_VS,
- COND_VC,
- COND_HI,
- COND_LS,
- COND_GE,
- COND_LT,
- COND_GT,
- COND_LE,
- COND_NV,
- };
- enum scond_code
- {
- SCOND_A,
- SCOND_LEQ,
- SCOND_LNE,
- SCOND_LLO,
- SCOND_LHS,
- SCOND_HEQ,
- SCOND_HNE,
- SCOND_HLO,
- SCOND_HHS,
- SCOND_LGR,
- SCOND_LLE,
- SCOND_HGR,
- SCOND_HLE,
- SCOND_EEQ,
- SCOND_ELO,
- SCOND_NV,
- };
- typedef struct
- {
- const char *name;
- enum scond_code code;
- } split_condition;
- static const split_condition metag_scondtab[] =
- {
- { "LEQ", SCOND_LEQ },
- { "LEZ", SCOND_LEQ },
- { "LNE", SCOND_LNE },
- { "LNZ", SCOND_LNE },
- { "LLO", SCOND_LLO },
- { "LCS", SCOND_LLO },
- { "LHS", SCOND_LHS },
- { "LCC", SCOND_LHS },
- { "HEQ", SCOND_HEQ },
- { "HEZ", SCOND_HEQ },
- { "HNE", SCOND_HNE },
- { "HNZ", SCOND_HNE },
- { "HLO", SCOND_HLO },
- { "HCS", SCOND_HLO },
- { "HHS", SCOND_HHS },
- { "HCC", SCOND_HHS },
- { "LGR", SCOND_LGR },
- { "LHI", SCOND_LGR },
- { "LLE", SCOND_LLE },
- { "LLS", SCOND_LLE },
- { "HGR", SCOND_HGR },
- { "HHI", SCOND_HGR },
- { "HLE", SCOND_HLE },
- { "HLS", SCOND_HLE },
- { "EEQ", SCOND_EEQ },
- { "EEZ", SCOND_EEQ },
- { "ELO", SCOND_ELO },
- { "ECS", SCOND_ELO },
- };
- static const split_condition metag_dsp_scondtab[] =
- {
- { "LEQ", SCOND_LEQ },
- { "LEZ", SCOND_LEQ },
- { "LNE", SCOND_LNE },
- { "LNZ", SCOND_LNE },
- { "LCS", SCOND_LLO },
- { "LLO", SCOND_LLO },
- { "LCC", SCOND_LHS },
- { "LHS", SCOND_LHS },
- { "HEQ", SCOND_HEQ },
- { "HEZ", SCOND_HEQ },
- { "HNE", SCOND_HNE },
- { "HNZ", SCOND_HNE },
- { "HCS", SCOND_HLO },
- { "HLO", SCOND_HLO },
- { "HCC", SCOND_HHS },
- { "HHS", SCOND_HHS },
- { "LHI", SCOND_LGR },
- { "LGR", SCOND_LGR },
- { "LLS", SCOND_LLE },
- { "LLE", SCOND_LLE },
- { "HHI", SCOND_HGR },
- { "HGR", SCOND_HGR },
- { "HLS", SCOND_HLE },
- { "HLE", SCOND_HLE },
- { "EEQ", SCOND_EEQ },
- { "EEZ", SCOND_EEQ },
- { "ECS", SCOND_ELO },
- { "ELO", SCOND_ELO },
- };
- static const split_condition metag_fpu_scondtab[] =
- {
- { "LEQ", SCOND_LEQ },
- { "LEZ", SCOND_LEQ },
- { "LNE", SCOND_LNE },
- { "LNZ", SCOND_LNE },
- { "LLO", SCOND_LLO },
- { "LCS", SCOND_LLO },
- { "LHS", SCOND_LHS },
- { "LCC", SCOND_LHS },
- { "HEQ", SCOND_HEQ },
- { "HEZ", SCOND_HEQ },
- { "HNE", SCOND_HNE },
- { "HNZ", SCOND_HNE },
- { "HLO", SCOND_HLO },
- { "HCS", SCOND_HLO },
- { "HHS", SCOND_HHS },
- { "HCC", SCOND_HHS },
- { "LGR", SCOND_LGR },
- { "LHI", SCOND_LGR },
- { "LLE", SCOND_LLE },
- { "LLS", SCOND_LLE },
- { "HGR", SCOND_HGR },
- { "HHI", SCOND_HGR },
- { "HLE", SCOND_HLE },
- { "HLS", SCOND_HLE },
- { "EEQ", SCOND_EEQ },
- { "EEZ", SCOND_EEQ },
- { "ELO", SCOND_ELO },
- { "ECS", SCOND_ELO },
- };
- enum fcond_code
- {
- FCOND_A,
- FCOND_FEQ,
- FCOND_UNE,
- FCOND_FLT,
- FCOND_UGE,
- FCOND_UVS = 7,
- FCOND_FVC,
- FCOND_UGT,
- FCOND_FLE,
- FCOND_FGE,
- FCOND_ULT,
- FCOND_FGT,
- FCOND_ULE,
- FCOND_NV,
- };
- #define COND_INSN(mnemonic, suffix, field_shift, flags, meta_opcode, \
- meta_mask, insn_type, encoding, args) \
- { mnemonic suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "A" suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "EQ" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "Z" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NE" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NZ" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CS" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LO" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CC" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HS" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "MI" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "N" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "PL" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NC" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VS" suffix, flags, meta_opcode | (COND_VS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VC" suffix, flags, meta_opcode | (COND_VC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HI" suffix, flags, meta_opcode | (COND_HI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LS" suffix, flags, meta_opcode | (COND_LS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GE" suffix, flags, meta_opcode | (COND_GE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LT" suffix, flags, meta_opcode | (COND_LT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GT" suffix, flags, meta_opcode | (COND_GT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LE" suffix, flags, meta_opcode | (COND_LE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | (COND_NV << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "FEQ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FZ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNE" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNZ" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLT" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLO" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGE" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHS" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UVS" suffix, flags, meta_opcode | \
- (FCOND_UVS << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FVC" suffix, flags, meta_opcode | \
- (FCOND_FVC << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGT" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHI" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLE" suffix, flags, meta_opcode | \
- (FCOND_FLE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGE" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHS" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULT" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULO" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGT" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHI" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULE" suffix, flags, meta_opcode | \
- (FCOND_ULE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | \
- (FCOND_NV << field_shift), meta_mask, INSN_FPU, encoding, args }
- #define FCOND_INSN(mnemonic, suffix, field_shift, flags, meta_opcode, \
- meta_mask, insn_type, encoding, args) \
- { mnemonic suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "A" suffix, flags, meta_opcode, meta_mask, \
- insn_type, encoding, args }, \
- { mnemonic "FEQ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FZ" suffix, flags, meta_opcode | \
- (FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNE" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UNZ" suffix, flags, meta_opcode | \
- (FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLO" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLT" suffix, flags, meta_opcode | \
- (FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHS" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGE" suffix, flags, meta_opcode | \
- (FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UVS" suffix, flags, meta_opcode | \
- (FCOND_UVS << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FVC" suffix, flags, meta_opcode | \
- (FCOND_FVC << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UHI" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "UGT" suffix, flags, meta_opcode | \
- (FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FLE" suffix, flags, meta_opcode | \
- (FCOND_FLE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGE" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHS" suffix, flags, meta_opcode | \
- (FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULT" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULO" suffix, flags, meta_opcode | \
- (FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FGT" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "FHI" suffix, flags, meta_opcode | \
- (FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "ULE" suffix, flags, meta_opcode | \
- (FCOND_ULE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | \
- (FCOND_NV << field_shift), meta_mask, INSN_FPU, encoding, args }, \
- { mnemonic "EQ" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "Z" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NE" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NZ" suffix, flags, meta_opcode | (COND_NE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CS" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LO" suffix, flags, meta_opcode | (COND_CS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "CC" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HS" suffix, flags, meta_opcode | (COND_CC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "MI" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "N" suffix, flags, meta_opcode | (COND_MI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "PL" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NC" suffix, flags, meta_opcode | (COND_PL << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VS" suffix, flags, meta_opcode | (COND_VS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "VC" suffix, flags, meta_opcode | (COND_VC << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "HI" suffix, flags, meta_opcode | (COND_HI << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LS" suffix, flags, meta_opcode | (COND_LS << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GE" suffix, flags, meta_opcode | (COND_GE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LT" suffix, flags, meta_opcode | (COND_LT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "GT" suffix, flags, meta_opcode | (COND_GT << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "LE" suffix, flags, meta_opcode | (COND_LE << field_shift), \
- meta_mask, insn_type, encoding, args }, \
- { mnemonic "NV" suffix, flags, meta_opcode | (COND_NV << field_shift), \
- meta_mask, insn_type, encoding, args }
- #define TEMPLATE_INSN(flags, meta_opcode, meta_mask, insn_type) \
- { "T0", flags, meta_opcode | 0x0, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T1", flags, meta_opcode | 0x1, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T2", flags, meta_opcode | 0x2, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T3", flags, meta_opcode | 0x3, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T4", flags, meta_opcode | 0x4, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T5", flags, meta_opcode | 0x5, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T6", flags, meta_opcode | 0x6, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T7", flags, meta_opcode | 0x7, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T8", flags, meta_opcode | 0x8, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "T9", flags, meta_opcode | 0x9, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TA", flags, meta_opcode | 0xa, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TB", flags, meta_opcode | 0xb, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TC", flags, meta_opcode | 0xc, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TD", flags, meta_opcode | 0xd, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TE", flags, meta_opcode | 0xe, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
- { "TF", flags, meta_opcode | 0xf, meta_mask, insn_type, ENC_DTEMPLATE, 0 }
- /* Unimplemented GP instructions:
- CPR - coprocessor read
- CPW - coprocessor write
- MORT - morton order operation
- VPACK, VADD, VSUB - vector instructions
-
- The order of the entries in this table is extremely important. DO
- NOT modify it unless you know what you're doing. If you do modify
- it, be sure to run the entire testsuite to make sure you haven't
- caused a regression. */
- static const insn_template metag_optab[] =
- {
- /* Port-to-unit MOV */
- COND_INSN ("MOVB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa1800000, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
- COND_INSN ("MOVW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa1800001, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
- COND_INSN ("MOVD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa1800200, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
- COND_INSN ("MOVL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa2800000, 0xfff8019f, INSN_GP, ENC_MOV_PORT, 0),
- /* Read pipeline prime/drain */
- { "MMOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xca000000, 0xff00001f, INSN_GP, ENC_MMOV, 0 },
- { "MMOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcb000000, 0xff00001f, INSN_GP, ENC_MMOV, 0 },
- { "MMOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcc000000, 0xff07c067, INSN_GP, ENC_MMOV, 0 },
- { "MMOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcd000000, 0xff07c067, INSN_GP, ENC_MMOV, 0 },
- /* Read pipeline flush */
- { "MDRD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xcc000002, 0xffffc07f, INSN_GP, ENC_MDRD, 0 },
- /* Unit-to-TTREC MOVL */
- COND_INSN ("MOVL", "", 1, CoreMeta12|CoreMeta21,
- 0xa2002001, 0xff003e7f, INSN_GP, ENC_MOVL_TTREC, 0),
- /* MOV to RA (extended) */
- { "MOVB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000000, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "MOVW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000002, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "MOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000004, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "MOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa6000006, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
- /* Extended GET */
- { "GETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000000, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "GETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000002, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "GETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000004, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "GETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa7000006, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- /* Extended SET */
- { "SETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000000, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "SETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000002, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "SETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000004, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- { "SETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa5000006, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
- /* MOV to RA */
- { "MOVB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc000000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
- { "MOVW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc100000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
- { "MOVD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc400000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
- { "MOVL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc500000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
- /* Standard GET */
- { "GETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc0000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "GETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc1000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "GETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- /* GET is a synonym for GETD. */
- { "GET", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "GETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc5000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- /* Standard SET */
- { "SETB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb0000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "SETW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb1000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "SETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- /* SET is a synonym for SETD. */
- { "SET", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- { "SETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb5000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
- /* Multiple GET */
- { "MGETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc8000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
- { "MGETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xc9000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
- /* Multiple SET */
- { "MSETD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb8000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
- { "MSETL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xb9000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
- /* Conditional SET */
- COND_INSN ("SETB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000000, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("SETW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000001, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("SETD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000200, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("SETL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa4000201, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- { "XFRD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xd0000000, 0xf2000000, INSN_GP, ENC_XFR, 0 },
- { "XFRL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xd2000000, 0xf2000000, INSN_GP, ENC_XFR, 0 },
- /* Fast control register setup */
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000000, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000001, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000004, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa9000005, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
- /* Internal transfer operations */
- { "JUMP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xac000000, 0xff000004, INSN_GP, ENC_JUMP, 0 },
- { "CALL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xac000004, 0xff000004, INSN_GP, ENC_JUMP, 0 },
- { "CALLR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xab000000, 0xff000000, INSN_GP, ENC_CALLR, 0 },
- /* Address unit ALU operations */
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x80000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000005, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x80000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x82000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x86000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x84000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x86000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x88000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "NEGT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000005, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x88000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x8e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- /* Data unit ALU operations */
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x00000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "MOVS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x08000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MOVS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MOVST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ADD", DspMeta21,
- 0x00000100, 0xfe000104, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_ACC2|DSP_ARGS_XACC|DSP_ARGS_IMM },
- { "ADD", DspMeta21,
- 0x02000003, 0xfe000003, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_IMM },
- COND_INSN ("ADD", "", 1, DspMeta21,
- 0x040001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x00000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "ADDS", DspMeta21,
- 0x08000100, 0xfe000104, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_ACC2 },
- { "ADDS", DspMeta21,
- 0x0a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x08000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x02000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADDST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x06000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("ADDS", "", 1, DspMeta21,
- 0x0c0001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- { "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x04000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x06000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ADDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x0e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x10000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "NEGS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x18000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "NEGS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "NEGT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "NEGST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "SUB", DspMeta21,
- 0x10000100, 0xfe000104, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_ACC2|DSP_ARGS_XACC },
- { "SUB", DspMeta21,
- 0x12000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x10000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x18000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x12000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUBS", DspMeta21,
- 0x18000100, 0xfe000104, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_ACC2 },
- { "SUBS", DspMeta21,
- 0x1a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "SUBST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x16000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("SUBS", "", 1, DspMeta21,
- 0x1c0001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- COND_INSN ("SUB", "", 1, DspMeta21,
- 0x140001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x14000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUBS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x16000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("SUBS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x1e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "AND", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x20000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x28000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ANDQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x20000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ANDSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x28000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "AND", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDSMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ANDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ANDMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x22000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ANDST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ANDSMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "AND", DspMeta21,
- 0x20000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "AND", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ANDQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ANDSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ANDQ", DspMeta21,
- 0x20000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ANDQ", "", 1, DspMeta21,
- 0x240001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("AND", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x24000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- { "ANDSQ", DspMeta21,
- 0x28000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ANDSQ", "", 1, DspMeta21,
- 0x2c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("ANDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("AND", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ANDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ANDQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x26000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- COND_INSN ("ANDSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x2e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- { "OR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x30000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x38000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "ORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x30000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x38000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "OR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORSMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "ORT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ORMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x32000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ORST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "ORSMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "OR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "ORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "ORQ", DspMeta21,
- 0x30000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ORQ", "", 1, DspMeta21,
- 0x340001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("OR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x34000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- { "ORSQ", DspMeta21,
- 0x38000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("ORSQ", "", 1, DspMeta21,
- 0x3c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("ORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("OR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("ORQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x36000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- COND_INSN ("ORSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x3e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- { "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x40000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x48000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "XORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x40000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x48000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORSMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "XORT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XORMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x42000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XORST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XORSMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "XORQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
- { "XORQ", DspMeta21,
- 0x40000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("XORQ", "", 1, DspMeta21,
- 0x440001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("XOR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x44000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- { "XORSQ", DspMeta21,
- 0x48000140, 0xfe000140, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
- COND_INSN ("XORSQ", "", 1, DspMeta21,
- 0x4c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_QR),
- COND_INSN ("XORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
- COND_INSN ("XOR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("XORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("XORQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x46000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- COND_INSN ("XORSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x4e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
- { "LSL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x50000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000020, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "LSLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x58000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000020, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSLS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "LSR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x50000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000060, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "LSRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x58000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "LSRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000060, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("LSRS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x50000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x540000a0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x54000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x58000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASLS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c0000a0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASLS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x500000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASR", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x540000e0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x540000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "ASRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x580000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
- { "ASRS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c0000e0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
- COND_INSN ("ASRS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x5c0000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x60000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x60000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- /* MUL is a synonym from MULD. */
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x60000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
- { "MULWT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MULDT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MULT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x62000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000020, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000060, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000060, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
- { "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000021, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- { "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000021, 0xfe000021, INSN_GP, ENC_ALU, 0 },
- COND_INSN ("MULW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MULD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MUL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x64000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MULW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MULD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000001, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- COND_INSN ("MUL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x66000001, 0xfe00003f, INSN_GP, ENC_ALU, 0),
- { "MIN", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000020, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
- { "MAX", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000024, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
- { "FFB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000004, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
- { "NORM", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000008, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
- { "ABS", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000028, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
- { "XSDB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000000, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "XSDSB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000008, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "XSDW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000002, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "XSDSW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa00000a, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "RTDW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa000006, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "RTDSW", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaa00000e, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "NMIN", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7000002c, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
- /* Condition setting operations */
- { "CMP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x70000000, 0xfef801fe, INSN_GP, ENC_CMP, 0 },
- { "TST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x78000000, 0xfef801fe, INSN_GP, ENC_CMP, 0 },
- { "CMP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000000, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "CMPMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000004, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "TST", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000000, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "TSTMB", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000004, 0xfe000005, INSN_GP, ENC_CMP, 0 },
- { "CMPT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000001, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- { "CMPMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x72000005, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- { "TSTT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000001, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- { "TSTMT", CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7a000005, 0xfe000007, INSN_GP, ENC_CMP, 0 },
- COND_INSN ("CMP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x74000000, 0xfef801fe, INSN_GP, ENC_CMP, 0),
- COND_INSN ("TST", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7c000000, 0xfef801fe, INSN_GP, ENC_CMP, 0),
- COND_INSN ("CMP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x76000000, 0xfef8003e, INSN_GP, ENC_CMP, 0),
- COND_INSN ("TST", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0x7e000000, 0xfef8003e, INSN_GP, ENC_CMP, 0),
- /* No-op (BNV) */
- { "NOP", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa0fffffe, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- /* Branch */
- COND_INSN ("B", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa0000000, 0xff00001f, INSN_GP, ENC_BRANCH, 0),
- COND_INSN ("B", "R", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa0000001, 0xff00001f, INSN_GP, ENC_BRANCH, 0),
- /* System operations */
- { "LOCK0", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa8000000, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "LOCK1", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa8000001, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "LOCK2", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa8000003, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "RTI", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3ffffff, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "RTH", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa37fffff, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- COND_INSN ("KICK", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3000001, 0xff003e1f, INSN_GP, ENC_KICK, 0),
- { "SWITCH", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xaf000000, 0xff000000, INSN_GP, ENC_SWITCH, 0 },
- { "DCACHE", CoreMeta11|CoreMeta12|CoreMeta21,
- 0xad000000, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
- { "ICACHEEXIT", CoreMeta12|CoreMeta21,
- 0xae000000, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "ICACHEEXITR", CoreMeta12|CoreMeta21,
- 0xae000001, 0xffffffff, INSN_GP, ENC_NONE, 0 },
- { "ICACHE", CoreMeta12|CoreMeta21,
- 0xae000000, 0xff0001e1, INSN_GP, ENC_ICACHE, 0 },
- { "ICACHER", CoreMeta12|CoreMeta21,
- 0xae000001, 0xff0001e1, INSN_GP, ENC_ICACHE, 0 },
- /* Meta 2 instructions */
- { "CACHERD", CoreMeta21,
- 0xad000081, 0xff000087, INSN_GP, ENC_CACHER, 0 },
- { "CACHERL", CoreMeta21,
- 0xad000083, 0xff000087, INSN_GP, ENC_CACHER, 0 },
- { "CACHEWD", CoreMeta21,
- 0xad000001, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
- { "CACHEWL", CoreMeta21,
- 0xad000003, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
- COND_INSN ("DEFR", "", 1, CoreMeta21,
- 0xa3002001, 0xff003e1f, INSN_GP, ENC_KICK, 0),
- { "BEXD", CoreMeta21,
- 0xaa000004, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "BEXSD", CoreMeta21,
- 0xaa00000c, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "BEXL", CoreMeta21,
- 0xaa000014, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "BEXSL", CoreMeta21,
- 0xaa00001c, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
- { "LNKGETB", CoreMeta21,
- 0xad000080, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- { "LNKGETW", CoreMeta21,
- 0xad000082, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- { "LNKGETD", CoreMeta21,
- 0xad000084, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- { "LNKGETL", CoreMeta21,
- 0xad000086, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
- COND_INSN ("LNKSETB", "", 1, CoreMeta21,
- 0xa4000080, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("LNKSETW", "", 1, CoreMeta21,
- 0xa4000081, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("LNKSETD", "", 1, CoreMeta21,
- 0xa4000280, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- COND_INSN ("LNKSETL", "", 1, CoreMeta21,
- 0xa4000281, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
- /* Meta 2 FPU instructions */
- /* Port-to-unit MOV */
- COND_INSN ("MOVL", "", 1, FpuMeta21,
- 0xa1800201, 0xfff83e1f, INSN_FPU, ENC_MOV_PORT, 0),
- /* Read pipeline drain */
- { "MMOVD", FpuMeta21,
- 0xce000006, 0xfffc007f, INSN_FPU, ENC_MMOV, 0 },
- { "MMOVL", FpuMeta21,
- 0xcf000006, 0xfffc007f, INSN_FPU, ENC_MMOV, 0 },
- /* FP data movement instructions */
- FCOND_INSN ("ABS", "", 1, FpuMeta21,
- 0xf0000080, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
- { "MMOVD", FpuMeta21,
- 0xbe000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MMOVL", FpuMeta21,
- 0xbf000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MMOVD", FpuMeta21,
- 0xce000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MMOVL", FpuMeta21,
- 0xcf000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
- { "MOVD", FpuMeta21,
- 0x08000144, 0xfe03e1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- { "MOVD", FpuMeta21,
- 0x080001c4, 0xfe83c1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- { "MOVL", FpuMeta21,
- 0x08000154, 0xfe03e1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- { "MOVL", FpuMeta21,
- 0x080001d4, 0xfe83c1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
- FCOND_INSN ("MOV", "", 1, FpuMeta21,
- 0xf0000000, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
- { "MOV", FpuMeta21,
- 0xf0000001, 0xff800001, INSN_FPU, ENC_FMOV_I, 0 },
- FCOND_INSN ("NEG", "", 1, FpuMeta21,
- 0xf0000100, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
- { "PACK", FpuMeta21,
- 0xf0000180, 0xff8c21ff, INSN_FPU, ENC_FPACK, 0 },
- { "SWAP", FpuMeta21,
- 0xf00001c0, 0xff8c7fff, INSN_FPU, ENC_FSWAP, 0 },
- /* FP comparison instructions */
- FCOND_INSN ("CMP", "", 1, FpuMeta21,
- 0xf3000000, 0xfff4201f, INSN_FPU, ENC_FCMP, 0),
- FCOND_INSN ("MAX", "", 1, FpuMeta21,
- 0xf3000081, 0xff84219f, INSN_FPU, ENC_FMINMAX, 0),
- FCOND_INSN ("MIN", "", 1, FpuMeta21,
- 0xf3000001, 0xff84219f, INSN_FPU, ENC_FMINMAX, 0),
- /* FP data conversion instructions */
- FCOND_INSN ("DTOF", "", 1, FpuMeta21,
- 0xf2000121, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("FTOD", "", 1, FpuMeta21,
- 0xf2000101, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("DTOH", "", 1, FpuMeta21,
- 0xf2000320, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("FTOH", "", 1, FpuMeta21,
- 0xf2000300, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("DTOI", "", 1, FpuMeta21,
- 0xf2002120, 0xff842fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("FTOI", "", 1, FpuMeta21,
- 0xf2002100, 0xff842fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("DTOL", "", 1, FpuMeta21,
- 0xf2002320, 0xff8c6fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("DTOX", "", 1, FpuMeta21,
- 0xf2000020, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("FTOX", "", 1, FpuMeta21,
- 0xf2000000, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("DTOXL", "", 1, FpuMeta21,
- 0xf20000a0, 0xff8c40ff, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("HTOD", "", 1, FpuMeta21,
- 0xf2000321, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("HTOF", "", 1, FpuMeta21,
- 0xf2000301, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("ITOD", "", 1, FpuMeta21,
- 0xf2002121, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("ITOF", "", 1, FpuMeta21,
- 0xf2002101, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("LTOD", "", 1, FpuMeta21,
- 0xf2002321, 0xff8c7fff, INSN_FPU, ENC_FCONV, 0),
- FCOND_INSN ("XTOD", "", 1, FpuMeta21,
- 0xf2000021, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("XTOF", "", 1, FpuMeta21,
- 0xf2000001, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
- FCOND_INSN ("XLTOD", "", 1, FpuMeta21,
- 0xf20000a1, 0xff8c40ff, INSN_FPU, ENC_FCONVX, 0),
- /* FP basic arithmetic instructions */
- FCOND_INSN ("ADD", "", 1, FpuMeta21,
- 0xf1000001, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
- FCOND_INSN ("MUL", "", 1, FpuMeta21,
- 0xf1000100, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
- FCOND_INSN ("SUB", "", 1, FpuMeta21,
- 0xf1000101, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
- /* FP extended arithmetic instructions */
- { "MAC", FpuMeta21,
- 0xf6000000, 0xfffc219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MACS", FpuMeta21,
- 0xf6000100, 0xfffc219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAR", FpuMeta21,
- 0xf6000004, 0xff84211f, INSN_FPU, ENC_FEARITH, 0 },
- { "MARS", FpuMeta21,
- 0xf6000104, 0xff84211f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAW", FpuMeta21,
- 0xf6000008, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAWS", FpuMeta21,
- 0xf6000108, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAW1", FpuMeta21,
- 0xf6000009, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
- { "MAWS1", FpuMeta21,
- 0xf6000109, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
- FCOND_INSN ("MXA", "", 1, FpuMeta21,
- 0xf5000000, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
- FCOND_INSN ("MXAS", "", 1, FpuMeta21,
- 0xf5000100, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
- FCOND_INSN ("MXA1", "", 1, FpuMeta21,
- 0xf5000001, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
- FCOND_INSN ("MXAS1", "", 1, FpuMeta21,
- 0xf5000101, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
- { "MUZ", FpuMeta21,
- 0xf6000010, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
- { "MUZS", FpuMeta21,
- 0xf6000110, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
- { "MUZ1", FpuMeta21,
- 0xf6000011, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
- { "MUZS1", FpuMeta21,
- 0xf6000111, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
- { "RCP", FpuMeta21,
- 0xf7000000, 0xff84391f, INSN_FPU, ENC_FREC, 0 },
- { "RSQ", FpuMeta21,
- 0xf7000100, 0xff84391f, INSN_FPU, ENC_FREC, 0 },
- /* FP SIMD arithmetic instructions */
- { "ADDRE", FpuMeta21,
- 0xf4000000, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
- { "MULRE", FpuMeta21,
- 0xf4000001, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
- { "SUBRE", FpuMeta21,
- 0xf4000100, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
- /* FP memory instructions */
- { "MGETD", FpuMeta21,
- 0xce000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MGET", FpuMeta21,
- 0xce000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MGETL", FpuMeta21,
- 0xcf000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MSETD", FpuMeta21,
- 0xbe000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MSET", FpuMeta21,
- 0xbe000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- { "MSETL", FpuMeta21,
- 0xbf000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
- /* FP accumulator memory instructions */
- { "GETL", FpuMeta21,
- 0xcf000004, 0xffe03f9f, INSN_FPU, ENC_FGET_SET_ACF, 0 },
- { "SETL", FpuMeta21,
- 0xbf000004, 0xffe03f9f, INSN_FPU, ENC_FGET_SET_ACF, 0 },
- /* DSP FPU data movement */
- { "MOV", DspMeta21|FpuMeta21,
- 0x08000146, 0xfe0001ee, INSN_DSP_FPU, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC1 },
- { "MOV", DspMeta21|FpuMeta21,
- 0x080001c6, 0xfe0001ee, INSN_DSP_FPU, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- /* Unit-to-unit MOV */
- COND_INSN ("MOV", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3000000, 0xff00021f, INSN_GP, ENC_MOV_U2U, 0),
- COND_INSN ("TTMOV", "", 1, CoreMeta12|CoreMeta21,
- 0xa3000201, 0xff00021f, INSN_GP, ENC_MOV_U2U, 0),
- COND_INSN ("SWAP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
- 0xa3000200, 0xff00021f, INSN_GP, ENC_SWAP, 0),
- /* DSP memory instructions */
- { "GETD", DspMeta21,
- 0x94000100, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
- { "SETD", DspMeta21,
- 0x94000000, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
- { "GETL", DspMeta21,
- 0x94000104, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
- { "SETL", DspMeta21,
- 0x94000004, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
- /* DSP read pipeline prime/drain */
- { "MMOVD", DspMeta21,
- 0xca000001, 0xff00001f, INSN_DSP, ENC_MMOV, 0 },
- { "MMOVL", DspMeta21,
- 0xcb000001, 0xff00001f, INSN_DSP, ENC_MMOV, 0 },
- { "MMOVD", DspMeta21,
- 0xcc000001, 0xff07c067, INSN_DSP, ENC_MMOV, 0 },
- { "MMOVL", DspMeta21,
- 0xcd000001, 0xff07c067, INSN_DSP, ENC_MMOV, 0 },
- /* DSP Template instantiation */
- TEMPLATE_INSN (DspMeta21, 0x90000000, 0xff00000f, INSN_DSP),
- TEMPLATE_INSN (DspMeta21, 0x93000000, 0xff0001ff, INSN_DSP),
- TEMPLATE_INSN (DspMeta21, 0x95000000, 0xff00000f, INSN_DSP),
- { "AND", DspMeta21,
- 0x22000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ANDS", DspMeta21,
- 0x28000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "ANDS", DspMeta21,
- 0x2a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "MAX", DspMeta21,
- 0x70000124, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "MIN", DspMeta21,
- 0x70000120, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "NMIN", DspMeta21,
- 0x7000012c, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "OR", DspMeta21,
- 0x30000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "OR", DspMeta21,
- 0x32000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ORS", DspMeta21,
- 0x38000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "ORS", DspMeta21,
- 0x3a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "XOR", DspMeta21,
- 0x40000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "XOR", DspMeta21,
- 0x42000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "XORS", DspMeta21,
- 0x48000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
- { "XORS", DspMeta21,
- 0x4a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ADDB8", DspMeta21,
- 0x20000108, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "ADDT8", DspMeta21,
- 0x2000010c, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "ADDSB8", DspMeta21,
- 0x28000108, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "ADDST8", DspMeta21,
- 0x2800010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULB8", DspMeta21,
- 0x40000108, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULT8", DspMeta21,
- 0x4000010c, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULSB8", DspMeta21,
- 0x48000108, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MULST8", DspMeta21,
- 0x4800010c, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBB8", DspMeta21,
- 0x30000108, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBT8", DspMeta21,
- 0x3000010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBSB8", DspMeta21,
- 0x38000108, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "SUBST8", DspMeta21,
- 0x3800010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
- { "MUL", DspMeta21,
- 0x60000100, 0xfe000100, INSN_DSP, ENC_DALU,
- DSP_ARGS_1|DSP_ARGS_DACC },
- { "MUL", DspMeta21,
- 0x62000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
- { "ABS", DspMeta21,
- 0x70000128, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "FFB", DspMeta21,
- 0x70000104, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "NORM", DspMeta21,
- 0x70000108, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "CMP", DspMeta21,
- 0x70000000, 0xfe0000ec, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "CMP", DspMeta21,
- 0x72000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "TST", DspMeta21,
- 0x78000100, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "TST", DspMeta21,
- 0x7a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
- { "MOV", DspMeta21,
- 0x00000104, 0xfe078146, INSN_DSP, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC1|DSP_ARGS_DSP_SRC2|DSP_ARGS_IMM },
- { "MOVS", DspMeta21,
- 0x08000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "MOV", DspMeta21,
- 0x91000000, 0xff000000, INSN_DSP, ENC_DALU,
- DSP_ARGS_2|DSP_ARGS_DSP_SRC1|DSP_ARGS_IMM },
- { "MOV", DspMeta21,
- 0x92000000, 0xff000000, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "NEG", DspMeta21,
- 0x10000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "NEGS", DspMeta21,
- 0x18000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
- { "XSDB", DspMeta21,
- 0xaa000100, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSD", DspMeta21,
- 0xaa000100, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDW", DspMeta21,
- 0xaa000102, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDSB", DspMeta21,
- 0xaa000108, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDS", DspMeta21,
- 0xaa000108, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "XSDSW", DspMeta21,
- 0xaa00010a, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "LSL", DspMeta21,
- 0x50000100, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "LSR", DspMeta21,
- 0x50000140, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASL", DspMeta21,
- 0x50000180, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASR", DspMeta21,
- 0x500001c0, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "LSL", DspMeta21,
- 0x54000120, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- { "LSR", DspMeta21,
- 0x54000160, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- { "ASL", DspMeta21,
- 0x540001a0, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- { "ASR", DspMeta21,
- 0x540001e0, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
- COND_INSN ("LSL", "", 1, DspMeta21,
- 0x54000100, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("LSR", "", 1, DspMeta21,
- 0x54000140, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASL", "", 1, DspMeta21,
- 0x54000180, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASR", "", 1, DspMeta21,
- 0x540001c0, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- { "LSLS", DspMeta21,
- 0x58000100, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "LSRS", DspMeta21,
- 0x58000140, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASLS", DspMeta21,
- 0x58000180, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- { "ASRS", DspMeta21,
- 0x580001c0, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
- COND_INSN ("LSLS", "", 1, DspMeta21,
- 0x5c000100, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("LSRS", "", 1, DspMeta21,
- 0x5c000140, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASLS", "", 1, DspMeta21,
- 0x5c000180, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- COND_INSN ("ASRS", "", 1, DspMeta21,
- 0x5c0001c0, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
- { "LSLS", DspMeta21,
- 0x5c000120, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "LSRS", DspMeta21,
- 0x5c000160, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "ASLS", DspMeta21,
- 0x5c0001a0, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "ASRS", DspMeta21,
- 0x5c0001e0, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
- { "RTDW", DspMeta21,
- 0xaa000106, 0xff00010e, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- { "RTDSW", DspMeta21,
- 0xaa00010e, 0xff00010e, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
- };
- #define UNIT_MASK 0xf
- #define SHORT_UNIT_MASK 0x3
- #define EXT_BASE_REG_MASK 0x1
- #define REG_MASK 0x1f
- #define CC_MASK 0xf
- #define RMASK_MASK 0x7f
- #define GET_SET_IMM_MASK 0x3f
- #define GET_SET_IMM_BITS 6
- #define GET_SET_EXT_IMM_MASK 0xfff
- #define GET_SET_EXT_IMM_BITS 12
- #define DGET_SET_IMM_MASK 0x3
- #define DGET_SET_IMM_BITS 2
- #define MGET_MSET_MAX_REGS 8
- #define MMOV_MAX_REGS 8
- #define IMM16_MASK 0xffff
- #define IMM16_BITS 16
- #define IMM19_MASK 0x7ffff
- #define IMM19_BITS 19
- #define IMM8_MASK 0xff
- #define IMM8_BITS 8
- #define IMM24_MASK 0xffffff
- #define IMM24_BITS 24
- #define IMM5_MASK 0x1f
- #define IMM5_BITS 5
- #define IMM6_MASK 0x3f
- #define IMM6_BITS 6
- #define IMM15_MASK 0x7fff
- #define IMM15_BITS 15
- #define IMM4_MASK 0x1f
- #define IMM4_BITS 4
- #define CALLR_REG_MASK 0x7
- #define CPC_REG_MASK 0xf
- #define O2R_REG_MASK 0x7
- #define ACF_PART_MASK 0x3
- #define DSP_REG_MASK 0xf
- #define DSP_PART_MASK 0x17
- #define TEMPLATE_NUM_REGS 4
- #define TEMPLATE_REGS_MASK 0xf
- #define IS_TEMPLATE_DEF(insn) (insn->dsp_daoppame_flags & DSP_DAOPPAME_TEMP)
- unsigned int metag_get_set_size_bytes (unsigned int opcode);
- unsigned int metag_get_set_ext_size_bytes (unsigned int opcode);
- unsigned int metag_cond_set_size_bytes (unsigned int opcode);
|