title: Conversion short to int and sum with NEON
body: <p>I want to convert the next function to NEON:</p>
  
  <pre><code>int  dot4_c(unsigned char v0[4], unsigned char v1[4]){
        int r=0;
        r = v0[0]*v1[0];
        r += v0[1]*v1[1];
        r += v0[2]*v1[2];  
        r += v0[3]*v1[3];
  return r;
  }
  </code></pre>
  
  <p>I think I almost do it, but there is an error because it is not working well</p>
  
  <pre><code>int dot4_neon_hfp(unsigned char v0[4], unsigned char v1[4])
  {
  
  asm volatile (
                "vld1.16      {d2, d3}, [%0]          \n\t"   //d2={x0,y0}, d3={z0, w0}
                "vld1.16      {d4, d5}, [%1]          \n\t"   //d4={x1,y1}, d5={z1, w1}
                "vcvt.32.u16      d2, d2                  \n\t" //conversion
                "vcvt.32.u16      d3, d3                  \n\t"
                "vcvt.32.u16      d4, d4                  \n\t"
                "vcvt.32.u16      d5, d5                  \n\t"
  
                "vmul.32      d0, d2, d4              \n\t"   //d0= d2*d4
                "vmla.32      d0, d3, d5              \n\t"   //d0 = d0 + d3*d5 
                "vpadd.32         d0, d0              \n\t"   //d0 = d[0] + d[1]
                :: "r"(v0), "r"(v1) : 
                );    
  
  }
  </code></pre>
  
  <p>How can I get this working?</p>