There is no instruction that directly does what you want, but all the building blocks to build one are there:
The saturation/narrow instruction is:
int16x4_t vqmovn_s32 (int32x4_t)
This intrinsic saturates from signed 32 bit to signed 16 bit integers, returning the four narrowed integers in a 64 bit wide variable.
Combining these into your _mm_packs_epi32 is easy: Just do it for a and b, and combine the results:
int32x4_t a,b;
int16x8_t c;
c = vcombine_s16 (vqmovn_s32(a), vqmovn_s32(b));
You may have to swap the order of the vcombine_s16 arguments.