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    }