Hi!
On Fri, Feb 17, 2023 at 10:28:41PM +0530, Ajit Agarwal wrote:
> This patch replaces fmr instruction (6 cycles) with xxlor instruction ( 2
> cycles)
> Bootstrapped and regtested on powerpc64-linux-gnu.
You tested this on a CPU that does have VSX. It is incorrect on other
(older) CPUs.
> --- a/gcc/config/rs6000/rs6000.md
> +++ b/gcc/config/rs6000/rs6000.md
> @@ -8436,7 +8436,7 @@
> "@
> stfd%U0%X0 %1,%0
> lfd%U1%X1 %0,%1
> - fmr %0,%1
> + xxlor %0,%1,%1
> lxsd %0,%1
> stxsd %1,%0
> lxsdx %x0,%y1
This is the *mov<mode>_hardfloat64 pattern. You can add some magic to
your Git config so that will show in the patch: in .git/config:
[diff "md"]
xfuncname = "^\\(define.*$"
(As it says in .gitattributes:
# Make diff on MD files use "(define" as a function marker.
# Use together with git config diff.md.xfuncname '^\(define.*$'
# which is run by contrib/gcc-git-customization.sh too.
*.md diff=md
)
The third alternative to this insn, the fmr one, has "d" as both input
and output constraint, and has "*" as isa attribute, so it will be used
on any CPU that has floating point registers. The eight alternative
(the existing xxlor one) has "wa" constraints (via <f64_vsx>) so it
implicitly requires VSX to be enabled. You need to do something similar
for what you want, but you also need to still allow fmr.
Segher