Mercurial > hg > graal-compiler
changeset 18874:e847e842ce93
[SPARC] do not virtualize on big endian when bit sizes do not match (temporary fix)
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Fri, 16 Jan 2015 16:01:31 +0100 |
parents | 9f85ac52d521 |
children | d71bf1009d71 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java |
diffstat | 1 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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(); + } } } }