From 8e9c5b96fbaa338e0b60e3e8c0127e0b3e4cee76 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Sat, 2 Apr 2011 19:03:43 -0700 Subject: Change rust_vec to have a 16-byte header, to 16-byte-align vec-body data. Major perf win. --- src/comp/back/abi.rs | 3 ++- src/comp/middle/trans.rs | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'src/comp') diff --git a/src/comp/back/abi.rs b/src/comp/back/abi.rs index 95958814..42a87623 100644 --- a/src/comp/back/abi.rs +++ b/src/comp/back/abi.rs @@ -26,7 +26,8 @@ const int general_code_alignment = 16; const int vec_elt_rc = 0; const int vec_elt_alloc = 1; const int vec_elt_fill = 2; -const int vec_elt_data = 3; +const int vec_elt_pad = 3; +const int vec_elt_data = 4; const int tydesc_field_first_param = 0; const int tydesc_field_size = 1; diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 2e4f1d85..ee3ea2cd 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -372,6 +372,7 @@ fn T_vec(TypeRef t) -> TypeRef { ret T_struct(vec(T_int(), // Refcount T_int(), // Alloc T_int(), // Fill + T_int(), // Pad T_array(t, 0u) // Body elements )); } @@ -870,6 +871,7 @@ fn C_str(@crate_ctxt cx, str s) -> ValueRef { auto box = C_struct(vec(C_int(abi.const_refcount as int), C_int(len + 1u as int), // 'alloc' C_int(len + 1u as int), // 'fill' + C_int(0), // 'pad' llvm.LLVMConstString(_str.buf(s), len, False))); auto g = llvm.LLVMAddGlobal(cx.llmod, val_ty(box), -- cgit v1.2.3