# HG changeset patch # User Stefan Anzinger # Date 1438869018 -7200 # Node ID 708a95bb443cc0fa7ac2b11da293eb3d1f2aee49 # Parent 2117e8883f28ef681a65b5d8d489269a9b1e1106 All SPARC float registers can be addressed in 4 byte portions; hence don't add 4 bytes to pointer pointing to a Narrow Oop diff -r 2117e8883f28 -r 708a95bb443c src/share/vm/compiler/oopMap.cpp --- 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.