message: core:vsx Fix vec_packs in gcc-5
diff: @@ -254,12 +254,8 @@ FORCE_INLINE(rt) fnm(const rg& a, const rg& b) \
  FORCE_INLINE(vec_bdword2) vec_nor(const vec_bdword2& a, const vec_bdword2& b)
  { return vec_bdword2_c(__builtin_vec_nor(vec_dword2_c(a), vec_dword2_c(b))); }
  -#endif // __GNUG__ < 6
  -#if __GNUG__ < 5
  -// vec_xxpermdi in gcc4 missing little-endian supports just like clang
  -# define vec_permi(a, b, c) vec_xxpermdi(b, a, (3 ^ ((c & 1) << 1 | c >> 1)))
  -// vec_packs doesn't support double words in gcc4
  +// vec_packs doesn't support double words in gcc4 and old versions of gcc5
  # undef vec_packs
  VSX_REDIRECT_2RG(vec_char16, vec_short8, vec_packs, __builtin_vec_packs)
  VSX_REDIRECT_2RG(vec_uchar16, vec_ushort8, vec_packs, __builtin_vec_packs)
  @@ -268,6 +264,11 @@ FORCE_INLINE(rt) fnm(const rg& a, const rg& b) \
  VSX_IMPL_2VRG_F(vec_int4, vec_dword2, "vpksdss %0,%2,%1", vec_packs)
  VSX_IMPL_2VRG_F(vec_uint4, vec_udword2, "vpkudus %0,%2,%1", vec_packs)
  +#endif // __GNUG__ < 6
  +
  +#if __GNUG__ < 5
  +// vec_xxpermdi in gcc4 missing little-endian supports just like clang
  +# define vec_permi(a, b, c) vec_xxpermdi(b, a, (3 ^ ((c & 1) << 1 | c >> 1)))
  #else
  # define vec_permi vec_xxpermdi
  #endif // __GNUG__ < 5
  