-
-
Notifications
You must be signed in to change notification settings - Fork 675
Closed
Labels
Description
#508 adds an initial set of SIMD operations as built-in functions that map directly to WebAssembly instructions. Given those as a starting point, it should be relatively straight forward to add the remaining ones.
Instruction | Built-in | Status |
---|---|---|
v128.const | i8x16 (=v128), i16x8, i32x4, i64x2, f32x4, f64x2 | done |
i8x16.splat | v128.splat<i8> + alias | done |
i16x8.splat | v128.splat<i16> + alias | done |
i32x4.splat | v128.splat<i32> + alias | done |
i64x2.splat | v128.splat<i64> + alias | done |
f32x4.splat | v128.splat<f32> + alias | done |
f64x2.splat | v128.splat<f64> + alias | done |
v128.load | i8x16 (=v128), i16x8, i32x4, i64x2, f32x4, f64x2 | done |
v128.store | i8x16 (=v128), i16x8, i32x4, i64x2, f32x4, f64x2 | done |
i8x16.extract_lane_s | v128.extract_lane<i8> + alias | done |
i8x16.extract_lane_u | v128.extract_lane<u8> + alias | done |
i16x8.extract_lane_s | v128.extract_lane<i16> + alias | done |
i16x8.extract_lane_u | v128.extract_lane<u16> + alias | done |
i32x4.extract_lane | v128.extract_lane<i/u32> + alias | done |
i64x2.extract_lane | v128.extract_lane<i/u64> + alias | done |
f32x4.extract_lane | v128.extract_lane<f32> + alias | done |
f64x2.extract_lane | v128.extract_lane<f64> + alias | done |
i8x16.replace_lane | v128.replace_lane<i/u8> + alias | done |
i16x8.replace_lane | v128.replace_lane<i/u16> + alias | done |
i32x4.replace_lane | v128.replace_lane<i/u32> + alias | done |
i64x2.replace_lane | v128.replace_lane<i/u64> + alias | done |
f32x4.replace_lane | v128.replace_lane<f32> + alias | done |
f64x2.replace_lane | v128.replace_lane<f64> + alias | done |
i8x16.shuffle | v128.shuffle<i/u8/16/32/f32/64> + aliases | done |
i8x16.bitselect | v128.bitselect<i/u8/16/32/f32/64> + aliases | done |
i8x16.any_true | v128.any_true<i/u8> + alias | done |
i16x8.any_true | v128.any_true<i/u16> + alias | done |
i32x4.any_true | v128.any_true<i/u32> + alias | done |
i64x2.any_true | v128.any_true<i/u64> + alias | done |
i8x16.all_true | v128.all_true<i/u8> + alias | done |
i16x8.all_true | v128.all_true<i/u16> + alias | done |
i32x4.all_true | v128.all_true<i/u32> + alias | done |
i64x2.all_true | v128.all_true<i/u64> + alias | done |
i8x16.shl | v128.shl<i/u8> + alias | done |
i16x8.shl | v128.shl<i/u16> + alias | done |
i32x4.shl | v128.shl<i/u32> + alias | done |
i64x2.shl | v128.shl<i/u64> + alias | done |
i8x16.shr | v128.shr<i/u8> + alias | done |
i16x8.shr | v128.shr<i/u16> + alias | done |
i32x4.shr | v128.shr<i/u32> + alias | done |
i64x2.shr | v128.shr<i/u64> + alias | done |
i8x16.and | v128.and<i/u8> + alias | done |
i16x8.and | v128.and<i/u16> + alias | done |
i32x4.and | v128.and<i/u32> + alias | done |
i64x2.and | v128.and<i/u64> + alias | done |
i8x16.or | v128.or<i/u8> + alias | done |
i16x8.or | v128.or<i/u16> + alias | done |
i32x4.or | v128.or<i/u32> + alias | done |
i64x2.or | v128.or<i/u64> + alias | done |
i8x16.xor | v128.xor<i/u8> + alias | done |
i16x8.xor | v128.xor<i/u16> + alias | done |
i32x4.xor | v128.xor<i/u32> + alias | done |
i64x2.xor | v128.xor<i/u64> + alias | done |
i8x16.not | v128.not<i/u8> + alias | done |
i16x8.not | v128.not<i/u16> + alias | done |
i32x4.not | v128.not<i/u32> + alias | done |
i64x2.not | v128.not<i/u64> + alias | done |
i8x16.neg | v128.neg<i/u8> + alias | done |
i16x8.neg | v128.neg<i/u16> + alias | done |
i32x4.neg | v128.neg<i/u32> + alias | done |
i64x2.neg | v128.neg<i/u64> + alias | done |
f32x4.neg | v128.neg<f32> + alias | done |
f64x2.neg | v128.neg<f64> + alias | done |
i8x16.add | v128.add<i/u8> + alias | done |
i16x8.add | v128.add<i/u16> + alias | done |
i32x4.add | v128.add<i/u32> + alias | done |
i64x2.add | v128.add<i/u64> + alias | done |
f32x4.add | v128.add<f32> + alias | done |
f64x2.add | v128.add<f64> + alias | done |
i8x16.sub | v128.sub<i/u8> + alias | done |
i16x8.sub | v128.sub<i/u16> + alias | done |
i32x4.sub | v128.sub<i/u32> + alias | done |
i64x2.sub | v128.sub<i/u64> + alias | done |
f32x4.sub | v128.sub<f32> + alias | done |
f64x2.sub | v128.sub<f64> + alias | done |
i8x16.mul | v128.mul<i/u8> + alias | done |
i16x8.mul | v128.mul<i/u16> + alias | done |
i32x4.mul | v128.mul<i/u32> + alias | done |
i64x2.mul | v128.mul<i/u64> + alias | done |
f32x4.mul | v128.mul<f32> + alias | done |
f64x2.mul | v128.mul<f64> + alias | done |
f32x4.div | v128.div<f32> + alias | done |
f64x2.div | v128.div<f64> + alias | done |
f32x4.min | v128.min<f32> + alias | done |
f64x2.min | v128.min<f64> + alias | done |
f32x4.max | v128.max<f32> + alias | done |
f64x2.max | v128.max<f64> + alias | done |
i8x16.add_saturate | v128.add_saturate<i/u8> + alias | done |
i16x8.add_saturate | v128.add_saturate<i/u16> + alias | done |
i8x16.sub_saturate | v128.sub_saturate<i/u8> + alias | done |
i16x8.sub_saturate | v128.sub_saturate<i/u16> + alias | done |
... | ... | todo |
See also: https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md
anubhavgupta