# HG changeset patch # User Bernhard Urban # Date 1389950644 -7200 # Node ID e70abc187ff3c9960946e77461a3dbf2dc64b47b # Parent 8d99131c8940ffe252efef8c5da671def090a455 method substitution for {Character,Short}.reverseBytes() diff -r 8d99131c8940 -r e70abc187ff3 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/CharacterBits.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/CharacterBits.java Fri Jan 17 11:24:04 2014 +0200 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.jtt.jdk; + +import com.oracle.graal.jtt.*; +import org.junit.*; + +public class CharacterBits extends JTTTest { + @SuppressWarnings("unused") private static char init = Character.reverseBytes((char) 42); + private static char original = 0x1708; + + public static char test(char o) { + return Character.reverseBytes(o); + } + + @Test + public void run0() { + runTest("test", original); + } + + @Test + public void run1() { + runTest("test", (char) 0x1708L); + } + + @Test + public void run2() { + runTest("test", (char) 0); + runTest("test", (char) 1); + runTest("test", (char) -1); + runTest("test", (char) 0x00ff); + runTest("test", (char) 0xff00); + runTest("test", (char) 0xffff); + runTest("test", (char) 0x3fff); + } +} diff -r 8d99131c8940 -r e70abc187ff3 graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/ShortBits.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/ShortBits.java Fri Jan 17 11:24:04 2014 +0200 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.jtt.jdk; + +import com.oracle.graal.jtt.*; +import org.junit.*; + +public class ShortBits extends JTTTest { + @SuppressWarnings("unused") private static short init = Short.reverseBytes((short) 42); + private static short original = 0x1708; + + public static short test(short o) { + return Short.reverseBytes(o); + } + + @Test + public void run0() { + runTest("test", original); + } + + @Test + public void run1() { + runTest("test", (short) 0x1708L); + } + + @Test + public void run2() { + runTest("test", (short) 0); + runTest("test", (short) 1); + runTest("test", (short) -1); + runTest("test", (short) 0x00ff); + runTest("test", (short) 0xff00); + runTest("test", (short) 0xffff); + runTest("test", (short) 0x3fff); + } +} diff -r 8d99131c8940 -r e70abc187ff3 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CharacterSubstitutions.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CharacterSubstitutions.java Fri Jan 17 11:24:04 2014 +0200 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.replacements; + +import com.oracle.graal.api.replacements.*; +import com.oracle.graal.replacements.nodes.*; + +@ClassSubstitution(Character.class) +public class CharacterSubstitutions { + @MethodSubstitution + public static char reverseBytes(char i) { + return (char) (ReverseBytesNode.reverse(i) >> 16); + } +} diff -r 8d99131c8940 -r e70abc187ff3 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Thu Jan 16 20:52:12 2014 -0800 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Fri Jan 17 11:24:04 2014 +0200 @@ -47,6 +47,8 @@ replacements.registerSubstitutions(FloatSubstitutions.class); replacements.registerSubstitutions(LongSubstitutions.class); replacements.registerSubstitutions(IntegerSubstitutions.class); + replacements.registerSubstitutions(CharacterSubstitutions.class); + replacements.registerSubstitutions(ShortSubstitutions.class); replacements.registerSubstitutions(UnsignedMathSubstitutions.class); replacements.registerSubstitutions(NodeClassSubstitutions.class); replacements.registerSubstitutions(CompositeValueClassSubstitutions.class); diff -r 8d99131c8940 -r e70abc187ff3 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ShortSubstitutions.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ShortSubstitutions.java Fri Jan 17 11:24:04 2014 +0200 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.replacements; + +import com.oracle.graal.api.replacements.*; +import com.oracle.graal.replacements.nodes.*; + +@ClassSubstitution(Short.class) +public class ShortSubstitutions { + @MethodSubstitution + public static short reverseBytes(short i) { + return (short) (ReverseBytesNode.reverse(i) >> 16); + } +}