This is partially due to the compromises of mappingvector intrinsics into C (with C++ only being marginally better). In a more vector-oriented language, such as shader languages, this:
s1 = vaddq_u32(s1, vextq_u32(z, s1, 2));
s1 = vaddq_u32(s1, vdupq_laneq_u32(s0, 3));
would be more like this: s1.xy += s1.zw;
s1 += s0.w;