jitopcodes.h

来自「This is a resource based on j2me embedde」· C头文件 代码 · 共 343 行 · 第 1/2 页

H
343
字号
/* * @(#)jitopcodes.h	1.76 03/11/14 * * 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. */#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)#if 0#define IENDINLINING	CVMJIT_ENCODE_END_INLINING(CVM_TYPEID_INT)#define LENDINLINING	CVMJIT_ENCODE_END_INLINING(CVM_TYPEID_LONG)#define FENDINLINING	CVMJIT_ENCODE_END_INLINING(CVM_TYPEID_FLOAT)#define DENDINLINING	CVMJIT_ENCODE_END_INLINING(CVM_TYPEID_DOUBLE)#endif#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)/* SVMC_JIT */#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)#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/* SVMC_JIT rr 2004-01-23: proper typing of  method invocations * INVOKE nodes of float type are not folded any more to integral types */#define INVOKE32I	CVMJIT_ENCODE_INVOKE(CVM_TYPEID_INT)#define INVOKE64I	CVMJIT_ENCODE_INVOKE(CVM_TYPEID_LONG)#define INVOKE32F	CVMJIT_ENCODE_INVOKE(CVM_TYPEID_FLOAT)#define INVOKE64F	CVMJIT_ENCODE_INVOKE(CVM_TYPEID_DOUBLE)#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, \

⌨️ 快捷键说明

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