WARDuino
WARDuino copied to clipboard
SIMD support
Provides support for the following SIMD instructions (using (dim) as a placeholder for any of i8x16, i16x8, etc):
- [x]
(dim).splat(copy a single scalar value into every lane of av128) - [x]
(dim).extract_lane ImmIdx(extract a single lane from av128) - [x]
(dim).replace_lane ImmIdx(replace a single lane from av128) - [x]
v128.const i128(construct av128from a byte buffer) - [x]
v128.store memarg(store av128to memory) - [x]
v128.load memarg(load av128from memory) All of these instructions are emulated (i.e. they don't use intrinsics or specialized instructions).
Provides debugger support for v128 values when dumping the stack:
- Values are sent as
{"type": "v128", "value": "i64x2.lane0 i64x2.lane1"}. The 128-bit vector is interpreted as 2 64-bit integers (i64x2.lane0andi64x2.lane1).
Provides additional spec-tests:
- simd_splat.wast
Implementation notes:
- This changes
sizeof(StackValue)from 16 to 24, as each stack slot now has to accommodate a 16-bytev128argument -
v128.loadandv128.storeeach use 2 consecutive i64 fields in memory
Related to #25, #30