@@ -24,6 +24,7 @@ pub unsafe fn set_cs(sel: SegmentSelector) {
24
24
"1:" ,
25
25
sel = in( reg) u64 :: from( sel. 0 ) ,
26
26
tmp = lateout( reg) _,
27
+ options( preserves_flags) ,
27
28
) ;
28
29
29
30
#[ cfg( not( feature = "inline_asm" ) ) ]
@@ -39,7 +40,7 @@ pub unsafe fn set_cs(sel: SegmentSelector) {
39
40
#[ inline]
40
41
pub unsafe fn load_ss ( sel : SegmentSelector ) {
41
42
#[ cfg( feature = "inline_asm" ) ]
42
- asm ! ( "mov ss, {0:x}" , in( reg) sel. 0 , options( nostack) ) ;
43
+ asm ! ( "mov ss, {0:x}" , in( reg) sel. 0 , options( nostack, preserves_flags ) ) ;
43
44
44
45
#[ cfg( not( feature = "inline_asm" ) ) ]
45
46
crate :: asm:: x86_64_asm_load_ss ( sel. 0 ) ;
@@ -54,7 +55,7 @@ pub unsafe fn load_ss(sel: SegmentSelector) {
54
55
#[ inline]
55
56
pub unsafe fn load_ds ( sel : SegmentSelector ) {
56
57
#[ cfg( feature = "inline_asm" ) ]
57
- asm ! ( "mov ds, {0:x}" , in( reg) sel. 0 , options( nostack) ) ;
58
+ asm ! ( "mov ds, {0:x}" , in( reg) sel. 0 , options( nostack, preserves_flags ) ) ;
58
59
59
60
#[ cfg( not( feature = "inline_asm" ) ) ]
60
61
crate :: asm:: x86_64_asm_load_ds ( sel. 0 ) ;
@@ -69,7 +70,7 @@ pub unsafe fn load_ds(sel: SegmentSelector) {
69
70
#[ inline]
70
71
pub unsafe fn load_es ( sel : SegmentSelector ) {
71
72
#[ cfg( feature = "inline_asm" ) ]
72
- asm ! ( "mov es, {0:x}" , in( reg) sel. 0 , options( nostack) ) ;
73
+ asm ! ( "mov es, {0:x}" , in( reg) sel. 0 , options( nostack, preserves_flags ) ) ;
73
74
74
75
#[ cfg( not( feature = "inline_asm" ) ) ]
75
76
crate :: asm:: x86_64_asm_load_es ( sel. 0 ) ;
@@ -84,7 +85,7 @@ pub unsafe fn load_es(sel: SegmentSelector) {
84
85
#[ inline]
85
86
pub unsafe fn load_fs ( sel : SegmentSelector ) {
86
87
#[ cfg( feature = "inline_asm" ) ]
87
- asm ! ( "mov fs, {0:x}" , in( reg) sel. 0 , options( nostack) ) ;
88
+ asm ! ( "mov fs, {0:x}" , in( reg) sel. 0 , options( nostack, preserves_flags ) ) ;
88
89
89
90
#[ cfg( not( feature = "inline_asm" ) ) ]
90
91
crate :: asm:: x86_64_asm_load_fs ( sel. 0 ) ;
@@ -99,7 +100,7 @@ pub unsafe fn load_fs(sel: SegmentSelector) {
99
100
#[ inline]
100
101
pub unsafe fn load_gs ( sel : SegmentSelector ) {
101
102
#[ cfg( feature = "inline_asm" ) ]
102
- asm ! ( "mov gs, {0:x}" , in( reg) sel. 0 , options( nostack) ) ;
103
+ asm ! ( "mov gs, {0:x}" , in( reg) sel. 0 , options( nostack, preserves_flags ) ) ;
103
104
104
105
#[ cfg( not( feature = "inline_asm" ) ) ]
105
106
crate :: asm:: x86_64_asm_load_gs ( sel. 0 ) ;
@@ -114,7 +115,7 @@ pub unsafe fn load_gs(sel: SegmentSelector) {
114
115
#[ inline]
115
116
pub unsafe fn swap_gs ( ) {
116
117
#[ cfg( feature = "inline_asm" ) ]
117
- asm ! ( "swapgs" , options( nostack) ) ;
118
+ asm ! ( "swapgs" , options( nostack, preserves_flags ) ) ;
118
119
119
120
#[ cfg( not( feature = "inline_asm" ) ) ]
120
121
crate :: asm:: x86_64_asm_swapgs ( ) ;
@@ -127,7 +128,7 @@ pub fn cs() -> SegmentSelector {
127
128
128
129
#[ cfg( feature = "inline_asm" ) ]
129
130
unsafe {
130
- asm ! ( "mov {0:x}, cs" , out( reg) segment, options( nostack, nomem ) ) ;
131
+ asm ! ( "mov {0:x}, cs" , out( reg) segment, options( nomem , nostack, preserves_flags ) ) ;
131
132
}
132
133
#[ cfg( not( feature = "inline_asm" ) ) ]
133
134
unsafe {
@@ -149,7 +150,7 @@ pub fn cs() -> SegmentSelector {
149
150
#[ inline]
150
151
pub unsafe fn wrfsbase ( val : u64 ) {
151
152
#[ cfg( feature = "inline_asm" ) ]
152
- asm ! ( "wrfsbase {}" , in( reg) val, options( nomem , nostack ) ) ;
153
+ asm ! ( "wrfsbase {}" , in( reg) val, options( nostack , preserves_flags ) ) ;
153
154
154
155
#[ cfg( not( feature = "inline_asm" ) ) ]
155
156
crate :: asm:: x86_64_asm_wrfsbase ( val) ;
@@ -165,7 +166,7 @@ pub unsafe fn rdfsbase() -> u64 {
165
166
#[ cfg( feature = "inline_asm" ) ]
166
167
{
167
168
let val: u64 ;
168
- asm ! ( "rdfsbase {}" , out( reg) val, options( nomem, nostack) ) ;
169
+ asm ! ( "rdfsbase {}" , out( reg) val, options( nomem, nostack, preserves_flags ) ) ;
169
170
val
170
171
}
171
172
@@ -184,7 +185,7 @@ pub unsafe fn rdfsbase() -> u64 {
184
185
#[ inline]
185
186
pub unsafe fn wrgsbase ( val : u64 ) {
186
187
#[ cfg( feature = "inline_asm" ) ]
187
- asm ! ( "wrgsbase {}" , in( reg) val, options( nomem , nostack ) ) ;
188
+ asm ! ( "wrgsbase {}" , in( reg) val, options( nostack , preserves_flags ) ) ;
188
189
189
190
#[ cfg( not( feature = "inline_asm" ) ) ]
190
191
crate :: asm:: x86_64_asm_wrgsbase ( val) ;
@@ -200,7 +201,7 @@ pub unsafe fn rdgsbase() -> u64 {
200
201
#[ cfg( feature = "inline_asm" ) ]
201
202
{
202
203
let val: u64 ;
203
- asm ! ( "rdgsbase {}" , out( reg) val, options( nomem, nostack) ) ;
204
+ asm ! ( "rdgsbase {}" , out( reg) val, options( nomem, nostack, preserves_flags ) ) ;
204
205
val
205
206
}
206
207
0 commit comments