jitcodesched.h
来自「This is a resource based on j2me embedde」· C头文件 代码 · 共 414 行 · 第 1/2 页
H
414 行
/* * @(#)jitcodesched.h 1.7 06/10/10 * * Portions Copyright 2000-2008 Sun Microsystems, Inc. All Rights * Reserved. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program 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 program 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 at /legal/license.txt). * * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. * *//* * Copyright 2005 Intel Corporation. All rights reserved. */#ifndef _INCLUDED_JITCODESCHEDMAN_H#define _INCLUDED_JITCODESCHEDMAN_H#include "javavm/include/defs.h"#include "javavm/include/jit/jit_defs.h"#include "javavm/include/jit/jit.h"#include "javavm/include/jit/jitset.h"#ifdef IAI_CODE_SCHEDULER_SCORE_BOARD#define CVMJITCS_EMIT_LOAD_CONSTANT_INSTRUCTION (1 << 0)#define CVMJITCS_EMIT_BRANCH_INSTRUCTION (1 << 1)#define CVMJITCS_EMIT_PATCHED_INSTRUCTION (1 << 2)#define CVMJITCS_EMIT_CAPTURE_STACKMAP (1 << 3)#define CVMJITCS_EMIT_MAPPC (1 << 4)#define CVMJITCS_EMIT_PATCH_INSTRUCTION (1 << 5)#define CVMJITCS_EMIT_BEGIN_INLINING (1 << 6)#define CVMJITCS_EMIT_END_INLINING (1 << 7)/* NOTE: this eventually needs to be moved to the porting layer * if we ever support code scheduling in a platform other than ARM.*/#define CVM_CPU_NUM_REGISTERS 16typedef struct CVMJITCSPatchInstruction CVMJITCSPatchInstruction;typedef struct { CVMUint32 startPC; CVMUint32 endPC;} CVMJITCSConstantPoolDumpInfo;struct CVMJITCSContext{ CVMUint32 curBlockLogicalPC; CVMUint32 instructionFlags; CVMCPUInstruction nop; CVMInt32 destRegister; CVMInt32 destRegister2; CVMUint32 statusPC; CVMUint32 exceptionPC; CVMUint32 strPC; CVMUint32 branchPC; CVMUint32 comparePC; CVMInt8 sourceRegsNum; CVMInt8 sourceRegisters[3]; CVMUint32 getFieldPC; CVMUint32 putFieldPC; CVMUint32 putStaticFieldPC; CVMUint32 getStaticFieldPC; CVMUint32 getArrayElementPC; CVMUint32 putArrayElementPC; CVMUint32 baseRegister; CVMUint32 frameIndex; CVMInt8 outGoingRegisters[CVM_CPU_NUM_REGISTERS]; CVMUint32 defRegistersPC[CVM_CPU_NUM_REGISTERS]; CVMUint32 useRegistersPC[CVM_CPU_NUM_REGISTERS]; CVMUint32 emitInPlaceCount; CVMUint32 *defJavaFrameBasedReferencePC; CVMUint32 *useJavaFrameBasedReferencePC; CVMUint32 branchInstructionTargetOffset; CVMBool branchInstructionLink; CVMCPUCondCode branchInstructionCondCode; CVMJITGrowableArray nopsArray; CVMJITGrowableArray constantPoolArray; CVMUint32 topOfInstructions; CVMJITCSPatchInstruction* instructionsStack;};#define CVMJITcsContext(_con) (&((_con)->csContext))#define CVMJITCS_EMIT_INPLACE (1 << 0)#define CVMJITCS_EMIT_INSERT (1 << 1)#define CVMJITCS_EMIT_PATCH (1 << 2)#define CVMJITCS_LOAD_INSTRUCTION (1 << 3)#define CVMJITCS_STORE_INSTRUCTION (1 << 4)#define CVMJITCS_BRANCH_INSTRUCTION (1 << 5)#define CVMJITCS_STATUS_INSTRUCTION (1 << 6)#define CVMJITCS_COMPARE_INSTRUCTION (1 << 7)#define CVMJITCS_NEEDFIXUP_INSTRUCTION (1 << 8)#define CVMJITCS_PUTFIELD_INSTRUCTION (1 << 9)#define CVMJITCS_GETFIELD_INSTRUCTION (1 << 10)#define CVMJITCS_PUTARRAY_INSTRUCTION (1 << 11)#define CVMJITCS_GETARRAY_INSTRUCTION (1 << 12)#define CVMJITCS_GETSTATIC_INSTRUCTION (1 << 13)#define CVMJITCS_PUTSTATIC_INSTRUCTION (1 << 14)#define CVMJITCS_EXCEPTION_INSTRUCTION (1 << 15)#define CVMJITCS_ARRAYINDEXOUTOF_INSTRUCTION (1 << 16)#define CVMJITCS_TEMP_LOCAL_NUM 3#define CVMJITcsClearInstructionFlags(con) \ (CVMJITcsContext(con)->instructionFlags &= CVMJITCS_EMIT_INPLACE)#define CVMJITcsIsArrayIndexOutofBoundsBranch(con)\ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_ARRAYINDEXOUTOF_INSTRUCTION)#define CVMJITcsIsEmitInPlace(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_EMIT_INPLACE)#define CVMJITcsIsEmitPatchInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_EMIT_PATCH)#define CVMJITcsIsEmitInsertInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_EMIT_INSERT)#define CVMJITcsIsLoadInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_LOAD_INSTRUCTION)#define CVMJITcsIsStoreInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_STORE_INSTRUCTION)#define CVMJITcsIsStatusInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_STATUS_INSTRUCTION)#define CVMJITcsIsBranchInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_BRANCH_INSTRUCTION)#define CVMJITcsIsCompareInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_COMPARE_INSTRUCTION)#define CVMJITcsIsNeedFixupInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_NEEDFIXUP_INSTRUCTION)#define CVMJITcsIsPutFieldInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_PUTFIELD_INSTRUCTION)#define CVMJITcsIsGetFieldInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_GETFIELD_INSTRUCTION)#define CVMJITcsIsPutArrayInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_PUTARRAY_INSTRUCTION)#define CVMJITcsIsGetArrayInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_GETARRAY_INSTRUCTION)#define CVMJITcsIsExceptionInstruction(con) \ (CVMJITcsContext(con)->instructionFlags & CVMJITCS_EXCEPTION_INSTRUCTION)#define CVMJITcsSetEmitPatchInstruction(con) \ (CVMJITcsContext(con)->instructionFlags |= CVMJITCS_EMIT_PATCH)#define CVMJITcsSetEmitInsertInstruction(con) \ (CVMJITcsContext(con)->instructionFlags |= CVMJITCS_EMIT_INSERT)#define CVMJITcsSetEmitInPlace(con) \ { \ CVMJITcsContext(con)->emitInPlaceCount ++; \ CVMassert(CVMJITcsContext(con)->emitInPlaceCount > 0); \ CVMJITcsContext(con)->instructionFlags |= CVMJITCS_EMIT_INPLACE; \ }#define CVMJITcsSetEmitInPlaceWithBufSizeAdjust(con, flag, size) \ { \ CVMJITcsContext(con)->emitInPlaceCount ++; \ CVMassert(CVMJITcsContext(con)->emitInPlaceCount > 0); \ CVMJITcsContext(con)->instructionFlags |= CVMJITCS_EMIT_INPLACE; \ if (flag) {\ {\ CVMUint32 _i = 0;\ for (_i = 0; _i < size; _i += sizeof(CVMCPUInstruction)) {\ CVMJITcbufEmitPC(con, ((CVMUint32)CVMJITcbufGetLogicalPC(con) + _i),\ CVMJITcsContext(con)->nop);\ }\ }\ CVMJITcbufGetLogicalPC(con) += size;\ CVMJITcbufGetPhysicalPC(con) =\ CVMJITcbufLogicalToPhysical(con, CVMJITcbufGetLogicalPC(con));\ }\ }#define CVMJITcsClearEmitPatchInstruction(con) \ (CVMJITcsContext(con)->instructionFlags &= ~CVMJITCS_EMIT_PATCH)#define CVMJITcsClearEmitInsertInstruction(con) \ (CVMJITcsContext(con)->instructionFlags &= ~CVMJITCS_EMIT_INSERT)#define CVMJITcsClearEmitInPlace(con) \ { \ CVMassert(CVMJITcsContext(con)->emitInPlaceCount > 0); \ CVMJITcsContext(con)->emitInPlaceCount --; \ if (CVMJITcsContext(con)->emitInPlaceCount == 0) { \ CVMJITcsContext(con)->instructionFlags &= ~CVMJITCS_EMIT_INPLACE; \ } \ }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?