001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.runtime;
014
015 import org.jikesrvm.VM;
016 import org.jikesrvm.classloader.RVMField;
017 import org.jikesrvm.classloader.NormalMethod;
018
019 /**
020 * Entrypoints that are specific to instruction architecture.
021 */
022 public interface ArchEntrypoints {
023 NormalMethod newArrayArrayMethod =
024 EntrypointHelper.getMethod("Lorg/jikesrvm/" + ArchEntrypoints.arch + "/MultianewarrayHelper;", "newArrayArray", "(IIII)Ljava/lang/Object;");
025 String arch = VM.BuildForIA32 ? "ia32" : "ppc";
026 String ArchCodeArrayName = "Lorg/jikesrvm/ArchitectureSpecific$CodeArray;";
027 RVMField reflectiveMethodInvokerInstructionsField =
028 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/OutOfLineMachineCode;",
029 "reflectiveMethodInvokerInstructions",
030 ArchCodeArrayName);
031 RVMField saveThreadStateInstructionsField =
032 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/OutOfLineMachineCode;", "saveThreadStateInstructions", ArchCodeArrayName);
033 RVMField threadSwitchInstructionsField =
034 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/OutOfLineMachineCode;", "threadSwitchInstructions", ArchCodeArrayName);
035 RVMField restoreHardwareExceptionStateInstructionsField =
036 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/OutOfLineMachineCode;",
037 "restoreHardwareExceptionStateInstructions",
038 ArchCodeArrayName);
039 RVMField saveVolatilesInstructionsField =
040 (VM.BuildForPowerPC) ?
041 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/OutOfLineMachineCode;", "saveVolatilesInstructions", ArchCodeArrayName) : null;
042 RVMField restoreVolatilesInstructionsField =
043 (VM.BuildForPowerPC) ?
044 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/OutOfLineMachineCode;", "restoreVolatilesInstructions", ArchCodeArrayName) : null;
045 RVMField registersIPField =
046 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "ip", "Lorg/vmmagic/unboxed/Address;");
047 RVMField registersFPRsField = EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "fprs", "[D");
048 RVMField registersGPRsField =
049 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "gprs", "Lorg/vmmagic/unboxed/WordArray;");
050 RVMField registersInUseField = EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "inuse", "Z");
051 RVMField registersLRField =
052 (VM.BuildForPowerPC) ? EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;",
053 "lr",
054 "Lorg/vmmagic/unboxed/Address;") : null;
055 RVMField registersFPField =
056 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;",
057 "fp",
058 "Lorg/vmmagic/unboxed/Address;") : null;
059 RVMField framePointerField =
060 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;",
061 "framePointer",
062 "Lorg/vmmagic/unboxed/Address;") : null;
063 RVMField hiddenSignatureIdField =
064 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;", "hiddenSignatureId", "I") : null;
065 RVMField arrayIndexTrapParamField =
066 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;", "arrayIndexTrapParam", "I") : null;
067 }