Difference between revisions of "Power ISA/Machine State Register"
(add III-S info) |
|||
(15 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | {| class="wikitable" | + | The '''Machine State Register''', or '''MSR''', is a Branch Facility register usually defined in Book III in of the [[Power ISA|Power ISA]]. Among other uses, the MSR contains information about the privilege level the thread is running at. When referring to a setting in the Machine State Register, the code of the setting is in subscript directly after the abbreviation MSR. For example, documentation will refer to the Hypervisor State bit as MSR<sub>HV</sub>. |
− | |+Machine State Register | + | |
+ | == Map == | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |+Machine State Register Bits | ||
!rowspan="3"|Bit | !rowspan="3"|Bit | ||
!rowspan="3"|Code | !rowspan="3"|Code | ||
Line 16: | Line 20: | ||
|Sixty-Four-Bit Mode | |Sixty-Four-Bit Mode | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
+ | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |- | ||
+ | !1 | ||
+ | |colspan="2"|Tags Active (TA)<ref group="note">Undocumented; see [https://www.devever.net/~hl/ppcas The PowerPC AS Tagged Memory Extensions] and [https://www.devever.net/~hl/power9tags The Talos II, Blackbird POWER9 systems support tagged memory].</ref> | ||
+ | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
− | ! | + | !2 |
− | | | + | |colspan="2"|Reserved |
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | |||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 30: | Line 39: | ||
|Hypervisor State | |Hypervisor State | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
!4 | !4 | ||
− | | | + | |colspan="2"|Reserved |
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | |||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 44: | Line 52: | ||
|Split Little Endian | |Split Little Endian | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
− | |style="background:#FF9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power version | + | |style="background:#FF9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 3.0B defines this bit as something set in hardware to be zero, and warns against changing it.</ref> |
|- | |- | ||
!6:28 | !6:28 | ||
− | | | + | |colspan="2"|Reserved |
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | |||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 58: | Line 65: | ||
|Transaction State | |Transaction State | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 65: | Line 72: | ||
|Transactional Memory Available | |Transactional Memory Available | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
+ | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |- | ||
+ | !32 | ||
+ | |CM | ||
+ | |Computation Mode | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |- | ||
+ | !33 | ||
+ | |colspan="2"|Reserved | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |- | ||
+ | !34 | ||
+ | |colspan="2"|Implementation-dependant | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#99F;vertical-align:middle;text-align:center;"|Yes | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |- | ||
+ | !35 | ||
+ | |GS | ||
+ | |Guest State | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
− | ! | + | !36 |
− | | | + | |colspan="2"|Implementation-dependant |
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
+ | |style="background:#99F;vertical-align:middle;text-align:center;"|Yes | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |- | ||
+ | !37 | ||
+ | |UCLE | ||
+ | |User Cache Locking Enable | ||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 79: | Line 118: | ||
|Vector Available | |Vector Available | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#FF9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 2.07 Book III-E defines this as ''SPV'' - ''SP/Embedded Floating-Point/Vector Available''</ref> |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
!39 | !39 | ||
− | | | + | |colspan="2"|Reserved |
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | |||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 93: | Line 131: | ||
|VSX Available | |VSX Available | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | |||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |- | ||
+ | !41 | ||
+ | |S | ||
+ | |Secure Mode<ref name="kusakata-uv">https://doc.kusakata.com/powerpc/ultravisor.html</ref> | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |- | ||
+ | !42:45 | ||
+ | |colspan="2"|Reserved | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |- | ||
+ | !46 | ||
+ | |CE | ||
+ | |Critical Enable | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
− | ! | + | !47 |
− | | | + | |colspan="2"|Reserved |
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | |||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 107: | Line 164: | ||
|External Interrupt Enable | |External Interrupt Enable | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 2.07 Book III-E calls this ''External Enable''</ref> |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 114: | Line 171: | ||
|Problem State | |Problem State | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 121: | Line 178: | ||
|Floating-Point Available | |Floating-Point Available | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 128: | Line 185: | ||
|Machine Check Interrupt Enable | |Machine Check Interrupt Enable | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 2.07 Book III-E calls this ''Machine Check Enable''</ref> |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 135: | Line 192: | ||
|Floating-Point Exception Mode 0 | |Floating-Point Exception Mode 0 | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 142: | Line 199: | ||
|Single-Step Trace Enable | |Single-Step Trace Enable | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#99F;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 2.07 Book III-E defines this as Implementation-dependent</ref> |
− | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes<ref group="note" name="msr_te">Power ISA version 3.0B defines bits 53 and 54 together as ''TE'' - Trace Enable - and defines having both bits set as ''reserved''</ref> | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes<ref group="note" name="msr_te">Power ISA version 3.0B defines bits 53 and 54 together as ''TE'' - ''Trace Enable'' - and defines having both bits set as ''reserved''</ref> |
|- | |- | ||
!54 | !54 | ||
Line 149: | Line 206: | ||
|Branch Trace Enable | |Branch Trace Enable | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#FF9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 2.07 Book III-E defines this as ''DE'' - ''Debug Interrupt Enable''</ref> |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes<ref group="note" name="msr_te"/> | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes<ref group="note" name="msr_te"/> | ||
|- | |- | ||
Line 156: | Line 213: | ||
|Floating-Point Exception Mode 1 | |Floating-Point Exception Mode 1 | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
− | !56:57 | + | !56 |
− | | | + | |colspan="2"|Reserved |
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
+ | |- | ||
+ | !57 | ||
+ | |colspan="2"|Reserved | ||
+ | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | |||
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 170: | Line 232: | ||
|Instruction Relocate | |Instruction Relocate | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#FF9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 2.07 Book III-E defines this as ''IS'' - ''Instruction Address Space''</ref> |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 177: | Line 239: | ||
|Data Relocate | |Data Relocate | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#FF9;vertical-align:middle;text-align:center;"|Yes<ref group="note">Power ISA version 2.07 Book III-E defines this as ''DS'' - ''Data Address Space''</ref> |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
!60 | !60 | ||
| | | | ||
− | | | + | |Implementation-dependant |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
− | | | + | |style="background:#99F;vertical-align:middle;text-align:center;"|Yes |
|style="background:#F99;vertical-align:middle;text-align:center;"|No | |style="background:#F99;vertical-align:middle;text-align:center;"|No | ||
|- | |- | ||
Line 191: | Line 253: | ||
|Performance Monitor Mark | |Performance Monitor Mark | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 198: | Line 260: | ||
|Recoverable Interrupt | |Recoverable Interrupt | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|- | |- | ||
Line 205: | Line 267: | ||
|Little-Endian Mode | |Little-Endian Mode | ||
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
− | | | + | |style="background:#F99;vertical-align:middle;text-align:center;"|No |
|style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | |style="background:#9F9;vertical-align:middle;text-align:center;"|Yes | ||
|} | |} | ||
<references group="note"/> | <references group="note"/> | ||
+ | |||
+ | == List == | ||
+ | |||
+ | === Bit 0 - Sixty-Four-Bit Mode (SF) === | ||
+ | |||
+ | {|class="wikitable" | ||
+ | !0 | ||
+ | |The thread is in 32-bit mode | ||
+ | |- | ||
+ | !1 | ||
+ | |The thread is in 64-bit mode | ||
+ | |} | ||
+ | |||
+ | === Bit 3 - Hypervisor State (HV) === | ||
+ | |||
+ | {|class="wikitable" | ||
+ | !0 | ||
+ | |The thread is not in hypervisor state | ||
+ | |- | ||
+ | !1 | ||
+ | |The thread is in hypervisor state '''if''' MSR<sub>PR</sub> = 0 | ||
+ | |} | ||
+ | |||
+ | === Bit 5 === | ||
+ | |||
+ | ==== Split Little Endian (SLE) ==== | ||
+ | |||
+ | {|class="wikitable" | ||
+ | !0 | ||
+ | |Instruction and data storage use the same endian-ness | ||
+ | |- | ||
+ | !1 | ||
+ | |Instruction storage accesses use the value specified by MSR<sub>LE</sub>. Data storage accesses use the opposite. | ||
+ | |} | ||
+ | |||
+ | ==== Power ISA version 3 ==== | ||
+ | |||
+ | Power ISA version 3 does not define bit 5 so much as warn that, "software must ensure that this bit contains 0". It then reassure that the hardware will initialise it to 0. | ||
+ | |||
+ | === Bit 49 - Problem State (PR) === | ||
+ | |||
+ | {|class="wikitable" | ||
+ | !0 | ||
+ | |The thread is in a privileged state | ||
+ | |- | ||
+ | !1 | ||
+ | |The thread is in problem state | ||
+ | |} | ||
+ | |||
+ | === Bit 63 - Little-Endian Mode (LE) === | ||
+ | |||
+ | {|class="wikitable" | ||
+ | !0 | ||
+ | |The thread is in Big-Endian mode | ||
+ | |- | ||
+ | !1 | ||
+ | |The thread is in Little-Endian mode. | ||
+ | |} | ||
+ | |||
+ | == Multi-bit States == | ||
+ | |||
+ | === Privilege State === | ||
+ | |||
+ | <div role="note" class="hatnote navigation-not-searchable">Main page: [[Power ISA/Privilege States]]</div> | ||
+ | |||
+ | The privilege state of a thread is a property of multiple bits in the MSR; however, not all of these states are available on all Power processors; for example, the Ultravisor state was first officially announced for [[POWER9|POWER9's]] DD2.3 stepping. Additionally, at time of release the official ISA documentation still does not fully describe the Ultravisor state.<ref name="kusakata-uv"/> | ||
+ | |||
+ | {|class="wikitable sortable" | ||
+ | !MSR<sub>S</sub> | ||
+ | !MSR<sub>HV</sub> | ||
+ | !MSR<sub>PR</sub> | ||
+ | !State | ||
+ | |- | ||
+ | !0 | ||
+ | !0 | ||
+ | !0 | ||
+ | |Privileged | ||
+ | |- | ||
+ | !0 | ||
+ | !0 | ||
+ | !1 | ||
+ | |Problem | ||
+ | |- | ||
+ | !0 | ||
+ | !1 | ||
+ | !0 | ||
+ | |Hypervisor | ||
+ | |- | ||
+ | !0 | ||
+ | !1 | ||
+ | !1 | ||
+ | |Problem | ||
+ | |- | ||
+ | !1 | ||
+ | !0 | ||
+ | !0 | ||
+ | |Privileged | ||
+ | |- | ||
+ | !1 | ||
+ | !0 | ||
+ | !1 | ||
+ | |Problem | ||
+ | |- | ||
+ | !1 | ||
+ | !1 | ||
+ | !0 | ||
+ | |Ultravisor | ||
+ | |- | ||
+ | !1 | ||
+ | !1 | ||
+ | !1 | ||
+ | |Reserved | ||
+ | |} | ||
+ | |||
+ | === Endian-ness === | ||
+ | |||
+ | {|class="wikitable" | ||
+ | !MSR<sub>SLE</sub> | ||
+ | !MSR<sub>LE</sub> | ||
+ | !Data | ||
+ | !Instruction | ||
+ | |- | ||
+ | !0 | ||
+ | !0 | ||
+ | |Big-Endian | ||
+ | |Big-Endian | ||
+ | |- | ||
+ | !0 | ||
+ | !1 | ||
+ | |Little-Endian | ||
+ | |Little-Endian | ||
+ | |- | ||
+ | !1 | ||
+ | !0 | ||
+ | |Little-Endian | ||
+ | |Big-Endian | ||
+ | |- | ||
+ | !1 | ||
+ | !1 | ||
+ | |Big-Endian | ||
+ | |Little-Endian | ||
+ | |} | ||
+ | |||
+ | == References == | ||
+ | |||
+ | <references/> | ||
+ | |||
+ | [[Category:Power Architecture]] |
Latest revision as of 02:43, 7 November 2022
The Machine State Register, or MSR, is a Branch Facility register usually defined in Book III in of the Power ISA. Among other uses, the MSR contains information about the privilege level the thread is running at. When referring to a setting in the Machine State Register, the code of the setting is in subscript directly after the abbreviation MSR. For example, documentation will refer to the Hypervisor State bit as MSRHV.
Contents
Map
Bit | Code | Name | Defined | ||
---|---|---|---|---|---|
2.07 | 3.0B | ||||
III-S | III-E | ||||
0 | SF | Sixty-Four-Bit Mode | Yes | No | Yes |
1 | Tags Active (TA)[note 1] | Yes | Yes | Yes | |
2 | Reserved | No | No | No | |
3 | HV | Hypervisor State | Yes | No | Yes |
4 | Reserved | No | No | No | |
5 | SLE | Split Little Endian | Yes | No | Yes[note 2] |
6:28 | Reserved | No | No | No | |
29:30 | TS | Transaction State | Yes | No | Yes |
31 | TM | Transactional Memory Available | Yes | No | Yes |
32 | CM | Computation Mode | No | Yes | No |
33 | Reserved | No | No | No | |
34 | Implementation-dependant | No | Yes | No | |
35 | GS | Guest State | No | Yes | No |
36 | Implementation-dependant | No | Yes | No | |
37 | UCLE | User Cache Locking Enable | No | Yes | No |
38 | VEC | Vector Available | Yes | Yes[note 3] | Yes |
39 | Reserved | No | No | No | |
40 | VSX | VSX Available | Yes | Yes | Yes |
41 | S | Secure Mode[1] | No | No | No |
42:45 | Reserved | No | No | No | |
46 | CE | Critical Enable | No | Yes | No |
47 | Reserved | No | No | No | |
48 | EE | External Interrupt Enable | Yes | Yes[note 4] | Yes |
49 | PR | Problem State | Yes | Yes | Yes |
50 | FP | Floating-Point Available | Yes | Yes | Yes |
51 | ME | Machine Check Interrupt Enable | Yes | Yes[note 5] | Yes |
52 | FE0 | Floating-Point Exception Mode 0 | Yes | Yes | Yes |
53 | SE | Single-Step Trace Enable | Yes | Yes[note 6] | Yes[note 7] |
54 | BE | Branch Trace Enable | Yes | Yes[note 8] | Yes[note 7] |
55 | FE1 | Floating-Point Exception Mode 1 | Yes | Yes | Yes |
56 | Reserved | No | No | No | |
57 | Reserved | No | No | No | |
58 | IR | Instruction Relocate | Yes | Yes[note 9] | Yes |
59 | DR | Data Relocate | Yes | Yes[note 10] | Yes |
60 | Implementation-dependant | No | Yes | No | |
61 | PMM | Performance Monitor Mark | Yes | Yes | Yes |
62 | RI | Recoverable Interrupt | Yes | No | Yes |
63 | LE | Little-Endian Mode | Yes | No | Yes |
- ↑ Undocumented; see The PowerPC AS Tagged Memory Extensions and The Talos II, Blackbird POWER9 systems support tagged memory.
- ↑ Power ISA version 3.0B defines this bit as something set in hardware to be zero, and warns against changing it.
- ↑ Power ISA version 2.07 Book III-E defines this as SPV - SP/Embedded Floating-Point/Vector Available
- ↑ Power ISA version 2.07 Book III-E calls this External Enable
- ↑ Power ISA version 2.07 Book III-E calls this Machine Check Enable
- ↑ Power ISA version 2.07 Book III-E defines this as Implementation-dependent
- ↑ 7.0 7.1 Power ISA version 3.0B defines bits 53 and 54 together as TE - Trace Enable - and defines having both bits set as reserved
- ↑ Power ISA version 2.07 Book III-E defines this as DE - Debug Interrupt Enable
- ↑ Power ISA version 2.07 Book III-E defines this as IS - Instruction Address Space
- ↑ Power ISA version 2.07 Book III-E defines this as DS - Data Address Space
List
Bit 0 - Sixty-Four-Bit Mode (SF)
0 | The thread is in 32-bit mode |
---|---|
1 | The thread is in 64-bit mode |
Bit 3 - Hypervisor State (HV)
0 | The thread is not in hypervisor state |
---|---|
1 | The thread is in hypervisor state if MSRPR = 0 |
Bit 5
Split Little Endian (SLE)
0 | Instruction and data storage use the same endian-ness |
---|---|
1 | Instruction storage accesses use the value specified by MSRLE. Data storage accesses use the opposite. |
Power ISA version 3
Power ISA version 3 does not define bit 5 so much as warn that, "software must ensure that this bit contains 0". It then reassure that the hardware will initialise it to 0.
Bit 49 - Problem State (PR)
0 | The thread is in a privileged state |
---|---|
1 | The thread is in problem state |
Bit 63 - Little-Endian Mode (LE)
0 | The thread is in Big-Endian mode |
---|---|
1 | The thread is in Little-Endian mode. |
Multi-bit States
Privilege State
The privilege state of a thread is a property of multiple bits in the MSR; however, not all of these states are available on all Power processors; for example, the Ultravisor state was first officially announced for POWER9's DD2.3 stepping. Additionally, at time of release the official ISA documentation still does not fully describe the Ultravisor state.[1]
MSRS | MSRHV | MSRPR | State |
---|---|---|---|
0 | 0 | 0 | Privileged |
0 | 0 | 1 | Problem |
0 | 1 | 0 | Hypervisor |
0 | 1 | 1 | Problem |
1 | 0 | 0 | Privileged |
1 | 0 | 1 | Problem |
1 | 1 | 0 | Ultravisor |
1 | 1 | 1 | Reserved |
Endian-ness
MSRSLE | MSRLE | Data | Instruction |
---|---|---|---|
0 | 0 | Big-Endian | Big-Endian |
0 | 1 | Little-Endian | Little-Endian |
1 | 0 | Little-Endian | Big-Endian |
1 | 1 | Big-Endian | Little-Endian |