mips_def.h 86 KB

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