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;
 }