⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jitopcodes.h

📁 This is a resource based on j2me embedded,if you dont understand,you can connection with me .
💻 H
字号:
/* * @(#)jitopcodes.h	1.82 06/10/10 * * Copyright  1990-2008 Sun Microsystems, Inc. All Rights Reserved.   * 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.  * */#ifndef _INCLUDED_JITOPCODES_H#define _INCLUDED_JITOPCODES_H#include "javavm/include/jit/jitir.h"/* Define additional node typetags that will be used by the grammar rules: */#define CVMJITCG_TYPEID_64BITS_VOLATILE (CVMJIT_TYPEID_LAST_PREDEFINED_TYPE + 1)/* * CVMJITgetMassagedIROpcode - Massage IR opcodes to forms that fit * the needs of the jit backend. */extern intCVMJITgetMassagedIROpcode(CVMJITCompilationContext *con, CVMJITIRNode *ip);/* * This file contains the shorthand names for opcode values that the * IR-to-codegen parser will use. * * In order to make IR parsing easier and faster, it is based * totally on syntax. Sometimes, we want to look at semantics, too. * This is what CVMGCGetMassagedIROpcode does for us: it maps * the IR node opcode space into a slightly different space. For example, * many machines can use small constants as immediate operands, where * the meaning of "small" is very machine dependent. On the other hand, * sometimes the difference between data types is uninteresting, if all * we care about is the size. * * This is the version common to RISC CPUs. */#define CVMJIT_ENCODE_LUNARY(opcodeTag) \	CVMJIT_TYPE_ENCODE(opcodeTag, CVMJIT_UNARY_NODE, CVM_TYPEID_LONG)#define CVMJIT_ENCODE_LBINARY(opcodeTag) \	CVMJIT_TYPE_ENCODE(opcodeTag, CVMJIT_BINARY_NODE, CVM_TYPEID_LONG)#define CVMJIT_ENCODE_FUNARY(opcodeTag) \	CVMJIT_TYPE_ENCODE(opcodeTag, CVMJIT_UNARY_NODE, CVM_TYPEID_FLOAT)#define CVMJIT_ENCODE_FBINARY(opcodeTag) \	CVMJIT_TYPE_ENCODE(opcodeTag, CVMJIT_BINARY_NODE, CVM_TYPEID_FLOAT)#define CVMJIT_ENCODE_DUNARY(opcodeTag) \	CVMJIT_TYPE_ENCODE(opcodeTag, CVMJIT_UNARY_NODE, CVM_TYPEID_DOUBLE)#define CVMJIT_ENCODE_DBINARY(opcodeTag) \	CVMJIT_TYPE_ENCODE(opcodeTag, CVMJIT_BINARY_NODE, CVM_TYPEID_DOUBLE)/* The first several are standard. We can break this up soon */#define NULLCHECK       CVMJIT_ENCODE_NULL_CHECK#define ISEQUENCE_R	CVMJIT_ENCODE_SEQUENCE_R(CVM_TYPEID_INT)#define LSEQUENCE_R	CVMJIT_ENCODE_SEQUENCE_R(CVM_TYPEID_LONG)#define FSEQUENCE_R	CVMJIT_ENCODE_SEQUENCE_R(CVM_TYPEID_FLOAT)#define DSEQUENCE_R	CVMJIT_ENCODE_SEQUENCE_R(CVM_TYPEID_DOUBLE)#define VSEQUENCE_R	CVMJIT_ENCODE_SEQUENCE_R(CVM_TYPEID_NONE)#define ISEQUENCE_L	CVMJIT_ENCODE_SEQUENCE_L(CVM_TYPEID_INT)#define LSEQUENCE_L	CVMJIT_ENCODE_SEQUENCE_L(CVM_TYPEID_LONG)#define FSEQUENCE_L	CVMJIT_ENCODE_SEQUENCE_L(CVM_TYPEID_FLOAT)#define DSEQUENCE_L	CVMJIT_ENCODE_SEQUENCE_L(CVM_TYPEID_DOUBLE)#define VSEQUENCE_L	CVMJIT_ENCODE_SEQUENCE_L(CVM_TYPEID_NONE)#define VENDINLINING	CVMJIT_ENCODE_END_INLINING_LEAF#define LOCAL32		CVMJIT_ENCODE_ILOCAL#define LOCAL64		CVMJIT_ENCODE_LOCAL(CVM_TYPEID_LONG)#define STATIC32	CVMJIT_ENCODE_STATIC_FIELD_REF(CVM_TYPEID_INT)#define STATIC64	CVMJIT_ENCODE_STATIC_FIELD_REF(CVM_TYPEID_LONG)#define STATIC64VOL	CVMJIT_ENCODE_STATIC_FIELD_REF(CVMJITCG_TYPEID_64BITS_VOLATILE)#define INDEX   	CVMJIT_ENCODE_INDEX#define BOUNDS_CHECK	CVMJIT_ENCODE_BOUNDS_CHECK#define FIELDREFOBJ     CVMJIT_ENCODE_FIELD_REF(CVM_TYPEID_OBJ)#define FIELDREF32	CVMJIT_ENCODE_FIELD_REF(CVM_TYPEID_INT)#define FIELDREF64	CVMJIT_ENCODE_FIELD_REF(CVM_TYPEID_LONG)#define FIELDREF64VOL	CVMJIT_ENCODE_FIELD_REF(CVMJITCG_TYPEID_64BITS_VOLATILE)#define EXCEPTION_OBJECT CVMJIT_ENCODE_EXCEPTION_OBJECT#define DEFINE_VALUE32	CVMJIT_ENCODE_DEFINE(CVM_TYPEID_INT)#define DEFINE_VALUE64	CVMJIT_ENCODE_DEFINE(CVM_TYPEID_LONG)#define FDEFINE		CVMJIT_ENCODE_DEFINE(CVM_TYPEID_FLOAT)#define DDEFINE		CVMJIT_ENCODE_DEFINE(CVM_TYPEID_DOUBLE)#define LOAD_PHIS       CVMJIT_ENCODE_LOAD_PHIS#define RELEASE_PHIS    CVMJIT_ENCODE_RELEASE_PHIS#define ICONSTANT32	CVMJIT_ENCODE_CONST_JAVA_NUMERIC32(CVM_TYPEID_INT)#define ALENGTH		CVMJIT_ENCODE_ARRAY_LENGTH#define INEG32		CVMJIT_ENCODE_IUNARY(CVMJIT_NEG)#define NOT32	        CVMJIT_ENCODE_IUNARY(CVMJIT_NOT)#define INT2BIT32	CVMJIT_ENCODE_IUNARY(CVMJIT_INT2BIT)#define IADD32		CVMJIT_ENCODE_IBINARY(CVMJIT_ADD)#define ISUB32		CVMJIT_ENCODE_IBINARY(CVMJIT_SUB)#define IMUL32		CVMJIT_ENCODE_IBINARY(CVMJIT_MUL)#define IDIV32		CVMJIT_ENCODE_IBINARY(CVMJIT_DIV)#define IREM32		CVMJIT_ENCODE_IBINARY(CVMJIT_REM)#define AND32		CVMJIT_ENCODE_IBINARY(CVMJIT_AND)#define OR32		CVMJIT_ENCODE_IBINARY(CVMJIT_OR)#define XOR32		CVMJIT_ENCODE_IBINARY(CVMJIT_XOR)#define SLL32		CVMJIT_ENCODE_IBINARY(CVMJIT_SHL)#define SRL32		CVMJIT_ENCODE_IBINARY(CVMJIT_USHR)#define SRA32		CVMJIT_ENCODE_IBINARY(CVMJIT_SHR)#define INEG64		CVMJIT_ENCODE_LUNARY(CVMJIT_NEG)#define IADD64		CVMJIT_ENCODE_LBINARY(CVMJIT_ADD)#define ISUB64		CVMJIT_ENCODE_LBINARY(CVMJIT_SUB)#define IMUL64		CVMJIT_ENCODE_LBINARY(CVMJIT_MUL)#define IDIV64		CVMJIT_ENCODE_LBINARY(CVMJIT_DIV)#define IREM64		CVMJIT_ENCODE_LBINARY(CVMJIT_REM)#define AND64		CVMJIT_ENCODE_LBINARY(CVMJIT_AND)#define OR64		CVMJIT_ENCODE_LBINARY(CVMJIT_OR)#define XOR64		CVMJIT_ENCODE_LBINARY(CVMJIT_XOR)#define SLL64		CVMJIT_ENCODE_LBINARY(CVMJIT_SHL)#define SRL64		CVMJIT_ENCODE_LBINARY(CVMJIT_USHR)#define SRA64		CVMJIT_ENCODE_LBINARY(CVMJIT_SHR)#undef  FADD#undef  FSUB#undef  FMUL#undef  FDIV#define FNEG            CVMJIT_ENCODE_FUNARY(CVMJIT_NEG)#define FADD            CVMJIT_ENCODE_FBINARY(CVMJIT_ADD)#define FSUB            CVMJIT_ENCODE_FBINARY(CVMJIT_SUB)#define FMUL            CVMJIT_ENCODE_FBINARY(CVMJIT_MUL)#define FDIV            CVMJIT_ENCODE_FBINARY(CVMJIT_DIV)#define FREM            CVMJIT_ENCODE_FBINARY(CVMJIT_REM)#define DNEG            CVMJIT_ENCODE_DUNARY(CVMJIT_NEG)#define DADD            CVMJIT_ENCODE_DBINARY(CVMJIT_ADD)#define DSUB            CVMJIT_ENCODE_DBINARY(CVMJIT_SUB)#define DMUL            CVMJIT_ENCODE_DBINARY(CVMJIT_MUL)#define DDIV            CVMJIT_ENCODE_DBINARY(CVMJIT_DIV)#define DREM            CVMJIT_ENCODE_DBINARY(CVMJIT_REM)#define INSTANCEOF	CVMJIT_ENCODE_INSTANCEOF#ifdef CVM_JIT_USE_FP_HARDWARE#define FINVOKE		CVMJIT_ENCODE_INVOKE(CVM_TYPEID_FLOAT)#define DINVOKE		CVMJIT_ENCODE_INVOKE(CVM_TYPEID_DOUBLE)#endif#define IINVOKE		CVMJIT_ENCODE_INVOKE(CVM_TYPEID_INT)#define LINVOKE		CVMJIT_ENCODE_INVOKE(CVM_TYPEID_LONG)#define VINVOKE		CVMJIT_ENCODE_INVOKE(CVM_TYPEID_VOID)#define VINTRINSIC      CVMJIT_ENCODE_INTRINSIC(CVM_TYPEID_VOID)#define INTRINSIC32     CVMJIT_ENCODE_INTRINSIC(CVM_TYPEID_INT)#define INTRINSIC64     CVMJIT_ENCODE_INTRINSIC(CVM_TYPEID_LONG)#define IARG            CVMJIT_ENCODE_IARG(CVM_TYPEID_VOID)#define NULL_IARG       CVMJIT_ENCODE_NULL_IARG/* conversion operators. */#define I2C             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_I2C, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_INT)#define I2S             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_I2S, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_INT)#define I2B             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_I2B, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_INT)#define I2L		CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_INTEGER, \				CVMJIT_UNARY_NODE, CVM_TYPEID_LONG)#define I2F		CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_INTEGER, \				CVMJIT_UNARY_NODE, CVM_TYPEID_FLOAT)#define I2D		CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_INTEGER, \				CVMJIT_UNARY_NODE, CVM_TYPEID_DOUBLE)#define L2I		CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_LONG, \				CVMJIT_UNARY_NODE, CVM_TYPEID_INT)#define L2F		CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_LONG, \				CVMJIT_UNARY_NODE, CVM_TYPEID_FLOAT)#define L2D		CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_LONG, \				CVMJIT_UNARY_NODE, CVM_TYPEID_DOUBLE)#define F2D             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_FLOAT, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_DOUBLE)#define F2I             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_FLOAT, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_INT)#define F2L             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_FLOAT, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_LONG)#define D2F             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_DOUBLE, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_FLOAT)#define D2I             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_DOUBLE, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_INT)#define D2L             CVMJIT_TYPE_ENCODE(CVMJIT_CONVERT_DOUBLE, \                                CVMJIT_UNARY_NODE, CVM_TYPEID_LONG)/* * Address-like constant's */#define METHOD_BLOCK	    CVMJIT_ENCODE_CONST_MB#define CLASS_BLOCK  	    CVMJIT_ENCODE_CONST_CB#define STRING_ICELL_CONST  CVMJIT_ENCODE_CONST_STRING_ICELL#define NEW_OBJECT	    CVMJIT_ENCODE_NEW_OBJECT#define NEW_ARRAY_REF	    CVMJIT_ENCODE_NEW_ARRAY_REF#define MULTI_NEW_ARRAY_REF CVMJIT_ENCODE_MULTIANEW_ARRAY#define NEW_ARRAY_BASIC	    CVMJIT_ENCODE_NEW_ARRAY_BASIC(CVM_T_INT)#define GET_VTBL	    CVMJIT_ENCODE_GET_VTBL#define GET_ITBL	    CVMJIT_ENCODE_GET_ITBL#define FETCH_MB_FROM_VTABLE CVMJIT_ENCODE_FETCH_MB_FROM_VTABLE#define FETCH_MB_FROM_ITABLE CVMJIT_ENCODE_FETCH_MB_FROM_INTERFACETABLE/* #ifdef IAI_VIRTUAL_INLINE_CB_TEST */#define FETCH_VCB CVMJIT_ENCODE_FETCH_VCB#define FETCH_MB_FROM_VTABLE_OUTOFLINE	 \	CVMJIT_ENCODE_FETCH_MB_FROM_VTABLE_OUTOFLINE	#define MB_TEST_OUTOFLINE	CVMJIT_ENCODE_MB_TEST_OUTOFLINE/* #endif *//* BCOND binary nodes */#define BCOND_INT      	CVMJIT_ENCODE_BCOND(CVM_TYPEID_INT)#define BCOND_LONG      CVMJIT_ENCODE_BCOND(CVM_TYPEID_LONG)#define BCOND_FLOAT     CVMJIT_ENCODE_BCOND(CVM_TYPEID_FLOAT)#define BCOND_DOUBLE    CVMJIT_ENCODE_BCOND(CVM_TYPEID_DOUBLE)/* generic. should be typeless. */#define TABLESWITCH     CVMJIT_ENCODE_TABLESWITCH#define LOOKUPSWITCH    CVMJIT_ENCODE_LOOKUPSWITCH#define CHECKCAST	CVMJIT_ENCODE_CHECKCAST#define JSR		CVMJIT_ENCODE_BRANCH(CVMJIT_JSR)#define JSR_RETURN_ADDRESS CVMJIT_ENCODE_JSR_RETURN_ADDRESS#define RET		CVMJIT_ENCODE_RET#define GOTO		CVMJIT_ENCODE_BRANCH(CVMJIT_GOTO)#define RETURN		CVMJIT_ENCODE_RETURN#define IRETURN		CVMJIT_ENCODE_IRETURN#define FRETURN		CVMJIT_ENCODE_FRETURN#define ARETURN		CVMJIT_ENCODE_ARETURN#define LRETURN         CVMJIT_ENCODE_LRETURN#define DRETURN         CVMJIT_ENCODE_DRETURN#define ATHROW		CVMJIT_ENCODE_ATHROW/* for some things, we care only about size,   so simplify by throwing away type info */#define FETCH32		CVMJIT_ENCODE_FETCH(CVM_TYPEID_INT)#define FETCH64		CVMJIT_ENCODE_FETCH(CVM_TYPEID_LONG)#define IDENT32		CVMJIT_ENCODE_IUNARY(CVMJIT_IDENTITY)#define IDENT64		CVMJIT_ENCODE_LUNARY(CVMJIT_IDENTITY)#define FIDENT		CVMJIT_ENCODE_FUNARY(CVMJIT_IDENTITY)#define DIDENT		CVMJIT_ENCODE_DUNARY(CVMJIT_IDENTITY)#define USED32		CVMJIT_ENCODE_USED(CVM_TYPEID_INT)#define USED64		CVMJIT_ENCODE_USED(CVM_TYPEID_LONG)#define FUSED		CVMJIT_ENCODE_USED(CVM_TYPEID_FLOAT)#define DUSED		CVMJIT_ENCODE_USED(CVM_TYPEID_DOUBLE)/* for some other things, we care much more about specific values *//* Use values that will not be in the usual opcode space */#define ICONST_32	ICONSTANT32#define ICONST_64	CVMJIT_ENCODE_CONST_JAVA_NUMERIC64(CVM_TYPEID_LONG)/* some things seem to have no type at all. */#define	ASSIGN		CVMJIT_ENCODE_ASSIGN(CVM_TYPEID_NONE)#ifdef CVM_JIT_USE_FP_HARDWARE#define FPARAMETER	CVMJIT_ENCODE_PARAMETER(CVM_TYPEID_FLOAT)#define DPARAMETER	CVMJIT_ENCODE_PARAMETER(CVM_TYPEID_DOUBLE)#endif#define IPARAMETER	CVMJIT_ENCODE_PARAMETER(CVM_TYPEID_INT)#define LPARAMETER	CVMJIT_ENCODE_PARAMETER(CVM_TYPEID_LONG)#define NULL_PARAMETER	CVMJIT_ENCODE_NULL_PARAMETER#define MONITOR_ENTER	CVMJIT_ENCODE_MONITOR_ENTER#define MONITOR_EXIT	CVMJIT_ENCODE_MONITOR_EXIT#define MAP_PC		CVMJIT_ENCODE_MAP_PC#define BEGININLINING        CVMJIT_ENCODE_BEGIN_INLINING#define OUTOFLINEINVOKE      CVMJIT_ENCODE_OUTOFLINE_INVOKE#define RESOLVE_REF     CVMJIT_ENCODE_RESOLVE_REFERENCE#define CHECKINIT       CVMJIT_ENCODE_CLASS_CHECKINIT#define LCMP            CVMJIT_ENCODE_IBINARY(CVMJIT_LCMP)#define FCMPL           CVMJIT_ENCODE_IBINARY(CVMJIT_FCMPL)#define FCMPG           CVMJIT_ENCODE_IBINARY(CVMJIT_FCMPG)#define DCMPL           CVMJIT_ENCODE_IBINARY(CVMJIT_DCMPL)#define DCMPG           CVMJIT_ENCODE_IBINARY(CVMJIT_DCMPG)#endif /* _INCLUDED_JITOPCODES_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -