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

📄 registers.h

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 H
字号:
/* registers.h * Instruction macros to extract information. * * 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 __registers_h#define __registers_h/* Register types */#define	Reserved		0x80#define	Rglobal			0x40#define	Rint			0x01#define	Rlong			0x02#define	Rfloat			0x04#define	Rdouble			0x08#define	Rref			0x10#define	Rsubint			0x00 /* jit3: 0x20 *//* Register flags *//* NB. Currently we do not support preserving values in registers across *     function calls (which is a pity on the SPARC) because it causes *     problems with exception handling.  This needs to be fixed! */#define	Rreadonce		0x01#define	Rnosaveoncall		0x00 /* 0x02 *//* Information about the state of a particular register. */typedef struct _kregs {	/* The slot whose value is in this register. */	SlotInfo*		slot;	uint8			ctype;	uint8			type;	uint8			flags;	uint32			used;	uint8			regno;} kregs;extern kregs* KaffeVM_jitGetRegInfo(void);#define	register_invalidate(r)	KaffeVM_jitGetRegInfo()[r].slot = NOSLOT/* reserve a register */#define        register_reserve(r)     (KaffeVM_jitGetRegInfo()[r].type |= Reserved)#define        register_unreserve(r)   (KaffeVM_jitGetRegInfo()[r].type &= ~Reserved)#define	MAXREG			NR_REGISTERS#define	NOREG			MAXREG#define	SLOT2FRAMEOFFSET(_s)				\	(((_s) - slotinfo < maxArgs) ? 			\		SLOT2ARGOFFSET((_s) - slotinfo) :	\		SLOT2LOCALOFFSET((_s) - slotinfo))void	spill(SlotInfo*);void	reload(SlotInfo*);extern void slot_kill_readonce(SlotInfo*);#if defined(HAVE_kill_readonce_register)extern void HAVE_kill_readonce_register(SlotInfo *s);#endifvoid	initRegisters(void);int	slowSlotRegister(SlotInfo*, int, int);int	fastSlotRegister(SlotInfo*, int, int);void	clobberRegister(int);void	forceRegister(SlotInfo*, int, int);int	slowSlotOffset(SlotInfo*, int, int);extern void KaffeVM_jitSetIdealReg(int reg);extern int KaffeVM_jitGetEnableReadonce(void);extern void KaffeVM_jitSetEnableReadonce(int enable);#define	rread			1#define	rwrite			2#define	rnowriteback		4#define _slotInRegister(_s, _t)					\	((KaffeVM_jitGetRegInfo()[(_s)->regno].type & (_t)) == (_t))#define slotInRegister(_i, _t)					\	_slotInRegister(seq_slot(s, _i), _t)#define	_slowSlotRegister(_s, _t, _u)				\	(_slotInRegister(_s, _t) ? 				\	 fastSlotRegister(_s, _t, _u) :				\	 slowSlotRegister(_s, _t, _u))#define	rreg_int(i)		_slowSlotRegister(seq_slot(s, i), Rint, rread)#define	wreg_int(i)		_slowSlotRegister(seq_slot(s, i), Rint, rwrite)#define	rwreg_int(i)		_slowSlotRegister(seq_slot(s, i), Rint, rread|rwrite)#define	rslot_int(i)		slowSlotOffset(seq_slot(s, i), Rint, rread)#define	wslot_int(i)		slowSlotOffset(seq_slot(s, i), Rint, rwrite)#define	rreg_ref(i)		_slowSlotRegister(seq_slot(s, i), Rref, rread)#define	wreg_ref(i)		_slowSlotRegister(seq_slot(s, i), Rref, rwrite)#define	rwreg_ref(i)		_slowSlotRegister(seq_slot(s, i), Rref, rread|rwrite)#define	rslot_ref(i)		slowSlotOffset(seq_slot(s, i), Rref, rread)#define	wslot_ref(i)		slowSlotOffset(seq_slot(s, i), Rref, rwrite)#define	rreg_long(i)		_slowSlotRegister(seq_slot(s, i), Rlong, rread)#define	wreg_long(i)		_slowSlotRegister(seq_slot(s, i), Rlong, rwrite)#define	rwreg_long(i)		_slowSlotRegister(seq_slot(s, i), Rlong, rread|rwrite)#define	rslot_long(i)		slowSlotOffset(seq_slot(s, i), Rlong, rread)#define	wslot_long(i)		slowSlotOffset(seq_slot(s, i), Rlong, rwrite)#define	rreg_float(i)		_slowSlotRegister(seq_slot(s, i), Rfloat, rread)#define	wreg_float(i)		_slowSlotRegister(seq_slot(s, i), Rfloat, rwrite)#define	rwreg_float(i)		_slowSlotRegister(seq_slot(s, i), Rfloat, rread|rwrite)#define	rslot_float(i)		slowSlotOffset(seq_slot(s, i), Rfloat, rread)#define	wslot_float(i)		slowSlotOffset(seq_slot(s, i), Rfloat, rwrite)#define	rreg_double(i)		_slowSlotRegister(seq_slot(s, i), Rdouble, rread)#define	wreg_double(i)		_slowSlotRegister(seq_slot(s, i), Rdouble, rwrite)#define	rwreg_double(i)		_slowSlotRegister(seq_slot(s, i), Rdouble, rread|rwrite)#define	rslot_double(i)		slowSlotOffset(seq_slot(s, i), Rdouble, rread)#define	wslot_double(i)		slowSlotOffset(seq_slot(s, i), Rdouble, rwrite)#define	sreg_int(i)		rreg_int(i)#define	sreg_ref(i)		rreg_ref(i)#define	sreg_long(i)		rreg_long(i)#define	sreg_float(i)		rreg_float(i)#define	sreg_double(i)		rreg_double(i)#define	lreg_int(i)		wreg_int(i)#define	lreg_ref(i)		wreg_ref(i)#define	lreg_long(i)		wreg_long(i)#define	lreg_float(i)		wreg_float(i)#define	lreg_double(i)		wreg_double(i)#define	const_int(i)		s->u[i].iconst#define const_long(i)		s->u[i].lconst#define const_label(i)		s->u[i].labconst#define const_method(i)		s->u[i].methconst#define	const_float(i)		s->u[i].fconst#define	const_double(i)		s->u[i].fconst#endif

⌨️ 快捷键说明

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