Skip to content

Commit 0de27ce

Browse files
author
Eric Holk
committed
Translated start_task, but it fails on spp == align_down(spp)
1 parent d01948c commit 0de27ce

File tree

3 files changed

+58
-7
lines changed

3 files changed

+58
-7
lines changed

src/comp/back/upcall.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ fn declare_upcalls(type_names tn, ModuleRef llmod) -> @upcalls {
123123
T_size_t(), T_ptr(T_ptr(T_tydesc(tn)))],
124124
T_ptr(T_tydesc(tn))),
125125
new_task=d("new_task", [T_ptr(T_str())], T_taskptr(tn)),
126-
start_task=d("start_task", [T_taskptr(tn), T_int(), T_int(),
127-
T_int(), T_size_t()],
126+
start_task=d("start_task", [T_taskptr(tn),
127+
T_int(), T_int(), T_size_t()],
128128
T_taskptr(tn)),
129129
new_thread=d("new_thread", [T_ptr(T_i8())], T_taskptr(tn)),
130130
start_thread=d("start_thread", [T_taskptr(tn), T_int(), T_int(),
@@ -133,3 +133,13 @@ fn declare_upcalls(type_names tn, ModuleRef llmod) -> @upcalls {
133133
);
134134
}
135135

136+
//
137+
// Local Variables:
138+
// mode: C++
139+
// fill-column: 78;
140+
// indent-tabs-mode: nil
141+
// c-basic-offset: 4
142+
// buffer-file-coding-system: utf-8-unix
143+
// compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
144+
// End:
145+
//

src/comp/middle/trans.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5981,6 +5981,47 @@ fn trans_spawn(&@block_ctxt cx,
59815981
[bcx.fcx.lltaskptr, lltname]);
59825982
log_err "Done";
59835983

5984+
// Okay, start the task.
5985+
// First we find the function
5986+
auto fnptr = trans_lval(bcx, func).res;
5987+
bcx = fnptr.bcx;
5988+
5989+
auto num_args = vec::len[@ast::expr](args);
5990+
5991+
auto llfnptr = bcx.build.GEP(fnptr.val,
5992+
[C_int(0), C_int(0)]);
5993+
log_err "Casting llfnptr";
5994+
auto llfnptr_i = bcx.build.PointerCast(llfnptr,
5995+
T_int());
5996+
log_err "Cassting llargs";
5997+
auto llargs_i = bcx.build.PointerCast(llargs.val,
5998+
T_int());
5999+
6000+
log_err "Building call to start_task";
6001+
log_err #fmt("ty(start_task) = %s",
6002+
val_str(bcx.fcx.lcx.ccx.tn,
6003+
bcx.fcx.lcx.ccx.upcalls.start_task));
6004+
log_err #fmt("ty(lltaskptr) = %s",
6005+
val_str(bcx.fcx.lcx.ccx.tn,
6006+
bcx.fcx.lltaskptr));
6007+
log_err #fmt("ty(new_task) = %s",
6008+
val_str(bcx.fcx.lcx.ccx.tn,
6009+
new_task));
6010+
log_err #fmt("ty(llfnptr) = %s",
6011+
val_str(bcx.fcx.lcx.ccx.tn,
6012+
llfnptr_i));
6013+
log_err #fmt("ty(llargs) = %s",
6014+
val_str(bcx.fcx.lcx.ccx.tn,
6015+
llargs_i));
6016+
log_err #fmt("ty(num_args) = %s",
6017+
val_str(bcx.fcx.lcx.ccx.tn,
6018+
C_int(num_args as int)));
6019+
bcx.build.Call(bcx.fcx.lcx.ccx.upcalls.start_task,
6020+
[bcx.fcx.lltaskptr, new_task,
6021+
llfnptr_i, llargs_i, C_int(num_args as int)]);
6022+
log_err "Done";
6023+
6024+
/*
59846025
alt(dom) {
59856026
case(ast::dom_implicit) {
59866027
// TODO
@@ -5995,6 +6036,7 @@ fn trans_spawn(&@block_ctxt cx,
59956036
fail;
59966037
}
59976038
}
6039+
*/
59986040

59996041
ret res(bcx, new_task);
60006042
}

src/rt/rust_upcall.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -549,20 +549,19 @@ upcall_new_task(rust_task *spawner, rust_vec *name) {
549549
extern "C" CDECL rust_task *
550550
upcall_start_task(rust_task *spawner,
551551
rust_task *task,
552-
uintptr_t exit_task_glue,
553552
uintptr_t spawnee_fn,
553+
uintptr_t args,
554554
size_t callsz) {
555555
LOG_UPCALL_ENTRY(spawner);
556556

557557
rust_dom *dom = spawner->dom;
558558
DLOG(dom, task,
559559
"upcall start_task(task %s @0x%" PRIxPTR
560-
" exit_task_glue 0x%" PRIxPTR
561560
", spawnee 0x%" PRIxPTR
562-
", callsz %" PRIdPTR ")", task->name, task, exit_task_glue,
561+
", callsz %" PRIdPTR ")", task->name, task,
563562
spawnee_fn, callsz);
564-
task->start(exit_task_glue, spawnee_fn,
565-
spawner->rust_sp, callsz);
563+
task->start((uintptr_t)rust_new_exit_task_glue, spawnee_fn,
564+
args, callsz);
566565
return task;
567566
}
568567

0 commit comments

Comments
 (0)