changeset 22407:708a95bb443c

All SPARC float registers can be addressed in 4 byte portions; hence don't add 4 bytes to pointer pointing to a Narrow Oop
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Thu, 06 Aug 2015 15:50:18 +0200
parents 2117e8883f28
children b1c2b695554b
files src/share/vm/compiler/oopMap.cpp
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/compiler/oopMap.cpp	Thu Aug 06 15:12:38 2015 +0200
+++ b/src/share/vm/compiler/oopMap.cpp	Thu Aug 06 15:50:18 2015 +0200
@@ -36,6 +36,9 @@
 #ifdef COMPILER1
 #include "c1/c1_Defs.hpp"
 #endif
+#ifdef SPARC
+#include "vmreg_sparc.inline.hpp"
+#endif
 
 // OopMapStream
 
@@ -445,7 +448,9 @@
       } else if ( omv.type() == OopMapValue::narrowoop_value ) {
         narrowOop *nl = (narrowOop*)loc;
 #ifndef VM_LITTLE_ENDIAN
-        if (!omv.reg()->is_stack()) {
+        VMReg vmReg = omv.reg();
+        // Don't do this on SPARC float registers as they can be individually addressed
+        if (!vmReg->is_stack() SPARC_ONLY(&& !vmReg->is_FloatRegister())) {
           // compressed oops in registers only take up 4 bytes of an
           // 8 byte register but they are in the wrong part of the
           // word so adjust loc to point at the right place.