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
046 RVMField trampolineRegistersField =
047 EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;", "trampolineRegisters", "Lorg/jikesrvm/ArchitectureSpecific$Registers;");
048 RVMField hijackedReturnAddressField =
049 EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;", "hijackedReturnAddress", "Lorg/vmmagic/unboxed/Address;");
050 RVMField registersIPField =
051 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "ip", "Lorg/vmmagic/unboxed/Address;");
052 RVMField registersFPRsField = EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "fprs", "[D");
053 RVMField registersGPRsField =
054 EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "gprs", "Lorg/vmmagic/unboxed/WordArray;");
055 RVMField registersInUseField = EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;", "inuse", "Z");
056 RVMField registersLRField =
057 (VM.BuildForPowerPC) ? EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;",
058 "lr",
059 "Lorg/vmmagic/unboxed/Address;") : null;
060 RVMField registersFPField =
061 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/" + arch + "/Registers;",
062 "fp",
063 "Lorg/vmmagic/unboxed/Address;") : null;
064 RVMField framePointerField =
065 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;",
066 "framePointer",
067 "Lorg/vmmagic/unboxed/Address;") : null;
068 RVMField hiddenSignatureIdField =
069 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;", "hiddenSignatureId", "I") : null;
070 RVMField arrayIndexTrapParamField =
071 (VM.BuildForIA32) ? EntrypointHelper.getField("Lorg/jikesrvm/scheduler/RVMThread;", "arrayIndexTrapParam", "I") : null;
072 }