1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#[derive(Copy, Clone)]
pub union StateComponent
{
pub user: UserStateComponent,
pub supervisor: SupervisorStateComponent,
}
impl StateComponent
{
pub const x87: StateComponent = UserStateComponent::x87.to_state_component();
pub const SSE: StateComponent = UserStateComponent::SSE.to_state_component();
pub const AVX: StateComponent = UserStateComponent::AVX.to_state_component();
pub const BNDREGS_MPX: StateComponent = UserStateComponent::BNDREGS_MPX.to_state_component();
pub const BNDCSR_MPX: StateComponent = UserStateComponent::BNDCSR_MPX.to_state_component();
pub const opmask_AVX_512: StateComponent = UserStateComponent::opmask_AVX_512.to_state_component();
pub const ZMM_Hi256_AVX_512: StateComponent = UserStateComponent::ZMM_Hi256_AVX_512.to_state_component();
pub const Hi16_ZMM_AVX_512: StateComponent = UserStateComponent::Hi16_ZMM_AVX_512.to_state_component();
pub const PKRU: StateComponent = UserStateComponent::PKRU.to_state_component();
pub const PT: StateComponent = SupervisorStateComponent::PT.to_state_component();
pub const HDC: StateComponent = SupervisorStateComponent::HDC.to_state_component();
#[inline(always)]
pub const fn not_sizing_queryable_user_state_component(not_sizing_queryable_user_state_component: NotSizingQueryableUserStateComponent) -> StateComponent
{
not_sizing_queryable_user_state_component.to_state_component()
}
#[inline(always)]
pub const fn sizing_queryable_user_state_component(sizing_queryable_user_state_component: SizingQueryableUserStateComponent) -> StateComponent
{
sizing_queryable_user_state_component.to_state_component()
}
#[inline(always)]
pub const fn sizing_queryable_supervisor_state_component(supervisor_state_component: SupervisorStateComponent) -> StateComponent
{
supervisor_state_component.to_state_component()
}
#[inline(always)]
pub const fn user_state_component(user_state_component: UserStateComponent) -> StateComponent
{
user_state_component.to_state_component()
}
#[inline(always)]
pub fn sizing(self) -> Option<StateComponentSizing>
{
let bit = self.bit();
if bit >= 2
{
StateComponentSizing::sizing(bit)
}
else
{
None
}
}
#[inline(always)]
pub fn bit(self) -> u8
{
unsafe { transmute(self) }
}
}