]> git.ipfire.org Git - thirdparty/valgrind.git/commit
Redo the way FP multiply-accumulate insns are done on ppc32/64.
authorJulian Seward <jseward@acm.org>
Wed, 8 Feb 2006 19:30:46 +0000 (19:30 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 8 Feb 2006 19:30:46 +0000 (19:30 +0000)
commit685cef79a246cd6f2bebe6015f25f0257ee202bd
tree9ef9ba6d7b7dc73b242c816573a1b433927380bd
parent1e7b4413747af8375995a882fd725adc52812611
Redo the way FP multiply-accumulate insns are done on ppc32/64.
Instead of splitting them up into a multiply and an add/sub, add 4 new
primops which keeps the operation as a single unit.  Then, in the back
end, re-emit the as a single instruction.

Reason for this is that so-called fused-multiply-accumulate -- which
is what ppc does -- generates a double-double length intermediate
result (of the multiply, 112 mantissa bits) before doing the add, and
so it is impossible to do a bit-accurate simulation of it using AddF64
and MulF64.

Unfortunately the new primops unavoidably take 4 args (a rounding mode
+ 3 FP args) and so there is a new IRExpr expression type, IRExpr_Qop
and associated supporting junk.

git-svn-id: svn://svn.valgrind.org/vex/trunk@1573
VEX/priv/guest-ppc/toIR.c
VEX/priv/host-generic/h_generic_regs.h
VEX/priv/host-ppc/hdefs.c
VEX/priv/host-ppc/hdefs.h
VEX/priv/host-ppc/isel.c
VEX/priv/ir/irdefs.c
VEX/priv/ir/iropt.c
VEX/pub/libvex_ir.h