]> git.ipfire.org Git - thirdparty/gcc.git/commit
rs6000: use lis;xoris to build constant
authorJiufu Guo <guojiufu@linux.ibm.com>
Sat, 10 Dec 2022 13:18:51 +0000 (21:18 +0800)
committerJiufu Guo <guojiufu@linux.ibm.com>
Wed, 17 May 2023 02:13:18 +0000 (10:13 +0800)
commit5eb7d560626e427673c53723ed430c4bb5721f33
tree5c1d1369352412bce5cdfbbb3f327c461bd3ca65
parent0d5660575199a1a948f09a0b479c43e6bd398479
rs6000: use lis;xoris to build constant

For constant C:
If '(c & 0xFFFFFFFF0000FFFFULL) == 0xFFFFFFFF00000000' or say:
32(1) || 1(0) || 15(x) || 16(0), we could use "lis; xoris" to build.

Here N(M) means N continuous bit M, x for M means it is ok for either
1 or 0; '||' means concatenation.

This patch update rs6000_emit_set_long_const to support those constants.

Compare with previous version:
https://gcc.gnu.org/pipermail/gcc-patches/2022-December/608292.html
This patch updates test function names only.

Bootstrap and regtest pass on ppc64{,le}.

PR target/106708

gcc/ChangeLog:

* config/rs6000/rs6000.cc (rs6000_emit_set_long_const): Support building
constants through "lis; xoris".

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/pr106708.c: Add test function.
gcc/config/rs6000/rs6000.cc
gcc/testsuite/gcc.target/powerpc/pr106708.c