I think SIMD.js need more operations, which may not directly map to hardware, but are &quot;at least no worse than what applications would do otherwise&quot;:<p>1. The most obvious operation is multiply-accumulate, which would map to either multiply + add instructions, multiply-add instruction (with intermediate rounding), or FMA instruction. For a linear algebra (BLAS) library, it would be a one-minute fix to make use of this operation, and it would double performance on modern CPUs.<p>2. Another kind of operations I would like to see is load-and-deinterleave&#x2F;store-and-interleave, e.g. operation which loads 12 floats of interleaved RGB data and returns 3 Float32x4 vectors with red, green, blue components. These operations map to a single instruction on ARM, and map to a nice sequence of instruction on x86 with SSSE3, and to a much longer sequence of instructions on x86 with SSE2. The best a developer can do with the current SIMD.js API is the analog of very suboptimal SSE2 code.<p>3. Operations which extend the type, e.g. load 4 16-bit signed integers and extend them to 4x32 vector. The optimal sequence is:<p>- PMOVSXWD xmm, [mem] on x86 with SSE 4.1<p>- MOVQ xmm, [mem] + PXOR xmm2, xmm2 + PCMPGTB xmm2, xmm + PUNPCKLBW xmm, xmm2 on x86 with SSE2<p>- VLD1.16 dTemp, [rAddr] + VMOVL.S16 qOut, dTemp on ARMv7.<p>The best the developer can do with SIMD.js now is SSE2 approach.<p>If you are interested in these ideas, I have more operations in mind that would be useful.