# HG changeset patch # User roland # Date 1406829576 -7200 # Node ID 69ea58782b1ab59dda8e8413f90b2c3848331820 # Parent a073be2ce5c2711ff925cd37b3b50441cbe8e9c1 8054054: 8040121 is broken Summary: C++ code pattern from 8040121 is incorrect Reviewed-by: kvn diff -r a073be2ce5c2 -r 69ea58782b1a src/share/vm/opto/output.cpp --- a/src/share/vm/opto/output.cpp Tue Jul 29 13:56:29 2014 +0200 +++ b/src/share/vm/opto/output.cpp Thu Jul 31 19:59:36 2014 +0200 @@ -783,7 +783,8 @@ // grow downwards in all implementations. // (If, on some machine, the interpreter's Java locals or stack // were to grow upwards, the embedded doubles would be word-swapped.) - jlong_accessor acc = { jlong_cast(d) }; + jlong_accessor acc; + acc.long_value = jlong_cast(d); array->append(new ConstantIntValue(acc.words[1])); array->append(new ConstantIntValue(acc.words[0])); #endif @@ -802,7 +803,8 @@ // grow downwards in all implementations. // (If, on some machine, the interpreter's Java locals or stack // were to grow upwards, the embedded doubles would be word-swapped.) - jlong_accessor acc = { d }; + jlong_accessor acc; + acc.long_value = d; array->append(new ConstantIntValue(acc.words[1])); array->append(new ConstantIntValue(acc.words[0])); #endif diff -r a073be2ce5c2 -r 69ea58782b1a src/share/vm/runtime/sharedRuntimeMath.hpp --- a/src/share/vm/runtime/sharedRuntimeMath.hpp Tue Jul 29 13:56:29 2014 +0200 +++ b/src/share/vm/runtime/sharedRuntimeMath.hpp Thu Jul 31 19:59:36 2014 +0200 @@ -42,29 +42,34 @@ } DoubleIntConv; static inline int high(double d) { - DoubleIntConv x = { d }; + DoubleIntConv x; + x.d = d; return x.split.hi; } static inline int low(double d) { - DoubleIntConv x = { d }; + DoubleIntConv x; + x.d = d; return x.split.lo; } static inline void set_high(double* d, int high) { - DoubleIntConv conv = { *d }; + DoubleIntConv conv; + conv.d = *d; conv.split.hi = high; *d = conv.d; } static inline void set_low(double* d, int low) { - DoubleIntConv conv = { *d }; + DoubleIntConv conv; + conv.d = *d; conv.split.lo = low; *d = conv.d; } static double copysignA(double x, double y) { - DoubleIntConv convX = { x }; + DoubleIntConv convX; + convX.d = x; convX.split.hi = (convX.split.hi & 0x7fffffff) | (high(y) & 0x80000000); return convX.d; }