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

📄 icode.h

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 H
📖 第 1 页 / 共 2 页
字号:
						 (((uint8*)(f)->v.taddr)[1] << 16) | \						 (((uint8*)(f)->v.taddr)[2] << 8) | \						 ((uint8*)(f)->v.taddr)[3])#define	load_code_ref				load_key#define	softcall_breakpoint()			KAFFEVM_ABORT()#define	move_double(t, f)			(t)[0].v.tdouble = (f)[0].v.tdouble#define	move_double_const(t, c)			(t)[0].v.tdouble = (c)#define	move_float(t, f)			(t)[0].v.tfloat = (f)[0].v.tfloat#define	move_float_const(t, c)			(t)[0].v.tfloat = (c)#define	move_long(t, f)				(t)[0].v.tlong = (f)[0].v.tlong#define	move_anylong(t, f)			move_long(t, f)#define	load_short(t, f)			(t)[0].v.tint = *(jshort*)((f)[0].v.taddr)#define	load_long(t, f)				(t)[0].v.tlong = *(jlong*)((f)[0].v.taddr)#define	load_anylong(t, f)			load_long(t, f)#define	load_float(t, f)			(t)[0].v.tfloat = *(jfloat*)((f)[0].v.taddr)#define	load_double(t, f)			(t)[0].v.tdouble = *(jdouble*)((f)[0].v.taddr)#define	store_short(t, f)			*(jshort*)((t)[0].v.taddr) = ((f)[0].v.tint)#define	store_long(t, f)			*(jlong*)((t)[0].v.taddr) = ((f)[0].v.tlong)#define	store_anylong(t, f)			store_long(t, f)#define	store_float(t, f)			*(jfloat*)((t)[0].v.taddr) = ((f)[0].v.tfloat)#define	store_double(t, f)			*(jdouble*)((t)[0].v.taddr) = ((f)[0].v.tdouble)#define	load_offset_int(t, f, o)		(t)[0].v.tint = *(jint*)((uint8*)(f)[0].v.taddr + (o))#define	load_offset_byte(t, f, o)		(t)[0].v.tint = *(jbyte*)((uint8*)(f)[0].v.taddr + (o))#define	load_offset_char(t, f, o)		(t)[0].v.tint = *(jchar*)((uint8*)(f)[0].v.taddr + (o))#define	load_offset_short(t, f, o)		(t)[0].v.tint = *(jshort*)((uint8*)(f)[0].v.taddr + (o))#define	load_offset_ref(t, f, o)		(t)[0].v.taddr = *(void**)((uint8*)(f)[0].v.taddr + (o))#define	load_offset_long(t, f, o)		(t)[0].v.tlong = *(jlong*)((uint8*)(f)[0].v.taddr + (o))#define	load_offset_float(t, f, o)		(t)[0].v.tfloat = *(jfloat*)((uint8*)(f)[0].v.taddr + (o))#define	load_offset_double(t, f, o)		(t)[0].v.tdouble = *(jdouble*)((uint8*)(f)[0].v.taddr + (o))#define	store_offset_int(t, o, f)		*(jint*)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.tint)#define	store_offset_byte(t, o, f)		*(jbyte*)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.tint)#define	store_offset_char(t, o, f)		*(jchar*)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.tint)#define	store_offset_short(t, o, f)		*(jshort*)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.tint)#define	store_offset_ref(t, o, f)		*(void**)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.taddr)#define	store_offset_long(t, o, f)		*(jlong*)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.tlong)#define	store_offset_float(t, o, f)		*(jfloat*)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.tfloat)#define	store_offset_double(t, o, f)		*(jdouble*)((uint8*)(t)[0].v.taddr + (o)) = ((f)[0].v.tdouble)#define	load_offset_scaled_int(t, b, i, o)	(t)[0].v.tint = ((jint*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	load_offset_scaled_byte(t, b, i, o)	(t)[0].v.tint = ((jbyte*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	load_offset_scaled_char(t, b, i, o)	(t)[0].v.tint = ((jchar*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	load_offset_scaled_short(t, b, i, o)	(t)[0].v.tint = ((jshort*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	load_offset_scaled_ref(t, b, i, o)	(t)[0].v.taddr = ((void**)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	load_offset_scaled_long(t, b, i, o)	(t)[0].v.tlong = ((jlong*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	load_offset_scaled_float(t, b, i, o)	(t)[0].v.tfloat = ((jfloat*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	load_offset_scaled_double(t, b, i, o)	(t)[0].v.tdouble = ((jdouble*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint]#define	store_offset_scaled_int(b, i, o, f)	((jint*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.tint)#define	store_offset_scaled_byte(b, i, o, f)	((jbyte*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.tint)#define	store_offset_scaled_char(b, i, o, f)	((jchar*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.tint)#define	store_offset_scaled_short(b, i, o, f)	((jshort*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.tint)#define	store_offset_scaled_ref(b, i, o, f)	((void**)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.taddr)#define	store_offset_scaled_long(b, i, o, f)	((jlong*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.tlong)#define	store_offset_scaled_float(b, i, o, f)	((jfloat*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.tfloat)#define	store_offset_scaled_double(b, i, o, f)	((jdouble*)((uint8*)(b)[0].v.taddr + (o)))[(i)[0].v.tint] = ((f)[0].v.tdouble)#define	load_addr_int(t, a)	(t)[0].v.tint = *(jint*)(a)#define	load_addr_byte(t, a)	(t)[0].v.tint = *(jbyte*)(a)#define	load_addr_char(t, a)	(t)[0].v.tint = *(jchar*)(a)#define	load_addr_short(t, a)	(t)[0].v.tint = *(jshort*)(a)#define	load_addr_ref(t, a)	(t)[0].v.taddr = *(void**)(a)#define	load_addr_long(t, a)	(t)[0].v.tlong = *(jlong*)(a)#define	load_addr_float(t, a)	(t)[0].v.tfloat = *(jfloat*)(a)#define	load_addr_double(t, a)	(t)[0].v.tdouble = *(jdouble*)(a)#define	store_addr_int(a, f)	*(jint*)(a) = (f)[0].v.tint#define	store_addr_byte(a, f)	*(jbyte*)(a) = (f)[0].v.tint#define	store_addr_char(a, f)	*(jchar*)(a) = (f)[0].v.tint#define	store_addr_short(a, f)	*(jshort*)(a) = (f)[0].v.tint#define	store_addr_ref(a, f)	*(void**)(a) = (f)[0].v.taddr#define	store_addr_long(a, f)	*(jlong*)(a) = (f)[0].v.tlong#define	store_addr_float(a, f)	*(jfloat*)(a) = (f)[0].v.tfloat#define	store_addr_double(a, f)	*(jdouble*)(a) = (f)[0].v.tdouble#define	add_float(t, f1, f2)			(t)[0].v.tfloat = (f1)[0].v.tfloat + (f2)[0].v.tfloat#define	add_double(t, f1, f2)			(t)[0].v.tdouble = (f1)[0].v.tdouble + (f2)[0].v.tdouble#define	sub_float(t, f1, f2)			(t)[0].v.tfloat = (f1)[0].v.tfloat - (f2)[0].v.tfloat#define	sub_double(t, f1, f2)			(t)[0].v.tdouble = (f1)[0].v.tdouble - (f2)[0].v.tdouble#define	mul_float(t, f1, f2)			(t)[0].v.tfloat = (f1)[0].v.tfloat * (f2)[0].v.tfloat#define	mul_double(t, f1, f2)			(t)[0].v.tdouble = (f1)[0].v.tdouble * (f2)[0].v.tdouble#define	div_float(t, f1, f2)			(t)[0].v.tfloat = (f1)[0].v.tfloat / (f2)[0].v.tfloat#define	div_double(t, f1, f2)			(t)[0].v.tdouble = (f1)[0].v.tdouble / (f2)[0].v.tdouble#define	rem_float(t, f1, f2)			(t)[0].v.tfloat = javaRemainderf((f1)[0].v.tfloat, (f2)[0].v.tfloat)#define	rem_double(t, f1, f2)			(t)[0].v.tdouble = javaRemainder((f1)[0].v.tdouble, (f2)[0].v.tdouble)#define	neg_float(t, f)				(t)[0].v.tfloat = -(f)[0].v.tfloat#define	neg_double(t, f)			(t)[0].v.tdouble = -(f)[0].v.tdouble#define	cmpg_float(t, f1, f2)			(t)[0].v.tint = soft_fcmpg((f1)[0].v.tfloat, (f2)[0].v.tfloat)#define	cmpg_double(t, f1, f2)			(t)[0].v.tint = soft_dcmpg((f1)[0].v.tdouble, (f2)[0].v.tdouble)#define	cmpl_float(t, f1, f2)			(t)[0].v.tint = soft_fcmpl((f1)[0].v.tfloat, (f2)[0].v.tfloat)#define	cmpl_double(t, f1, f2)			(t)[0].v.tint = soft_dcmpl((f1)[0].v.tdouble, (f2)[0].v.tdouble)#define	cvt_int_float(t, f)			(t)[0].v.tfloat = (f)[0].v.tint#define	cvt_int_double(t, f)			(t)[0].v.tdouble = (f)[0].v.tint#define	cvt_float_int(t, f)			(t)[0].v.tint = soft_cvtfi((f)[0].v.tfloat)#define	cvt_float_double(t, f)			(t)[0].v.tdouble = (f)[0].v.tfloat#define	cvt_double_int(t, f)			(t)[0].v.tint = soft_cvtdi((f)[0].v.tdouble)#define	cvt_double_float(t, f)			(t)[0].v.tfloat = (f)[0].v.tdouble#define	softcall_lookupinterfacemethod(r, n, t)	(r)[0].v.taddr = soft_lookupinterfacemethod((t)[0].v.taddr, (n)->class, (n)->idx)#define	softcall_new(r, t)			(r)->v.taddr = soft_new(t)#define	softcall_newarray(r, s, t)		(r)->v.taddr = soft_newarray(t, (s)->v.tint)#define	softcall_anewarray(r, s, t)		(r)->v.taddr = soft_anewarray(t, (s)->v.tint)#define	softcall_athrow(s)			soft_athrow((s)[0].v.taddr)#define	softcall_checkcast(n, o, t)		soft_checkcast(t, (o)->v.taddr)#define softcall_initialise_class(cl)		soft_initialise_class(cl)#define	softcall_instanceof(r, o, t)		(r)->v.tint = soft_instanceof(t, (o)->v.taddr)/* Thread.stop() knows how to back out of java frames, so we do not * want to disable stop here */#define	softcall_monitorenter(o)		lockObject((o)[0].v.taddr)#define	softcall_monitorexit(o)			unlockObject((o)[0].v.taddr)#define	softcall_multianewarray(r, z, s, t)	(r)->v.taddr = soft_multianewarray(t, z, s); \						pop((z) - 1)#define	softcall_badarrayindex()		soft_badarrayindex()#define	softcall_nullpointer()			soft_nullpointer()#define	softcall_nosuchmethod(c,n,s)		soft_nosuchmethod(c,n,s)#define	softcall_nosuchfield(c,n)		soft_nosuchfield(c,n)#define	softcall_linkage(c,n)			soft_linkage(c,n)#define	softcall_illegalaccess(c,n)		soft_illegalaccess(c,n)#define	softcall_nosuchclass(c)			soft_nosuchclass(c)#define	softcall_checkarraystore(a, o)		soft_checkarraystore((a)[0].v.taddr, (o)[0].v.taddr)#define	softcall_addreference(f, t)		soft_addreference((f)[0].v.taddr, (t)[0].v.taddr)#define	softcall_addreference_static(f, t)	soft_addreference((f), (t)[0].v.taddr)#define softcall_incompatibleclasschange(a,b)	soft_incompatibleclasschange(a,b)#define	softcall_abstractmethod(a,b)		soft_abstractmethod(a,b)#define	adjustpc(a)				/* Not needed for interpreter *//* check if an array index is out of bounds. * * it is out of bounds if the index is less then zero * or if it is larger or equal to the size of the array * to be indexed. */ static inline void check_array_index(const slots* array_slot, 				     const slots* index_slot){	const jint array_index = index_slot->v.tint;	const void* array_reference = array_slot->v.taddr;#if defined(KAFFE_VMDEBUG)	/* Make sure that array reference is valid.	 * Check for NULL first. 	 *	 * The check only works in debug mode, as on most 	 * platforms we rely on the MMU to detect NULL.	 */	assert(array_reference != NULL);	/* Then check if array_reference 	 * comes from an uninitialized stack slot.	 *	 * The check only works in debug mode, as then the 	 * stack is filled with 0xc0ffee.	 */	assert(array_reference != (void *) UNINITIALIZED_STACK_SLOT);#endif	if (array_index < 0 ||	    array_index >= ARRAY_SIZE(array_reference))	{		soft_badarrayindex();	}}#define	build_call_frame(SIG, OBJ, NRARGS)	/* Not needed for interpreter */#endif

⌨️ 快捷键说明

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