How to “zip” two slices efficiently

That's strange, I have this testcase which vectorizes in glorious fashion. Only obvious difference is integer vs. float.

#[bench]
fn zipdot_checked_counted_loop(b: &mut test::Bencher)
{
    let xs = vec![0; 1024];
    let ys = vec![0; 768];
    let xs = black_box(xs);
    let ys = black_box(ys);

    b.iter(|| {
        // Must slice to equal lengths, and then bounds checks are eliminated!
        let len = cmp::min(xs.len(), ys.len());
        let xs = &xs[..len];
        let ys = &ys[..len];

        let mut s = 0;

        for i in 0..len {
            let x = xs[i];
            let y = ys[i];
            s += x * y;
        }
        s
    })
}