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

📄 icode.h

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * icode.h * Define the instruction codes macros. * * 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 __icode_h#define	__icode_h#include "config.h"#include "config-int.h"#include "slots.h"#include "soft.h"#define  JINT_MIN        INT32_MIN#define  JLONG_MIN       INT64_MIN#if defined(KAFFE_VMDEBUG)static const int32 UNINITIALIZED_STACK_SLOT = 0x00c0ffee;#endif#define	move_long_const(t, c)			(t)[0].v.tlong = (c)#define	add_long(t, f1, f2)			(t)[0].v.tlong = (f1)[0].v.tlong + (f2)[0].v.tlong#define	sub_long(t, f1, f2)			(t)[0].v.tlong = (f1)[0].v.tlong - (f2)[0].v.tlong#define	mul_long(t, f1, f2)			(t)[0].v.tlong = (f1)[0].v.tlong * (f2)[0].v.tlong#define div_long(t, f1, f2)			(t)[0].v.tlong = (((((f1)[0].v.tlong) == JLONG_MIN) && (((f2)[0].v.tlong) == -1)) ? JLONG_MIN : (((f1)[0].v.tlong) / ((f2)[0].v.tlong)))#define rem_long(t, f1, f2)                     (t)[0].v.tlong = ((((f2)[0].v.tlong) != -1) ? (((f1)[0].v.tlong) % ((f2)[0].v.tlong)) : 0)#define	neg_long(t, f)				(t)[0].v.tlong = -(f)[0].v.tlong#define	and_long(t, f1, f2)			(t)[0].v.tlong = (f1)[0].v.tlong & (f2)[0].v.tlong#define	or_long(t, f1, f2)			(t)[0].v.tlong = (f1)[0].v.tlong | (f2)[0].v.tlong#define	xor_long(t, f1, f2)			(t)[0].v.tlong = (f1)[0].v.tlong ^ (f2)[0].v.tlong#define	lshl_long(t, f1, f2)			(t)[0].v.tlong = ((f1)[0].v.tlong) << ((f2)[0].v.tint & 63)#define	ashr_long(t, f1, f2)			(t)[0].v.tlong = ((int64)(f1)[0].v.tlong) >> ((f2)[0].v.tint & 63)#define	lshr_long(t, f1, f2)			(t)[0].v.tlong = ((uint64)(f1)[0].v.tlong) >> ((f2)[0].v.tint & 63)#define	lcmp(t, f1, f2)				do { jlong l2 = ((f2)[0].v.tlong); jlong l1 = ((f1)[0].v.tlong); \						(t)[0].v.tint = ((l1 == l2)? 0 : ((l1 > l2) ? -1 : 1)); } while(0);#define	cvt_int_long(t, f)			(t)[0].v.tlong = (f)[0].v.tint#define	cvt_long_int(t, f)			(t)[0].v.tint = (f)[0].v.tlong#define	cvt_long_float(t, f)			(t)[0].v.tfloat = (f)[0].v.tlong#define	cvt_long_double(t, f)			(t)[0].v.tdouble = (f)[0].v.tlong#define	cvt_float_long(t, f)			(t)[0].v.tlong = soft_cvtfl((f)[0].v.tfloat)#define	cvt_double_long(t, f)			(t)[0].v.tlong = soft_cvtdl((f)[0].v.tdouble)#define	move_int_const(t, c)			(t)[0].v.tint = (c)#define	move_ref_const(t, c)			(t)[0].v.taddr = (void*)(c)#define	move_label_const(t, c)			move_ref_const(t, c)#define	move_string_const(t, c)			move_ref_const(t, c)#define	move_int(t, f)				(t)[0].v.tint = (f)[0].v.tint#define	move_ref(t, f)				(t)[0].v.taddr = (f)[0].v.taddr#define	move_any(t, f)				move_long(t, f)#define	swap_any(t1, t2)			{			\						  tmp[0] = (t1)[0];	\						  (t1)[0] = (t2)[0];	\						  (t2)[0] = tmp[0];	\						}#define	load_int(t, f)				(t)[0].v.tint = *(jint*)((f)[0].v.taddr)#define	load_ref(t, f)				(t)[0].v.taddr = *(void**)((f)[0].v.taddr)#define	load_byte(t, f)				(t)[0].v.tint = *(jbyte*)((f)[0].v.taddr)#define	load_char(t, f)				(t)[0].v.tint = *(jchar*)((f)[0].v.taddr)#define	store_int(t, f)				*(jint*)((t)[0].v.taddr) = ((f)[0].v.tint)#define	store_ref(t, f)				*(void**)((t)[0].v.taddr) = ((f)[0].v.taddr)#define	store_byte(t, f)			*(jbyte*)((t)[0].v.taddr) = ((f)[0].v.tint)#define	store_char(t, f)			*(jchar*)((t)[0].v.taddr) = ((f)[0].v.tint)#define	load_any(t, f)				load_int(t, f)#define load_offset_any(t, f, o)		load_offset_int(t, f, o)#define	store_any(t, f)				store_int(t, f)#define store_offset_any(t, f, o)		store_offset_int(t, f, o)#define	add_int_const(t, f, c)			(t)[0].v.tint = ((f)[0].v.tint) + (c)#define	add_ref_const(t, f, c)			(t)[0].v.taddr = (void*)((uint8*)((f)[0].v.taddr) + (c))#define	sub_int_const(t, f, c)			(t)[0].v.tint = ((f)[0].v.tint) - (c)#define	mul_int_const(t, f, c)			(t)[0].v.tint = ((f)[0].v.tint) * (c)#define	add_int(t, f1, f2)			(t)[0].v.tint = ((f1)[0].v.tint) + ((f2)[0].v.tint)#define	add_ref(t, f1, f2)			(t)[0].v.taddr = (void*)((uint8*)((f1)[0].v.taddr) + ((f2)[0].v.tint))#define	sub_int(t, f1, f2)			(t)[0].v.tint = ((f1)[0].v.tint) - ((f2)[0].v.tint)#define	mul_int(t, f1, f2)			(t)[0].v.tint = ((f1)[0].v.tint) * ((f2)[0].v.tint)#define div_int(t, f1, f2)			(t)[0].v.tint = (((((f1)[0].v.tint) == JINT_MIN) && (((f2)[0].v.tint) == -1)) ? JINT_MIN : (((f1)[0].v.tint) / ((f2)[0].v.tint)))#define rem_int(t, f1, f2)                      (t)[0].v.tint = ((((f2)[0].v.tint) != -1) ? (((f1)[0].v.tint) % ((f2)[0].v.tint)) : 0)#define	neg_int(t, f)				(t)[0].v.tint = -((f)[0].v.tint)#define	lshl_int_const(t, f, c)			(t)[0].v.tint = ((f)[0].v.tint) << (c & 31)#define	lshl_int(t, f1, f2)			(t)[0].v.tint = ((f1)[0].v.tint) << ((f2)[0].v.tint & 31)#define	ashr_int(t, f1, f2)			(t)[0].v.tint = ((int32)(f1)[0].v.tint) >> ((f2)[0].v.tint & 31)#define	lshr_int(t, f1, f2)			(t)[0].v.tint = ((uint32)(f1)[0].v.tint) >> ((f2)[0].v.tint & 31)#define	and_int(t, f1, f2)			(t)[0].v.tint = ((f1)[0].v.tint) & ((f2)[0].v.tint)#define	or_int(t, f1, f2)			(t)[0].v.tint = ((f1)[0].v.tint) | ((f2)[0].v.tint)#define	xor_int(t, f1, f2)			(t)[0].v.tint = ((f1)[0].v.tint) ^ ((f2)[0].v.tint)#define	cvt_int_byte(t, f)			(t)[0].v.tint = (((f)[0].v.tint) << 24) >> 24#define	cvt_int_char(t, f)			(t)[0].v.tint = ((f)[0].v.tint) & 0xFFFF#define	cvt_int_short(t, f)			(t)[0].v.tint = (((f)[0].v.tint) << 16) >> 16#define	branch_indirect(w)			w#define	branch_a(w)				w#define	cbranch_int_eq(s1, s2, w)		if ((s1)[0].v.tint == (s2)[0].v.tint) w#define	cbranch_int_ne(s1, s2, w)		if ((s1)[0].v.tint != (s2)[0].v.tint) w#define	cbranch_int_lt(s1, s2, w)		if ((s1)[0].v.tint < (s2)[0].v.tint) w#define	cbranch_int_le(s1, s2, w)		if ((s1)[0].v.tint <= (s2)[0].v.tint) w#define	cbranch_int_gt(s1, s2, w)		if ((s1)[0].v.tint > (s2)[0].v.tint) w#define	cbranch_int_ge(s1, s2, w)		if ((s1)[0].v.tint >= (s2)[0].v.tint) w#define	cbranch_int_ult(s1, s2, w)		if ((unsigned int)(s1)[0].v.tint < (unsigned int)(s2)[0].v.tint) w#define	cbranch_int_const_eq(s1, s2, w)		if ((s1)[0].v.tint == (s2)) w#define	cbranch_int_const_ne(s1, s2, w)		if ((s1)[0].v.tint != (s2)) w#define	cbranch_int_const_lt(s1, s2, w)		if ((s1)[0].v.tint < (s2)) w#define	cbranch_int_const_le(s1, s2, w)		if ((s1)[0].v.tint <= (s2)) w#define	cbranch_int_const_gt(s1, s2, w)		if ((s1)[0].v.tint > (s2)) w#define	cbranch_int_const_ge(s1, s2, w)		if ((s1)[0].v.tint >= (s2)) w#define	cbranch_int_const_ult(s1, s2, w)	if ((unsigned int)(s1)[0].v.tint < (unsigned int)(s2)) w#define cbranch_ref_eq(s1, s2, w)		if ((s1)[0].v.taddr == (s2)[0].v.taddr) w#define cbranch_ref_ne(s1, s2, w)		if ((s1)[0].v.taddr != (s2)[0].v.taddr) w#define cbranch_ref_const_eq(s1, s2, w)		if ((s1)[0].v.taddr == (void*)(s2)) w#define cbranch_ref_const_ne(s1, s2, w)		if ((s1)[0].v.taddr != (void*)(s2)) w#define	call(m)					softcall_initialise_class(method_class()); \						virtualMachine((methods*)(m)[0].v.taddr, sp+1, retval, thread_data)#define	call_indirect_method(m)			softcall_initialise_class(method_class()); \						virtualMachine(m, sp+1, retval, thread_data)#define	ret()					goto end#define exit_method()				do { } while(0)#define	returnarg_int(s)			retval[0].v.tint = (s)[0].v.tint#define	returnarg_ref(s)			retval[0].v.taddr = (s)[0].v.taddr#define	returnarg_long(s)			retval[0].v.tlong = (s)[0].v.tlong#define	returnarg_float(s)			retval[0].v.tfloat = (s)[0].v.tfloat#define	returnarg_double(s)			retval[0].v.tdouble = (s)[0].v.tdouble#define	pusharg_int_const(c, i)			/* Not needed for interpreter */#define	pusharg_int(f, i)			/* Not needed for interpreter */#define	pusharg_ref(f, i)			/* Not needed for interpreter */#define	pusharg_ref_const(f, i)			/* Not needed for interpreter */#define	pusharg_any(f, i)			/* Not needed for interpreter */#define	pusharg_anylong(f, i)			/* Not needed for interpreter */#define	popargs()				/* Not needed for interpreter */#define	return_int(s)				(s)[0].v.tint = retval[0].v.tint#define	return_long(s)				(s)[0].v.tlong = retval[0].v.tlong#define	return_float(s)				(s)[0].v.tfloat = retval[0].v.tfloat#define	return_double(s)			(s)[0].v.tdouble = retval[0].v.tdouble#define	return_ref(s)				(s)[0].v.taddr = retval[0].v.taddr#define	monitor_enter()				/* Not needed for interpreter */#define	monitor_exit()				/* Not needed for interpreter */#define	start_function()			/* Not needed for interpreter */#define	start_basic_block()			/* Not needed for interpreter */#define	end_basic_block()			/* Not needed for interpreter */#define	end_function()				/* Not needed for interpreter */#define	start_sub_block()			/* Not needed for interpreter */#define	end_sub_block()				/* Not needed for interpreter */#define	begin_func_sync()			/* Not needed for interpreter */#define	end_func_sync()				/* Not needed for interpreter */#define	begin_sync()				/* Not needed for interpreter */#define	end_sync()				/* Not needed for interpreter */#define	set_label(i, l)				label_##i##l:#define	reference_code_label(l)			npc = (l)#define	reference_label(i, l)			goto label_##i##l#define	reference_table_label(l)		&code[npc]#define	stored_code_label(l)			npc = (l)[0].v.tint#define	table_code_label(l)			npc = (l)[0].v.tint + pc#define	load_key(t, f)				(t)[0].v.tint = \						 ((((uint8*)(f)->v.taddr)[0] << 24) | \

⌨️ 快捷键说明

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