Request For Review (XS): 7096366, corruption of floating-point values with DeoptimizeALot on some big endian machines
bertrand.delsart at oracle.com
Thu Oct 6 07:21:06 PDT 2011
Here is a fix for a deoptimization issue on some big endian machines
(those which have no 32-bits float register and encode the floats in the
low 32-bits of 64-bits register, like PPC e500v2)
Fix should be safe for all platforms and automatically detect those that
need the fix.
It can only impact big endian machines which do not encode floats in
registers as 64 bits. In that case, unless the doubles are using two
float registers, there might be a confusion between the VMReg for the
intended float and the VMreg for the double using the same register.
This is identified by the fact that two successive float VMRregs
correspond to the same FloatRegister and that we currently have the
first one. The fix updates the VMReg to the second half, which should be
the one corresponding to the float on big endian machines.
Note that SPARC is a big endian machine with 32 bits encoding but
this fix does not break anything since VMReg->next->register always
differs from VMReg->register.
Bertrand Delsart, bertrand.delsart at oracle.com,
Sun-Oracle France, 180 av. de l'Europe, ZIRST de Montbonnot,
38334 Saint Ismier, FRANCE
More information about the hotspot-compiler-dev