This program emits psllw instead of pslliw instruction. pslliw should be usable here since imm8 is a constant:

extern crate stdsimd;

use std::env;
use stdsimd as s;

fn main() {
    let imm8: i32 = env::args().nth(1).unwrap().parse().unwrap();
    let a = s::i16x8::new(imm8 as i16, 0, 0, 0, 0, 0, 0, 0);
    println!("{:?}", s::_mm_slli_epi16(a, 4));
}

LLVM types the count parameter in _mm_sll_epi16 as i16x8, but the right type is probably i64x2.


What is the deal with the ucomi f64 comparison functions in SSE2? Clang‘s headers indicate some specific behavior with NAN, but I can’t seem to reproduce it. Intel's official docs are very vague.


_mm256_blendv_pd takes a mask parameter with type f64x4, but the documentation seems to indicate that it is a bit vector. What's going on?