Skip to content

Commit a4dd3a9

Browse files
MaxGraeydcodeIO
authored andcommitted
Improve TypedArray#map allocation (#821)
1 parent bf6967a commit a4dd3a9

File tree

3 files changed

+1047
-493
lines changed

3 files changed

+1047
-493
lines changed

std/assembly/typedarray.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,13 +1464,19 @@ function MAP<TArray extends ArrayBufferView, T>(
14641464
array: TArray,
14651465
fn: (value: T, index: i32, self: TArray) => T,
14661466
): TArray {
1467-
var length = array.length;
1467+
var len = array.length;
14681468
var dataStart = array.dataStart;
1469-
var out = instantiate<TArray>(length);
1470-
var outDataStart = out.dataStart;
1471-
for (let i = 0; i < length; i++) {
1469+
1470+
var byteLength = len << alignof<T>();
1471+
var out = changetype<TArray>(__alloc(offsetof<TArray>(), idof<TArray>()));
1472+
var buffer = __alloc(byteLength, idof<ArrayBuffer>());
1473+
out.data = changetype<ArrayBuffer>(buffer); // retain
1474+
out.dataStart = buffer;
1475+
out.dataLength = byteLength;
1476+
1477+
for (let i = 0; i < len; i++) {
14721478
store<T>(
1473-
outDataStart + (<usize>i << alignof<T>()),
1479+
buffer + (<usize>i << alignof<T>()),
14741480
fn(load<T>(dataStart + (<usize>i << alignof<T>())), i, array)
14751481
);
14761482
}

0 commit comments

Comments
 (0)