summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-03-06 10:00:18 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-03-06 10:00:18 +0000
commit1b62aecee4a58f52999cfa53f1c6b7744b29b808 (patch)
tree94ef6f6bb4e555c5ec27fa85e01ce12068bc1b3d /includes
parenta0b4833f77f420053e4b78e40ac17d9687d382e0 (diff)
downloadhaskell-1b62aecee4a58f52999cfa53f1c6b7744b29b808.tar.gz
Partial fix for #2917
- add newAlignedPinnedByteArray# for allocating pinned BAs with arbitrary alignment - the old newPinnedByteArray# now aligns to 16 bytes Foreign.alloca will use newAlignedPinnedByteArray#, and so might end up wasting less space than before (we used to align to 8 by default). Foreign.allocaBytes and Foreign.mallocForeignPtrBytes will get 16-byte aligned memory, which is enough to avoid problems with SSE instructions on x86, for example. There was a bug in the old newPinnedByteArray#: it aligned to 8 bytes, but would have failed if the header was not a multiple of 8 (fortunately it always was, even with profiling). Also we occasionally wasted some space unnecessarily due to alignment in allocatePinned(). I haven't done anything about Foreign.malloc/mallocBytes, which will give you the same alignment guarantees as malloc() (8 bytes on Linux/x86 here).
Diffstat (limited to 'includes')
-rw-r--r--includes/StgMiscClosures.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/includes/StgMiscClosures.h b/includes/StgMiscClosures.h
index 94244a9a95..e2ec9e4d74 100644
--- a/includes/StgMiscClosures.h
+++ b/includes/StgMiscClosures.h
@@ -540,6 +540,7 @@ RTS_FUN(word64ToIntegerzh_fast);
RTS_FUN(unsafeThawArrayzh_fast);
RTS_FUN(newByteArrayzh_fast);
RTS_FUN(newPinnedByteArrayzh_fast);
+RTS_FUN(newAlignedPinnedByteArrayzh_fast);
RTS_FUN(newArrayzh_fast);
RTS_FUN(newMutVarzh_fast);