mips_def.h 80 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310
  1. /*
  2. * File : mips_def.h
  3. * This file is part of RT-Thread RTOS
  4. * COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License along
  17. * with this program; if not, write to the Free Software Foundation, Inc.,
  18. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  19. *
  20. * Change Logs:
  21. * Date Author Notes
  22. * 2016Äê9ÔÂ7ÈÕ Urey the first version
  23. */
  24. #ifndef _COMMON_MIPS_DEF_H_
  25. #define _COMMON_MIPS_DEF_H_
  26. /*
  27. ************************************************************************
  28. * I N S T R U C T I O N F O R M A T S *
  29. ************************************************************************
  30. *
  31. * The following definitions describe each field in an instruction. There
  32. * is one diagram for each type of instruction, with field definitions
  33. * following the diagram for that instruction. Note that if a field of
  34. * the same name and position is defined in an earlier diagram, it is
  35. * not defined again in the subsequent diagram. Only new fields are
  36. * defined for each diagram.
  37. *
  38. * R-Type (operate)
  39. *
  40. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  41. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  42. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  43. * | | rs | rt | rd | sa | |
  44. * | Opcode | | | Tcode | func |
  45. * | | Bcode | | sel |
  46. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  47. */
  48. #define S_InstnOpcode 26
  49. #define M_InstnOpcode (0x3f << S_InstnOpcode)
  50. #define S_InstnRS 21
  51. #define M_InstnRS (0x1f << S_InstnRS)
  52. #define S_InstnRT 16
  53. #define M_InstnRT (0x1f << S_InstnRT)
  54. #define S_InstnRD 11
  55. #define M_InstnRD (0x1f << S_InstnRD)
  56. #define S_InstnSA 6
  57. #define M_InstnSA (0x1f << S_InstnSA)
  58. #define S_InstnTcode 6
  59. #define M_InstnTcode (0x3ff << S_InstnTcode)
  60. #define S_InstnBcode 6
  61. #define M_InstnBcode (0xfffff << S_InstnBcode)
  62. #define S_InstnFunc 0
  63. #define M_InstnFunc (0x3f << S_InstnFunc)
  64. #define S_InstnSel 0
  65. #define M_InstnSel (0x7 << S_InstnSel)
  66. /*
  67. * I-Type (load, store, branch, immediate)
  68. *
  69. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  70. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  71. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  72. * | Opcode | rs | rt | Offset |
  73. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  74. */
  75. #define S_InstnOffset 0
  76. #define M_InstnOffset (0xffff << S_InstnOffset)
  77. /*
  78. * I-Type (pref)
  79. *
  80. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  81. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  82. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  83. * | Opcode | rs | hint | Offset |
  84. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  85. */
  86. #define S_InstnHint S_InstnRT
  87. #define M_InstnHint M_InstnRT
  88. /*
  89. * J-Type (jump)
  90. *
  91. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  92. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  93. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  94. * | Opcode | JIndex |
  95. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  96. */
  97. #define S_InstnJIndex 0
  98. #define M_InstnJIndex (0x03ffffff << S_InstnJIndex)
  99. /*
  100. * FP R-Type (operate)
  101. *
  102. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  103. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  104. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  105. * | Opcode | fmt | ft | fs | fd | func |
  106. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  107. */
  108. #define S_InstnFmt S_InstnRS
  109. #define M_InstnFmt M_InstnRS
  110. #define S_InstnFT S_InstnRT
  111. #define M_InstnFT M_InstnRT
  112. #define S_InstnFS S_InstnRD
  113. #define M_InstnFS M_InstnRD
  114. #define S_InstnFD S_InstnSA
  115. #define M_InstnFD M_InstnSA
  116. /*
  117. * FP R-Type (cpu <-> cpu data movement))
  118. *
  119. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  120. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  121. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  122. * | Opcode | sub | rt | fs | 0 |
  123. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  124. */
  125. #define S_InstnSub S_InstnRS
  126. #define M_InstnSub M_InstnRS
  127. /*
  128. * FP R-Type (compare)
  129. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  130. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  131. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  132. * | | | | | | |C| |
  133. * | Opcode | fmt | ft | fs | cc |0|A| func |
  134. * | | | | | | |B| |
  135. * | | | | | | |S| |
  136. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  137. */
  138. #define S_InstnCCcmp 8
  139. #define M_InstnCCcmp (0x7 << S_InstnCCcmp)
  140. #define S_InstnCABS 6
  141. #define M_InstnCABS (0x1 << S_InstnCABS)
  142. /*
  143. * FP R-Type (FPR conditional move on FP cc)
  144. *
  145. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  146. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  147. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  148. * | Opcode | fmt | cc |n|t| fs | fd | func |
  149. * | | | |d|f| | | |
  150. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  151. */
  152. #define S_InstnCC 18
  153. #define M_InstnCC (0x7 << S_InstnCC)
  154. #define S_InstnND 17
  155. #define M_InstnND (0x1 << S_InstnND)
  156. #define S_InstnTF 16
  157. #define M_InstnTF (0x1 << S_InstnTF)
  158. /*
  159. * FP R-Type (3-operand operate)
  160. *
  161. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  162. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  163. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  164. * | Opcode | fr | ft | fs | fd | op4 | fmt3|
  165. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  166. */
  167. #define S_InstnFR S_InstnRS
  168. #define M_InstnFR M_InstnRS
  169. #define S_InstnOp4 3
  170. #define M_InstnOp4 (0x7 << S_InstnOp4)
  171. #define S_InstnFmt3 0
  172. #define M_InstnFmt3 (0x7 << S_InstnFmt3)
  173. /*
  174. * FP R-Type (Indexed load, store)
  175. *
  176. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  177. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  178. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  179. * | Opcode | rs | rt | 0 | fd | func |
  180. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  181. */
  182. /*
  183. * FP R-Type (prefx)
  184. *
  185. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  186. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  187. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  188. * | Opcode | rs | rt | hint | 0 | func |
  189. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  190. */
  191. #define S_InstnHintX S_InstnRD
  192. #define M_InstnHintX M_InstnRD
  193. /*
  194. * FP R-Type (GPR conditional move on FP cc)
  195. *
  196. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  197. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  198. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  199. * | Opcode | rs | cc |n|t| rd | 0 | func |
  200. * | | | |d|f| | | |
  201. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  202. */
  203. /*
  204. * FP I-Type (load, store)
  205. *
  206. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  207. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  208. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  209. * | Opcode | rs | ft | Offset |
  210. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  211. */
  212. /*
  213. * FP I-Type (branch)
  214. *
  215. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  216. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  217. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  218. * | Opcode | fmt | cc |n|t| Offset |
  219. * | | | |d|f| |
  220. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  221. */
  222. /*
  223. *************************************************************************
  224. * V I R T U A L A D D R E S S D E F I N I T I O N S *
  225. *************************************************************************
  226. */
  227. #ifdef MIPSADDR64
  228. #define A_K0BASE UNS64Const(0xffffffff80000000)
  229. #define A_K1BASE UNS64Const(0xffffffffa0000000)
  230. #define A_K2BASE UNS64Const(0xffffffffc0000000)
  231. #define A_K3BASE UNS64Const(0xffffffffe0000000)
  232. #define A_REGION UNS64Const(0xc000000000000000)
  233. #define A_XKPHYS_ATTR UNS64Const(0x3800000000000000)
  234. #else
  235. #define A_K0BASE 0x80000000
  236. #define A_K1BASE 0xa0000000
  237. #define A_K2BASE 0xc0000000
  238. #define A_K3BASE 0xe0000000
  239. #endif
  240. #define M_KMAPPED 0x40000000 /* KnSEG address is mapped if bit is one */
  241. #ifdef MIPS_Model64
  242. #define S_VMAP64 62
  243. #define M_VMAP64 UNS64Const(0xc000000000000000)
  244. #define K_VMode11 3
  245. #define K_VMode10 2
  246. #define K_VMode01 1
  247. #define K_VMode00 0
  248. #define S_KSEG3 29
  249. #define M_KSEG3 (0x7 << S_KSEG3)
  250. #define K_KSEG3 7
  251. #define S_SSEG 29
  252. #define M_SSEG (0x7 << S_KSEG3)
  253. #define K_SSEG 6
  254. #define S_KSSEG 29
  255. #define M_KSSEG (0x7 << S_KSEG3)
  256. #define K_KSSEG 6
  257. #define S_KSEG1 29
  258. #define M_KSEG1 (0x7 << S_KSEG3)
  259. #define K_KSEG1 5
  260. #define S_KSEG0 29
  261. #define M_KSEG0 (0x7 << S_KSEG3)
  262. #define K_KSEG0 4
  263. #define S_XKSEG 29
  264. #define M_XKSEG (0x7 << S_KSEG3)
  265. #define K_XKSEG 3
  266. #define S_USEG 31
  267. #define M_USEG (0x1 << S_USEG)
  268. #define K_USEG 0
  269. #define S_EjtagProbeMem 20
  270. #define M_EjtagProbeMem (0x1 << S_EjtagProbeMem)
  271. #define K_EjtagProbeMem 0
  272. #else
  273. #define S_KSEG3 29
  274. #define M_KSEG3 (0x7 << S_KSEG3)
  275. #define K_KSEG3 7
  276. #define S_KSSEG 29
  277. #define M_KSSEG (0x7 << S_KSSEG)
  278. #define K_KSSEG 6
  279. #define S_SSEG 29
  280. #define M_SSEG (0x7 << S_SSEG)
  281. #define K_SSEG 6
  282. #define S_KSEG1 29
  283. #define M_KSEG1 (0x7 << S_KSEG1)
  284. #define K_KSEG1 5
  285. #define S_KSEG0 29
  286. #define M_KSEG0 (0x7 << S_KSEG0)
  287. #define K_KSEG0 4
  288. #define S_KUSEG 31
  289. #define M_KUSEG (0x1 << S_KUSEG)
  290. #define K_KUSEG 0
  291. #define S_SUSEG 31
  292. #define M_SUSEG (0x1 << S_SUSEG)
  293. #define K_SUSEG 0
  294. #define S_USEG 31
  295. #define M_USEG (0x1 << S_USEG)
  296. #define K_USEG 0
  297. #define K_EjtagLower 0xff200000
  298. #define K_EjtagUpper 0xff3fffff
  299. #define S_EjtagProbeMem 20
  300. #define M_EjtagProbeMem (0x1 << S_EjtagProbeMem)
  301. #define K_EjtagProbeMem 0
  302. #endif
  303. /*
  304. *************************************************************************
  305. * C A C H E I N S T R U C T I O N O P E R A T I O N C O D E S *
  306. *************************************************************************
  307. */
  308. /*
  309. * Cache encodings
  310. */
  311. #define K_CachePriI 0 /* Primary Icache */
  312. #define K_CachePriD 1 /* Primary Dcache */
  313. #define K_CachePriU 1 /* Unified primary */
  314. #define K_CacheTerU 2 /* Unified Tertiary */
  315. #define K_CacheSecU 3 /* Unified secondary */
  316. /*
  317. * Function encodings
  318. */
  319. #define S_CacheFunc 2 /* Amount to shift function encoding within 5-bit field */
  320. #define K_CacheIndexInv 0 /* Index invalidate */
  321. #define K_CacheIndexWBInv 0 /* Index writeback invalidate */
  322. #define K_CacheIndexLdTag 1 /* Index load tag */
  323. #define K_CacheIndexStTag 2 /* Index store tag */
  324. #define K_CacheHitInv 4 /* Hit Invalidate */
  325. #define K_CacheFill 5 /* Fill (Icache only) */
  326. #define K_CacheHitWBInv 5 /* Hit writeback invalidate */
  327. #define K_CacheHitWB 6 /* Hit writeback */
  328. #define K_CacheFetchLock 7 /* Fetch and lock */
  329. #define ICIndexInv ((K_CacheIndexInv << S_CacheFunc) | K_CachePriI)
  330. #define DCIndexWBInv ((K_CacheIndexWBInv << S_CacheFunc) | K_CachePriD)
  331. #define DCIndexInv DCIndexWBInv
  332. #define ICIndexLdTag ((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriI)
  333. #define DCIndexLdTag ((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriD)
  334. #define ICIndexStTag ((K_CacheIndexStTag << S_CacheFunc) | K_CachePriI)
  335. #define DCIndexStTag ((K_CacheIndexStTag << S_CacheFunc) | K_CachePriD)
  336. #define ICHitInv ((K_CacheHitInv << S_CacheFunc) | K_CachePriI)
  337. #define DCHitInv ((K_CacheHitInv << S_CacheFunc) | K_CachePriD)
  338. #define ICFill ((K_CacheFill << S_CacheFunc) | K_CachePriI)
  339. #define DCHitWBInv ((K_CacheHitWBInv << S_CacheFunc) | K_CachePriD)
  340. #define DCHitWB ((K_CacheHitWB << S_CacheFunc) | K_CachePriD)
  341. #define ICFetchLock ((K_CacheFetchLock << S_CacheFunc) | K_CachePriI)
  342. #define DCFetchLock ((K_CacheFetchLock << S_CacheFunc) | K_CachePriD)
  343. /*
  344. *************************************************************************
  345. * P R E F E T C H I N S T R U C T I O N H I N T S *
  346. *************************************************************************
  347. */
  348. #define PrefLoad 0
  349. #define PrefStore 1
  350. #define PrefLoadStreamed 4
  351. #define PrefStoreStreamed 5
  352. #define PrefLoadRetained 6
  353. #define PrefStoreRetained 7
  354. #define PrefWBInval 25
  355. #define PrefNudge 25
  356. /*
  357. *************************************************************************
  358. * C P U R E G I S T E R D E F I N I T I O N S *
  359. *************************************************************************
  360. */
  361. /*
  362. *************************************************************************
  363. * S O F T W A R E G P R N A M E S *
  364. *************************************************************************
  365. */
  366. #ifdef __ASSEMBLY__
  367. #define zero $0
  368. #define AT $1
  369. #define v0 $2
  370. #define v1 $3
  371. #define a0 $4
  372. #define a1 $5
  373. #define a2 $6
  374. #define a3 $7
  375. #define t0 $8
  376. #define t1 $9
  377. #define t2 $10
  378. #define t3 $11
  379. #define t4 $12
  380. #define t5 $13
  381. #define t6 $14
  382. #define t7 $15
  383. #define s0 $16
  384. #define s1 $17
  385. #define s2 $18
  386. #define s3 $19
  387. #define s4 $20
  388. #define s5 $21
  389. #define s6 $22
  390. #define s7 $23
  391. #define t8 $24
  392. #define t9 $25
  393. #define k0 $26
  394. #define k1 $27
  395. #define gp $28
  396. #define sp $29
  397. #define fp $30
  398. #define ra $31
  399. /*
  400. * The following registers are used by the AVP environment and
  401. * are not part of the normal software definitions.
  402. */
  403. #ifdef MIPSAVPENV
  404. #define repc $25 /* Expected exception PC */
  405. #define tid $30 /* Current test case address */
  406. #endif
  407. /*
  408. *************************************************************************
  409. * H A R D W A R E G P R N A M E S *
  410. *************************************************************************
  411. *
  412. * In the AVP environment, several of the `r' names are removed from the
  413. * name space because they are used by the kernel for special purposes.
  414. * Removing them causes assembly rather than runtime errors for tests that
  415. * use the `r' names.
  416. *
  417. * - r25 (repc) is used as the expected PC on an exception
  418. * - r26-r27 (k0, k1) are used in the exception handler
  419. * - r30 (tid) is used as the current test address
  420. */
  421. #define r0 $0
  422. #define r1 $1
  423. #define r2 $2
  424. #define r3 $3
  425. #define r4 $4
  426. #define r5 $5
  427. #define r6 $6
  428. #define r7 $7
  429. #define r8 $8
  430. #define r9 $9
  431. #define r10 $10
  432. #define r11 $11
  433. #define r12 $12
  434. #define r13 $13
  435. #define r14 $14
  436. #define r15 $15
  437. #define r16 $16
  438. #define r17 $17
  439. #define r18 $18
  440. #define r19 $19
  441. #define r20 $20
  442. #define r21 $21
  443. #define r22 $22
  444. #define r23 $23
  445. #define r24 $24
  446. #ifdef MIPSAVPENV
  447. #define r25 r25_unknown
  448. #define r26 r26_unknown
  449. #define r27 r27_unknown
  450. #else
  451. #define r25 $25
  452. #define r26 $26
  453. #define r27 $27
  454. #endif
  455. #define r28 $28
  456. #define r29 $29
  457. #ifdef MIPSAVPENV
  458. #define r30 r30_unknown
  459. #else
  460. #define r30 $30
  461. #endif
  462. #define r31 $31
  463. #endif
  464. /*
  465. *************************************************************************
  466. * H A R D W A R E G P R I N D I C E S *
  467. *************************************************************************
  468. *
  469. * These definitions provide the index (number) of the GPR, as opposed
  470. * to the assembler register name ($n).
  471. */
  472. #define R_r0 0
  473. #define R_r1 1
  474. #define R_r2 2
  475. #define R_r3 3
  476. #define R_r4 4
  477. #define R_r5 5
  478. #define R_r6 6
  479. #define R_r7 7
  480. #define R_r8 8
  481. #define R_r9 9
  482. #define R_r10 10
  483. #define R_r11 11
  484. #define R_r12 12
  485. #define R_r13 13
  486. #define R_r14 14
  487. #define R_r15 15
  488. #define R_r16 16
  489. #define R_r17 17
  490. #define R_r18 18
  491. #define R_r19 19
  492. #define R_r20 20
  493. #define R_r21 21
  494. #define R_r22 22
  495. #define R_r23 23
  496. #define R_r24 24
  497. #define R_r25 25
  498. #define R_r26 26
  499. #define R_r27 27
  500. #define R_r28 28
  501. #define R_r29 29
  502. #define R_r30 30
  503. #define R_r31 31
  504. #define R_hi 32 /* Hi register */
  505. #define R_lo 33 /* Lo register */
  506. /*
  507. *************************************************************************
  508. * S O F T W A R E G P R M A S K S *
  509. *************************************************************************
  510. *
  511. * These definitions provide the bit mask corresponding to the GPR number
  512. */
  513. #define M_AT (1<<1)
  514. #define M_v0 (1<<2)
  515. #define M_v1 (1<<3)
  516. #define M_a0 (1<<4)
  517. #define M_a1 (1<<5)
  518. #define M_a2 (1<<6)
  519. #define M_a3 (1<<7)
  520. #define M_t0 (1<<8)
  521. #define M_t1 (1<<9)
  522. #define M_t2 (1<<10)
  523. #define M_t3 (1<<11)
  524. #define M_t4 (1<<12)
  525. #define M_t5 (1<<13)
  526. #define M_t6 (1<<14)
  527. #define M_t7 (1<<15)
  528. #define M_s0 (1<<16)
  529. #define M_s1 (1<<17)
  530. #define M_s2 (1<<18)
  531. #define M_s3 (1<<19)
  532. #define M_s4 (1<<20)
  533. #define M_s5 (1<<21)
  534. #define M_s6 (1<<22)
  535. #define M_s7 (1<<23)
  536. #define M_t8 (1<<24)
  537. #define M_t9 (1<<25)
  538. #define M_k0 (1<<26)
  539. #define M_k1 (1<<27)
  540. #define M_gp (1<<28)
  541. #define M_sp (1<<29)
  542. #define M_fp (1<<30)
  543. #define M_ra (1<<31)
  544. /*
  545. *************************************************************************
  546. * C P 0 R E G I S T E R D E F I N I T I O N S *
  547. *************************************************************************
  548. * Each register has the following definitions:
  549. *
  550. * C0_rrr The register number (as a $n value)
  551. * R_C0_rrr The register index (as an integer corresponding
  552. * to the register number)
  553. *
  554. * Each field in a register has the following definitions:
  555. *
  556. * S_rrrfff The shift count required to right-justify
  557. * the field. This corresponds to the bit
  558. * number of the right-most bit in the field.
  559. * M_rrrfff The Mask required to isolate the field.
  560. *
  561. * Register diagrams included below as comments correspond to the
  562. * MIPS32 and MIPS64 architecture specifications. Refer to other
  563. * sources for register diagrams for older architectures.
  564. */
  565. /*
  566. ************************************************************************
  567. * I N D E X R E G I S T E R ( 0 ) *
  568. ************************************************************************
  569. *
  570. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  571. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  572. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  573. * |P| 0 | Index | Index
  574. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  575. */
  576. #define C0_Index $0
  577. #define R_C0_Index 0
  578. #define C0_INX C0_Index /* OBSOLETE - DO NOT USE IN NEW CODE */
  579. #define S_IndexP 31 /* Probe failure (R)*/
  580. #define M_IndexP (0x1 << S_IndexP)
  581. #define S_IndexIndex 0 /* TLB index (R/W)*/
  582. #define M_IndexIndex (0x3f << S_IndexIndex)
  583. #define M_Index0Fields 0x7fffffc0
  584. #define M_IndexRFields 0x80000000
  585. /*
  586. ************************************************************************
  587. * R A N D O M R E G I S T E R ( 1 ) *
  588. ************************************************************************
  589. *
  590. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  591. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  592. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  593. * | 0 | Index | Random
  594. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  595. */
  596. #define C0_Random $1
  597. #define R_C0_Random 1
  598. #define C0_RAND $1 /* OBSOLETE - DO NOT USE IN NEW CODE */
  599. #define S_RandomIndex 0 /* TLB random index (R)*/
  600. #define M_RandomIndex (0x3f << S_RandomIndex)
  601. #define M_Random0Fields 0xffffffc0
  602. #define M_RandomRFields 0x0000003f
  603. /*
  604. ************************************************************************
  605. * E N T R Y L O 0 R E G I S T E R ( 2 ) *
  606. ************************************************************************
  607. *
  608. * 6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  609. * 3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  610. * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  611. * | Fill (0) //| 0 | PFN | C |D|V|G| EntryLo0
  612. * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  613. */
  614. #define C0_EntryLo0 $2
  615. #define R_C0_EntryLo0 2
  616. #define C0_TLBLO_0 C0_EntryLo0 /* OBSOLETE - DO NOT USE IN NEW CODE */
  617. #define S_EntryLoPFN 6 /* PFN (R/W) */
  618. #define M_EntryLoPFN (0xffffff << S_EntryLoPFN)
  619. #define S_EntryLoC 3 /* Coherency attribute (R/W) */
  620. #define M_EntryLoC (0x7 << S_EntryLoC)
  621. #define S_EntryLoD 2 /* Dirty (R/W) */
  622. #define M_EntryLoD (0x1 << S_EntryLoD)
  623. #define S_EntryLoV 1 /* Valid (R/W) */
  624. #define M_EntryLoV (0x1 << S_EntryLoV)
  625. #define S_EntryLoG 0 /* Global (R/W) */
  626. #define M_EntryLoG (0x1 << S_EntryLoG)
  627. #define M_EntryLoOddPFN (0x1 << S_EntryLoPFN) /* Odd PFN bit */
  628. #define S_EntryLo_RS K_PageAlign /* Right-justify PFN */
  629. #define S_EntryLo_LS S_EntryLoPFN /* Position PFN to appropriate position */
  630. #define M_EntryLo0Fields 0x00000000
  631. #define M_EntryLoRFields 0xc0000000
  632. #define M_EntryLo0Fields64 UNS64Const(0x0000000000000000)
  633. #define M_EntryLoRFields64 UNS64Const(0xffffffffc0000000)
  634. /*
  635. * Cache attribute values in the C field of EntryLo and the
  636. * K0 field of Config
  637. */
  638. #define K_CacheAttrCWTnWA 0 /* Cacheable, write-thru, no write allocate */
  639. #define K_CacheAttrCWTWA 1 /* Cacheable, write-thru, write allocate */
  640. #define K_CacheAttrU 2 /* Uncached */
  641. #define K_CacheAttrC 3 /* Cacheable */
  642. #define K_CacheAttrCN 3 /* Cacheable, non-coherent */
  643. #define K_CacheAttrCCE 4 /* Cacheable, coherent, exclusive */
  644. #define K_CacheAttrCCS 5 /* Cacheable, coherent, shared */
  645. #define K_CacheAttrCCU 6 /* Cacheable, coherent, update */
  646. #define K_CacheAttrUA 7 /* Uncached accelerated */
  647. /*
  648. ************************************************************************
  649. * E N T R Y L O 1 R E G I S T E R ( 3 ) *
  650. ************************************************************************
  651. *
  652. * 6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  653. * 3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  654. * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  655. * | Fill (0) //| 0 | PFN | C |D|V|G| EntryLo1
  656. * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  657. */
  658. #define C0_EntryLo1 $3
  659. #define R_C0_EntryLo1 3
  660. #define C0_TLBLO_1 C0_EntryLo1 /* OBSOLETE - DO NOT USE IN NEW CODE */
  661. /*
  662. * Field definitions are as given for EntryLo0 above
  663. */
  664. /*
  665. ************************************************************************
  666. * C O N T E X T R E G I S T E R ( 4 ) *
  667. ************************************************************************
  668. *
  669. * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  670. * 3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  671. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  672. * | // PTEBase | BadVPN<31:13> | 0 | Context
  673. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  674. */
  675. #define C0_Context $4
  676. #define R_C0_Context 4
  677. #define C0_CTXT C0_Context /* OBSOLETE - DO NOT USE IN NEW CODE */
  678. #define S_ContextPTEBase 23 /* PTE base (R/W) */
  679. #define M_ContextPTEBase (0x1ff << S_ContextPTEBase)
  680. #define S_ContextBadVPN 4 /* BadVPN2 (R) */
  681. #define M_ContextBadVPN (0x7ffff << S_ContextBadVPN)
  682. #define S_ContextBadVPN_LS 9 /* Position BadVPN to bit 31 */
  683. #define S_ContextBadVPN_RS 13 /* Right-justify shifted BadVPN field */
  684. #define M_Context0Fields 0x0000000f
  685. #define M_ContextRFields 0x007ffff0
  686. #define M_Context0Fields64 UNS64Const(0x000000000000000f)
  687. #define M_ContextRFields64 UNS64Const(0x00000000007ffff0)
  688. /*
  689. ************************************************************************
  690. * P A G E M A S K R E G I S T E R ( 5 ) *
  691. ************************************************************************
  692. *
  693. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  694. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  695. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  696. * | 0 | Mask | 0 | PageMask
  697. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  698. */
  699. #define C0_PageMask $5
  700. #define R_C0_PageMask 5 /* Mask (R/W) */
  701. #define C0_PGMASK C0_PageMask /* OBSOLETE - DO NOT USE IN NEW CODE */
  702. #define S_PageMaskMask 13
  703. #define M_PageMaskMask (0xfff << S_PageMaskMask)
  704. #define M_PageMask0Fields 0xfe001fff
  705. #define M_PageMaskRFields 0x00000000
  706. /*
  707. * Values in the Mask field
  708. */
  709. #define K_PageMask4K 0x000 /* K_PageMasknn values are values for use */
  710. #define K_PageMask16K 0x003 /* with KReqPageAttributes or KReqPageMask macros */
  711. #define K_PageMask64K 0x00f
  712. #define K_PageMask256K 0x03f
  713. #define K_PageMask1M 0x0ff
  714. #define K_PageMask4M 0x3ff
  715. #define K_PageMask16M 0xfff
  716. #define M_PageMask4K (K_PageMask4K << S_PageMaskMask) /* M_PageMasknn values are masks */
  717. #define M_PageMask16K (K_PageMask16K << S_PageMaskMask) /* in position in the PageMask register */
  718. #define M_PageMask64K (K_PageMask64K << S_PageMaskMask)
  719. #define M_PageMask256K (K_PageMask256K << S_PageMaskMask)
  720. #define M_PageMask1M (K_PageMask1M << S_PageMaskMask)
  721. #define M_PageMask4M (K_PageMask4M << S_PageMaskMask)
  722. #define M_PageMask16M (K_PageMask16M << S_PageMaskMask)
  723. /*
  724. ************************************************************************
  725. * W I R E D R E G I S T E R ( 6 ) *
  726. ************************************************************************
  727. *
  728. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  729. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  730. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  731. * | 0 | Index | Wired
  732. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  733. */
  734. #define C0_Wired $6
  735. #define R_C0_Wired 6
  736. #define C0_TLBWIRED C0_Wired /* OBSOLETE - DO NOT USE IN NEW CODE */
  737. #define S_WiredIndex 0 /* TLB wired boundary (R/W) */
  738. #define M_WiredIndex (0x3f << S_WiredIndex)
  739. #define M_Wired0Fields 0xffffffc0
  740. #define M_WiredRFields 0x00000000
  741. /*
  742. ************************************************************************
  743. * B A D V A D D R R E G I S T E R ( 8 ) *
  744. ************************************************************************
  745. *
  746. * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  747. * 3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  748. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  749. * | // Bad Virtual Address | BadVAddr
  750. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  751. */
  752. #define C0_BadVAddr $8
  753. #define R_C0_BadVAddr 8
  754. #define C0_BADVADDR C0_BadVAddr /* OBSOLETE - DO NOT USE IN NEW CODE */
  755. #define M_BadVAddrOddPage K_PageSize /* Even/Odd VA bit for pair of PAs */
  756. #define M_BadVAddr0Fields 0x00000000
  757. #define M_BadVAddrRFields 0xffffffff
  758. #define M_BadVAddr0Fields64 UNS64Const(0x0000000000000000)
  759. #define M_BadVAddrRFields64 UNS64Const(0xffffffffffffffff)
  760. /*
  761. ************************************************************************
  762. * C O U N T R E G I S T E R ( 9 ) *
  763. ************************************************************************
  764. *
  765. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  766. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  767. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  768. * | Count Value | Count
  769. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  770. */
  771. #define C0_Count $9
  772. #define R_C0_Count 9
  773. #define C0_COUNT C0_Count /* OBSOLETE - DO NOT USE IN NEW CODE */
  774. #define M_Count0Fields 0x00000000
  775. #define M_CountRFields 0x00000000
  776. /*
  777. ************************************************************************
  778. * E N T R Y H I R E G I S T E R ( 1 0 ) *
  779. ************************************************************************
  780. *
  781. * 6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  782. * 3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  783. * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  784. * | R | Fill // VPN2 | 0 | ASID | EntryHi
  785. * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  786. */
  787. #define C0_EntryHi $10
  788. #define R_C0_EntryHi 10
  789. #define C0_TLBHI C0_EntryHi /* OBSOLETE - DO NOT USE IN NEW CODE */
  790. #define S_EntryHiR64 62 /* Region (R/W) */
  791. #define M_EntryHiR64 UNS64Const(0xc000000000000000)
  792. #define S_EntryHiVPN2 13 /* VPN/2 (R/W) */
  793. #define M_EntryHiVPN2 (0x7ffff << S_EntryHiVPN2)
  794. #define M_EntryHiVPN264 UNS64Const(0x000000ffffffe000)
  795. #define S_EntryHiASID 0 /* ASID (R/W) */
  796. #define M_EntryHiASID (0xff << S_EntryHiASID)
  797. #define S_EntryHiVPN_Shf S_EntryHiVPN2
  798. #define M_EntryHi0Fields 0x00001f00
  799. #define M_EntryHiRFields 0x00000000
  800. #define M_EntryHi0Fields64 UNS64Const(0x0000000000001f00)
  801. #define M_EntryHiRFields64 UNS64Const(0x3fffff0000000000)
  802. /*
  803. ************************************************************************
  804. * C O M P A R E R E G I S T E R ( 1 1 ) *
  805. ************************************************************************
  806. *
  807. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  808. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  809. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  810. * | Compare Value | Compare
  811. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  812. */
  813. #define C0_Compare $11
  814. #define R_C0_Compare 11
  815. #define C0_COMPARE C0_Compare /* OBSOLETE - DO NOT USE IN NEW CODE */
  816. #define M_Compare0Fields 0x00000000
  817. #define M_CompareRFields 0x00000000
  818. /*
  819. ************************************************************************
  820. * S T A T U S R E G I S T E R ( 1 2 ) *
  821. ************************************************************************
  822. *
  823. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  824. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  825. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  826. * |C|C|C|C|R|F|R|M|P|B|T|S|M| | R |I|I|I|I|I|I|I|I|K|S|U|U|R|E|E|I|
  827. * |U|U|U|U|P|R|E|X|X|E|S|R|M| | s |M|M|M|M|M|M|M|M|X|X|X|M|s|R|X|E| Status
  828. * |3|2|1|0| | | | | |V| | |I| | v |7|6|5|4|3|2|1|0| | | | |v|L|L| |
  829. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  830. */
  831. #define C0_Status $12
  832. #define R_C0_Status 12
  833. #define C0_SR C0_Status /* OBSOLETE - DO NOT USE IN NEW CODE */
  834. #define S_StatusCU 28 /* Coprocessor enable (R/W) */
  835. #define M_StatusCU (0xf << S_StatusCU)
  836. #define S_StatusCU3 31
  837. #define M_StatusCU3 (0x1 << S_StatusCU3)
  838. #define S_StatusCU2 30
  839. #define M_StatusCU2 (0x1 << S_StatusCU2)
  840. #define S_StatusCU1 29
  841. #define M_StatusCU1 (0x1 << S_StatusCU1)
  842. #define S_StatusCU0 28
  843. #define M_StatusCU0 (0x1 << S_StatusCU0)
  844. #define S_StatusRP 27 /* Enable reduced power mode (R/W) */
  845. #define M_StatusRP (0x1 << S_StatusRP)
  846. #define S_StatusFR 26 /* Enable 64-bit FPRs (MIPS64 only) (R/W) */
  847. #define M_StatusFR (0x1 << S_StatusFR)
  848. #define S_StatusRE 25 /* Enable reverse endian (R/W) */
  849. #define M_StatusRE (0x1 << S_StatusRE)
  850. #define S_StatusMX 24 /* Enable access to MDMX resources (MIPS64 only) (R/W) */
  851. #define M_StatusMX (0x1 << S_StatusMX)
  852. #define S_StatusPX 23 /* Enable access to 64-bit instructions/data (MIPS64 only) (R/W) */
  853. #define M_StatusPX (0x1 << S_StatusPX)
  854. #define S_StatusBEV 22 /* Enable Boot Exception Vectors (R/W) */
  855. #define M_StatusBEV (0x1 << S_StatusBEV)
  856. #define S_StatusTS 21 /* Denote TLB shutdown (R/W) */
  857. #define M_StatusTS (0x1 << S_StatusTS)
  858. #define S_StatusSR 20 /* Denote soft reset (R/W) */
  859. #define M_StatusSR (0x1 << S_StatusSR)
  860. #define S_StatusNMI 19
  861. #define M_StatusNMI (0x1 << S_StatusNMI) /* Denote NMI (R/W) */
  862. #define S_StatusIM 8 /* Interrupt mask (R/W) */
  863. #define M_StatusIM (0xff << S_StatusIM)
  864. #define S_StatusIM7 15
  865. #define M_StatusIM7 (0x1 << S_StatusIM7)
  866. #define S_StatusIM6 14
  867. #define M_StatusIM6 (0x1 << S_StatusIM6)
  868. #define S_StatusIM5 13
  869. #define M_StatusIM5 (0x1 << S_StatusIM5)
  870. #define S_StatusIM4 12
  871. #define M_StatusIM4 (0x1 << S_StatusIM4)
  872. #define S_StatusIM3 11
  873. #define M_StatusIM3 (0x1 << S_StatusIM3)
  874. #define S_StatusIM2 10
  875. #define M_StatusIM2 (0x1 << S_StatusIM2)
  876. #define S_StatusIM1 9
  877. #define M_StatusIM1 (0x1 << S_StatusIM1)
  878. #define S_StatusIM0 8
  879. #define M_StatusIM0 (0x1 << S_StatusIM0)
  880. #define S_StatusKX 7 /* Enable access to extended kernel addresses (MIPS64 only) (R/W) */
  881. #define M_StatusKX (0x1 << S_StatusKX)
  882. #define S_StatusSX 6 /* Enable access to extended supervisor addresses (MIPS64 only) (R/W) */
  883. #define M_StatusSX (0x1 << S_StatusSX)
  884. #define S_StatusUX 5 /* Enable access to extended user addresses (MIPS64 only) (R/W) */
  885. #define M_StatusUX (0x1 << S_StatusUX)
  886. #define S_StatusKSU 3 /* Two-bit current mode (R/W) */
  887. #define M_StatusKSU (0x3 << S_StatusKSU)
  888. #define S_StatusUM 4 /* User mode if supervisor mode not implemented (R/W) */
  889. #define M_StatusUM (0x1 << S_StatusUM)
  890. #define S_StatusSM 3 /* Supervisor mode (R/W) */
  891. #define M_StatusSM (0x1 << S_StatusSM)
  892. #define S_StatusERL 2 /* Denotes error level (R/W) */
  893. #define M_StatusERL (0x1 << S_StatusERL)
  894. #define S_StatusEXL 1 /* Denotes exception level (R/W) */
  895. #define M_StatusEXL (0x1 << S_StatusEXL)
  896. #define S_StatusIE 0 /* Enables interrupts (R/W) */
  897. #define M_StatusIE (0x1 << S_StatusIE)
  898. #define M_Status0Fields 0x00040000
  899. #define M_StatusRFields 0x058000e0 /* FR, MX, PX, KX, SX, UX unused in MIPS32 */
  900. #define M_Status0Fields64 0x00040000
  901. #define M_StatusRFields64 0x00000000
  902. /*
  903. * Values in the KSU field
  904. */
  905. #define K_StatusKSU_U 2 /* User mode in KSU field */
  906. #define K_StatusKSU_S 1 /* Supervisor mode in KSU field */
  907. #define K_StatusKSU_K 0 /* Kernel mode in KSU field */
  908. /*
  909. ************************************************************************
  910. * C A U S E R E G I S T E R ( 1 3 ) *
  911. ************************************************************************
  912. *
  913. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  914. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  915. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  916. * |B| | C | |I|W| |I|I|I|I|I|I|I|I| | | R |
  917. * |D| | E | Rsvd |V|P| Rsvd |P|P|P|P|P|P|P|P| | ExcCode | s | Cause
  918. * | | | | | | | |7|6|5|4|3|2|1|0| | | v |
  919. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  920. */
  921. #define C0_Cause $13
  922. #define R_C0_Cause 13
  923. #define C0_CAUSE C0_Cause /* OBSOLETE - DO NOT USE IN NEW CODE */
  924. #define S_CauseBD 31
  925. #define M_CauseBD (0x1 << S_CauseBD)
  926. #define S_CauseCE 28
  927. #define M_CauseCE (0x3<< S_CauseCE)
  928. #define S_CauseIV 23
  929. #define M_CauseIV (0x1 << S_CauseIV)
  930. #define S_CauseWP 22
  931. #define M_CauseWP (0x1 << S_CauseWP)
  932. #define S_CauseIP 8
  933. #define M_CauseIP (0xff << S_CauseIP)
  934. #define S_CauseIPEXT 10
  935. #define M_CauseIPEXT (0x3f << S_CauseIPEXT)
  936. #define S_CauseIP7 15
  937. #define M_CauseIP7 (0x1 << S_CauseIP7)
  938. #define S_CauseIP6 14
  939. #define M_CauseIP6 (0x1 << S_CauseIP6)
  940. #define S_CauseIP5 13
  941. #define M_CauseIP5 (0x1 << S_CauseIP5)
  942. #define S_CauseIP4 12
  943. #define M_CauseIP4 (0x1 << S_CauseIP4)
  944. #define S_CauseIP3 11
  945. #define M_CauseIP3 (0x1 << S_CauseIP3)
  946. #define S_CauseIP2 10
  947. #define M_CauseIP2 (0x1 << S_CauseIP2)
  948. #define S_CauseIP1 9
  949. #define M_CauseIP1 (0x1 << S_CauseIP1)
  950. #define S_CauseIP0 8
  951. #define M_CauseIP0 (0x1 << S_CauseIP0)
  952. #define S_CauseExcCode 2
  953. #define M_CauseExcCode (0x1f << S_CauseExcCode)
  954. #define M_Cause0Fields 0x4f3f0083
  955. #define M_CauseRFields 0xb000fc7c
  956. /*
  957. * Values in the CE field
  958. */
  959. #define K_CauseCE0 0 /* Coprocessor 0 in the CE field */
  960. #define K_CauseCE1 1 /* Coprocessor 1 in the CE field */
  961. #define K_CauseCE2 2 /* Coprocessor 2 in the CE field */
  962. #define K_CauseCE3 3 /* Coprocessor 3 in the CE field */
  963. /*
  964. * Values in the ExcCode field
  965. */
  966. #define EX_INT 0 /* Interrupt */
  967. #define EXC_INT (EX_INT << S_CauseExcCode)
  968. #define EX_MOD 1 /* TLB modified */
  969. #define EXC_MOD (EX_MOD << S_CauseExcCode)
  970. #define EX_TLBL 2 /* TLB exception (load or ifetch) */
  971. #define EXC_TLBL (EX_TLBL << S_CauseExcCode)
  972. #define EX_TLBS 3 /* TLB exception (store) */
  973. #define EXC_TLBS (EX_TLBS << S_CauseExcCode)
  974. #define EX_ADEL 4 /* Address error (load or ifetch) */
  975. #define EXC_ADEL (EX_ADEL << S_CauseExcCode)
  976. #define EX_ADES 5 /* Address error (store) */
  977. #define EXC_ADES (EX_ADES << S_CauseExcCode)
  978. #define EX_IBE 6 /* Instruction Bus Error */
  979. #define EXC_IBE (EX_IBE << S_CauseExcCode)
  980. #define EX_DBE 7 /* Data Bus Error */
  981. #define EXC_DBE (EX_DBE << S_CauseExcCode)
  982. #define EX_SYS 8 /* Syscall */
  983. #define EXC_SYS (EX_SYS << S_CauseExcCode)
  984. #define EX_SYSCALL EX_SYS
  985. #define EXC_SYSCALL EXC_SYS
  986. #define EX_BP 9 /* Breakpoint */
  987. #define EXC_BP (EX_BP << S_CauseExcCode)
  988. #define EX_BREAK EX_BP
  989. #define EXC_BREAK EXC_BP
  990. #define EX_RI 10 /* Reserved instruction */
  991. #define EXC_RI (EX_RI << S_CauseExcCode)
  992. #define EX_CPU 11 /* CoProcessor Unusable */
  993. #define EXC_CPU (EX_CPU << S_CauseExcCode)
  994. #define EX_OV 12 /* OVerflow */
  995. #define EXC_OV (EX_OV << S_CauseExcCode)
  996. #define EX_TR 13 /* Trap instruction */
  997. #define EXC_TR (EX_TR << S_CauseExcCode)
  998. #define EX_TRAP EX_TR
  999. #define EXC_TRAP EXC_TR
  1000. #define EX_FPE 15 /* floating point exception */
  1001. #define EXC_FPE (EX_FPE << S_CauseExcCode)
  1002. #define EX_C2E 18 /* COP2 exception */
  1003. #define EXC_C2E (EX_C2E << S_CauseExcCode)
  1004. #define EX_MDMX 22 /* MDMX exception */
  1005. #define EXC_MDMX (EX_MDMX << S_CauseExcCode)
  1006. #define EX_WATCH 23 /* Watch exception */
  1007. #define EXC_WATCH (EX_WATCH << S_CauseExcCode)
  1008. #define EX_MCHECK 24 /* Machine check exception */
  1009. #define EXC_MCHECK (EX_MCHECK << S_CauseExcCode)
  1010. #define EX_CacheErr 30 /* Cache error caused re-entry to Debug Mode */
  1011. #define EXC_CacheErr (EX_CacheErr << S_CauseExcCode)
  1012. /*
  1013. ************************************************************************
  1014. * E P C R E G I S T E R ( 1 4 ) *
  1015. ************************************************************************
  1016. *
  1017. * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1018. * 3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1019. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1020. * | // Exception PC | EPC
  1021. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1022. */
  1023. #define C0_EPC $14
  1024. #define R_C0_EPC 14
  1025. #define M_EPC0Fields 0x00000000
  1026. #define M_EPCRFields 0x00000000
  1027. #define M_EPC0Fields64 UNS64Const(0x0000000000000000)
  1028. #define M_EPCRFields64 UNS64Const(0x0000000000000000)
  1029. /*
  1030. ************************************************************************
  1031. * P R I D R E G I S T E R ( 1 5 ) *
  1032. ************************************************************************
  1033. *
  1034. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1035. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1036. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1037. * | Company Opts | Company ID | Procesor ID | Revision | PRId
  1038. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1039. */
  1040. #define C0_PRId $15
  1041. #define R_C0_PRId 15
  1042. #define C0_PRID C0_PRID /* OBSOLETE - DO NOT USE IN NEW CODE */
  1043. #define S_PRIdCoOpt 24 /* Company options (R) */
  1044. #define M_PRIdCoOpt (0xff << S_PRIdCoOpt)
  1045. #define S_PRIdCoID 16 /* Company ID (R) */
  1046. #define M_PRIdCoID (0xff << S_PRIdCoID)
  1047. #define S_PRIdImp 8 /* Implementation ID (R) */
  1048. #define M_PRIdImp (0xff << S_PRIdImp)
  1049. #define S_PRIdRev 0 /* Revision (R) */
  1050. #define M_PRIdRev (0xff << S_PRIdRev)
  1051. #define M_PRId0Fields 0x00000000
  1052. #define M_PRIdRFields 0xffffffff
  1053. /*
  1054. * Values in the Company ID field
  1055. */
  1056. #define K_PRIdCoID_MIPS 1
  1057. #define K_PRIdCoID_Broadcom 2
  1058. #define K_PRIdCoID_Alchemy 3
  1059. #define K_PRIdCoID_SiByte 4
  1060. #define K_PRIdCoID_SandCraft 5
  1061. #define K_PRIdCoID_Philips 6
  1062. #define K_PRIdCoID_NextAvailable 7 /* Next available encoding */
  1063. /*
  1064. * Values in the implementation number field
  1065. */
  1066. #define K_PRIdImp_Jade 0x80
  1067. #define K_PRIdImp_Opal 0x81
  1068. #define K_PRIdImp_Ruby 0x82
  1069. #define K_PRIdImp_JadeLite 0x83
  1070. #define K_PRIdImp_4KEc 0x84 /* Emerald with TLB MMU */
  1071. #define K_PRIdImp_4KEmp 0x85 /* Emerald with FM MMU */
  1072. #define K_PRIdImp_4KSc 0x86 /* Coral */
  1073. #define K_PRIdImp_R3000 0x01
  1074. #define K_PRIdImp_R4000 0x04
  1075. #define K_PRIdImp_R10000 0x09
  1076. #define K_PRIdImp_R4300 0x0b
  1077. #define K_PRIdImp_R5000 0x23
  1078. #define K_PRIdImp_R5200 0x28
  1079. #define K_PRIdImp_R5400 0x54
  1080. /*
  1081. ************************************************************************
  1082. * C O N F I G R E G I S T E R ( 1 6 ) *
  1083. ************************************************************************
  1084. *
  1085. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1086. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1087. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1088. * |M| |B| A | A | | K | Config
  1089. * | | Reserved for Implementations|E| T | R | Reserved | 0 |
  1090. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1091. */
  1092. #define C0_Config $16
  1093. #define R_C0_Config 16
  1094. #define C0_CONFIG C0_Config /* OBSOLETE - DO NOT USE IN NEW CODE */
  1095. #define S_ConfigMore 31 /* Additional config registers present (R) */
  1096. #define M_ConfigMore (0x1 << S_ConfigMore)
  1097. #define S_ConfigImpl 16 /* Implementation-specific fields */
  1098. #define M_ConfigImpl (0x7fff << S_ConfigImpl)
  1099. #define S_ConfigBE 15 /* Denotes big-endian operation (R) */
  1100. #define M_ConfigBE (0x1 << S_ConfigBE)
  1101. #define S_ConfigAT 13 /* Architecture type (R) */
  1102. #define M_ConfigAT (0x3 << S_ConfigAT)
  1103. #define S_ConfigAR 10 /* Architecture revision (R) */
  1104. #define M_ConfigAR (0x7 << S_ConfigAR)
  1105. #define S_ConfigMT 7 /* MMU Type (R) */
  1106. #define M_ConfigMT (0x7 << S_ConfigMT)
  1107. #define S_ConfigK0 0 /* Kseg0 coherency algorithm (R/W) */
  1108. #define M_ConfigK0 (0x7 << S_ConfigK0)
  1109. /*
  1110. * The following definitions are technically part of the "reserved for
  1111. * implementations" field, but are the semi-standard definition used in
  1112. * fixed-mapping MMUs to control the cacheability of kuseg and kseg2/3
  1113. * references. For that reason, they are included here, but may be
  1114. * overridden by true implementation-specific definitions
  1115. */
  1116. #define S_ConfigK23 28 /* Kseg2/3 coherency algorithm (FM MMU only) (R/W) */
  1117. #define M_ConfigK23 (0x7 << S_ConfigK23)
  1118. #define S_ConfigKU 25 /* Kuseg coherency algorithm (FM MMU only) (R/W) */
  1119. #define M_ConfigKU (0x7 << S_ConfigKU)
  1120. #define M_Config0Fields 0x00000078
  1121. #define M_ConfigRFields 0x8000ff80
  1122. /*
  1123. * Values in the AT field
  1124. */
  1125. #define K_ConfigAT_MIPS32 0 /* MIPS32 */
  1126. #define K_ConfigAT_MIPS64S 1 /* MIPS64 with 32-bit addresses */
  1127. #define K_ConfigAT_MIPS64 2 /* MIPS64 with 32/64-bit addresses */
  1128. /*
  1129. * Values in the MT field
  1130. */
  1131. #define K_ConfigMT_NoMMU 0 /* No MMU */
  1132. #define K_ConfigMT_TLBMMU 1 /* Standard TLB MMU */
  1133. #define K_ConfigMT_BATMMU 2 /* Standard BAT MMU */
  1134. #define K_ConfigMT_FMMMU 3 /* Standard Fixed Mapping MMU */
  1135. /*
  1136. ************************************************************************
  1137. * C O N F I G 1 R E G I S T E R ( 1 6, SELECT 1 ) *
  1138. ************************************************************************
  1139. *
  1140. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1141. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1142. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1143. * |M| MMU Size | IS | IL | IA | DS | DL | DA |C|M|P|W|C|E|F| Config1
  1144. * | | | | | | | | |2|D|C|R|A|P|P|
  1145. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1146. */
  1147. #define C0_Config1 $16,1
  1148. #define R_C0_Config1 16
  1149. #define S_Config1More 31 /* Additional Config registers present (R) */
  1150. #define M_Config1More (0x1 << S_Config1More)
  1151. #define S_Config1MMUSize 25 /* Number of MMU entries - 1 (R) */
  1152. #define M_Config1MMUSize (0x3f << S_Config1MMUSize)
  1153. #define S_Config1IS 22 /* Icache sets per way (R) */
  1154. #define M_Config1IS (0x7 << S_Config1IS)
  1155. #define S_Config1IL 19 /* Icache line size (R) */
  1156. #define M_Config1IL (0x7 << S_Config1IL)
  1157. #define S_Config1IA 16 /* Icache associativity - 1 (R) */
  1158. #define M_Config1IA (0x7 << S_Config1IA)
  1159. #define S_Config1DS 13 /* Dcache sets per way (R) */
  1160. #define M_Config1DS (0x7 << S_Config1DS)
  1161. #define S_Config1DL 10 /* Dcache line size (R) */
  1162. #define M_Config1DL (0x7 << S_Config1DL)
  1163. #define S_Config1DA 7 /* Dcache associativity (R) */
  1164. #define M_Config1DA (0x7 << S_Config1DA)
  1165. #define S_Config1C2 6 /* Coprocessor 2 present (R) */
  1166. #define M_Config1C2 (0x1 << S_Config1C2)
  1167. #define S_Config1MD 5 /* Denotes MDMX present (R) */
  1168. #define M_Config1MD (0x1 << S_Config1MD)
  1169. #define S_Config1PC 4 /* Denotes performance counters present (R) */
  1170. #define M_Config1PC (0x1 << S_Config1PC)
  1171. #define S_Config1WR 3 /* Denotes watch registers present (R) */
  1172. #define M_Config1WR (0x1 << S_Config1WR)
  1173. #define S_Config1CA 2 /* Denotes MIPS-16 present (R) */
  1174. #define M_Config1CA (0x1 << S_Config1CA)
  1175. #define S_Config1EP 1 /* Denotes EJTAG present (R) */
  1176. #define M_Config1EP (0x1 << S_Config1EP)
  1177. #define S_Config1FP 0 /* Denotes floating point present (R) */
  1178. #define M_Config1FP (0x1 << S_Config1FP)
  1179. #define M_Config10Fields 0x00000060
  1180. #define M_Config1RFields 0x7fffff9f
  1181. /*
  1182. * The following macro generates a table that is indexed
  1183. * by the Icache or Dcache sets field in Config1 and
  1184. * contains the decoded value of sets per way
  1185. */
  1186. #define Config1CacheSets() \
  1187. HALF(64); \
  1188. HALF(128); \
  1189. HALF(256); \
  1190. HALF(512); \
  1191. HALF(1024); \
  1192. HALF(2048); \
  1193. HALF(4096); \
  1194. HALF(8192);
  1195. /*
  1196. * The following macro generates a table that is indexed
  1197. * by the Icache or Dcache line size field in Config1 and
  1198. * contains the decoded value of the cache line size, in bytes
  1199. */
  1200. #define Config1CacheLineSize() \
  1201. HALF(0); \
  1202. HALF(4); \
  1203. HALF(8); \
  1204. HALF(16); \
  1205. HALF(32); \
  1206. HALF(64); \
  1207. HALF(128); \
  1208. HALF(256);
  1209. /*
  1210. ************************************************************************
  1211. * C O N F I G 2 R E G I S T E R ( 1 6, SELECT 2 ) *
  1212. ************************************************************************
  1213. *
  1214. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1215. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1216. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1217. * |M| | | | | | | | | | | | |S|T| Config1
  1218. * | | | | | | | | | | | | | |M|L|
  1219. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1220. */
  1221. #define C0_Config2 $16,2
  1222. #define R_C0_Config2 16
  1223. #define S_Config2More 31 /* Additional Config registers present (R) */
  1224. #define M_Config2More (0x1 << S_Config2More)
  1225. #define S_Config2SM 1 /* Denotes SmartMIPS ASE present (R) */
  1226. #define M_Config2SM (0x1 << S_Config2SM)
  1227. #define S_Config2TL 0 /* Denotes Tracing Logic present (R) */
  1228. #define M_Config2TL (0x1 << S_Config2TL)
  1229. #define M_Config20Fields 0xfffffffc
  1230. #define M_Config2RFields 0x00000003
  1231. /*
  1232. ************************************************************************
  1233. * L L A D D R R E G I S T E R ( 1 7 ) *
  1234. ************************************************************************
  1235. *
  1236. * 6 6 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1237. * 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1238. * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1239. * | // LL Physical Address | LLAddr
  1240. * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1241. */
  1242. #define C0_LLAddr $17
  1243. #define R_C0_LLAddr 17
  1244. #define C0_LLADDR C0_LLAddr /* OBSOLETE - DO NOT USE IN NEW CODE */
  1245. #define M_LLAddr0Fields 0x00000000
  1246. #define M_LLAddrRFields 0x00000000
  1247. #define M_LLAddr0Fields64 UNS64Const(0x0000000000000000)
  1248. #define M_LLAddrRFields64 UNS64Const(0x0000000000000000)
  1249. /*
  1250. ************************************************************************
  1251. * W A T C H L O R E G I S T E R ( 1 8 ) *
  1252. ************************************************************************
  1253. *
  1254. * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1255. * 3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1256. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1257. * | // Watch Virtual Address |I|R|W| WatchLo
  1258. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1259. */
  1260. #define C0_WatchLo $18
  1261. #define R_C0_WatchLo 18
  1262. #define C0_WATCHLO C0_WatchLo /* OBSOLETE - DO NOT USE IN NEW CODE */
  1263. #define S_WatchLoVAddr 3 /* Watch virtual address (R/W) */
  1264. #define M_WatchLoVAddr (0x1fffffff << S_WatchLoVAddr)
  1265. #define S_WatchLoI 2 /* Enable Istream watch (R/W) */
  1266. #define M_WatchLoI (0x1 << S_WatchLoI)
  1267. #define S_WatchLoR 1 /* Enable data read watch (R/W) */
  1268. #define M_WatchLoR (0x1 << S_WatchLoR)
  1269. #define S_WatchLoW 0 /* Enable data write watch (R/W) */
  1270. #define M_WatchLoW (0x1 << S_WatchLoW)
  1271. #define M_WatchLo0Fields 0x00000000
  1272. #define M_WatchLoRFields 0x00000000
  1273. #define M_WatchLo0Fields64 UNS64Const(0x0000000000000000)
  1274. #define M_WatchLoRFields64 UNS64Const(0x0000000000000000)
  1275. #define M_WatchLoEnables (M_WatchLoI | M_WatchLoR | M_WatchLoW)
  1276. /*
  1277. ************************************************************************
  1278. * W A T C H H I R E G I S T E R ( 1 9 ) *
  1279. ************************************************************************
  1280. *
  1281. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1282. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1283. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1284. * |M|G| Rsvd | ASID | Rsvd | Mask | 0 | WatchHi
  1285. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1286. */
  1287. #define C0_WatchHi $19
  1288. #define R_C0_WatchHi 19
  1289. #define C0_WATCHHI C0_WatchHi /* OBSOLETE - DO NOT USE IN NEW CODE */
  1290. #define S_WatchHiM 31 /* Denotes additional Watch registers present (R) */
  1291. #define M_WatchHiM (0x1 << S_WatchHiM)
  1292. #define S_WatchHiG 30 /* Enable ASID-independent Watch match (R/W) */
  1293. #define M_WatchHiG (0x1 << S_WatchHiG)
  1294. #define S_WatchHiASID 16 /* ASID value to match (R/W) */
  1295. #define M_WatchHiASID (0xff << S_WatchHiASID)
  1296. #define S_WatchHiMask 3 /* Address inhibit mask (R/W) */
  1297. #define M_WatchHiMask (0x1ff << S_WatchHiMask)
  1298. #define M_WatchHi0Fields 0x3f00f007
  1299. #define M_WatchHiRFields 0x80000000
  1300. /*
  1301. ************************************************************************
  1302. * X C O N T E X T R E G I S T E R ( 2 0 ) *
  1303. ************************************************************************
  1304. *
  1305. * 6 // 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1306. * 3 // 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1307. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1308. * | // PTEBase | R | BadVPN2<39:13> | 0 | XContext
  1309. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1310. */
  1311. #define C0_XContext $20
  1312. #define R_C0_XContext 20
  1313. #define C0_EXTCTXT C0_XContext /* OBSOLETE - DO NOT USE IN NEW CODE */
  1314. #define S_XContextBadVPN2 4 /* BadVPN2 (R) */
  1315. #define S_XContextBadVPN S_XContextBadVPN2
  1316. #define M_XContext0Fields 0x0000000f
  1317. /*
  1318. ************************************************************************
  1319. * D E B U G R E G I S T E R ( 2 3 ) *
  1320. ************************************************************************
  1321. *
  1322. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1323. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1324. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1325. * |D|D|N|L|D|H|C|I|M|C|D|I|D|D| | |N|S| |D|D|D|D|D|D|
  1326. * |B|M|o|S|o|a|o|B|C|a|B|E|D|D|EJTAG|DExcCode |o|S| |I|I|D|D|B|S|
  1327. * |D| |D|N|z|l|u|u|h|c|u|X|B|B| ver | |S|t| |N|B|B|B|p|S|
  1328. * | | |C|M|e|t|n|s|e|h|s|I|S|L| | |S| | 0 |T| |S|L| | | Debug
  1329. * | | |R| | | |t|E|c|e|E| |I|I| | |t| | | | | | | | |
  1330. * | | | | | | |D|P|k|E|P| |m|m| | | | | | | | | | | |
  1331. * | | | | | | |M| |P|P| | |p|p| | | | | | | | | | | |
  1332. * | | | | | | | | | | | | |r|r| | | | | | | | | | | |
  1333. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1334. */
  1335. #define C0_Debug $23 /* EJTAG */
  1336. #define R_C0_Debug 23
  1337. #define S_DebugDBD 31 /* Debug branch delay (R) */
  1338. #define M_DebugDBD (0x1 << S_DebugDBD)
  1339. #define S_DebugDM 30 /* Debug mode (R) */
  1340. #define M_DebugDM (0x1 << S_DebugDM)
  1341. #define S_DebugNoDCR 29 /* No debug control register present (R) */
  1342. #define M_DebugNoDCR (0x1 << S_DebugNoDCR)
  1343. #define S_DebugLSNM 28 /* Load/Store Normal Memory (R/W) */
  1344. #define M_DebugLSNM (0x1 << S_DebugLSNM)
  1345. #define S_DebugDoze 27 /* Doze (R) */
  1346. #define M_DebugDoze (0x1 << S_DebugDoze)
  1347. #define S_DebugHalt 26 /* Halt (R) */
  1348. #define M_DebugHalt (0x1 << S_DebugHalt)
  1349. #define S_DebugCountDM 25 /* Count register behavior in debug mode (R/W) */
  1350. #define M_DebugCountDM (0x1 << S_DebugCountDM)
  1351. #define S_DebugIBusEP 24 /* Imprecise Instn Bus Error Pending (R/W) */
  1352. #define M_DebugIBusEP (0x1 << S_DebugIBusEP)
  1353. #define S_DebugMCheckP 23 /* Imprecise Machine Check Pending (R/W) */
  1354. #define M_DebugMCheckP (0x1 << S_DebugMCheckP)
  1355. #define S_DebugCacheEP 22 /* Imprecise Cache Error Pending (R/W) */
  1356. #define M_DebugCacheEP (0x1 << S_DebugCacheEP)
  1357. #define S_DebugDBusEP 21 /* Imprecise Data Bus Error Pending (R/W) */
  1358. #define M_DebugDBusEP (0x1 << S_DebugDBusEP)
  1359. #define S_DebugIEXI 20 /* Imprecise Exception Inhibit (R/W) */
  1360. #define M_DebugIEXI (0x1 << S_DebugIEXI)
  1361. #define S_DebugDDBSImpr 19 /* Debug data break store imprecise (R) */
  1362. #define M_DebugDDBSImpr (0x1 << S_DebugDDBSImpr)
  1363. #define S_DebugDDBLImpr 18 /* Debug data break load imprecise (R) */
  1364. #define M_DebugDDBLImpr (0x1 << S_DebugDDBLImpr)
  1365. #define S_DebugEJTAGver 15 /* EJTAG version number (R) */
  1366. #define M_DebugEJTAGver (0x7 << S_DebugEJTAGver)
  1367. #define S_DebugDExcCode 10 /* Debug exception code (R) */
  1368. #define M_DebugDExcCode (0x1f << S_DebugDExcCode)
  1369. #define S_DebugNoSSt 9 /* No single step implemented (R) */
  1370. #define M_DebugNoSSt (0x1 << S_DebugNoSSt)
  1371. #define S_DebugSSt 8 /* Single step enable (R/W) */
  1372. #define M_DebugSSt (0x1 << S_DebugSSt)
  1373. #define S_DebugDINT 5 /* Debug interrupt (R) */
  1374. #define M_DebugDINT (0x1 << S_DebugDINT)
  1375. #define S_DebugDIB 4 /* Debug instruction break (R) */
  1376. #define M_DebugDIB (0x1 << S_DebugDIB)
  1377. #define S_DebugDDBS 3 /* Debug data break store (R) */
  1378. #define M_DebugDDBS (0x1 << S_DebugDDBS)
  1379. #define S_DebugDDBL 2 /* Debug data break load (R) */
  1380. #define M_DebugDDBL (0x1 << S_DebugDDBL)
  1381. #define S_DebugDBp 1 /* Debug breakpoint (R) */
  1382. #define M_DebugDBp (0x1 << S_DebugDBp)
  1383. #define S_DebugDSS 0 /* Debug single step (R) */
  1384. #define M_DebugDSS (0x1 << S_DebugDSS)
  1385. #define M_Debug0Fields 0x01f000c0
  1386. #define M_DebugRFields 0xec0ffe3f
  1387. /*
  1388. ************************************************************************
  1389. * D E P C R E G I S T E R ( 2 4 ) *
  1390. ************************************************************************
  1391. *
  1392. * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1393. * 3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1394. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1395. * | // EJTAG Debug Exception PC | DEPC
  1396. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1397. */
  1398. #define C0_DEPC $24
  1399. #define R_C0_DEPC 24
  1400. #define M_DEEPC0Fields 0x00000000
  1401. #define M_DEEPCRFields 0x00000000
  1402. #define M_DEEPC0Fields64 UNS64Const(0x0000000000000000)
  1403. #define M_DEEPCRFields64 UNS64Const(0x0000000000000000)
  1404. /*
  1405. ************************************************************************
  1406. * P E R F C N T R E G I S T E R ( 2 5 ) *
  1407. ************************************************************************
  1408. *
  1409. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1410. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1411. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1412. * | | | |I| | | |E|
  1413. * |M| 0 | Event |E|U|S|K|X| PerfCnt
  1414. * | | | | | | | |L|
  1415. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1416. *
  1417. *
  1418. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1419. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1420. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1421. * | Event Count | PerfCnt
  1422. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1423. */
  1424. #define C0_PerfCnt $25
  1425. #define R_C0_PerfCnt 25
  1426. #define C0_PRFCNT0 C0_PerfCnt /* OBSOLETE - DO NOT USE IN NEW CODE */
  1427. #define C0_PRFCNT1 C0_PerfCnt /* OBSOLETE - DO NOT USE IN NEW CODE */
  1428. #define S_PerfCntM 31 /* More performance counters exist (R) */
  1429. #define M_PerfCntM (1 << S_PerfCntM)
  1430. #define S_PerfCntEvent 5 /* Enabled event (R/W) */
  1431. #define M_PerfCntEvent (0x3f << S_PerfCntEvent)
  1432. #define S_PerfCntIE 4 /* Interrupt Enable (R/W) */
  1433. #define M_PerfCntIE (1 << S_PerfCntIE)
  1434. #define S_PerfCntU 3 /* Enable counting in User Mode (R/W) */
  1435. #define M_PerfCntU (1 << S_PerfCntU)
  1436. #define S_PerfCntS 2 /* Enable counting in Supervisor Mode (R/W) */
  1437. #define M_PerfCntS (1 << S_PerfCntS)
  1438. #define S_PerfCntK 1 /* Enable counting in Kernel Mode (R/W) */
  1439. #define M_PerfCntK (1 << S_PerfCntK)
  1440. #define S_PerfCntEXL 0 /* Enable counting while EXL==1 (R/W) */
  1441. #define M_PerfCntEXL (1 << S_PerfCntEXL)
  1442. #define M_PerfCnt0Fields 0x7ffff800
  1443. #define M_PerfCntRFields 0x80000000
  1444. /*
  1445. ************************************************************************
  1446. * E R R C T L R E G I S T E R ( 2 6 ) *
  1447. ************************************************************************
  1448. *
  1449. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1450. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1451. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1452. * | Error Control | ErrCtl
  1453. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1454. */
  1455. #define C0_ErrCtl $26
  1456. #define R_C0_ErrCtl 26
  1457. #define C0_ECC $26 /* OBSOLETE - DO NOT USE IN NEW CODE */
  1458. #define R_C0_ECC 26 /* OBSOLETE - DO NOT USE IN NEW CODE */
  1459. #define M_ErrCtl0Fields 0x00000000
  1460. #define M_ErrCtlRFields 0x00000000
  1461. /*
  1462. ************************************************************************
  1463. * C A C H E E R R R E G I S T E R ( 2 7 ) * CacheErr
  1464. ************************************************************************
  1465. *
  1466. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1467. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1468. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1469. * | Cache Error Control | CacheErr
  1470. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1471. */
  1472. #define C0_CacheErr $27
  1473. #define R_C0_CacheErr 27
  1474. #define C0_CACHE_ERR C0_CacheErr /* OBSOLETE - DO NOT USE IN NEW CODE */
  1475. #define M_CacheErr0Fields 0x00000000
  1476. #define M_CachErrRFields 0x00000000
  1477. /*
  1478. ************************************************************************
  1479. * T A G L O R E G I S T E R ( 2 8 ) * TagLo
  1480. ************************************************************************
  1481. *
  1482. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1483. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1484. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1485. * | TagLo | TagLo
  1486. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1487. */
  1488. #define C0_TagLo $28
  1489. #define R_C0_TagLo 28
  1490. #define C0_TAGLO C0_TagLo /* OBSOLETE - DO NOT USE IN NEW CODE */
  1491. /*
  1492. * Some implementations use separate TagLo registers for the
  1493. * instruction and data caches. In those cases, the following
  1494. * definitions can be used in relevant code
  1495. */
  1496. #define C0_ITagLo $28,0
  1497. #define C0_DTagLo $28,2
  1498. #define M_TagLo0Fields 0x00000000
  1499. #define M_TagLoRFields 0x00000000
  1500. /*
  1501. ************************************************************************
  1502. * D A T A L O R E G I S T E R ( 2 8, SELECT 1 ) * DataLo
  1503. ************************************************************************
  1504. *
  1505. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1506. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1507. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1508. * | DataLo | DataLo
  1509. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1510. */
  1511. #define C0_DataLo $28,1
  1512. #define R_C0_DataLo 28
  1513. /*
  1514. * Some implementations use separate DataLo registers for the
  1515. * instruction and data caches. In those cases, the following
  1516. * definitions can be used in relevant code
  1517. */
  1518. #define C0_IDataLo $28,1
  1519. #define C0_DDataLo $28,3
  1520. #define M_DataLo0Fields 0x00000000
  1521. #define M_DataLoRFields 0xffffffff
  1522. /*
  1523. ************************************************************************
  1524. * T A G H I R E G I S T E R ( 2 9 ) * TagHi
  1525. ************************************************************************
  1526. *
  1527. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1528. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1529. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1530. * | TagHi | TagHi
  1531. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1532. */
  1533. #define C0_TagHi $29
  1534. #define R_C0_TagHi 29
  1535. #define C0_TAGHI C0_TagHi /* OBSOLETE - DO NOT USE IN NEW CODE */
  1536. /*
  1537. * Some implementations use separate TagHi registers for the
  1538. * instruction and data caches. In those cases, the following
  1539. * definitions can be used in relevant code
  1540. */
  1541. #define C0_ITagHi $29,0
  1542. #define C0_DTagHi $29,2
  1543. #define M_TagHi0Fields 0x00000000
  1544. #define M_TagHiRFields 0x00000000
  1545. /*
  1546. ************************************************************************
  1547. * D A T A H I R E G I S T E R ( 2 9, SELECT 1 ) * DataHi
  1548. ************************************************************************
  1549. *
  1550. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1551. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1552. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1553. * | DataHi | DataHi
  1554. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1555. */
  1556. #define C0_DataHi $29,1
  1557. #define R_C0_DataHi 29
  1558. /*
  1559. * Some implementations use separate DataHi registers for the
  1560. * instruction and data caches. In those cases, the following
  1561. * definitions can be used in relevant code
  1562. */
  1563. #define C0_IDataHi $29,1
  1564. #define C0_DDataHi $29,3
  1565. #define M_DataHi0Fields 0x00000000
  1566. #define M_DataHiRFields 0xffffffff
  1567. /*
  1568. ************************************************************************
  1569. * E R R O R E P C R E G I S T E R ( 3 0 ) *
  1570. ************************************************************************
  1571. *
  1572. * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1573. * 3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1574. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1575. * | // Error PC | ErrorEPC
  1576. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1577. */
  1578. #define C0_ErrorEPC $30
  1579. #define R_C0_ErrorEPC 30
  1580. #define C0_ERROR_EPC C0_ErrorEPC /* OBSOLETE - DO NOT USE IN NEW CODE */
  1581. #define M_ErrorEPC0Fields 0x00000000
  1582. #define M_ErrorEPCRFields 0x00000000
  1583. #define M_ErrorEPC0Fields64 UNS64Const(0x0000000000000000)
  1584. #define M_ErrorEPCRFields64 UNS64Const(0x0000000000000000)
  1585. /*
  1586. ************************************************************************
  1587. * D E S A V E R E G I S T E R ( 3 1 ) *
  1588. ************************************************************************
  1589. *
  1590. * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1591. * 3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1592. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1593. * | // EJTAG Register Save Value | DESAVE
  1594. * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1595. */
  1596. #define C0_DESAVE $31
  1597. #define R_C0_DESAVE 31
  1598. #define M_DESAVE0Fields 0x00000000
  1599. #define M_DESAVERFields 0x00000000
  1600. #define M_DESAVE0Fields64 UNS64Const(0x0000000000000000)
  1601. #define M_DESAVERFields64 UNS64Const(0x0000000000000000)
  1602. /*
  1603. *************************************************************************
  1604. * C P 1 R E G I S T E R D E F I N I T I O N S *
  1605. *************************************************************************
  1606. */
  1607. /*
  1608. *************************************************************************
  1609. * H A R D W A R E F P R N A M E S *
  1610. *************************************************************************
  1611. */
  1612. #define fp0 $f0
  1613. #define fp1 $f1
  1614. #define fp2 $f2
  1615. #define fp3 $f3
  1616. #define fp4 $f4
  1617. #define fp5 $f5
  1618. #define fp6 $f6
  1619. #define fp7 $f7
  1620. #define fp8 $f8
  1621. #define fp9 $f9
  1622. #define fp10 $f10
  1623. #define fp11 $f11
  1624. #define fp12 $f12
  1625. #define fp13 $f13
  1626. #define fp14 $f14
  1627. #define fp15 $f15
  1628. #define fp16 $f16
  1629. #define fp17 $f17
  1630. #define fp18 $f18
  1631. #define fp19 $f19
  1632. #define fp20 $f20
  1633. #define fp21 $f21
  1634. #define fp22 $f22
  1635. #define fp23 $f23
  1636. #define fp24 $f24
  1637. #define fp25 $f25
  1638. #define fp26 $f26
  1639. #define fp27 $f27
  1640. #define fp28 $f28
  1641. #define fp29 $f29
  1642. #define fp30 $f30
  1643. #define fp31 $f31
  1644. /*
  1645. * The following definitions are used to convert an FPR name
  1646. * into the corresponding even or odd name, respectively.
  1647. * This is used in macro substitution in the AVPs.
  1648. */
  1649. #define fp1_even $f0
  1650. #define fp3_even $f2
  1651. #define fp5_even $f4
  1652. #define fp7_even $f6
  1653. #define fp9_even $f8
  1654. #define fp11_even $f10
  1655. #define fp13_even $f12
  1656. #define fp15_even $f14
  1657. #define fp17_even $f16
  1658. #define fp19_even $f18
  1659. #define fp21_even $f20
  1660. #define fp23_even $f22
  1661. #define fp25_even $f24
  1662. #define fp27_even $f26
  1663. #define fp29_even $f28
  1664. #define fp31_even $f30
  1665. #define fp0_odd $f1
  1666. #define fp2_odd $f3
  1667. #define fp4_odd $f5
  1668. #define fp6_odd $f7
  1669. #define fp8_odd $f9
  1670. #define fp10_odd $f11
  1671. #define fp12_odd $f13
  1672. #define fp14_odd $f15
  1673. #define fp16_odd $f17
  1674. #define fp18_odd $f19
  1675. #define fp20_odd $f21
  1676. #define fp22_odd $f23
  1677. #define fp24_odd $f25
  1678. #define fp26_odd $f27
  1679. #define fp28_odd $f29
  1680. #define fp30_odd $f31
  1681. /*
  1682. *************************************************************************
  1683. * H A R D W A R E F P R I N D I C E S *
  1684. *************************************************************************
  1685. *
  1686. * These definitions provide the index (number) of the FPR, as opposed
  1687. * to the assembler register name ($n).
  1688. */
  1689. #define R_fp0 0
  1690. #define R_fp1 1
  1691. #define R_fp2 2
  1692. #define R_fp3 3
  1693. #define R_fp4 4
  1694. #define R_fp5 5
  1695. #define R_fp6 6
  1696. #define R_fp7 7
  1697. #define R_fp8 8
  1698. #define R_fp9 9
  1699. #define R_fp10 10
  1700. #define R_fp11 11
  1701. #define R_fp12 12
  1702. #define R_fp13 13
  1703. #define R_fp14 14
  1704. #define R_fp15 15
  1705. #define R_fp16 16
  1706. #define R_fp17 17
  1707. #define R_fp18 18
  1708. #define R_fp19 19
  1709. #define R_fp20 20
  1710. #define R_fp21 21
  1711. #define R_fp22 22
  1712. #define R_fp23 23
  1713. #define R_fp24 24
  1714. #define R_fp25 25
  1715. #define R_fp26 26
  1716. #define R_fp27 27
  1717. #define R_fp28 28
  1718. #define R_fp29 29
  1719. #define R_fp30 30
  1720. #define R_fp31 31
  1721. /*
  1722. *************************************************************************
  1723. * H A R D W A R E F C R N A M E S *
  1724. *************************************************************************
  1725. */
  1726. #define fc0 $0
  1727. #define fc25 $25
  1728. #define fc26 $26
  1729. #define fc28 $28
  1730. #define fc31 $31
  1731. /*
  1732. *************************************************************************
  1733. * H A R D W A R E F C R I N D I C E S *
  1734. *************************************************************************
  1735. *
  1736. * These definitions provide the index (number) of the FCR, as opposed
  1737. * to the assembler register name ($n).
  1738. */
  1739. #define R_fc0 0
  1740. #define R_fc25 25
  1741. #define R_fc26 26
  1742. #define R_fc28 28
  1743. #define R_fc31 31
  1744. /*
  1745. *************************************************************************
  1746. * H A R D W A R E F C C N A M E S *
  1747. *************************************************************************
  1748. */
  1749. #define cc0 $fcc0
  1750. #define cc1 $fcc1
  1751. #define cc2 $fcc2
  1752. #define cc3 $fcc3
  1753. #define cc4 $fcc4
  1754. #define cc5 $fcc5
  1755. #define cc6 $fcc6
  1756. #define cc7 $fcc7
  1757. /*
  1758. *************************************************************************
  1759. * H A R D W A R E F C C I N D I C E S *
  1760. *************************************************************************
  1761. *
  1762. * These definitions provide the index (number) of the CC, as opposed
  1763. * to the assembler register name ($n).
  1764. */
  1765. #define R_cc0 0
  1766. #define R_cc1 1
  1767. #define R_cc2 2
  1768. #define R_cc3 3
  1769. #define R_cc4 4
  1770. #define R_cc5 5
  1771. #define R_cc6 6
  1772. #define R_cc7 7
  1773. /*
  1774. ************************************************************************
  1775. * I M P L E M E N T A T I O N R E G I S T E R *
  1776. ************************************************************************
  1777. *
  1778. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1779. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1780. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1781. * |Reserved for Additional|3|P|D|S| Implementation| Revision | FIR
  1782. * | Configuration Bits |D|S| | | | |
  1783. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1784. */
  1785. #define C1_FIR $0
  1786. #define R_C1_FIR 0
  1787. #define S_FIRConfigS 16
  1788. #define M_FIRConfigS (0x1 << S_FIRConfigS)
  1789. #define S_FIRConfigD 17
  1790. #define M_FIRConfigD (0x1 << S_FIRConfigD)
  1791. #define S_FIRConfigPS 18
  1792. #define M_FIRConfigPS (0x1 << S_FIRConfigPS)
  1793. #define S_FIRConfig3D 19
  1794. #define M_FIRConfig3D (0x1 << S_FIRConfig3D)
  1795. #define M_FIRConfigAll (M_FIRConfigS|M_FIRConfigD|M_FIRConfigPS|M_FIRConfig3D)
  1796. #define S_FIRImp 8
  1797. #define M_FIRImp (0xff << S_FIRImp)
  1798. #define S_FIRRev 0
  1799. #define M_FIRRev (0xff << S_FIRRev)
  1800. #define M_FIR0Fields 0xfff00000
  1801. #define M_FIRRFields 0x000fffff
  1802. /*
  1803. ************************************************************************
  1804. * C O N D I T I O N C O D E S R E G I S T E R *
  1805. ************************************************************************
  1806. *
  1807. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1808. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1809. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1810. * | 0 | CC | FCCR
  1811. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1812. */
  1813. #define C1_FCCR $25
  1814. #define R_C1_FCCR 25
  1815. #define S_FCCRCC 0
  1816. #define M_FCCRCC (0xff << S_FCCRCC)
  1817. #define S_FCCRCC7 7
  1818. #define M_FCCRCC7 (0x1 << S_FCCRCC7)
  1819. #define S_FCCRCC6 6
  1820. #define M_FCCRCC6 (0x1 << S_FCCRCC6)
  1821. #define S_FCCRCC5 5
  1822. #define M_FCCRCC5 (0x1 << S_FCCRCC5)
  1823. #define S_FCCRCC4 4
  1824. #define M_FCCRCC4 (0x1 << S_FCCRCC4)
  1825. #define S_FCCRCC3 3
  1826. #define M_FCCRCC3 (0x1 << S_FCCRCC3)
  1827. #define S_FCCRCC2 2
  1828. #define M_FCCRCC2 (0x1 << S_FCCRCC2)
  1829. #define S_FCCRCC1 1
  1830. #define M_FCCRCC1 (0x1 << S_FCCRCC1)
  1831. #define S_FCCRCC0 0
  1832. #define M_FCCRCC0 (0x1 << S_FCCRCC0)
  1833. #define M_FCCR0Fields 0xffffff00
  1834. #define M_FCCRRFields 0x000000ff
  1835. /*
  1836. ************************************************************************
  1837. * E X C E P T I O N S R E G I S T E R *
  1838. ************************************************************************
  1839. *
  1840. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1841. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1842. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1843. * | 0 | Cause | 0 | Flags | 0 | FEXR
  1844. * | |E|V|Z|O|U|I| |V|Z|O|U|I| |
  1845. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1846. */
  1847. #define C1_FEXR $26
  1848. #define R_C1_FEXR 26
  1849. #define S_FEXRExc 12
  1850. #define M_FEXRExc (0x3f << S_FEXRExc)
  1851. #define S_FEXRExcE 17
  1852. #define M_FEXRExcE (0x1 << S_FEXRExcE)
  1853. #define S_FEXRExcV 16
  1854. #define M_FEXRExcV (0x1 << S_FEXRExcV)
  1855. #define S_FEXRExcZ 15
  1856. #define M_FEXRExcZ (0x1 << S_FEXRExcZ)
  1857. #define S_FEXRExcO 14
  1858. #define M_FEXRExcO (0x1 << S_FEXRExcO)
  1859. #define S_FEXRExcU 13
  1860. #define M_FEXRExcU (0x1 << S_FEXRExcU)
  1861. #define S_FEXRExcI 12
  1862. #define M_FEXRExcI (0x1 << S_FEXRExcI)
  1863. #define S_FEXRFlg 2
  1864. #define M_FEXRFlg (0x1f << S_FEXRFlg)
  1865. #define S_FEXRFlgV 6
  1866. #define M_FEXRFlgV (0x1 << S_FEXRFlgV)
  1867. #define S_FEXRFlgZ 5
  1868. #define M_FEXRFlgZ (0x1 << S_FEXRFlgZ)
  1869. #define S_FEXRFlgO 4
  1870. #define M_FEXRFlgO (0x1 << S_FEXRFlgO)
  1871. #define S_FEXRFlgU 3
  1872. #define M_FEXRFlgU (0x1 << S_FEXRFlgU)
  1873. #define S_FEXRFlgI 2
  1874. #define M_FEXRFlgI (0x1 << S_FEXRFlgI)
  1875. #define M_FEXR0Fields 0xfffc0f83
  1876. #define M_FEXRRFields 0x00000000
  1877. /*
  1878. ************************************************************************
  1879. * E N A B L E S R E G I S T E R *
  1880. ************************************************************************
  1881. *
  1882. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1883. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1884. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1885. * | 0 | Enables | 0 |F|RM | FENR
  1886. * | |V|Z|O|U|I| |S| |
  1887. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1888. */
  1889. #define C1_FENR $28
  1890. #define R_C1_FENR 28
  1891. #define S_FENREna 7
  1892. #define M_FENREna (0x1f << S_FENREna)
  1893. #define S_FENREnaV 11
  1894. #define M_FENREnaV (0x1 << S_FENREnaV)
  1895. #define S_FENREnaZ 10
  1896. #define M_FENREnaZ (0x1 << S_FENREnaZ)
  1897. #define S_FENREnaO 9
  1898. #define M_FENREnaO (0x1 << S_FENREnaO)
  1899. #define S_FENREnaU 8
  1900. #define M_FENREnaU (0x1 << S_FENREnaU)
  1901. #define S_FENREnaI 7
  1902. #define M_FENREnaI (0x1 << S_FENREnaI)
  1903. #define S_FENRFS 2
  1904. #define M_FENRFS (0x1 << S_FENRFS)
  1905. #define S_FENRRM 0
  1906. #define M_FENRRM (0x3 << S_FENRRM)
  1907. #define M_FENR0Fields 0xfffff078
  1908. #define M_FENRRFields 0x00000000
  1909. /*
  1910. ************************************************************************
  1911. * C O N T R O L / S T A T U S R E G I S T E R *
  1912. ************************************************************************
  1913. *
  1914. * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1915. * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1916. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1917. * | FCC |F|C|Imp| 0 | Cause | Enables | Flags | RM| FCSR
  1918. * |7|6|5|4|3|2|1|S|C| | |E|V|Z|O|U|I|V|Z|O|U|I|V|Z|O|U|I| |
  1919. * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1920. */
  1921. #define C1_FCSR $31
  1922. #define R_C1_FCSR 31
  1923. #define S_FCSRFCC7_1 25 /* Floating point condition codes 7..1 (R/W) */
  1924. #define M_FCSRFCC7_1 (0x7f << S_FCSRFCC7_1)
  1925. #define S_FCSRCC7 31
  1926. #define M_FCSRCC7 (0x1 << S_FCSRCC7)
  1927. #define S_FCSRCC6 30
  1928. #define M_FCSRCC6 (0x1 << S_FCSRCC6)
  1929. #define S_FCSRCC5 29
  1930. #define M_FCSRCC5 (0x1 << S_FCSRCC5)
  1931. #define S_FCSRCC4 28
  1932. #define M_FCSRCC4 (0x1 << S_FCSRCC4)
  1933. #define S_FCSRCC3 27
  1934. #define M_FCSRCC3 (0x1 << S_FCSRCC3)
  1935. #define S_FCSRCC2 26
  1936. #define M_FCSRCC2 (0x1 << S_FCSRCC2)
  1937. #define S_FCSRCC1 25
  1938. #define M_FCSRCC1 (0x1 << S_FCSRCC1)
  1939. #define S_FCSRFS 24 /* Flush denorms to zero (R/W) */
  1940. #define M_FCSRFS (0x1 << S_FCSRFS)
  1941. #define S_FCSRCC0 23 /* Floating point condition code 0 (R/W) */
  1942. #define M_FCSRCC0 (0x1 << S_FCSRCC0)
  1943. #define S_FCSRCC S_FCSRCC0
  1944. #define M_FCSRCC M_FCSRCC0
  1945. #define S_FCSRImpl 21 /* Implementation-specific control bits (R/W) */
  1946. #define M_FCSRImpl (0x3 << S_FCSRImpl)
  1947. #define S_FCSRExc 12 /* Exception cause (R/W) */
  1948. #define M_FCSRExc (0x3f << S_FCSRExc)
  1949. #define S_FCSRExcE 17
  1950. #define M_FCSRExcE (0x1 << S_FCSRExcE)
  1951. #define S_FCSRExcV 16
  1952. #define M_FCSRExcV (0x1 << S_FCSRExcV)
  1953. #define S_FCSRExcZ 15
  1954. #define M_FCSRExcZ (0x1 << S_FCSRExcZ)
  1955. #define S_FCSRExcO 14
  1956. #define M_FCSRExcO (0x1 << S_FCSRExcO)
  1957. #define S_FCSRExcU 13
  1958. #define M_FCSRExcU (0x1 << S_FCSRExcU)
  1959. #define S_FCSRExcI 12
  1960. #define M_FCSRExcI (0x1 << S_FCSRExcI)
  1961. #define S_FCSREna 7 /* Exception enable (R/W) */
  1962. #define M_FCSREna (0x1f << S_FCSREna)
  1963. #define S_FCSREnaV 11
  1964. #define M_FCSREnaV (0x1 << S_FCSREnaV)
  1965. #define S_FCSREnaZ 10
  1966. #define M_FCSREnaZ (0x1 << S_FCSREnaZ)
  1967. #define S_FCSREnaO 9
  1968. #define M_FCSREnaO (0x1 << S_FCSREnaO)
  1969. #define S_FCSREnaU 8
  1970. #define M_FCSREnaU (0x1 << S_FCSREnaU)
  1971. #define S_FCSREnaI 7
  1972. #define M_FCSREnaI (0x1 << S_FCSREnaI)
  1973. #define S_FCSRFlg 2 /* Exception flags (R/W) */
  1974. #define M_FCSRFlg (0x1f << S_FCSRFlg)
  1975. #define S_FCSRFlgV 6
  1976. #define M_FCSRFlgV (0x1 << S_FCSRFlgV)
  1977. #define S_FCSRFlgZ 5
  1978. #define M_FCSRFlgZ (0x1 << S_FCSRFlgZ)
  1979. #define S_FCSRFlgO 4
  1980. #define M_FCSRFlgO (0x1 << S_FCSRFlgO)
  1981. #define S_FCSRFlgU 3
  1982. #define M_FCSRFlgU (0x1 << S_FCSRFlgU)
  1983. #define S_FCSRFlgI 2
  1984. #define M_FCSRFlgI (0x1 << S_FCSRFlgI)
  1985. #define S_FCSRRM 0 /* Rounding mode (R/W) */
  1986. #define M_FCSRRM (0x3 << S_FCSRRM)
  1987. #define M_FCSR0Fields 0x001c0000
  1988. #define M_FCSRRFields 0x00000000
  1989. /*
  1990. * Values in the rounding mode field (of both FCSR and FCCR)
  1991. */
  1992. #define K_FCSRRM_RN 0
  1993. #define K_FCSRRM_RZ 1
  1994. #define K_FCSRRM_RP 2
  1995. #define K_FCSRRM_RM 3
  1996. #endif /* _COMMON_MIPS_DEF_H_ */