close
Skip to content
Open
Changes from 1 commit
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e76aa6e
progress
ericvergnaud Dec 7, 2023
16cae25
has complete i32, i64, f32 and f64
ericvergnaud Dec 7, 2023
19378e6
document API changes
ericvergnaud Dec 7, 2023
b1be833
generates v128
ericvergnaud Dec 7, 2023
76846ff
support i8x16
ericvergnaud Dec 10, 2023
96add7c
support i16x8
ericvergnaud Dec 10, 2023
b69507a
support i32x4
ericvergnaud Dec 10, 2023
6d99060
support i64x2
ericvergnaud Dec 10, 2023
6e6d209
support f32x4
ericvergnaud Dec 11, 2023
f5866e6
support f64x2
ericvergnaud Dec 11, 2023
255b56f
more stuff
ericvergnaud Dec 11, 2023
cc49c4c
more stuff
ericvergnaud Dec 11, 2023
3a2b2a2
progress
ericvergnaud Dec 11, 2023
a52dfe3
support ExpressionInfo
ericvergnaud Dec 11, 2023
4b4460e
migration of index.d.ts from binaryen.js complete
ericvergnaud Dec 11, 2023
0520e32
reinstate deprecated methods
ericvergnaud Dec 12, 2023
e370f1c
fix return types
ericvergnaud Dec 12, 2023
839b665
a base version i.e. symbols are exported, but not tested yet
ericvergnaud Dec 13, 2023
76a0e7c
Works for all existing tests in my project
ericvergnaud Dec 13, 2023
ec80d01
rename for consistency
ericvergnaud Dec 13, 2023
898cb2d
Fix typos
ericvergnaud Dec 13, 2023
36c0747
Fix Feature API
ericvergnaud Dec 13, 2023
4036ade
implements a new approach
ericvergnaud Dec 21, 2023
95f3df3
need to await on the imported function, not the import
ericvergnaud Dec 21, 2023
b0c24cd
house keeping
ericvergnaud Dec 21, 2023
67b9213
fix memory leak and add support for get array item
ericvergnaud Jan 6, 2024
cbb6c00
more arrays API
ericvergnaud Jan 9, 2024
b779e22
add support for structs, unify GC field type
ericvergnaud Jan 13, 2024
d1b34d2
use powershell commands on windows
ericvergnaud Jan 13, 2024
deea92d
rely on built-in exports mechanism
ericvergnaud Jan 14, 2024
76d7f08
more GC methods
ericvergnaud Jan 23, 2024
4199884
add support for BinaryenArrayNewData
ericvergnaud Jan 24, 2024
59a05f0
add entry point for BinaryenArrayNewData
ericvergnaud Jan 24, 2024
34b692f
fix missing semicolon
ericvergnaud Jan 24, 2024
8efbe18
simplify
ericvergnaud Jan 30, 2024
3596b41
Merge branch 'main' into generate-typescript
ericvergnaud Feb 1, 2024
f2019de
update memory API
ericvergnaud Feb 1, 2024
9be8b9c
make name optional in SegmentInfo
ericvergnaud Feb 1, 2024
e6bbbc1
make it possible to capture the validator error stream
ericvergnaud Feb 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
generates v128
  • Loading branch information
ericvergnaud committed Dec 7, 2023
commit b1be8339d4a90f7946512770b4c5b4c1d0753667
73 changes: 69 additions & 4 deletions src/ts/binaryen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

