aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-04-02 19:03:43 -0700
committerGraydon Hoare <[email protected]>2011-04-02 19:05:12 -0700
commit8e9c5b96fbaa338e0b60e3e8c0127e0b3e4cee76 (patch)
treec893449b391e9aec1c6aa3299ab975b4cd053be0 /src/comp
parentGitignore the recommended build directory (diff)
downloadrust-8e9c5b96fbaa338e0b60e3e8c0127e0b3e4cee76.tar.xz
rust-8e9c5b96fbaa338e0b60e3e8c0127e0b3e4cee76.zip
Change rust_vec to have a 16-byte header, to 16-byte-align vec-body data. Major perf win.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/back/abi.rs3
-rw-r--r--src/comp/middle/trans.rs2
2 files changed, 4 insertions, 1 deletions
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),