Unfortunately there's no such instructions in AVX2. All AVX2 instruction are SSE2 extended to 256 bit keeping in mind compatibility when used in 128 bit SSE2.
If you know the number of 16-bits integer to shift at compile time you can use combination of permute and shifts. E.g. you can logically break the value into 64 bit chunks, do permutation an shifts of this blocks and than combine it.
That's how I do this in my code
static __m256i m256_srl16_1(__m256i i) {
// suppose i is [16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
//[4, 3, 2, 1, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5]
__m256i srl64_q = _mm256_permute4x64_epi64(i, _MM_SHUFFLE(0,3,2,1));
//[ 1, 0, 0, 0 13, 0, 0, 0 9, 0, 0, 0 5, 0, 0, 0]
__m256i srl64_m = _mm256_slli_epi64(srl64_q, 3*16);
//[ 0, 16, 15, 14, 0, 12, 11, 10, 0, 8, 7, 6, 0, 4, 3, 2]
__m256i srl16_z = _mm256_srli_epi64(i, 1*16);
__m256i srl64 = _mm256_and_si256(srl64_m, _mm256_set_epi64x(0, ~0, ~0, ~0));
__m256i r = _mm256_or_si256(srl64, srl16_z);
return r;
}
If you need to shift for more than 64 bits you need an extra permutation of original value and masking out unneeded bits