SIMD.js&#x27;s shuffle instructions closely resemble LLVM&#x27;s shuffle instructions, and LLVM also require shuffle indices to be constant, so this isn&#x27;t restriction isn&#x27;t unique to SIMD.js. Also, x86&#x27;s shuffle situation is much more involved than your post here acknowledges; it includes shufps, shufpd, movlhps, movlhpd, movhlps, movhlpd, unpcklps, unpcklpd, unpckhps, unpckhpd, movss, movsd, and more, and <i>all</i> of these are effectively constant shuffle masks.<p>I agree that there&#x27;s more we can do here, and there are some interesting questions if we want to abstract over pshufb and VTBL and so on. Fortunately, SIMD.js is an evolving API and we can add things to it.