このスレで一番賢くてSSEに詳しい人に質問。

__m128i ptn = { 0,4,8,12, 16,20,24,28, 1,5,9,13, 17,21,25,29};
__m128i ptn2={ 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15};
__m128i v0 = _mm_load_si128((__m128i*) p1);
__m128i v1 = _mm_load_si128((__m128i*) p2);

__m128i v2 = _mm_shuffle_byte(v0, v1, ptn); ←v0とv1を連結して8bit x 32個の要素の中からptnで指定したものだけを並べる
__m128i v3 = _mm_load_shuffle_byte((__m128i*) p3, ptn2);  ←8bit x 16個の要素をメモリから読み出し、ptn通りに並べ変える

SSEにこんな感じの命令はありませんか?
無い場合、SSE3までの範囲で代替しようとすると、どのくらい複雑になって遅くなりますか?