parent
e927df17f7
commit
6323a012bd
5 changed files with 54 additions and 63 deletions
|
|
@ -39,13 +39,8 @@ fn declare_upcalls(_tn: type_names, tydesc_type: TypeRef,
|
|||
let fn_ty = T_fn(arg_tys, rv);
|
||||
ret trans::decl_cdecl_fn(llmod, "upcall_" + name, fn_ty);
|
||||
}
|
||||
fn decl_with_taskptr(taskptr_type: TypeRef, llmod: ModuleRef, name: str,
|
||||
tys: [TypeRef], rv: TypeRef) -> ValueRef {
|
||||
ret decl(llmod, name, [taskptr_type] + tys, rv);
|
||||
}
|
||||
let dv = bind decl_with_taskptr(taskptr_type, llmod, _, _, T_void());
|
||||
let d = bind decl_with_taskptr(taskptr_type, llmod, _, _, _);
|
||||
let dr = bind decl(llmod, _, _, _);
|
||||
let d = bind decl(llmod, _, _, _);
|
||||
let dv = bind decl(llmod, _, _, T_void());
|
||||
|
||||
ret @{_fail: dv("fail", [T_ptr(T_i8()), T_ptr(T_i8()), T_size_t()]),
|
||||
malloc:
|
||||
|
|
@ -61,31 +56,28 @@ fn declare_upcalls(_tn: type_names, tydesc_type: TypeRef,
|
|||
[T_ptr(T_nil()), T_size_t(), T_size_t(), T_size_t(),
|
||||
T_ptr(T_ptr(tydesc_type)), T_int()], T_ptr(tydesc_type)),
|
||||
vec_grow:
|
||||
d("vec_grow", [T_ptr(T_ptr(T_opaque_vec())), T_int()],
|
||||
T_void()),
|
||||
dv("vec_grow", [T_ptr(T_ptr(T_opaque_vec())), T_int()]),
|
||||
vec_push:
|
||||
d("vec_push",
|
||||
[T_ptr(T_ptr(T_opaque_vec())), T_ptr(tydesc_type),
|
||||
T_ptr(T_i8())], T_void()),
|
||||
dv("vec_push",
|
||||
[T_ptr(T_ptr(T_opaque_vec())), T_ptr(tydesc_type),
|
||||
T_ptr(T_i8())]),
|
||||
cmp_type:
|
||||
dr("cmp_type",
|
||||
dv("cmp_type",
|
||||
[T_ptr(T_i1()), taskptr_type, T_ptr(tydesc_type),
|
||||
T_ptr(T_ptr(tydesc_type)), T_ptr(T_i8()), T_ptr(T_i8()),
|
||||
T_i8()], T_void()),
|
||||
T_i8()]),
|
||||
log_type:
|
||||
dr("log_type",
|
||||
[taskptr_type, T_ptr(tydesc_type), T_ptr(T_i8()), T_i32()],
|
||||
T_void()),
|
||||
dv("log_type", [T_ptr(tydesc_type), T_ptr(T_i8()), T_i32()]),
|
||||
dynastack_mark: d("dynastack_mark", [], T_ptr(T_i8())),
|
||||
dynastack_alloc:
|
||||
d("dynastack_alloc_2", [T_size_t(), T_ptr(tydesc_type)],
|
||||
T_ptr(T_i8())),
|
||||
dynastack_free: d("dynastack_free", [T_ptr(T_i8())], T_void()),
|
||||
alloc_c_stack: dr("alloc_c_stack", [T_size_t()], T_ptr(T_i8())),
|
||||
call_c_stack: dr("call_c_stack",
|
||||
[T_ptr(T_fn([], T_int())), T_ptr(T_i8())],
|
||||
T_int()),
|
||||
rust_personality: dr("rust_personality", [], T_i32())
|
||||
dynastack_free: dv("dynastack_free", [T_ptr(T_i8())]),
|
||||
alloc_c_stack: d("alloc_c_stack", [T_size_t()], T_ptr(T_i8())),
|
||||
call_c_stack: d("call_c_stack",
|
||||
[T_ptr(T_fn([], T_int())), T_ptr(T_i8())],
|
||||
T_int()),
|
||||
rust_personality: d("rust_personality", [], T_i32())
|
||||
};
|
||||
}
|
||||
//
|
||||
|
|
|
|||
|
|
@ -389,13 +389,13 @@ fn trans_native_call(cx: @block_ctxt, externs: hashmap<str, ValueRef>,
|
|||
|
||||
fn trans_non_gc_free(cx: @block_ctxt, v: ValueRef) -> @block_ctxt {
|
||||
Call(cx, bcx_ccx(cx).upcalls.free,
|
||||
[cx.fcx.lltaskptr, PointerCast(cx, v, T_ptr(T_i8())), C_int(0)]);
|
||||
[PointerCast(cx, v, T_ptr(T_i8())), C_int(0)]);
|
||||
ret cx;
|
||||
}
|
||||
|
||||
fn trans_shared_free(cx: @block_ctxt, v: ValueRef) -> @block_ctxt {
|
||||
Call(cx, bcx_ccx(cx).upcalls.shared_free,
|
||||
[cx.fcx.lltaskptr, PointerCast(cx, v, T_ptr(T_i8()))]);
|
||||
[PointerCast(cx, v, T_ptr(T_i8()))]);
|
||||
ret cx;
|
||||
}
|
||||
|
||||
|
|
@ -462,11 +462,10 @@ fn dynastack_alloca(cx: @block_ctxt, t: TypeRef, n: ValueRef, ty: ty::t) ->
|
|||
if cx.unreachable { ret llvm::LLVMGetUndef(t); }
|
||||
let bcx = cx;
|
||||
let dy_cx = new_raw_block_ctxt(cx.fcx, cx.fcx.lldynamicallocas);
|
||||
let lltaskptr = bcx_fcx(bcx).lltaskptr;
|
||||
alt bcx_fcx(cx).llobstacktoken {
|
||||
none. {
|
||||
bcx_fcx(cx).llobstacktoken =
|
||||
some(mk_obstack_token(bcx_ccx(cx), cx.fcx, lltaskptr));
|
||||
some(mk_obstack_token(bcx_ccx(cx), cx.fcx));
|
||||
}
|
||||
some(_) {/* no-op */ }
|
||||
}
|
||||
|
|
@ -477,14 +476,14 @@ fn dynastack_alloca(cx: @block_ctxt, t: TypeRef, n: ValueRef, ty: ty::t) ->
|
|||
let ti = none;
|
||||
let lltydesc = get_tydesc(cx, ty, false, tps_normal, ti).result.val;
|
||||
|
||||
let llresult = Call(dy_cx, dynastack_alloc, [lltaskptr, llsz, lltydesc]);
|
||||
let llresult = Call(dy_cx, dynastack_alloc, [llsz, lltydesc]);
|
||||
ret PointerCast(dy_cx, llresult, T_ptr(t));
|
||||
}
|
||||
|
||||
fn mk_obstack_token(ccx: @crate_ctxt, fcx: @fn_ctxt, lltaskptr: ValueRef) ->
|
||||
fn mk_obstack_token(ccx: @crate_ctxt, fcx: @fn_ctxt) ->
|
||||
ValueRef {
|
||||
let cx = new_raw_block_ctxt(fcx, fcx.lldynamicallocas);
|
||||
ret Call(cx, ccx.upcalls.dynastack_mark, [lltaskptr]);
|
||||
ret Call(cx, ccx.upcalls.dynastack_mark, []);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -836,7 +835,7 @@ fn trans_shared_malloc(cx: @block_ctxt, llptr_ty: TypeRef, llsize: ValueRef)
|
|||
let tydesc = C_null(T_ptr(bcx_ccx(cx).tydesc_type));
|
||||
let rval =
|
||||
Call(cx, bcx_ccx(cx).upcalls.shared_malloc,
|
||||
[cx.fcx.lltaskptr, llsize, tydesc]);
|
||||
[llsize, tydesc]);
|
||||
ret rslt(cx, PointerCast(cx, rval, llptr_ty));
|
||||
}
|
||||
|
||||
|
|
@ -875,7 +874,7 @@ fn trans_malloc_boxed_raw(cx: @block_ctxt, t: ty::t) -> result {
|
|||
let lltydesc = tydesc_result.result.val; bcx = tydesc_result.result.bcx;
|
||||
|
||||
let rval = Call(cx, ccx.upcalls.malloc,
|
||||
[cx.fcx.lltaskptr, llsz, lltydesc]);
|
||||
[llsz, lltydesc]);
|
||||
ret rslt(cx, PointerCast(cx, rval, llty));
|
||||
}
|
||||
|
||||
|
|
@ -1034,7 +1033,7 @@ fn get_derived_tydesc(cx: @block_ctxt, t: ty::t, escapes: bool,
|
|||
if escapes {
|
||||
let td_val =
|
||||
Call(bcx, bcx_ccx(bcx).upcalls.get_type_desc,
|
||||
[bcx.fcx.lltaskptr, C_null(T_ptr(T_nil())), sz.val,
|
||||
[C_null(T_ptr(T_nil())), sz.val,
|
||||
align.val, C_uint(1u + n_params), llfirstparam,
|
||||
C_uint(obj_params)]);
|
||||
v = td_val;
|
||||
|
|
@ -1938,10 +1937,8 @@ fn call_cmp_glue(cx: @block_ctxt, lhs: ValueRef, rhs: ValueRef, t: ty::t,
|
|||
}
|
||||
|
||||
let llcmpresultptr = alloca(bcx, T_i1());
|
||||
let llargs: [ValueRef] =
|
||||
[llcmpresultptr, bcx.fcx.lltaskptr, lltydesc, lltydescs, llrawlhsptr,
|
||||
llrawrhsptr, llop];
|
||||
Call(bcx, llfn, llargs);
|
||||
Call(bcx, llfn, [llcmpresultptr, bcx.fcx.lltaskptr, lltydesc, lltydescs,
|
||||
llrawlhsptr, llrawrhsptr, llop]);
|
||||
ret rslt(bcx, Load(bcx, llcmpresultptr));
|
||||
}
|
||||
|
||||
|
|
@ -4556,7 +4553,7 @@ fn trans_log(lvl: int, cx: @block_ctxt, e: @ast::expr) -> @block_ctxt {
|
|||
let llval_i8 = PointerCast(log_bcx, llvalptr, T_ptr(T_i8()));
|
||||
|
||||
Call(log_bcx, bcx_ccx(log_bcx).upcalls.log_type,
|
||||
[log_bcx.fcx.lltaskptr, lltydesc, llval_i8, C_int(lvl)]);
|
||||
[lltydesc, llval_i8, C_int(lvl)]);
|
||||
|
||||
log_bcx = trans_block_cleanups(log_bcx, log_cx);
|
||||
Br(log_bcx, after_cx.llbb);
|
||||
|
|
@ -4619,7 +4616,7 @@ fn trans_fail_value(bcx: @block_ctxt, sp_opt: option::t<span>,
|
|||
}
|
||||
let V_str = PointerCast(bcx, V_fail_str, T_ptr(T_i8()));
|
||||
V_filename = PointerCast(bcx, V_filename, T_ptr(T_i8()));
|
||||
let args = [bcx.fcx.lltaskptr, V_str, V_filename, C_int(V_line)];
|
||||
let args = [V_str, V_filename, C_int(V_line)];
|
||||
let bcx = invoke(bcx, bcx_ccx(bcx).upcalls._fail, args);
|
||||
Unreachable(bcx);
|
||||
ret bcx;
|
||||
|
|
@ -4932,8 +4929,7 @@ fn trans_fn_cleanups(fcx: @fn_ctxt, cx: @block_ctxt) {
|
|||
alt fcx.llobstacktoken {
|
||||
some(lltoken_) {
|
||||
let lltoken = lltoken_; // satisfy alias checker
|
||||
Call(cx, fcx_ccx(fcx).upcalls.dynastack_free,
|
||||
[fcx.lltaskptr, lltoken]);
|
||||
Call(cx, fcx_ccx(fcx).upcalls.dynastack_free, [lltoken]);
|
||||
}
|
||||
none. {/* nothing to do */ }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ fn trans_append(cx: @block_ctxt, vec_ty: ty::t, lhsptr: ValueRef,
|
|||
if strings { new_fill = Sub(bcx, new_fill, C_int(1)); }
|
||||
let opaque_lhs = PointerCast(bcx, lhsptr, T_ptr(T_ptr(T_opaque_vec())));
|
||||
Call(bcx, bcx_ccx(cx).upcalls.vec_grow,
|
||||
[cx.fcx.lltaskptr, opaque_lhs, new_fill]);
|
||||
[opaque_lhs, new_fill]);
|
||||
// Was overwritten if we resized
|
||||
let lhs = Load(bcx, lhsptr);
|
||||
rhs = Select(bcx, self_append, lhs, rhs);
|
||||
|
|
@ -204,8 +204,7 @@ fn trans_append_literal(bcx: @block_ctxt, vptrptr: ValueRef, vec_ty: ty::t,
|
|||
let spilled = r.val;
|
||||
bcx = r.bcx;
|
||||
Call(bcx, bcx_ccx(bcx).upcalls.vec_push,
|
||||
[bcx.fcx.lltaskptr, opaque_v, td,
|
||||
PointerCast(bcx, spilled, T_ptr(T_i8()))]);
|
||||
[opaque_v, td, PointerCast(bcx, spilled, T_ptr(T_i8()))]);
|
||||
}
|
||||
ret bcx;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue