for (k=0; k<LENGTH; k+=4) {
float arra[]={x[offset+k],x[offset+k+1],x[offset+k+2],x[offset+k+3]};
float arrb[]={y[offset+k],y[offset+k+1],y[offset+k+2],y[offset+k+3]};
v4sf ssea=__builtin_load(arra);
v4sf sseb=__builtin_load(arrb);
ssea=__builtin_add(ssea, sseb);
__builtin_store(ret+offset+k,ssea);
}

for (k=0; k<LENGTH; k+=4) {
v4sf ssea=__builtin_load(x+offset+k);
v4sf sseb=__builtin_load(y+offset+k);
ssea=__builtin_add(ssea, sseb);
__builtin_store(ret+offset+k,ssea);
}

float[]で受けるかv4sfで直接初期化するは、本質的に有意な差はありません(多分)。
それよりもv4sf ssea[], *ssebなどのようなデータのブロックについて、 ret+offset+k などでアドレッシングを求めるために + が数回必要なのはsse apiをいくら拡張しても回避できません。
sse,avxはアラインメントも含めて非常に神経質であり、あまり深入りしてもsse,avx設計思想ではx86上のvm(java, dotnet, js, scriptlang)ですら性能向上は全くなく、
時間を使ってsse,avxを勉強してもそれに見合うプログラムの性能向上もないのでほかのストリーミング演算開発環境を検証します。