about summary refs log tree commit diff
path: root/src/libcore/rt
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-05-07 18:13:15 -0700
committerBrian Anderson <banderson@mozilla.com>2013-05-15 12:19:14 -0700
commitbfd9aa9755149725e39d8024d693ed76f92a30df (patch)
tree45dff5217306f2f3c10ed1add0756f286acaf921 /src/libcore/rt
parent6a6076ae810d470dfb511712c303a4ee7ffedf00 (diff)
downloadrust-bfd9aa9755149725e39d8024d693ed76f92a30df.tar.gz
rust-bfd9aa9755149725e39d8024d693ed76f92a30df.zip
core:rt: A few micro-opts
Diffstat (limited to 'src/libcore/rt')
-rw-r--r--src/libcore/rt/context.rs1
-rw-r--r--src/libcore/rt/global_heap.rs14
-rw-r--r--src/libcore/rt/local_sched.rs1
-rw-r--r--src/libcore/rt/thread_local_storage.rs3
4 files changed, 14 insertions, 5 deletions
diff --git a/src/libcore/rt/context.rs b/src/libcore/rt/context.rs
index 9c1612884f0..2add314fd11 100644
--- a/src/libcore/rt/context.rs
+++ b/src/libcore/rt/context.rs
@@ -84,6 +84,7 @@ pub impl Context {
 }
 
 extern {
+    #[rust_stack]
     fn swap_registers(out_regs: *mut Registers, in_regs: *Registers);
 }
 
diff --git a/src/libcore/rt/global_heap.rs b/src/libcore/rt/global_heap.rs
index 3b35c2fb804..ce7ff87b445 100644
--- a/src/libcore/rt/global_heap.rs
+++ b/src/libcore/rt/global_heap.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 use sys::{TypeDesc, size_of};
-use libc::{c_void, size_t};
+use libc::{c_void, size_t, uintptr_t};
 use c_malloc = libc::malloc;
 use c_free = libc::free;
 use managed::raw::{BoxHeaderRepr, BoxRepr};
@@ -34,7 +34,7 @@ pub unsafe fn malloc(td: *TypeDesc, size: uint) -> *c_void {
     box.header.prev = null();
     box.header.next = null();
 
-    let exchange_count = &mut *rust_get_exchange_count_ptr();
+    let exchange_count = &mut *exchange_count_ptr();
     atomic_xadd(exchange_count, 1);
 
     return transmute(box);
@@ -52,7 +52,7 @@ pub unsafe fn malloc_raw(size: uint) -> *c_void {
 }
 
 pub unsafe fn free(ptr: *c_void) {
-    let exchange_count = &mut *rust_get_exchange_count_ptr();
+    let exchange_count = &mut *exchange_count_ptr();
     atomic_xsub(exchange_count, 1);
 
     assert!(ptr.is_not_null());
@@ -77,7 +77,11 @@ fn align_to(size: uint, align: uint) -> uint {
     (size + align - 1) & !(align - 1)
 }
 
+fn exchange_count_ptr() -> *mut int {
+    // XXX: Need mutable globals
+    unsafe { transmute(&rust_exchange_count) }
+}
+
 extern {
-    #[rust_stack]
-    fn rust_get_exchange_count_ptr() -> *mut int;
+    static rust_exchange_count: uintptr_t;
 }
diff --git a/src/libcore/rt/local_sched.rs b/src/libcore/rt/local_sched.rs
index eb35eb7881d..1ef1fd33a83 100644
--- a/src/libcore/rt/local_sched.rs
+++ b/src/libcore/rt/local_sched.rs
@@ -126,6 +126,7 @@ fn maybe_tls_key() -> Option<tls::Key> {
 }
 
 extern {
+    #[fast_ffi]
     fn rust_get_sched_tls_key() -> *mut c_void;
 }
 
diff --git a/src/libcore/rt/thread_local_storage.rs b/src/libcore/rt/thread_local_storage.rs
index 366996fb935..6a08c0f59b1 100644
--- a/src/libcore/rt/thread_local_storage.rs
+++ b/src/libcore/rt/thread_local_storage.rs
@@ -46,8 +46,11 @@ type pthread_key_t = ::libc::c_uint;
 
 #[cfg(unix)]
 extern {
+    #[fast_ffi]
     fn pthread_key_create(key: *mut pthread_key_t, dtor: *u8) -> c_int;
+    #[fast_ffi]
     fn pthread_setspecific(key: pthread_key_t, value: *mut c_void) -> c_int;
+    #[fast_ffi]
     fn pthread_getspecific(key: pthread_key_t) -> *mut c_void;
 }