diff graal/com.oracle.max.cri/src/com/oracle/max/cri/xir/RiXirGenerator.java @ 4199:aaac4894175c

Renamed cri packages from sun to oracle.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Tue, 03 Jan 2012 16:29:28 +0100
parents graal/com.oracle.max.cri/src/com/sun/cri/xir/RiXirGenerator.java@e233f5660da4
children 744dade427b8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.max.cri/src/com/oracle/max/cri/xir/RiXirGenerator.java	Tue Jan 03 16:29:28 2012 +0100
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2009, 2011, 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.max.cri.xir;
+
+import java.util.*;
+
+import com.oracle.max.cri.ci.*;
+import com.oracle.max.cri.ri.*;
+import com.oracle.max.cri.ri.RiType.*;
+
+/**
+ * Represents the interface through which the compiler requests the XIR for a given bytecode from the runtime system.
+ */
+public interface RiXirGenerator {
+
+    /**
+     * Note: may return {@code null}.
+     */
+    XirSnippet genPrologue(XirSite site, RiResolvedMethod method);
+
+    /**
+     * Note: may return {@code null} in which case the compiler will not emit a return instruction.
+     */
+    XirSnippet genEpilogue(XirSite site, RiResolvedMethod method);
+
+    XirSnippet genSafepointPoll(XirSite site);
+
+    XirSnippet genExceptionObject(XirSite site);
+
+    XirSnippet genResolveClass(XirSite site, RiType type, Representation representation);
+
+    XirSnippet genIntrinsic(XirSite site, XirArgument[] arguments, RiMethod method);
+
+    XirSnippet genInvokeInterface(XirSite site, XirArgument receiver, RiMethod method);
+
+    XirSnippet genInvokeVirtual(XirSite site, XirArgument receiver, RiMethod method);
+
+    XirSnippet genInvokeSpecial(XirSite site, XirArgument receiver, RiMethod method);
+
+    XirSnippet genInvokeStatic(XirSite site, RiMethod method);
+
+    XirSnippet genMonitorEnter(XirSite site, XirArgument receiver, XirArgument lockAddress);
+
+    XirSnippet genMonitorExit(XirSite site, XirArgument receiver, XirArgument lockAddress);
+
+    XirSnippet genGetField(XirSite site, XirArgument receiver, RiField field);
+
+    XirSnippet genPutField(XirSite site, XirArgument receiver, RiField field, XirArgument value);
+
+    XirSnippet genGetStatic(XirSite site, XirArgument staticTuple, RiField field);
+
+    XirSnippet genPutStatic(XirSite site, XirArgument staticTuple, RiField field, XirArgument value);
+
+    XirSnippet genNewInstance(XirSite site, RiType type);
+
+    XirSnippet genNewArray(XirSite site, XirArgument length, CiKind elementKind, RiType componentType, RiType arrayType);
+
+    XirSnippet genNewObjectArrayClone(XirSite site, XirArgument newLength, XirArgument referenceArray);
+
+    XirSnippet genNewMultiArray(XirSite site, XirArgument[] lengths, RiType type);
+
+    XirSnippet genCheckCast(XirSite site, XirArgument receiver, XirArgument hub, RiType type);
+
+    XirSnippet genInstanceOf(XirSite site, XirArgument receiver, XirArgument hub, RiType type);
+
+    XirSnippet genMaterializeInstanceOf(XirSite site, XirArgument receiver, XirArgument hub, XirArgument trueValue, XirArgument falseValue, RiType type);
+
+    XirSnippet genArrayLoad(XirSite site, XirArgument array, XirArgument index, CiKind elementKind, RiType elementType);
+
+    XirSnippet genArrayStore(XirSite site, XirArgument array, XirArgument index, XirArgument value, CiKind elementKind, RiType elementType);
+
+    XirSnippet genArrayLength(XirSite site, XirArgument array);
+
+    XirSnippet genWriteBarrier(XirArgument object);
+
+    XirSnippet genArrayCopy(XirSite site, XirArgument src, XirArgument srcPos, XirArgument dest, XirArgument destPos, XirArgument length, RiType elementType, boolean inputsSame, boolean inputsDifferent);
+
+    XirSnippet genCurrentThread(XirSite site);
+
+    XirSnippet genGetClass(XirSite site, XirArgument xirArgument);
+
+    /**
+     * Generates code that checks that the {@linkplain Representation#ObjectHub hub} of
+     * an object is identical to a given hub constant. In pseudo code:
+     * <pre>
+     *     if (object.getHub() != hub) {
+     *         uncommonTrap();
+     *     }
+     * </pre>
+     * This snippet should only be used when the object is guaranteed not to be null.
+     */
+    XirSnippet genTypeCheck(XirSite site, XirArgument object, XirArgument hub, RiType type);
+
+    /**
+     * Gets the list of XIR templates, using the given XIR assembler to create them if
+     * they haven't yet been created.
+     *
+     * @param asm the XIR assembler
+     * @return the list of templates
+     */
+    List<XirTemplate> makeTemplates(CiXirAssembler asm);
+
+}