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