# HG changeset patch # User Stefan Anzinger # Date 1421420491 -3600 # Node ID e847e842ce935969e9768715709e3adc96621276 # Parent 9f85ac52d521c2a4b7c81151ba25b0018fde539b [SPARC] do not virtualize on big endian when bit sizes do not match (temporary fix) diff -r 9f85ac52d521 -r e847e842ce93 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Fri Jan 16 11:48:52 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Fri Jan 16 16:01:31 2015 +0100 @@ -22,6 +22,8 @@ */ package com.oracle.graal.nodes.java; +import java.nio.*; + import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodeinfo.*; @@ -73,8 +75,13 @@ if (state != null && state.getState() == EscapeState.Virtual) { int fieldIndex = ((VirtualInstanceNode) state.getVirtualObject()).fieldIndex(field()); if (fieldIndex != -1) { - tool.setVirtualEntry(state, fieldIndex, value(), false); - tool.delete(); + Kind entryKind = state.getVirtualObject().entryKind(fieldIndex); + Kind valueKind = value().getKind(); + boolean isStoreSafe = !entryKind.isPrimitive() || ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN || entryKind.getBitCount() == valueKind.getBitCount(); + if (isStoreSafe) { + tool.setVirtualEntry(state, fieldIndex, value(), false); + tool.delete(); + } } } }