Skip to content

Commit 700e522

Browse files
committed
More renaming of GEP offsets in abi/trans. This should settle it. Also, fix some overenthusiastic renaming in previous commit.
1 parent 348e434 commit 700e522

File tree

2 files changed

+37
-26
lines changed

2 files changed

+37
-26
lines changed

Diff for: src/boot/be/abi.ml

+10-5
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,20 @@ let stk_field_valgrind_id = 0 + 1;;
4545
let stk_field_limit = stk_field_valgrind_id + 1;;
4646
let stk_field_data = stk_field_limit + 1;;
4747

48-
let obj_elt_vtbl = 0;;
49-
let obj_elt_body_box = 1;;
48+
(* Both obj and fn are two-word "bindings": One word points to some
49+
* static dispatch information (vtbl or thunk), and the other points to
50+
* some bag of bound data (object-body or closure). *)
5051

52+
let binding_field_dispatch = 0;;
53+
let binding_field_bound_data = 1;;
54+
55+
let obj_field_vtbl = binding_field_dispatch;;
56+
let obj_field_body_box = binding_field_bound_data;;
5157
let obj_body_elt_tydesc = 0;;
5258
let obj_body_elt_fields = 1;;
5359

54-
let fn_elt_thunk = 0;;
55-
let fn_elt_closure = 1;;
56-
60+
let fn_field_thunk = binding_field_dispatch;;
61+
let fn_field_closure = binding_field_bound_data;;
5762
let closure_elt_rc = 0;;
5863
let closure_elt_target = 1;;
5964
let closure_elt_bound_args = 2;;

Diff for: src/boot/me/trans.ml

+27-21
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ let trans_visitor
890890
let sorted_idents = sorted_htab_keys fns in
891891
let i = arr_idx sorted_idents id in
892892
let fn_ty = Hashtbl.find fns id in
893-
let table_ptr = get_element_ptr obj_cell Abi.obj_elt_vtbl in
893+
let table_ptr = get_element_ptr obj_cell Abi.obj_field_vtbl in
894894
(get_vtbl_entry_idx table_ptr i, fn_ty)
895895
in
896896

@@ -1479,10 +1479,10 @@ let trans_visitor
14791479
Abi.indirect_args_elt_closure)
14801480
in
14811481
let closure_target_cell =
1482-
get_element_ptr closure_cell Abi.obj_elt_body_box
1482+
get_element_ptr closure_cell Abi.fn_field_closure
14831483
in
14841484
let closure_target_fn_cell =
1485-
get_element_ptr closure_target_cell Abi.obj_elt_vtbl
1485+
get_element_ptr closure_target_cell Abi.fn_field_thunk
14861486
in
14871487

14881488
merge_bound_args
@@ -2473,7 +2473,7 @@ let trans_visitor
24732473

