aboutsummaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/be/abi.ml3
-rw-r--r--src/boot/me/semant.ml4
-rw-r--r--src/boot/me/trans.ml8
3 files changed, 9 insertions, 6 deletions
diff --git a/src/boot/be/abi.ml b/src/boot/be/abi.ml
index 150f4cc2..3ae3b843 100644
--- a/src/boot/be/abi.ml
+++ b/src/boot/be/abi.ml
@@ -93,7 +93,8 @@ let tydesc_field_stateflag = 11;;
let vec_elt_rc = 0;;
let vec_elt_alloc = 1;;
let vec_elt_fill = 2;;
-let vec_elt_data = 3;;
+let vec_elt_pad = 3;;
+let vec_elt_data = 4;;
let calltup_elt_out_ptr = 0;;
let calltup_elt_task_ptr = 1;;
diff --git a/src/boot/me/semant.ml b/src/boot/me/semant.ml
index 3419bb34..6a7de314 100644
--- a/src/boot/me/semant.ml
+++ b/src/boot/me/semant.ml
@@ -2382,7 +2382,7 @@ and fn_rty (cx:ctxt) (opaque_box_body:bool) : Il.referent_ty =
and vec_sty (word_bits:Il.bits) : Il.scalar_ty =
let word = word_rty word_bits in
let ptr = Il.ScalarTy (Il.AddrTy Il.OpaqueTy) in
- Il.AddrTy (Il.StructTy [| word; word; word; ptr |])
+ Il.AddrTy (Il.StructTy [| word; word; word; word; ptr |])
and referent_type
?parent_tags:parent_tags
@@ -2442,7 +2442,7 @@ and referent_type
| Ast.TY_mach (TY_i64)
| Ast.TY_mach (TY_f64) -> sv Il.Bits64
- | Ast.TY_str -> sp (Il.StructTy [| word; word; word; ptr |])
+ | Ast.TY_str -> sp (Il.StructTy [| word; word; word; word; ptr |])
| Ast.TY_vec _ -> s (vec_sty word_bits)
| Ast.TY_tup tt -> tup tt
| Ast.TY_rec tr -> tup (Array.map snd tr)
diff --git a/src/boot/me/trans.ml b/src/boot/me/trans.ml
index e99ea8f9..bb74d721 100644
--- a/src/boot/me/trans.ml
+++ b/src/boot/me/trans.ml
@@ -1549,6 +1549,7 @@ let trans_visitor
Asm.IMM Abi.const_refcount);
Asm.WORD (word_ty_mach, Asm.IMM init_sz);
Asm.WORD (word_ty_mach, Asm.IMM init_sz);
+ Asm.WORD (word_ty_mach, Asm.IMM 0L);
Asm.ZSTRING s
|]))
(referent_type cx Ast.TY_str)
@@ -2850,15 +2851,16 @@ let trans_visitor
(*
* A vec is implicitly boxed: every slot vec[T] is 1 word and
- * points to a refcounted structure. That structure has 3 words with
+ * points to a refcounted structure. That structure has 4 words with
* defined meaning at the beginning; data follows the header.
*
* word 0: refcount or gc control word
* word 1: allocated size of data
* word 2: initialised size of data
- * word 3...N: data
+ * word 3: padding word to hit even multiple of 16
+ * word 4...N: data
*
- * This 3-word prefix is shared with strings, we factor the common
+ * This 4-word prefix is shared with strings, we factor the common
* part out for reuse in string code.
*)