This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
PowerPC ISA 3.0 adds new instructions (LXSIHZX, LXSIBZX, STXSIHX, and STXSIBX) that allow you to load and zero extend byte and half word values from memory and to store them back. This patch is similar in spirit to the patch I wrote years ago for power7 that generates LFIWAX, LFIWZX, and STFIWX when loading up 32-bit integers to convert to floating point, and converting floating point to 32-bit integers. At some point it would be nice to allow various small integers directly into the floating/vector registers, but I suspect that will take some amount of effort to implement and tune. So this patch adds support to avoid using direct move when converting between small integers and floating point. If you are curious, out of the 29 Spec 2006 CPU benchmarks, there are 8 benchmarks (perlbench, cactusADM, gobmk, povray, k264ref, omnetpp, wrf, and sphinx3) that convert load up small integers from memory and convert them to floating point. There are 3 benchmarks (cactusADM, povray, and wrf) that convert floating point to small integers and store the result. I have done a bootstrap and make check with no regression on a power8 little endian system and there were no regressions. Are these patches ok to check into the trunk, and after a burn-in period, check them into the GCC 6.2 branch? [gcc] 2016-06-23 Michael Meissner <meissner@linux.vnet.ibm.com> * config/rs6000/vsx.md (UNSPEC_P9_MEMORY): New unspec to support loading and storing byte/half-word values in the vector registers. (vsx_sign_extend_hi_<mode>): Enable the generator function. (p9_lxsi<wd>zx): New insns to load zero-extended bytes and half-words on ISA 3.0 to the vector registers. (p9_stxsi<wd>zx): New insns to store zero-extended bytes and half-words on ISA 3.0 from the vector registers. * config/rs6000/rs6000.md (FP_ISA3): New iterator to optimize converting char/half-word items to floating point on ISA 3.0. (float<QHI:mode><FP_ISA3:mode>2): On ISA 3.0 generate the lxsihzx and lxsibzx instructions if we are converting an 8-bit or 16-bit item from memory to floating point. (float<QHI:mode><FP_ISA3:mode>2_internal): Likewise. (floatuns<QHI:mode><FP_ISA3:mode>2): Likewise. (floatuns<QHI:mode><FP_ISA3:mode>2_internal): Likewise. (fix_trunc<SFDF:mode><QHI:mode>2): On ISA 3.0 generate the stxsihx and stxsibx instructions to store floating point values converted to 8 or 16-bit integers. (fixuns_trunc<mode>si2): Likewise. [gcc/testsuite] 2016-06-23 Michael Meissner <meissner@linux.vnet.ibm.com> * gcc.target/powerpc/p9-fpcvt-1.c: New test to test ISA 3.0 load byte/half-word to vector registers and store byte/half-word from vector register instructions. * gcc.target/powerpc/p9-fpcvt-2.c: Likewise. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797
Attachment:
gcc-stage7.fpcvt001b
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |