Request For Review (XS): 7096366, corruption of floating-point values with DeoptimizeALot on some big endian machines

Bertrand Delsart bertrand.delsart at oracle.com
Thu Oct 6 07:21:06 PDT 2011


Hi,

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)

http://cr.openjdk.java.net/~bdelsart/7096366/00/webrev/

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.

-- 
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-runtime-dev mailing list