Skip to content

Commit 5f2cfa7

Browse files
committed
rustc: Add an operation field to compare glue with ==, <=, and < modes
1 parent 9657e5d commit 5f2cfa7

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

src/comp/back/abi.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// FIXME: Most of these should be uints.
12

23
const int rc_base_field_refcnt = 0;
34

@@ -42,6 +43,10 @@ const int tydesc_field_is_stateful = 9;
4243
const int tydesc_field_cmp_glue = 10;
4344
const int n_tydesc_fields = 11;
4445

46+
const uint cmp_glue_op_eq = 0u;
47+
const uint cmp_glue_op_lt = 1u;
48+
const uint cmp_glue_op_le = 2u;
49+
4550

4651
const int obj_field_vtbl = 0;
4752
const int obj_field_box = 1;

src/comp/middle/trans.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -374,12 +374,13 @@ fn T_tydesc(type_names tn) -> TypeRef {
374374
T_ptr(T_nil()),
375375
tydescpp,
376376
pvoid), T_void()));
377-
auto cmp_glue_fn_ty = T_ptr(T_fn(vec(T_ptr(T_nil()),
377+
auto cmp_glue_fn_ty = T_ptr(T_fn(vec(T_ptr(T_i8()),
378378
T_taskptr(tn),
379379
T_ptr(T_nil()),
380380
tydescpp,
381381
pvoid,
382-
pvoid), T_void()));
382+
pvoid,
383+
T_i8()), T_void()));
383384
auto tydesc = T_struct(vec(tydescpp, // first_param
384385
T_int(), // size
385386
T_int(), // align
@@ -1658,7 +1659,7 @@ fn declare_tydesc(@local_ctxt cx, @ty.t t) {
16581659

16591660
tag make_generic_glue_helper_fn {
16601661
mgghf_single(val_and_ty_fn);
1661-
mgghf_pair(val_pair_and_ty_fn);
1662+
mgghf_cmp;
16621663
}
16631664

16641665
// declare_tydesc() above must have been called first.
@@ -1670,8 +1671,7 @@ fn define_tydesc(@local_ctxt cx, @ty.t t, vec[uint] ty_params) {
16701671
make_generic_glue(cx, t, info.take_glue, mgghf_single(tg), ty_params);
16711672
auto dg = make_drop_glue;
16721673
make_generic_glue(cx, t, info.drop_glue, mgghf_single(dg), ty_params);
1673-
auto cg = make_cmp_glue;
1674-
make_generic_glue(cx, t, info.cmp_glue, mgghf_pair(cg), ty_params);
1674+
make_generic_glue(cx, t, info.cmp_glue, mgghf_cmp, ty_params);
16751675
}
16761676

16771677
fn declare_generic_glue(@local_ctxt cx,
@@ -1731,10 +1731,13 @@ fn make_generic_glue(@local_ctxt cx,
17311731
case (mgghf_single(?single_fn)) {
17321732
re = single_fn(bcx, llval0, t);
17331733
}
1734-
case (mgghf_pair(?pair_fn)) {
1734+
case (mgghf_cmp) {
17351735
auto llrawptr1 = llvm.LLVMGetParam(llfn, 5u);
17361736
auto llval1 = bcx.build.BitCast(llrawptr0, llty);
1737-
re = pair_fn(bcx, llval0, llval1, t);
1737+
1738+
auto llcmpval = llvm.LLVMGetParam(llfn, 6u);
1739+
1740+
re = make_cmp_glue(bcx, llval0, llval1, t, llcmpval);
17381741
}
17391742
}
17401743
} else {
@@ -1982,8 +1985,8 @@ fn decr_refcnt_and_if_zero(@block_ctxt cx,
19821985
ret res(next_cx, phi);
19831986
}
19841987

1985-
fn make_cmp_glue(@block_ctxt cx, ValueRef v0, ValueRef v1, @ty.t t)
1986-
-> result {
1988+
fn make_cmp_glue(@block_ctxt cx, ValueRef v0, ValueRef v1, @ty.t t,
1989+
ValueRef llop) -> result {
19871990
ret res(cx, C_nil()); // TODO
19881991
}
19891992

0 commit comments

Comments
 (0)