/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.jikesrvm.ia32; import org.jikesrvm.Constants; import org.vmmagic.unboxed.Offset; import org.jikesrvm.VM; /** * Registers used by baseline compiler implementation of virtual machine. */ public interface BaselineConstants extends Constants, ArchConstants { int WORDSIZE = VM.BuildFor64Addr ? 8 : 4; // bytes int LG_WORDSIZE = VM.BuildFor64Addr ? 3 : 2; // Dedicated registers. // RegisterConstants.GPR SP = ESP; RegisterConstants.GPR TR = THREAD_REGISTER; // Volatile (parameter) registers. // RegisterConstants.GPR T0 = EAX; // DO NOT CHANGE THIS ASSIGNMENT RegisterConstants.GPR T1 = EDX; // scratch register RegisterConstants.GPR S0 = ECX; RegisterConstants.GPR S1 = EDI; // Constants describing baseline compiler conventions for // saving registers in stackframes. // int STACKFRAME_REG_SAVE_OFFSET = STACKFRAME_BODY_OFFSET; // offset from FP of the saved registers. // Some registers are saved in all baseline // frames, and most register as saved in the // dynamic bridge frames. int STACKFRAME_FIRST_PARAMETER_OFFSET = STACKFRAME_REG_SAVE_OFFSET - (2 * WORDSIZE); // bridge frames save 2 additional GPRs int BRIDGE_FRAME_EXTRA_SIZE = (SSE2_FULL ? XMM_STATE_SIZE : FPU_STATE_SIZE) + (2 * WORDSIZE); int SAVED_GPRS = 2; // EDI and EBX are nonvolatile registers used by baseline compiler int SAVED_GPRS_FOR_SAVE_LS_REGISTERS = 3; // save all non-volatiles Offset EDI_SAVE_OFFSET = Offset.fromIntSignExtend(STACKFRAME_REG_SAVE_OFFSET); Offset EBX_SAVE_OFFSET = Offset.fromIntSignExtend(STACKFRAME_REG_SAVE_OFFSET).minus(WORDSIZE); Offset EBP_SAVE_OFFSET = Offset.fromIntSignExtend(STACKFRAME_REG_SAVE_OFFSET).minus(WORDSIZE*2); Offset T0_SAVE_OFFSET = Offset.fromIntSignExtend(STACKFRAME_FIRST_PARAMETER_OFFSET); Offset T1_SAVE_OFFSET = Offset.fromIntSignExtend(STACKFRAME_FIRST_PARAMETER_OFFSET).minus(WORDSIZE); Offset FPU_SAVE_OFFSET = T1_SAVE_OFFSET.minus(FPU_STATE_SIZE); Offset XMM_SAVE_OFFSET = T1_SAVE_OFFSET.minus(XMM_STATE_SIZE); }