Mercurial > hg > graal-jvmci-8
changeset 5463:b6311d367bd6
support use of boolean, byte, char and short constant arguments in @NodeIntrinsic methods
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 01 Jun 2012 11:05:24 +0200 |
parents | fc58f934f9a1 |
children | 1d00c9a1f733 |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/SnippetIntrinsificationPhase.java |
diffstat | 1 files changed, 14 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/SnippetIntrinsificationPhase.java Fri Jun 01 11:03:50 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/SnippetIntrinsificationPhase.java Fri Jun 01 11:05:24 2012 +0200 @@ -120,12 +120,23 @@ if (folding || CiUtil.getParameterAnnotation(ConstantNodeParameter.class, parameterIndex, target) != null) { assert argument instanceof ConstantNode : "parameter " + parameterIndex + " must be a compile time constant for calling " + invoke.callTarget().targetMethod() + ": " + argument; ConstantNode constantNode = (ConstantNode) argument; - Object o = constantNode.asConstant().boxedValue(); + CiConstant constant = constantNode.asConstant(); + Object o = constant.boxedValue(); if (o instanceof Class< ? >) { reflectionCallArguments[i] = runtime.getType((Class< ? >) o); parameterTypes[i] = RiResolvedType.class; } else { - reflectionCallArguments[i] = o; + if (parameterTypes[i] == boolean.class) { + reflectionCallArguments[i] = Boolean.valueOf(constant.asInt() != 0); + } else if (parameterTypes[i] == byte.class) { + reflectionCallArguments[i] = Byte.valueOf((byte) constant.asInt()); + } else if (parameterTypes[i] == short.class) { + reflectionCallArguments[i] = Short.valueOf((short) constant.asInt()); + } else if (parameterTypes[i] == char.class) { + reflectionCallArguments[i] = Character.valueOf((char) constant.asInt()); + } else { + reflectionCallArguments[i] = o; + } } } else { reflectionCallArguments[i] = argument; @@ -186,7 +197,6 @@ } private static Node createNodeInstance(Class< ? > nodeClass, Class< ? >[] parameterTypes, Object[] nodeConstructorArguments) { - Constructor< ? > constructor; try { constructor = nodeClass.getDeclaredConstructor(parameterTypes); @@ -197,7 +207,7 @@ try { return (ValueNode) constructor.newInstance(nodeConstructorArguments); } catch (Exception e) { - throw new RuntimeException(e); + throw new RuntimeException(constructor + Arrays.toString(nodeConstructorArguments), e); } }