module binaryen {

declare var HEAP8: Int8Array;
declare var HEAP32: Int32Array;
declare var HEAPU32: Uint32Array;
declare var stackSave: () => number;
Expand All @@ -26,18 +27,17 @@ module binaryen {
return str ? allocateUTF8OnStack(str) : 0;
}

function i32sToStack(i32s: number[]): number {
function i32sToStack(i32s: ArrayLike<number>): number {
const ret = stackAlloc(i32s.length << 2);
HEAP32.set(i32s, ret >>> 2);
return ret;
}
/*
function i8sToStack(i8s) {

function i8sToStack(i8s: ArrayLike<number>): number {
const ret = stackAlloc(i8s.length);
HEAP8.set(i8s, ret);
return ret;
}
*/

export type Type = number;
export type ElementSegmentRef = number;
Expand Down Expand Up @@ -1091,6 +1091,71 @@ module binaryen {
pop: () => JSModule['_BinaryenPop'](this.ptr, f64) as ExpressionRef
};
}
get v128 () {
const simd_load = (op: Operations, offset: number, align: number, ptr: ExpressionRef, name: string) =>
JSModule['_BinaryenSIMDLoad'](this.ptr, op, offset, align, ptr, strToStack(name)) as ExpressionRef;
const simd_lane = (op: Operations, offset: number, align: number, index: number, ptr: ExpressionRef, vec: number, name: string) =>
JSModule['_BinaryenSIMDLoadStoreLane'](this.ptr, op, offset, align, index, ptr, vec, strToStack(name)) as ExpressionRef;
return {
load: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
Module['_BinaryenLoad'](this.ptr, 16, false, offset, align, v128, ptr, strToStack(name)) as ExpressionRef,
load8_splat: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load8SplatVec128, offset, align, ptr, name),
load16_splat: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load16SplatVec128, offset, align, ptr, name),
load32_splat: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load32SplatVec128, offset, align, ptr, name),
load64_splat: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load64SplatVec128, offset, align, ptr, name),
load8x8_s: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load8x8SVec128, offset, align, ptr, name),
load8x8_u: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load8x8UVec128, offset, align, ptr, name),
load16x4_s: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load16x4SVec128, offset, align, ptr, name),
load16x4_u: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load16x4UVec128, offset, align, ptr, name),
load32x2_s: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load32x2SVec128, offset, align, ptr, name),
load32x2_u: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load32x2UVec128, offset, align, ptr, name),
load32_zero: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load32ZeroVec128, offset, align, ptr, name),
load64_zero: (offset: number, align: number, ptr: ExpressionRef, name?: string) =>
simd_load(Operations.Load64ZeroVec128, offset, align, ptr, name),
load8_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Load8LaneVec128, offset, align, index, ptr, vec, name),
load16_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Load16LaneVec128, offset, align, index, ptr, vec, name),
load32_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Load32LaneVec128, offset, align, index, ptr, vec, name),
load64_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Load64LaneVec128, offset, align, index, ptr, vec, name),
store8_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Store8LaneVec128, offset, align, index, ptr, vec, name),
store16_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Store16LaneVec128, offset, align, index, ptr, vec, name),
store32_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Store32LaneVec128, offset, align, index, ptr, vec, name),
store64_lane: (offset: number, align: number, index: number, ptr: ExpressionRef, vec: ExpressionRef, name?: string) =>
simd_lane(Operations.Store64LaneVec128, offset, align, index, ptr, vec, name),
store: (offset: number, align: number, ptr: ExpressionRef, value: ExpressionRef, name?: string) =>
JSModule['_BinaryenStore'](this.ptr, 16, offset, align, ptr, value, v128, strToStack(name)),
const: (i8s: ArrayLike<number>) => {
const tempLiteral = stackAlloc(sizeOfLiteral);
JSModule['_BinaryenLiteralVec128'](tempLiteral, i8sToStack(i8s));
return JSModule['_BinaryenConst'](this.ptr, tempLiteral) as ExpressionRef;
},
not: (value: ExpressionRef) => JSModule['_BinaryenUnary'](this.ptr, Operations.NotVec128, value) as ExpressionRef,
any_true: (value: ExpressionRef) => JSModule['_BinaryenUnary'](this.ptr, Operations.AnyTrueVec128, value) as ExpressionRef,
and: (left: ExpressionRef, right: ExpressionRef) => JSModule['_BinaryenBinary'](this.ptr, Operations.AndVec128, left, right) as ExpressionRef,
or: (left: ExpressionRef, right: ExpressionRef) => JSModule['_BinaryenBinary'](this.ptr, Operations.OrVec128, left, right) as ExpressionRef,
xor: (left: ExpressionRef, right: ExpressionRef) => JSModule['_BinaryenBinary'](this.ptr, Operations.XorVec128, left, right) as ExpressionRef,
andnot: (left: ExpressionRef, right: ExpressionRef) => JSModule['_BinaryenBinary'](this.ptr, Operations.AndNotVec128, left, right) as ExpressionRef,
bitselect: (left: ExpressionRef, right: ExpressionRef, cond: ExpressionRef) => JSModule['_BinaryenBinary'](this.ptr, Operations.BitselectVec128, left, right) as ExpressionRef,
pop: () => JSModule['_BinaryenPop'](this.ptr, v128) as ExpressionRef
}
};
}
}

Expand Down