From e6d8f06cad4241d7e7eca158814c70ad24c70aed Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 21 Oct 2013 14:16:38 -0700 Subject: [PATCH] Tidy up asm! usage in libstd --- src/libstd/rt/context.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/libstd/rt/context.rs b/src/libstd/rt/context.rs index 7f7545ca230ff..bf8f4a63bcaf3 100644 --- a/src/libstd/rt/context.rs +++ b/src/libstd/rt/context.rs @@ -391,36 +391,32 @@ pub unsafe fn record_sp_limit(limit: uint) { /// As with the setter, this function does not have a __morestack header and can /// therefore be called in a "we're out of stack" situation. #[inline(always)] -// NOTE: after the next snapshot, can remove the initialization before inline -// assembly due to an improvement in how it's handled, then this specific -// allow directive should get removed. -#[allow(dead_assignment)] pub unsafe fn get_sp_limit() -> uint { return target_get_sp_limit(); // x86-64 #[cfg(target_arch = "x86_64", target_os = "macos")] #[inline(always)] unsafe fn target_get_sp_limit() -> uint { - let mut limit: uint = 0; + let limit; asm!("movq $$0x60+90*8, %rsi movq %gs:(%rsi), $0" : "=r"(limit) :: "rsi" : "volatile"); return limit; } #[cfg(target_arch = "x86_64", target_os = "linux")] #[inline(always)] unsafe fn target_get_sp_limit() -> uint { - let mut limit: uint = 0; + let limit; asm!("movq %fs:112, $0" : "=r"(limit) ::: "volatile"); return limit; } #[cfg(target_arch = "x86_64", target_os = "win32")] #[inline(always)] unsafe fn target_get_sp_limit() -> uint { - let mut limit: uint = 0; + let limit; asm!("movq %gs:0x28, $0" : "=r"(limit) ::: "volatile"); return limit; } #[cfg(target_arch = "x86_64", target_os = "freebsd")] #[inline(always)] unsafe fn target_get_sp_limit() -> uint { - let mut limit: uint = 0; + let limit; asm!("movq %fs:24, $0" : "=r"(limit) ::: "volatile"); return limit; } @@ -428,7 +424,7 @@ pub unsafe fn get_sp_limit() -> uint { // x86 #[cfg(target_arch = "x86", target_os = "macos")] #[inline(always)] unsafe fn target_get_sp_limit() -> uint { - let mut limit: uint = 0; + let limit; asm!("movl $$0x48+90*4, %eax movl %gs:(%eax), $0" : "=r"(limit) :: "eax" : "volatile"); return limit; @@ -436,13 +432,13 @@ pub unsafe fn get_sp_limit() -> uint { #[cfg(target_arch = "x86", target_os = "linux")] #[cfg(target_arch = "x86", target_os = "freebsd")] #[inline(always)] unsafe fn target_get_sp_limit() -> uint { - let mut limit: uint = 0; + let limit; asm!("movl %gs:48, $0" : "=r"(limit) ::: "volatile"); return limit; } #[cfg(target_arch = "x86", target_os = "win32")] #[inline(always)] unsafe fn target_get_sp_limit() -> uint { - let mut limit: uint = 0; + let limit; asm!("movl %fs:0x14, $0" : "=r"(limit) ::: "volatile"); return limit; }