@@ -24,6 +24,7 @@ pub unsafe fn set_cs(sel: SegmentSelector) {
2424 "1:" ,
2525 sel = in( reg) u64 :: from( sel. 0 ) ,
2626 tmp = lateout( reg) _,
27+ options( preserves_flags) ,
2728 ) ;
2829
2930 #[ cfg( not( feature = "inline_asm" ) ) ]
@@ -39,7 +40,7 @@ pub unsafe fn set_cs(sel: SegmentSelector) {
3940#[ inline]
4041pub unsafe fn load_ss ( sel : SegmentSelector ) {
4142 #[ 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 ) ) ;
4344
4445 #[ cfg( not( feature = "inline_asm" ) ) ]
4546 crate :: asm:: x86_64_asm_load_ss ( sel. 0 ) ;
@@ -54,7 +55,7 @@ pub unsafe fn load_ss(sel: SegmentSelector) {
5455#[ inline]
5556pub unsafe fn load_ds ( sel : SegmentSelector ) {
5657 #[ 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 ) ) ;
5859
5960 #[ cfg( not( feature = "inline_asm" ) ) ]
6061 crate :: asm:: x86_64_asm_load_ds ( sel. 0 ) ;
@@ -69,7 +70,7 @@ pub unsafe fn load_ds(sel: SegmentSelector) {
6970#[ inline]
7071pub unsafe fn load_es ( sel : SegmentSelector ) {
7172 #[ 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 ) ) ;
7374
7475 #[ cfg( not( feature = "inline_asm" ) ) ]
7576 crate :: asm:: x86_64_asm_load_es ( sel. 0 ) ;
@@ -84,7 +85,7 @@ pub unsafe fn load_es(sel: SegmentSelector) {
8485#[ inline]
8586pub unsafe fn load_fs ( sel : SegmentSelector ) {
8687 #[ 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 ) ) ;
8889
8990 #[ cfg( not( feature = "inline_asm" ) ) ]
9091 crate :: asm:: x86_64_asm_load_fs ( sel. 0 ) ;
@@ -99,7 +100,7 @@ pub unsafe fn load_fs(sel: SegmentSelector) {
99100#[ inline]
100101pub unsafe fn load_gs ( sel : SegmentSelector ) {
101102 #[ 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 ) ) ;
103104
104105 #[ cfg( not( feature = "inline_asm" ) ) ]
105106 crate :: asm:: x86_64_asm_load_gs ( sel. 0 ) ;
@@ -114,7 +115,7 @@ pub unsafe fn load_gs(sel: SegmentSelector) {
114115#[ inline]
115116pub unsafe fn swap_gs ( ) {
116117 #[ cfg( feature = "inline_asm" ) ]
117- asm ! ( "swapgs" , options( nostack) ) ;
118+ asm ! ( "swapgs" , options( nostack, preserves_flags ) ) ;
118119
119120 #[ cfg( not( feature = "inline_asm" ) ) ]
120121 crate :: asm:: x86_64_asm_swapgs ( ) ;
@@ -127,7 +128,7 @@ pub fn cs() -> SegmentSelector {
127128
128129 #[ cfg( feature = "inline_asm" ) ]
129130 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 ) ) ;
131132 }
132133 #[ cfg( not( feature = "inline_asm" ) ) ]
133134 unsafe {
@@ -149,7 +150,7 @@ pub fn cs() -> SegmentSelector {
149150#[ inline]
150151pub unsafe fn wrfsbase ( val : u64 ) {
151152 #[ cfg( feature = "inline_asm" ) ]
152- asm ! ( "wrfsbase {}" , in( reg) val, options( nomem , nostack ) ) ;
153+ asm ! ( "wrfsbase {}" , in( reg) val, options( nostack , preserves_flags ) ) ;
153154
154155 #[ cfg( not( feature = "inline_asm" ) ) ]
155156 crate :: asm:: x86_64_asm_wrfsbase ( val) ;
@@ -165,7 +166,7 @@ pub unsafe fn rdfsbase() -> u64 {
165166 #[ cfg( feature = "inline_asm" ) ]
166167 {
167168 let val: u64 ;
168- asm ! ( "rdfsbase {}" , out( reg) val, options( nomem, nostack) ) ;
169+ asm ! ( "rdfsbase {}" , out( reg) val, options( nomem, nostack, preserves_flags ) ) ;
169170 val
170171 }
171172
@@ -184,7 +185,7 @@ pub unsafe fn rdfsbase() -> u64 {
184185#[ inline]
185186pub unsafe fn wrgsbase ( val : u64 ) {
186187 #[ cfg( feature = "inline_asm" ) ]
187- asm ! ( "wrgsbase {}" , in( reg) val, options( nomem , nostack ) ) ;
188+ asm ! ( "wrgsbase {}" , in( reg) val, options( nostack , preserves_flags ) ) ;
188189
189190 #[ cfg( not( feature = "inline_asm" ) ) ]
190191 crate :: asm:: x86_64_asm_wrgsbase ( val) ;
@@ -200,7 +201,7 @@ pub unsafe fn rdgsbase() -> u64 {
200201 #[ cfg( feature = "inline_asm" ) ]
201202 {
202203 let val: u64 ;
203- asm ! ( "rdgsbase {}" , out( reg) val, options( nomem, nostack) ) ;
204+ asm ! ( "rdgsbase {}" , out( reg) val, options( nomem, nostack, preserves_flags ) ) ;
204205 val
205206 }
206207
0 commit comments