Mercurial > hg > truffle
changeset 20289:69ea58782b1a
8054054: 8040121 is broken
Summary: C++ code pattern from 8040121 is incorrect
Reviewed-by: kvn
author | roland |
---|---|
date | Thu, 31 Jul 2014 19:59:36 +0200 |
parents | a073be2ce5c2 |
children | 85c339200299 |
files | src/share/vm/opto/output.cpp src/share/vm/runtime/sharedRuntimeMath.hpp |
diffstat | 2 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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; }