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

📄 jit-sparc.def

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 DEF
📖 第 1 页 / 共 2 页
字号:
	debug(("srl %s,%s,%s\n", regname(r1), regname(r2), regname(w)));}define_insn(lshl_int, lshl_RRR){	int r1;	int r2;	int w;	r2 = rreg_int(2);	r1 = rreg_int(1);	w = wreg_int(0);	insn_RRR(0x25, w, r1, r2);	debug(("sll %s,%s,%s\n", regname(r1), regname(r2), regname(w)));}define_insn(lshl_int_const, lshl_RRC){	int r;	int o;	int w;	o = const_int(2);	r = rreg_int(1);	w = wreg_int(0);	insn_RRC(2, 0x25, w, r, o);	debug(("sll %s,%d,%s\n", regname(r), o, regname(w)));}/* --------------------------------------------------------------------- */define_insn(load_int, load_RxR){	int r = rreg_int(2);	int w = wreg_int(0);	ldst_RRR(0, w, r, REG_g0);	debug(("ld [%s],%s\n", regname(r), regname(w)));}define_insn(load_offset_int, load_RRC){	int o = const_int(2);	int r = rreg_int(1);	int w = wreg_int(0);	ldst_RRC(0, w, r, o);	debug(("ld %s,[%s+%d]\n", regname(w), regname(r), o));}define_insn(load_float, fload_RxR){	int r = rreg_int(2);	int w = wreg_float(0);	ldst_RRR(0x20, w, r, REG_g0);	debug(("ldf [%s],%s\n", regname(r), fregname(w)));}define_insn(load_double, floadl_RxR){	int r = rreg_int(2);	int w = wreg_double(0);	ldst_RRR(0x20, w, r, REG_g0);	debug(("ldf [%s],%s\n", regname(r), fregname(w)));	ldst_RRC(0x20, w+1, r, 4);	debug(("ldf [%s+4],%s\n", regname(r), fregname(w+1)));}define_insn(load_byte, loadb_RxR){	int r = rreg_int(2);	int w = wreg_int(0);	ldst_RRR(9, w, r, REG_g0);	debug(("ldsb [%s],%s\n", regname(r), regname(w)));}define_insn(load_char, loadc_RxR){	int r = rreg_int(2);	int w = wreg_int(0);	ldst_RRR(2, w, r, REG_g0);	debug(("lduh [%s],%s\n", regname(r), regname(w)));}define_insn(load_short, loads_RxR){	int r = rreg_int(2);	int w = wreg_int(0);	ldst_RRR(0xA, w, r, REG_g0);	debug(("ldsh [%s],%s\n", regname(r), regname(w)));}define_insn(store_int, store_xRR){	int r = rreg_int(2);	int w = rreg_int(1);	ldst_RRR(4, r, w, REG_g0);	debug(("st %s,[%s]\n", regname(r), regname(w)));}define_insn(store_offset_int, store_xRRC){	int o = const_int(2);	int r = rreg_int(1);	int w = rreg_int(0);	ldst_RRC(0x04, w, r, o);	debug(("st %s,[%s+%d]\n", regname(w), regname(r), o));}define_insn(store_float, fstore_xRR){	int r = rreg_float(2);	int w = rreg_int(1);	ldst_RRR(0x24, r, w, REG_g0);	debug(("stf %s,[%s]\n", fregname(r), regname(w)));}define_insn(store_double, fstorel_xRR){	int r = rreg_double(2);	int w = rreg_int(1);	ldst_RRR(0x24, r, w, REG_g0);	debug(("stf %s,[%s]\n", fregname(r), regname(w)));	ldst_RRC(0x24, r+1, w, 4);	debug(("stf %s,[%s+4]\n", fregname(r+1), regname(w)));}define_insn(store_byte, storeb_xRR){	int r = rreg_int(2);	int w = rreg_int(1);	ldst_RRR(5, r, w, REG_g0);	debug(("stb %s,[%s]\n", regname(r), regname(w)));}define_insn(store_short, stores_xRR){	int r = rreg_int(2);	int w = rreg_int(1);	ldst_RRR(6, r, w, REG_g0);	debug(("sth %s,[%s]\n", regname(r), regname(w)));}/* --------------------------------------------------------------------- */define_insn(cmp_int, cmp_xRR){	int r1 = rreg_int(1);	int r2 = rreg_int(2);	insn_RRR(0x14, REG_g0, r1, r2);	debug(("subxx %s,%s,g0\n", regname(r2), regname(r1)));}define_insn(cmp_int_const, cmp_xRC){	int r = rreg_int(1);	int o = const_int(2);	insn_RRC(2, 0x14, REG_g0, r, o);	debug(("subxx %d,%s,g0\n", o, regname(r)));}/* --------------------------------------------------------------------- */define_insn(cvt_int_float, cvtif_RxR){	int r;	int w;	r = rreg_float(2);	w = wreg_float(0);	finsn_RRR(0xC4, w, REG_g0, r);	debug(("fitos %s,%s\n", regname(r), fregname(w)));}define_insn(cvt_int_double, cvtid_RxR){	int r;	int w;	r = rreg_float(2);	w = wreg_double(0);	finsn_RRR(0xC8, w, REG_g0, r);	debug(("fitod %s,%s\n", regname(r), fregname(w)));}define_insn(cvt_float_int, cvtfi_RxR){	int r;	int w;	r = rreg_float(2);	w = wreg_float(0);	finsn_RRR(0xD1, w, REG_g0, r);	debug(("fstoi %s,%s\n", fregname(r), fregname(w)));}define_insn(cvt_double_int, cvtdi_RxR){	int r;	int w;	r = rreg_double(2);	w = wreg_float(0);	finsn_RRR(0xD2, w, REG_g0, r);	debug(("fdtoi %s,%s\n", fregname(r), fregname(w)));}define_insn(cvt_float_double, cvtfd_RxR){	int r;	int w;	r = rreg_float(2);	w = wreg_double(0);	finsn_RRR(0xC9, w, REG_g0, r);	debug(("fstod %s,%s\n", fregname(r), fregname(w)));}define_insn(cvt_double_float, cvtdf_RxR){	int r;	int w;	r = rreg_double(2);	w = wreg_float(0);	finsn_RRR(0xC6, w, REG_g0, r);	debug(("fdtos %s,%s\n", fregname(r), fregname(w)));}/* --------------------------------------------------------------------- */define_insn(build_key, set_word_xxC){	jint val = const_int(2);	LOUT = val;	debug((".word %08x\n", val));}define_insn(build_code_ref, set_wordpc_xxC){	label* l = (label*)const_int(2);	l->type |= Llong|Labsolute;	l->at = (uintp)CODEPC;	LOUT = 0;	l->from = (uintp)CODEPC;	debug((".word ?\n"));}#if 0define_insn(build_const_ref, set_wordconst_xxC){	label* l = (label*)const_int(2);	/* Align data onto relevant boundary */	if (l->size == 2 && ((uintp)CODEPC) % 8 != 0) {		LOUT = 0;	}	l->to = (uintp)CODEPC;	LOUT = l->u.word[0];	debug((".word 0x08x\n", l->u.word[0]));	if (l->size == 2) {		LOUT = l->u.word[1];		debug((".word 0x08x\n", l->u.word[1]));	}}#endif/* --------------------------------------------------------------------- */define_insn(set_label, set_label_xxC){	label* l = (label*)const_int(2);	l->to = (uint32)CODEPC;}define_insn(branch, branch_xCC){	label* l = (label*)const_int(1);	int bt = const_int(2);	l->type |= Llong22|Lrelative;	l->at = (uintp)CODEPC;	l->from = (uintp)CODEPC;	switch (bt) {	case ba:		insn_branch(0x08, 0, 0);		debug(("ba ?\n"));		break;	case beq:		insn_branch(0x01, 0, 0);		debug(("be ?\n"));		break;	case bne:		insn_branch(0x09, 0, 0);		debug(("bne ?\n"));		break;	case blt:		insn_branch(0x03, 0, 0);		debug(("bl ?\n"));		break;	case ble:		insn_branch(0x02, 0, 0);		debug(("ble ?\n"));		break;	case bgt:		insn_branch(0x0a, 0, 0);		debug(("bgt ?\n"));		break;	case bge:		insn_branch(0x0b, 0, 0);		debug(("bge ?\n"));		break;	case bult:		insn_branch(0x05, 0, 0);		debug(("bul ?\n"));		break;	case bugt:		insn_branch(0x0c, 0, 0);		debug(("bugt ?\n"));		break;	default:		ABORT();	}	NOP();}define_insn(branch_indirect, branch_indirect_xRC){	int r = rreg_int(1);	assert(const_int(2) == ba);	insn_RRR(0x38, REG_g0, r, REG_g0);	debug(("jmpl [%s]\n", regname(r)));	NOP();}define_insn(call_ref, call_xCC){	label* l = (label*)const_int(1);	assert(const_int(2) == ba);	l->type |= Llong30|Lrelative;	l->at = (uintp)CODEPC;	l->from = (uintp)CODEPC;		insn_call(0);	debug(("call ?\n"));	NOP();}define_insn(call, call_xRC){	int r = rreg_int(1);	assert(const_int(2) == ba);	insn_RRR(0x38, REG_o7, r, REG_g0);	debug(("jmpl [%s],o7\n", regname(r)));	NOP();}define_insn(push_int, push_xRC){	int r;	int a;	int w;	a = const_int(2);	r = rreg_int(1);	if (a < 6) {		w = REG_o0 + a;		if (r != w) {			clobberRegister(w);			insn_RRR(2, w, r, REG_g0);			debug(("mov %s,%s\n", regname(r), regname(w)));		}	}	else {		w = SLOT2PUSHOFFSET(a);		ldst_RRC(0x04, r, REG_sp, w);		debug(("st %s,[sp+%d]\n", regname(r), w));	}	argcount++;}define_insn(push_float, fpush_xRC){	int r;	int a;	int w;	a = const_int(2);	if (a < 6) {		r = rreg_int(1);		w = REG_o0 + a;		if (r != w) {			clobberRegister(w);			insn_RRR(2, w, r, REG_g0);			debug(("mov %s,%s\n", regname(r), regname(w)));		}	}	else {		r = rreg_float(1);		w = SLOT2PUSHOFFSET(a);		ldst_RRC(0x24, r, REG_sp, w);		debug(("stf %s,[sp+%d]\n", fregname(r), w));	}	argcount++;}define_insn(push_double, fpushl_xRC){	int r;	int a;	int w;	a = const_int(2);	if (a < 6) {		w = REG_o0 + a;		r = rslot_double(1);		clobberRegister(w);		ldst_RRC(0, w, REG_fp, r);		debug(("ld %s,[fp+%d]\n", regname(w), r));	}	else {		r = rreg_double(1);		w = SLOT2PUSHOFFSET(a);		ldst_RRC(0x24, r, REG_sp, w);		debug(("stf %s,[sp+%d]\n", fregname(r), w));	}	a++;	if (a < 6) {		w = REG_o0 + a;		r = rslot_double(1);		clobberRegister(w);		ldst_RRC(0, w, REG_fp, r+4);		debug(("ld %s,[fp+%d]\n", regname(w), r+4));	}	else {		r = rreg_double(1);		w = SLOT2PUSHOFFSET(a);		ldst_RRC(0x24, r+1, REG_sp, w);		debug(("stf %s,[sp+%d]\n", fregname(r+1), w));	}	argcount += 2;}define_insn(popargs, popargs_xxC){	argcount = 0;}define_insn(return_int, return_Rxx){	forceRegister(seq_dst(s), REG_o0, Rint);}define_insn(return_long, returnl_Rxx){	forceRegister(seq_dst(s), REG_o0, Rint);	forceRegister(seq_dst(s)+1, REG_o1, Rint);}define_insn(return_float, freturn_Rxx){	forceRegister(seq_dst(s), REG_f0, Rfloat);}define_insn(return_double, freturnl_Rxx){	forceRegister(seq_dst(s), REG_f0, Rdouble);}define_insn(returnarg_int, returnarg_xxR){	int r = rreg_int(2);	insn_RRR(2, REG_i0, r, REG_g0);}define_insn(returnarg_long, returnargl_xxR){	int r1;	int r2;	SlotInfo* r;	r = seq_slot(s, 2);	r1 = _slowSlotRegister(r, Rint, rread);	r2 = _slowSlotRegister(r+1, Rint, rread);	if (REG_i0 != r2) {		insn_RRR(2, REG_i0, r1, REG_g0);		insn_RRR(2, REG_i1, r2, REG_g0);	}	else if (REG_i1 != r1) {		insn_RRR(2, REG_i1, r2, REG_g0);		insn_RRR(2, REG_i0, r1, REG_g0);	}	else {		/* swap i0 <-> i1 */		insn_RRR(3, r1, r1, r2);		debug(("xor %s,%s,%s\n", regname(r1), regname(r2), regname(r1)));		insn_RRR(3, r2, r1, r2);		debug(("xor %s,%s,%s\n", regname(r1), regname(r2), regname(r2)));		insn_RRR(3, r1, r1, r2);		debug(("xor %s,%s,%s\n", regname(r1), regname(r2), regname(r1)));	}}define_insn(returnarg_float, freturnarg_xxR){	int r = rreg_float(2);	finsn_RRR(1, 0 /* REG_f0 */, 0, r);	debug(("fmovs %s,%s\n", regname(REG_f0), fregname(r)));}define_insn(returnarg_double, freturnargl_xxR){	int r = rreg_double(2);	finsn_RRR(1, 0 /* REG_f0 */, 0, r);	finsn_RRR(1, 1 /* REG_f1 */, 0, r+1);	debug(("fmovs %s,%s\n", regname(REG_f0), fregname(r)));	debug(("fmovs %s,%s\n", regname(REG_f1), fregname(r+1)));}

⌨️ 快捷键说明

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