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

📄 icode.c

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 C
📖 第 1 页 / 共 5 页
字号:
#if defined(HAVE_load_constpool_ref)		slot_slot_const(dst, 0, (jword)l, HAVE_load_constpool_ref, Tnull);#else		{			SlotInfo* tmp;			slot_alloctmp(tmp);			move_label_const(tmp, l);			load_ref(dst, tmp);			slot_freetmp(tmp);		}#endif	}}voidmove_string_const(SlotInfo* dst, void *val){#if 1	move_ref_const(dst, val);#else	label* l;	constpool *c;	SlotInfo* tmp;	c = KaffeJIT3_newConstant(CPstring, val);	l = KaffeJIT3_newLabel();	l->type = Lconstant;	l->at = 0;	l->to = (uintp)c;	l->from = 0;#if defined(HAVE_load_constpool_ref)	slot_slot_const(dst, 0, (jword)l, HAVE_load_constpool_ref, Tnull);#else	slot_alloctmp(tmp);	move_label_const(tmp, l);	load_ref(dst, tmp);	slot_freetmp(tmp);#endif#endif}voidmove_long_const(SlotInfo* dst, jlong val){#if defined(HAVE_move_long_const)	if (HAVE_move_long_const_rangecheck(val)) {		lslot_slot_lconst(dst, 0, val, HAVE_move_long_const, Tconst);	}	else {		constpool *c;		label* l;		SlotInfo* tmp;		c = KaffeJIT3_newConstant(CPlong, val);		l = KaffeJIT3_newLabel();		l->type = Lconstant;		l->at = 0;		l->to = (uintp)c;		l->from = 0;#if defined(HAVE_load_constpool_long)		slot_slot_const(dst, 0, (jword)l, HAVE_load_constpool_long, Tnull);#else		slot_alloctmp(tmp);		move_label_const(tmp, l);		load_long(dst, tmp);		slot_freetmp(tmp);#endif	}#else#if defined(WORDS_BIGENDIAN)	/*	 * Switch the ordering so that we get a better register allocation	 * ordering and don't have to swap immediately afterwards.  (sigh)	 */	move_int_const(HSLOT(dst), (jint)((val >> 32) & 0xFFFFFFFF));	move_int_const(LSLOT(dst), (jint)(val & 0xFFFFFFFF));#else	move_int_const(LSLOT(dst), (jint)(val & 0xFFFFFFFF));	move_int_const(HSLOT(dst), (jint)((val >> 32) & 0xFFFFFFFF));#endif	#endif}voidmove_float_const(SlotInfo* dst, float val){#if defined(HAVE_move_float_const)	if (HAVE_move_float_const_rangecheck(val)) {		slot_slot_fconst(dst, NULL, val, HAVE_move_float_const, Tconst);	}	else#endif	{		constpool *c;		label* l;		c = KaffeJIT3_newConstant(CPfloat, val);		l = KaffeJIT3_newLabel();		l->type = Lconstant;		l->at = 0;		l->to = (uintp)c;		l->from = 0;#if defined(HAVE_load_constpool_float)		slot_slot_const(dst, NULL, (jword)l, HAVE_load_constpool_float, Tnull);#else		{			SlotInfo* tmp;			slot_alloctmp(tmp);			move_label_const(tmp, l);			load_float(dst, tmp);			slot_freetmp(tmp);		}#endif	}}voidmove_double_const(SlotInfo* dst, jdouble val){#if defined(HAVE_move_double_const)	if (HAVE_move_double_const_rangecheck(val)) {		lslot_slot_fconst(dst, NULL, val, HAVE_move_double_const, Tconst);	}	else#endif	{		constpool *c;		label* l;		c = KaffeJIT3_newConstant(CPdouble, val);		l = KaffeJIT3_newLabel();		l->type = Lconstant;		l->at = 0;		l->to = (uintp)c;		l->from = 0;#if defined(HAVE_load_constpool_double)		lslot_lslot_const(dst, 0, (jword)l, HAVE_load_constpool_double, Tnull);#else		{			SlotInfo* tmp;			slot_alloctmp(tmp);			move_label_const(tmp, l);			load_double(dst, tmp);			slot_freetmp(tmp);		}#endif	}}#if defined(HAVE_move_any)voidmove_any(SlotInfo* dst, SlotInfo* src){	if (dst == src) {	}	else if (isGlobal(dst->slot)) {		slot_slot_slot(dst, NULL, src, HAVE_move_any, Tcopy);	}	else {		copyslots(dst, src, Rref);	}}#endif#if defined(HAVE_move_int)voidmove_int(SlotInfo* dst, SlotInfo* src){	if (dst == src) {	}#if defined(HAVE_move_int_const)	else if (slot_type(src) == Tconst) {		move_int_const(dst, slot_value(src)->i);	}#endif	else if (isGlobal(dst->slot)) {		slot_slot_slot(dst, NULL, src, HAVE_move_int, Tcopy);	}	else {		copyslots(dst, src, Rint);	}}#endifvoidmove_ref(SlotInfo* dst, SlotInfo* src){	if (dst == src) {	}#if defined(HAVE_move_ref_const)	else if (slot_type(src) == Tconst) {		move_ref_const(dst, slot_value(src)->l);	}#endif	else if (isGlobal(dst->slot)) {		slot_slot_slot(dst, NULL, src, HAVE_move_ref, Tcopy);	}	else {		copyslots(dst, src, Rref);	}}voidmove_anylong(SlotInfo* dst, SlotInfo* src){#if defined(HAVE_move_anylong)	lslot_lslot_lslot(dst, 0, src, HAVE_move_anylong, Tcopy);#else	assert(LSLOT(dst) != HSLOT(src));	move_any(LSLOT(dst), LSLOT(src));	move_any(HSLOT(dst), HSLOT(src));#endif}voidmove_long(SlotInfo* dst, SlotInfo* src){#if defined(HAVE_move_long)	lslot_lslot_lslot(dst, 0, src, HAVE_move_long, Tcopy);#else	assert(LSLOT(dst) != HSLOT(src));	move_int(LSLOT(dst), LSLOT(src));	move_int(HSLOT(dst), HSLOT(src));#endif}voidmove_float(SlotInfo* dst, SlotInfo* src){	if (dst == src) {	}#if defined(HAVE_move_float_const)	else if (slot_type(src) == Tconst) {		move_float_const(dst, slot_value(src)->f);	}#endif	else if (isGlobal(dst->slot)) {#if defined(HAVE_move_float)		slot_slot_slot(dst, NULL, src, HAVE_move_float, Tcopy);#elif defined(HAVE_NO_FLOATING_POINT)		move_int(dst, src);#else	KAFFEVM_ABORT();#endif	}	else {		copyslots(dst, src, Rfloat);	}}voidmove_double(SlotInfo* dst, SlotInfo* src){	if (dst == src) {	}#if defined(HAVE_move_double_const)	else if (slot_type(src) == Tconst) {		move_double_const(dst, slot_value(src)->d);	}#endif	else if (isGlobal(dst->slot)) {#if defined(HAVE_move_double)		lslot_lslot_lslot(dst, NULL, src, HAVE_move_double, Tcopy);#elif defined(HAVE_NO_FLOATING_POINT) || defined(PS2LINUX)		move_long(dst, src);#else		KAFFEVM_ABORT();#endif	}	else {		copylslots(dst, src, Rdouble);	}}#if defined(HAVE_move_label_const)voidmove_label_const(SlotInfo* dst, label* lab){	slot_slot_const(dst, NULL, (jword)lab, HAVE_move_label_const, Tnull);}#endifvoidswap_any(SlotInfo* src, SlotInfo* src2){#if defined(HAVE_swap_any)	slot_slot_slot(src, 0, src2, HAVE_swap_any, Tcomplex);#else	SlotInfo* tmp;	slot_alloctmp(tmp);	move_ref(tmp, src);	move_ref(src, src2);	move_ref(src2, tmp);	slot_freetmp(tmp);#endif}/* ----------------------------------------------------------------------- *//* Arithmetic operators - add, sub, etc.				   *//*									   */#if defined(HAVE_adc_int)voidadc_int(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){	slot_slot_slot(dst, src, src2, HAVE_adc_int, Tcomplex);}#endif#if defined(HAVE_add_int)void_add_int(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){	slot_slot_slot(dst, src, src2, HAVE_add_int, Tcomm);}voidadd_int_const(SlotInfo* dst, SlotInfo* src, jint val){#if defined(HAVE_add_int_const)	if (HAVE_add_int_const_rangecheck(val)) {		slot_slot_const(dst, src, val, HAVE_add_int_const, Tcomplex);	}	else#endif	{		SlotInfo* tmp;		slot_alloctmp(tmp);		move_int_const(tmp, val);		_add_int(dst, src, tmp);		slot_freetmp(tmp);	}}voidadd_int(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_add_int_const)	if (slot_type(src) == Tconst) {#if 0		/* Disabled as it does not clear Carry and breaks                   add_long() on ARM */		if (slot_type(src2) == Tconst) {			move_int_const(dst, slot_value(src)->i + slot_value(src2)->i);		}		else#endif		{			add_int_const(dst, src2, slot_value(src)->i);		}	}	else if (slot_type(src2) == Tconst) {		add_int_const(dst, src, slot_value(src2)->i);	}	else#endif	_add_int(dst, src, src2);}#endif#if defined(HAVE_add_ref)void_add_ref(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){	slot_slot_slot(dst, src, src2, HAVE_add_ref, Tcomm);}voidadd_ref_const(SlotInfo* dst, SlotInfo* src, jint val){#if defined(HAVE_add_ref_const)	if (HAVE_add_ref_const_rangecheck(val)) {		slot_slot_const(dst, src, val, HAVE_add_ref_const, Tcomplex);	}	else#endif	{		SlotInfo* tmp;		slot_alloctmp(tmp);		move_int_const(tmp, val);		_add_ref(dst, src, tmp);		slot_freetmp(tmp);	}}voidadd_ref(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){	_add_ref(dst, src, src2);}#endif#if defined(HAVE_set_lt_int)voidset_lt_int(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){	slot_slot_slot(dst, src, src2, HAVE_set_lt_int, Tcomplex);}#endif#if defined(HAVE_set_lt_int_const)voidset_lt_int_const(SlotInfo* dst, SlotInfo* src, jint val){	slot_slot_const(dst, src, val, HAVE_set_lt_int_const, Tcomplex);}#endifvoidadd_long(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_add_long)	lslot_lslot_lslot(dst, src, src2, HAVE_add_long, Tcomplex);#elif defined(HAVE_adc_int)	add_int(LSLOT(dst), LSLOT(src), LSLOT(src2));	adc_int(HSLOT(dst), HSLOT(src), HSLOT(src2));#elif defined(HAVE_set_lt_int)	SlotInfo* res,*carry;	slot_alloctmp(res);	slot_alloctmp(carry);	add_int(res, LSLOT(src), LSLOT(src2));	set_lt_int(carry, res, LSLOT(src2));	add_int(carry, HSLOT(src), carry);	add_int(HSLOT(dst), carry, HSLOT(src2));	move_int(LSLOT(dst),res);	slot_freetmp(res);	slot_freetmp(carry);#else	KAFFEVM_ABORT();#endif}#if defined(HAVE_add_long_const)voidadd_long_const(SlotInfo* dst, SlotInfo* src, jlong val){	if (HAVE_add_long_const_rangecheck(val)) {		lslot_lslot_lconst(dst, src, val, HAVE_add_long_const, Tcomplex);	}	else	{		SlotInfo* tmp;		slot_alloctmp(tmp);		move_long_const(tmp, val);		add_long(dst, src, tmp);		slot_freetmp(tmp);	}}#endifvoidadd_float(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_add_float)	slot_slot_slot(dst, src, src2, HAVE_add_float, Tcomplex);#else	begin_func_sync();#if defined(PUSHARG_FORWARDS)	pusharg_float(src, 0);	pusharg_float(src2, 1);#else	pusharg_float(src2, 1);	pusharg_float(src, 0);#endif	call_soft(soft_fadd);	popargs();	end_func_sync();	return_float(dst);#endif}voidadd_double(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_add_double)	lslot_lslot_lslot(dst, src, src2, HAVE_add_double, Tcomplex);#else	begin_func_sync();#if defined(PUSHARG_FORWARDS)	pusharg_double(src, 0);	pusharg_double(src2, pusharg_long_idx_inc);#else	pusharg_double(src2, pusharg_long_idx_inc);	pusharg_double(src, 0);#endif	call_soft(soft_faddl);	popargs();	end_func_sync();	return_double(dst);#endif}#if defined(HAVE_sbc_int)voidsbc_int(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){	slot_slot_slot(dst, src, src2, HAVE_sbc_int, Tcomplex);}#endif#if defined(HAVE_sub_int)void_sub_int(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){	slot_slot_slot(dst, src, src2, HAVE_sub_int, Tcomplex);}voidsub_int_const(SlotInfo* dst, SlotInfo* src, jint val){#if defined(HAVE_sub_int_const)	if (HAVE_sub_int_const_rangecheck(val)) {		slot_slot_const(dst, src, val, HAVE_sub_int_const, Tcomplex);	}	else#endif	{		SlotInfo* tmp;		slot_alloctmp(tmp);		move_int_const(tmp, val);		_sub_int(dst, src, tmp);		slot_freetmp(tmp);	}}voidsub_int(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_sub_int_const)	if (slot_type(src2) == Tconst) {		sub_int_const(dst, src, slot_value(src2)->i);	}	else#endif	_sub_int(dst, src, src2);}#endifvoidsub_long(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_sub_long)	lslot_lslot_lslot(dst, src, src2, HAVE_sub_long, Tcomplex);#elif defined(HAVE_sbc_int)	sub_int(LSLOT(dst), LSLOT(src), LSLOT(src2));	sbc_int(HSLOT(dst), HSLOT(src), HSLOT(src2));#elif defined(HAVE_set_lt_int)        SlotInfo* carry;        slot_alloctmp(carry);        set_lt_int(carry, LSLOT(src), LSLOT(src2));        sub_int(carry, HSLOT(src), carry);        sub_int(HSLOT(dst), carry, HSLOT(src2));        sub_int(LSLOT(dst), LSLOT(src), LSLOT(src2));	slot_freetmp(carry);#else	KAFFEVM_ABORT();#endif}#if defined(HAVE_sub_long_const)voidsub_long_const(SlotInfo* dst, SlotInfo* src, jlong val){	if (HAVE_sub_long_const_rangecheck(val)) {		lslot_lslot_lconst(dst, src, val, HAVE_sub_long_const, Tcomplex);	}	else	{		SlotInfo* tmp;		slot_alloctmp(tmp);		move_long_const(tmp, val);		sub_long(dst, src, tmp);		slot_freetmp(tmp);	}}#endifvoidsub_float(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_sub_float)	slot_slot_slot(dst, src, src2, HAVE_sub_float, Tcomplex);#else	begin_func_sync();#if defined(PUSHARG_FORWARDS)	pusharg_float(src, 0);	pusharg_float(src2, 1);#else	pusharg_float(src2, 1);	pusharg_float(src, 0);#endif	call_soft(soft_fsub);	popargs();	end_func_sync();	return_float(dst);#endif}voidsub_double(SlotInfo* dst, SlotInfo* src, SlotInfo* src2){#if defined(HAVE_sub_double)	lslot_lslot_lslot(dst, src, src2, HAVE_sub_double, Tcomplex);#else	begin_func_sync();#if defined(PUSHARG_FORWARDS)	pusharg_double(src, 0);	pusharg_double(src2, pusharg_long_idx_inc);#else	pusharg_double(src2, pusharg_long_idx_inc);	pusharg_double(src, 0);#endif	call_soft(soft_fsubl);	popargs();	end_func_sync();	return_double(dst);#endif}intmul_int_const_optimize(SlotInfo* dst, SlotInfo* src, jint val){	switch (val) {	case 2:		lshl_int_const(dst, src, 1);		break;	case 4:		lshl_int_const(dst, src, 2);		break;	case 8:		lshl_int_const(dst, src, 3);		break;	case 16:

⌨️ 快捷键说明

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