simdop will need more overloads, e.g. some instructions need immediate bytes. z = simdop(SHUFPS, x, y, 0); How about this: __v128 simdop(T...)(SIMD op, T args);