Skip to content

Commit 018d552

Browse files
committed
---
yaml --- r: 6390 b: refs/heads/master c: 21865dd h: refs/heads/master v: v3
1 parent de1f542 commit 018d552

File tree

6 files changed

+19
-17
lines changed

6 files changed

+19
-17
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: eecbc815ac44be2d17338d6dfd60c1417ba29ff1
2+
refs/heads/master: 21865ddce662767ff8319732cb55b4cdbc9ea67e

trunk/src/lib/task.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export spawn_joinable;
5353
#[abi = "rust-intrinsic"]
5454
native mod rusti {
5555
// these must run on the Rust stack so that they can swap stacks etc:
56-
fn task_sleep(time_in_us: uint);
56+
fn task_sleep(task: *rust_task, time_in_us: uint);
5757
}
5858

5959
#[link_name = "rustrt"]
@@ -63,6 +63,7 @@ native mod rustrt {
6363
fn pin_task();
6464
fn unpin_task();
6565
fn get_task_id() -> task_id;
66+
fn rust_get_task() -> *rust_task;
6667

6768
fn set_min_stack(stack_size: uint);
6869

@@ -142,7 +143,10 @@ Parameters:
142143
143144
time_in_us - maximum number of microseconds to yield control for
144145
*/
145-
fn sleep(time_in_us: uint) { ret rusti::task_sleep(time_in_us); }
146+
fn sleep(time_in_us: uint) {
147+
let task = rustrt::rust_get_task();
148+
ret rusti::task_sleep(task, time_in_us);
149+
}
146150

147151
/*
148152
Function: yield

trunk/src/rt/intrinsics/intrinsics.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ extern "C" CDECL void
1212
port_recv(uintptr_t *dptr, rust_port *port);
1313

1414
extern "C" CDECL void
15-
rust_task_sleep(size_t time_in_us);
15+
rust_task_sleep(rust_task *task, size_t time_in_us);
1616

1717
extern "C" void
1818
rust_intrinsic_vec_len(size_t *retptr,
@@ -71,7 +71,8 @@ rust_intrinsic_get_type_desc(void **retptr,
7171
extern "C" void
7272
rust_intrinsic_task_sleep(void **retptr,
7373
void *env,
74+
rust_task *task,
7475
size_t time_in_us) {
75-
rust_task_sleep(time_in_us);
76+
rust_task_sleep(task, time_in_us);
7677
}
7778

trunk/src/rt/intrinsics/intrinsics.i386.ll.in

+4-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ target triple = "@CFG_TARGET_TRIPLE@"
2727
%class.rust_task_list = type { %class.indexed_list, %struct.rust_scheduler*, i8* }
2828
%class.indexed_list = type { i32 (...)**, %class.array_list.2 }
2929
%class.array_list.2 = type { i32, %struct.rust_task**, i32 }
30-
%struct.rust_task = type { %struct.rust_task_user, i32, %class.context, %struct.stk_seg*, i32, %struct.rust_scheduler*, %class.rust_crate_cache*, %class.rust_kernel*, i8*, %class.rust_task_list*, %struct.rust_cond*, i8*, %struct.rust_task*, i32, i32, %class.timer, i32*, i32, i32, %class.memory_region, %"class.rust_task::wakeup_callback"*, i8, i8, i8, %class.lock_and_signal, %class.hash_map.4, %class.rust_obstack, %"class.std::map", i32, %"class.debug::task_debug_info" }
30+
%struct.rust_task = type { %struct.rust_task_user, i32, %class.context, %struct.stk_seg*, i32, %struct.rust_scheduler*, %class.rust_crate_cache*, %class.rust_kernel*, i8*, %class.rust_task_list*, %struct.rust_cond*, i8*, %struct.rust_task*, i32, i32, %class.timer, i32*, i32, i32, %class.memory_region, i8, i8, i8, %class.lock_and_signal, %class.hash_map.4, %class.rust_obstack, %"class.std::map", i32, %"class.debug::task_debug_info" }
3131
%struct.rust_task_user = type { i32, i32, %struct.chan_handle, i32 }
3232
%struct.chan_handle = type { i32, i32 }
3333
%class.context = type { %struct.registers_t, %class.context* }
@@ -36,7 +36,6 @@ target triple = "@CFG_TARGET_TRIPLE@"
3636
%class.rust_crate_cache = type { %struct.type_desc*, %struct.rust_scheduler*, i32 }
3737
%struct.rust_cond = type { i8 }
3838
%class.timer = type { i32 (...)**, i64, i64 }
39-
%"class.rust_task::wakeup_callback" = type { i32 (...)** }
4039
%class.hash_map.4 = type { %"struct.hash_map<int, rust_port *>::map_entry"* }
4140
%"struct.hash_map<int, rust_port *>::map_entry" = type opaque
4241
%class.rust_obstack = type { %struct.rust_obstack_chunk*, %struct.rust_task* }
@@ -105,12 +104,12 @@ define void @rust_intrinsic_get_type_desc(i8** nocapture %retptr, i8* nocapture
105104
ret void
106105
}
107106

108-
define void @rust_intrinsic_task_sleep(i8** nocapture %retptr, i8* nocapture %env, i32 %time_in_us) {
109-
tail call void @rust_task_sleep(i32 %time_in_us)
107+
define void @rust_intrinsic_task_sleep(i8** nocapture %retptr, i8* nocapture %env, %struct.rust_task* %task, i32 %time_in_us) {
108+
tail call void @rust_task_sleep(%struct.rust_task* %task, i32 %time_in_us)
110109
ret void
111110
}
112111

113-
declare void @rust_task_sleep(i32)
112+
declare void @rust_task_sleep(%struct.rust_task*, i32)
114113

115114
!0 = metadata !{metadata !"any pointer", metadata !1}
116115
!1 = metadata !{metadata !"omnipotent char", metadata !2}

trunk/src/rt/intrinsics/intrinsics.x86_64.ll.in

+4-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ target triple = "@CFG_TARGET_TRIPLE@"
2727
%class.rust_task_list = type { %class.indexed_list, %struct.rust_scheduler*, i8* }
2828
%class.indexed_list = type { i32 (...)**, %class.array_list.2 }
2929
%class.array_list.2 = type { i64, %struct.rust_task**, i64 }
30-
%struct.rust_task = type { %struct.rust_task_user, i64, %class.context, %struct.stk_seg*, i64, %struct.rust_scheduler*, %class.rust_crate_cache*, %class.rust_kernel*, i8*, %class.rust_task_list*, %struct.rust_cond*, i8*, %struct.rust_task*, i32, i64, %class.timer, i64*, i32, i32, %class.memory_region, %"class.rust_task::wakeup_callback"*, i8, i8, i8, %class.lock_and_signal, %class.hash_map.4, %class.rust_obstack, %"class.std::map", i32, %"class.debug::task_debug_info" }
30+
%struct.rust_task = type { %struct.rust_task_user, i64, %class.context, %struct.stk_seg*, i64, %struct.rust_scheduler*, %class.rust_crate_cache*, %class.rust_kernel*, i8*, %class.rust_task_list*, %struct.rust_cond*, i8*, %struct.rust_task*, i32, i64, %class.timer, i64*, i32, i32, %class.memory_region, i8, i8, i8, %class.lock_and_signal, %class.hash_map.4, %class.rust_obstack, %"class.std::map", i32, %"class.debug::task_debug_info" }
3131
%struct.rust_task_user = type { i64, i64, %struct.chan_handle, i64 }
3232
%struct.chan_handle = type { i64, i64 }
3333
%class.context = type { %struct.registers_t, %class.context* }
@@ -36,7 +36,6 @@ target triple = "@CFG_TARGET_TRIPLE@"
3636
%class.rust_crate_cache = type { %struct.type_desc*, %struct.rust_scheduler*, i64 }
3737
%struct.rust_cond = type { i8 }
3838
%class.timer = type { i32 (...)**, i64, i64 }
39-
%"class.rust_task::wakeup_callback" = type { i32 (...)** }
4039
%class.hash_map.4 = type { %"struct.hash_map<long, rust_port *>::map_entry"* }
4140
%"struct.hash_map<long, rust_port *>::map_entry" = type opaque
4241
%class.rust_obstack = type { %struct.rust_obstack_chunk*, %struct.rust_task* }
@@ -105,12 +104,12 @@ define void @rust_intrinsic_get_type_desc(i8** nocapture %retptr, i8* nocapture
105104
ret void
106105
}
107106

108-
define void @rust_intrinsic_task_sleep(i8** nocapture %retptr, i8* nocapture %env, i64 %time_in_us) uwtable {
109-
tail call void @rust_task_sleep(i64 %time_in_us)
107+
define void @rust_intrinsic_task_sleep(i8** nocapture %retptr, i8* nocapture %env, %struct.rust_task* %task, i64 %time_in_us) uwtable {
108+
tail call void @rust_task_sleep(%struct.rust_task* %task, i64 %time_in_us)
110109
ret void
111110
}
112111

113-
declare void @rust_task_sleep(i64)
112+
declare void @rust_task_sleep(%struct.rust_task*, i64)
114113

115114
!0 = metadata !{metadata !"any pointer", metadata !1}
116115
!1 = metadata !{metadata !"omnipotent char", metadata !2}

trunk/src/rt/rust_builtin.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -511,8 +511,7 @@ chan_id_send(type_desc *t, rust_task_id target_task_id,
511511
// This is called by an intrinsic on the Rust stack.
512512
// Do not call on the C stack.
513513
extern "C" CDECL void
514-
rust_task_sleep(size_t time_in_us) {
515-
rust_task *task = rust_scheduler::get_task();
514+
rust_task_sleep(rust_task *task, size_t time_in_us) {
516515
task->yield(time_in_us);
517516
}
518517

0 commit comments

Comments
 (0)