24742474
Ast.TY_fn _ ->
24752475
note_drop_step ty "drop_ty: fn path";
2476-
let binding = get_element_ptr cell Abi.obj_elt_body_box in
2476+
let binding = get_element_ptr cell Abi.fn_field_closure in
24772477
let null_jmp = null_check binding in
24782478
(* Drop non-null bindings. *)
24792479
(* FIXME (issue #58): this is completely wrong, Closures need to
@@ -2486,7 +2486,7 @@ let trans_visitor
24862486

24872487
| Ast.TY_obj _ ->
24882488
note_drop_step ty "drop_ty: obj path";
2489-
let binding = get_element_ptr cell Abi.obj_elt_body_box in
2489+
let binding = get_element_ptr cell Abi.obj_field_body_box in
24902490
let null_jmp = null_check binding in
24912491
let rc_jmp = drop_refcount_and_cmp binding in
24922492
let obj_box = deref binding in
@@ -2607,7 +2607,9 @@ let trans_visitor
26072607
| Ast.TY_obj _ ->
26082608
if type_has_state ty
26092609
then
2610-
let binding = get_element_ptr cell Abi.obj_elt_body_box in
2610+
let binding =
2611+
get_element_ptr cell Abi.binding_field_bound_data
2612+
in
26112613
sever_box binding;
26122614

26132615
| _ ->
@@ -3094,13 +3096,17 @@ let trans_visitor
30943096
| Ast.TY_fn _
30953097
| Ast.TY_obj _ ->
30963098
begin
3097-
let src_item = get_element_ptr src Abi.obj_elt_vtbl in
3098-
let dst_item = get_element_ptr dst Abi.obj_elt_vtbl in
3099+
let src_item =
3100+
get_element_ptr src Abi.binding_field_dispatch
3101+
in
3102+
let dst_item =
3103+
get_element_ptr dst Abi.binding_field_dispatch
3104+
in
30993105
let src_binding =
3100-
get_element_ptr src Abi.obj_elt_body_box
3106+
get_element_ptr src Abi.binding_field_bound_data
31013107
in
31023108
let dst_binding =
3103-
get_element_ptr dst Abi.obj_elt_body_box
3109+
get_element_ptr dst Abi.binding_field_bound_data
31043110
in
31053111
mov dst_item (Il.Cell src_item);
31063112
let null_jmp = null_check src_binding in
@@ -3197,7 +3203,7 @@ let trans_visitor
31973203
deref_ty DEREF_none initializing dst_cell dst_ty
31983204
in
31993205
let caller_vtbl =
3200-
get_element_ptr caller_obj Abi.obj_elt_vtbl
3206+
get_element_ptr caller_obj Abi.obj_field_vtbl
32013207
in
32023208
mov caller_vtbl caller_vtbl_oper
32033209
end
@@ -3235,10 +3241,10 @@ let trans_visitor
32353241
let fix = Hashtbl.find cx.ctxt_fn_fixups item.id in
32363242

32373243
let dst_pair_item_cell =
3238-
get_element_ptr dst_cell Abi.obj_elt_vtbl
3244+
get_element_ptr dst_cell Abi.fn_field_thunk
32393245
in
32403246
let dst_pair_binding_cell =
3241-
get_element_ptr dst_cell Abi.obj_elt_body_box
3247+
get_element_ptr dst_cell Abi.fn_field_closure
32423248
in
32433249
mov dst_pair_item_cell (crate_rel_imm fix);
32443250
mov dst_pair_binding_cell zero
@@ -3472,12 +3478,12 @@ let trans_visitor
34723478

34733479
iflog (fun _ -> annotate "set closure target code ptr");
34743480
mov
3475-
(get_element_ptr targ_cell Abi.fn_elt_thunk)
3481+
(get_element_ptr targ_cell Abi.fn_field_thunk)
34763482
(reify_ptr target_fn_ptr);
34773483

34783484
iflog (fun _ -> annotate "set closure target closure ptr");
34793485
mov
3480-
(get_element_ptr targ_cell Abi.fn_elt_closure)
3486+
(get_element_ptr targ_cell Abi.fn_field_closure)
34813487
(reify_ptr target_binding_ptr);
34823488

34833489
iflog (fun _ -> annotate "set closure bound args");
@@ -3511,10 +3517,10 @@ let trans_visitor
35113517
let target_binding_ptr = callee_binding_ptr flv cc in
35123518
let closure_rty = closure_referent_type bound_arg_slots in
35133519
let closure_sz = force_sz (Il.referent_ty_size word_bits closure_rty) in
3514-
let fn_cell = get_element_ptr dst_cell Abi.obj_elt_vtbl in
3520+
let fn_cell = get_element_ptr dst_cell Abi.fn_field_thunk in
35153521
let closure_cell =
35163522
ptr_cast
3517-
(get_element_ptr dst_cell Abi.obj_elt_body_box)
3523+
(get_element_ptr dst_cell Abi.fn_field_closure)
35183524
(Il.ScalarTy (Il.AddrTy (closure_rty)))
35193525
in
35203526
iflog (fun _ -> annotate "assign glue-code to fn slot of pair");
@@ -3824,7 +3830,7 @@ let trans_visitor
38243830
| CALL_indirect ->
38253831
(* fptr is a pair [disp, binding*] *)
38263832
let pair_cell = need_cell (reify_ptr fptr) in
3827-
let disp_cell = get_element_ptr pair_cell Abi.obj_elt_vtbl in
3833+
let disp_cell = get_element_ptr pair_cell Abi.fn_field_thunk in
38283834
Il.Cell (crate_rel_to_ptr (Il.Cell disp_cell) Il.CodeTy)
38293835

38303836
and callee_binding_ptr
@@ -3835,7 +3841,7 @@ let trans_visitor
38353841
then zero
38363842
else
38373843
let (pair_cell, _) = trans_lval pair_lval in
3838-
Il.Cell (get_element_ptr pair_cell Abi.obj_elt_body_box)
3844+
Il.Cell (get_element_ptr pair_cell Abi.fn_field_closure)
38393845

38403846
and call_ctrl flv : call_ctrl =
38413847
if lval_is_static cx flv
@@ -4639,10 +4645,10 @@ let trans_visitor
46394645
let _ = iflog (fun _ -> annotate "load destination obj pair ptr") in
46404646
let dst_pair_cell = deref (ptr_at (fp_imm out_mem_disp) obj_ty) in
46414647
let dst_pair_item_cell =
4642-
get_element_ptr dst_pair_cell Abi.obj_elt_vtbl
4648+
get_element_ptr dst_pair_cell Abi.obj_field_vtbl
46434649
in
46444650
let dst_pair_state_cell =
4645-
get_element_ptr dst_pair_cell Abi.obj_elt_body_box
4651+
get_element_ptr dst_pair_cell Abi.obj_field_body_box
46464652
in
46474653

46484654
(* Load first cell of pair with vtbl ptr.*)

0 commit comments

Comments
 (0)