@@ -16,26 +16,18 @@ use crate::structures::gdt::SegmentSelector;
1616#[ inline]
1717pub unsafe fn set_cs ( sel : SegmentSelector ) {
1818 #[ cfg( feature = "inline_asm" ) ]
19- #[ inline( always) ]
20- unsafe fn inner ( sel : SegmentSelector ) {
21- asm ! (
22- "push {sel}" ,
23- "lea {tmp}, [1f + rip]" ,
24- "push {tmp}" ,
25- "retfq" ,
26- "1:" ,
27- sel = in( reg) u64 :: from( sel. 0 ) ,
28- tmp = lateout( reg) _,
29- ) ;
30- }
19+ asm ! (
20+ "push {sel}" ,
21+ "lea {tmp}, [1f + rip]" ,
22+ "push {tmp}" ,
23+ "retfq" ,
24+ "1:" ,
25+ sel = in( reg) u64 :: from( sel. 0 ) ,
26+ tmp = lateout( reg) _,
27+ ) ;
3128
3229 #[ cfg( not( feature = "inline_asm" ) ) ]
33- #[ inline( always) ]
34- unsafe fn inner ( sel : SegmentSelector ) {
35- crate :: asm:: x86_64_asm_set_cs ( u64:: from ( sel. 0 ) )
36- }
37-
38- inner ( sel)
30+ crate :: asm:: x86_64_asm_set_cs ( u64:: from ( sel. 0 ) ) ;
3931}
4032
4133/// Reload stack segment register.
@@ -131,18 +123,18 @@ pub unsafe fn swap_gs() {
131123/// Returns the current value of the code segment register.
132124#[ inline]
133125pub fn cs ( ) -> SegmentSelector {
126+ let segment: u16 ;
127+
134128 #[ cfg( feature = "inline_asm" ) ]
135- {
136- let segment: u16 ;
137- unsafe { asm ! ( "mov {0:x}, cs" , out( reg) segment, options( nostack, nomem) ) } ;
138- SegmentSelector ( segment)
129+ unsafe {
130+ asm ! ( "mov {0:x}, cs" , out( reg) segment, options( nostack, nomem) ) ;
139131 }
140-
141132 #[ cfg( not( feature = "inline_asm" ) ) ]
142- {
143- let segment: u16 = unsafe { crate :: asm:: x86_64_asm_get_cs ( ) } ;
144- SegmentSelector ( segment)
133+ unsafe {
134+ segment = crate :: asm:: x86_64_asm_get_cs ( ) ;
145135 }
136+
137+ SegmentSelector ( segment)
146138}
147139
148140/// Writes the FS segment base address
@@ -157,18 +149,10 @@ pub fn cs() -> SegmentSelector {
157149#[ inline]
158150pub unsafe fn wrfsbase ( val : u64 ) {
159151 #[ cfg( feature = "inline_asm" ) ]
160- #[ inline( always) ]
161- unsafe fn inner ( val : u64 ) {
162- asm ! ( "wrfsbase {}" , in( reg) val, options( nomem, nostack) ) ;
163- }
152+ asm ! ( "wrfsbase {}" , in( reg) val, options( nomem, nostack) ) ;
164153
165154 #[ cfg( not( feature = "inline_asm" ) ) ]
166- #[ inline( always) ]
167- unsafe fn inner ( val : u64 ) {
168- crate :: asm:: x86_64_asm_wrfsbase ( val)
169- }
170-
171- inner ( val)
155+ crate :: asm:: x86_64_asm_wrfsbase ( val) ;
172156}
173157
174158/// Reads the FS segment base address
@@ -179,20 +163,14 @@ pub unsafe fn wrfsbase(val: u64) {
179163#[ inline]
180164pub unsafe fn rdfsbase ( ) -> u64 {
181165 #[ cfg( feature = "inline_asm" ) ]
182- #[ inline( always) ]
183- unsafe fn inner ( ) -> u64 {
166+ {
184167 let val: u64 ;
185168 asm ! ( "rdfsbase {}" , out( reg) val, options( nomem, nostack) ) ;
186169 val
187170 }
188171
189172 #[ cfg( not( feature = "inline_asm" ) ) ]
190- #[ inline( always) ]
191- unsafe fn inner ( ) -> u64 {
192- crate :: asm:: x86_64_asm_rdfsbase ( )
193- }
194-
195- inner ( )
173+ crate :: asm:: x86_64_asm_rdfsbase ( )
196174}
197175
198176/// Writes the GS segment base address
@@ -206,18 +184,10 @@ pub unsafe fn rdfsbase() -> u64 {
206184#[ inline]
207185pub unsafe fn wrgsbase ( val : u64 ) {
208186 #[ cfg( feature = "inline_asm" ) ]
209- #[ inline( always) ]
210- unsafe fn inner ( val : u64 ) {
211- asm ! ( "wrgsbase {}" , in( reg) val, options( nomem, nostack) )
212- }
187+ asm ! ( "wrgsbase {}" , in( reg) val, options( nomem, nostack) ) ;
213188
214189 #[ cfg( not( feature = "inline_asm" ) ) ]
215- #[ inline( always) ]
216- unsafe fn inner ( val : u64 ) {
217- crate :: asm:: x86_64_asm_wrgsbase ( val)
218- }
219-
220- inner ( val)
190+ crate :: asm:: x86_64_asm_wrgsbase ( val) ;
221191}
222192
223193/// Reads the GS segment base address
@@ -228,18 +198,12 @@ pub unsafe fn wrgsbase(val: u64) {
228198#[ inline]
229199pub unsafe fn rdgsbase ( ) -> u64 {
230200 #[ cfg( feature = "inline_asm" ) ]
231- #[ inline( always) ]
232- unsafe fn inner ( ) -> u64 {
201+ {
233202 let val: u64 ;
234203 asm ! ( "rdgsbase {}" , out( reg) val, options( nomem, nostack) ) ;
235204 val
236205 }
237206
238207 #[ cfg( not( feature = "inline_asm" ) ) ]
239- #[ inline( always) ]
240- unsafe fn inner ( ) -> u64 {
241- crate :: asm:: x86_64_asm_rdgsbase ( )
242- }
243-
244- inner ( )
208+ crate :: asm:: x86_64_asm_rdgsbase ( )
245209}
0 commit comments