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

📄 constpool.h

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 H
字号:
/* constpool.h * Manage the constant pool. * * Copyright (c) 1996, 1997 *	Transvirtual Technologies, Inc.  All rights reserved. * * See the file "license.terms" for information on usage and redistribution  * of this file.  */#ifndef __jit_constpool_h#define __jit_constpool_h/* * The per-method constant pool is used to store large constants used by a * method that cannot be inlined in the instruction stream.  For example, on a * RISC CPU, like the PowerPC, only 16 bit immediates can be stored in the * instruction stream.  Therefore, we prepend a block of constants to the * generated code so that the method can reference them using pc-relative * addressing. *//** * Constant pool value types: *   CPint - A jint *   CPlong - A jlong *   CPref - A void * *   CPfloat - A float *   CPdouble - A double *   CPstring - A char * XXX ??? *   CPlabel - A void * XXX ??? */enum {	CP_min,		CPint,	CPlong,	CPref,	CPfloat,	CPdouble,	CPstring,	CPlabel,		CP_max,};/** * The constpool structure is a linked list node that is used to track the * constants that will be placed in the block. * * next - Link to the next constpool in the list. * at - The location of the constant in the constpool.  This value is not *   generated until establishConstants() is called, which is after the *   instructions have been generated, but before labels have been linked. * type - The type of constant, needs to be one of the above CP* values. * val - The constant's value. */typedef struct _constpool {	struct _constpool* next;	uintp		   at;	int		   type;	union _constpoolval {		jint	   i;		jlong	   l;		void*	   r;		float	   f;		double	   d;	} val;} constpool;#define ALLOCCONSTNR	64/** * constpools are allocated and tracked as part of a chunk as represented by * this structure. * * next - Link to the next chunk in the list. * data - The constpools contained in the chunk. */typedef struct _constpoolchunk {	struct _constpoolchunk *next;	constpool data[ALLOCCONSTNR];} constpoolchunk;/** * Allocate a new constpool object and link it in to the global list. * * @param type Type of value to store in the constpool. * @param ...  The value to store. * * Example: *   newConstant(CPint, 256); */constpool* KaffeJIT3_newConstant(int type, ...);/** * Copy the list of constant values to the given location and update the "at" * values in the constpool objects. * * @param at The location of the constant pool for the current method. */void KaffeJIT3_establishConstants(void *at);/** * Reset the constant pool global data structures for a new method. */void KaffeJIT3_resetConstants(void);/** * Return the number of constants allocated since the last resetConstants. */uint32 KaffeJIT3_getNumberOfConstants(void);/** * Return the first constpool object. */constpool* KaffeJIT3_getFirstConst(void);/** * Return the current constpool object. */constpool* KaffeJIT3_getCurrConst(void);#endif

⌨️ 快捷键说明

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