So, AVX has a function from immintrin.h, which should allow to store the concatenation of two __m128i values into a single __m256i val
Not all compilers seem to have _mm256_setr_m128i, or even _mm256_set_m128i, defined in immintrin.h. So I usually just define macros as needed, bracketed with suitable #ifdefs which test for compiler and version:
#define _mm256_set_m128i(v0, v1) _mm256_insertf128_si256(_mm256_castsi128_si256(v1), (v0), 1)
#define _mm256_setr_m128i(v0, v1) _mm256_set_m128i((v1), (v0))
Intel ICC 11.1 and later has both _mm256_set_m128i and _mm256_setr_m128i.
MSVC 2012 and later has just _mm256_set_m128i.
gcc/clang don't seem to have either, although I haven't checked recent versions to see if this has been fixed yet.