diff options
Diffstat (limited to 'lib/system/seqs_v2.nim')
-rw-r--r-- | lib/system/seqs_v2.nim | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/lib/system/seqs_v2.nim b/lib/system/seqs_v2.nim index d83a0009a..b7f24ecd5 100644 --- a/lib/system/seqs_v2.nim +++ b/lib/system/seqs_v2.nim @@ -35,10 +35,7 @@ proc newSeqPayload(cap, elemSize, elemAlign: int): pointer {.compilerRtl, raises # we have to use type erasure here as Nim does not support generic # compilerProcs. Oh well, this will all be inlined anyway. if cap > 0: - when compileOption("threads"): - var p = cast[ptr NimSeqPayloadBase](allocShared0(align(sizeof(NimSeqPayloadBase), elemAlign) + cap * elemSize)) - else: - var p = cast[ptr NimSeqPayloadBase](alloc0(align(sizeof(NimSeqPayloadBase), elemAlign) + cap * elemSize)) + var p = cast[ptr NimSeqPayloadBase](alignedAlloc0(align(sizeof(NimSeqPayloadBase), elemAlign) + cap * elemSize, elemAlign)) p.cap = cap result = p else: @@ -65,20 +62,14 @@ proc prepareSeqAdd(len: int; p: pointer; addlen, elemSize, elemAlign: int): poin let oldCap = p.cap and not strlitFlag let newCap = max(resize(oldCap), len+addlen) if (p.cap and strlitFlag) == strlitFlag: - when compileOption("threads"): - var q = cast[ptr NimSeqPayloadBase](allocShared0(headerSize + elemSize * newCap)) - else: - var q = cast[ptr NimSeqPayloadBase](alloc0(headerSize + elemSize * newCap)) + var q = cast[ptr NimSeqPayloadBase](alignedAlloc0(headerSize + elemSize * newCap, elemAlign)) copyMem(q +! headerSize, p +! headerSize, len * elemSize) q.cap = newCap result = q else: let oldSize = headerSize + elemSize * oldCap let newSize = headerSize + elemSize * newCap - when compileOption("threads"): - var q = cast[ptr NimSeqPayloadBase](reallocShared0(p, oldSize, newSize)) - else: - var q = cast[ptr NimSeqPayloadBase](realloc0(p, oldSize, newSize)) + var q = cast[ptr NimSeqPayloadBase](alignedRealloc0(p, oldSize, newSize, elemAlign)) q.cap = newCap result = q |