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 + -
显示快捷键?