rs6000: correct BE vextract_fp_from_short[hl] vperm masks
authorDavid Edelsohn <dje.gcc@gmail.com>
Mon, 19 Oct 2020 12:59:46 +0000 (08:59 -0400)
committerDavid Edelsohn <dje.gcc@gmail.com>
Mon, 19 Oct 2020 13:19:52 +0000 (09:19 -0400)
commit8d31eb8f17fa17f63d46651af1c69fb8eca2d04a
tree2cabaa3f9c501b5dfb3dac838d70967960f2bde7
parent2d2f4ffc97a8510e72a99ee106159aeae2627a42
rs6000: correct BE vextract_fp_from_short[hl] vperm masks

xvcvhpsp instruction converts a vector of bfloat16 half precision to single
precision.  The intrinsics vextract_fp_from_shorth and
vextract_fp_from_shortl select the high or low four elements of a
half precision vector to convert.  The intrinsics use vperm to select
the appropriate portion of the half precision vector and redistribute
the values for the xvcvhpsp instruction.  The big endian versions of the
masks for the intrinsics were initialized wrong.  This patch replaces the
masks with the correct values.  This corrects the failure of
builtins-3-p9-runnable.c testcase on big endian systems.

Bootstrapped powerpc-ibm-aix7.2.3.0 Power9.

gcc/ChangeLog:

* config/rs6000/vsx.md (vextract_fp_from_shorth):  Fix vals_be.
(vextract_fp_from_shortl) Same.
gcc/config/rs6000/vsx.md