亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? machine.c

?? 基于LWVCL開發的庫
?? C
?? 第 1 頁 / 共 3 頁
字號:
	leaveTranslator();#if defined(KAFFE_FEEDBACK)	if( kaffe_feedback_file )		unlockMutex(kaffe_feedback_file);#endifdone3:;	unlockClass(xmeth->class);#if defined(ENABLE_JVMPI)	if (success && JVMPI_EVENT_ISENABLED(JVMPI_EVENT_COMPILED_METHOD_LOAD) )	  {	    JVMPI_Event ev;	    jvmpiFillMethodLoad(&ev, xmeth);	    jvmpiPostEvent(&ev);	  }#endif	return (success);}voidKaffeJIT3_cleanupInsnSequence(){  sequence *s;  for (s = firstSeq; s != currSeq; s = s->next)    {      if (s->func != doSpill)	continue;            /* According to doSpill */      gc_free(s->u[1].smask);    }   initSeq();}/* * Generate the code. */jbooleanfinishInsnSequence(void* dummy UNUSED, nativeCodeInfo* code, errorInfo* einfo){	uint32 constlen;	jitCodeHeader *jch;	nativecode* methblock;	jboolean success;	uintp const_align = sizeof(union _constpoolval) - 1;	/* Emit pending instructions */	success = generateInsnSequence(einfo);	if (success == false) {		return (false);	}	relinkFakeCalls();	/* Okay, put this into malloc'ed memory. We allocate some more	 * memory for alignment purpose. */	constlen = KaffeJIT3_getNumberOfConstants() * sizeof(union _constpoolval); 	methblock = gc_malloc(sizeof(jitCodeHeader) +			      constlen + const_align +			      CODEPC,			      KGC_ALLOC_JITCODE);	if (methblock == 0) {		postOutOfMemory(einfo);		return (false);	}	jch = (jitCodeHeader *)methblock;	jch->pool = (void *)(jch + 1);	jch->pool = (void *) ( ((unsigned long)(jch->pool) + const_align) & ~const_align);	jch->code_start = ((nativecode *)jch->pool) + constlen;	jch->code_len = CODEPC;	memcpy(jch->code_start, codeblock, jch->code_len);	gc_free(codeblock);	/* Establish any code constants */	KaffeJIT3_establishConstants(jch->pool);	/* Link it */	KaffeJIT3_linkLabels((uintp)jch->code_start);	/* Note info on the compiled code for later installation */	code->mem = methblock;	code->memlen = constlen + CODEPC;	code->code = jch->code_start;	code->codelen = CODEPC;	return (true);}/* * Get the instruction offset corresponding to the given PC. * If the PC doesn't point at the start of a valid instruction, * look forward until we find one. If we reach the end of the * method, we return code->codelen */staticintgetInsnPC(int _pc, codeinfo* _codeInfo, nativeCodeInfo *code){	int maxPc = _codeInfo->codelen;	while (_pc < maxPc) {		if (IS_STARTOFINSTRUCTION(_pc)) {			int res = INSNPC(_pc);			if (res != -1) {				return (res);			}		}		_pc ++;	}	return code->codelen;}/* * Install the compiled code in the method. * Returns true if successful */voidinstallMethodCode(void* ignore UNUSED, Method* meth, nativeCodeInfo* code){	uint32 i;	jexceptionEntry* e;	jitCodeHeader *jch;	void *tramp;#if defined(KAFFE_XPROFILER) || defined(KAFFE_XDEBUGGING)	struct mangled_method *mm = 0;#endif#if defined(KAFFE_FEEDBACK)	char *sym = 0;#endif	/* Work out new estimate of code per bytecode */	code_generated += code->memlen;	bytecode_processed += METHOD_BYTECODE_LEN(meth);	/* When using GCJ, the only use for the translator may be to output	 * JNI wrappers which have zero bytecode ;-); hence the test	 */	if (bytecode_processed > 0) {		codeperbytecode = code_generated / bytecode_processed;	}	//KGC_WRITE(meth, code->mem);	jch = (jitCodeHeader *)code->mem;	jch->method = meth;	tramp = METHOD_NATIVECODE(meth);	SET_METHOD_JITCODE(meth, code->code);	setMethodCodeStart(meth, code->mem);	meth->c.ncode.ncode_end = (void*)((uintp)code->code + code->codelen);	#if defined(KAFFE_FEEDBACK)	if( kaffe_feedback_file && !meth->class->loader )	{		sym = gc_malloc(strlen(CLASS_CNAME(meth->class)) +				1 + /* '/' */				strlen(meth->name->data) +				strlen(METHOD_SIGD(meth)) +				1,				KGC_ALLOC_JITTEMP);		assert(sym != NULL);		sprintf(sym,			"%s/%s%s",			CLASS_CNAME(meth->class),			meth->name->data,			METHOD_SIGD(meth));		feedbackJITMethod(sym, code->code, code->codelen, true);		gc_free(sym);	}#endif#if defined(KAFFE_XPROFILER) || defined(KAFFE_XDEBUGGING)	if( (#if defined(KAFFE_XPROFILER)	     xProfFlag ||#else	     0 ||#endif#if defined(KAFFE_XDEBUGGING)	     machine_debug_file#else	    0#endif	     ) &&	    (mm = createMangledMethod()) )	{		mangleMethod(mm, meth);	}#endif#if defined(KAFFE_XPROFILER)	profileFunction(mm, code->code, code->codelen);#endif	/* Flush code out of cache */#if defined(FLUSH_DCACHE)	FLUSH_DCACHE(code->code, (void*)((uintp)code->code + code->codelen));#endif	/* Translate exception table and make it available */	if (meth->exception_table != 0) {		for (i = 0; i < meth->exception_table->length; i++) {			e = &meth->exception_table->entry[i];			e->start_pc = getInsnPC(e->start_pc, codeInfo, code) + (uintp)code->code;			e->end_pc = getInsnPC(e->end_pc, codeInfo, code) + (uintp)code->code;			e->handler_pc = getInsnPC(e->handler_pc, codeInfo, code) + (uintp)code->code;			assert (e->start_pc <= e->end_pc);		}	}	/* Translate line numbers table */	if (meth->lines != 0) {#if defined(KAFFE_XDEBUGGING)		struct debug_file *df = machine_debug_file;		/* Mark the start of this source file */		char *sourcefile = meth->class->sourcefile;		if (! sourcefile)			sourcefile = "Unknown source file";		addDebugInfo(df,			     DIA_IncludeFile,			     meth->class->name->data,			     meth->class->packageLength,			     sourcefile,			     code->code,			     DIA_Function,			     meth, mm, meth->lines->entry[0].line_nr,			     code->code, code->codelen,			     DIA_DONE);#endif		for (i = 0; i < meth->lines->length; i++) {			meth->lines->entry[i].start_pc = getInsnPC(meth->lines->entry[i].start_pc, codeInfo, code) + (uintp)code->code;#if defined(KAFFE_XDEBUGGING)			/* Add line debugging */			addDebugInfo(df,				     DIA_SourceLine,				     meth->lines->entry[i].line_nr,				     meth->lines->entry[i].start_pc -				     (uintp)code->code,				     DIA_DONE);#endif		}		if( meth->lvars != NULL ) {			localVariableEntry *lve;						for (i = 0; i < meth->lvars->length; i++) {				lve = &meth->lvars->entry[i];				lve->start_pc =					(uintp)code->code +					getInsnPC(lve->start_pc,						  codeInfo,						  code);#if defined(KAFFE_XDEBUGGING) && defined(SLOT2LOCALOFFSET)				if( df != NULL ) {					struct Hjava_lang_Class *cl;					const char *vname, *vsig;					errorInfo einfo;					vname = CONST_UTF2CHAR(						lve->name_index,						CLASS_CONSTANTS(meth->class));					vsig = CONST_UTF2CHAR(						lve->descriptor_index,						CLASS_CONSTANTS(meth->class));					cl = getClassFromSignature(						vsig,						meth->class->loader,						&einfo);					if( cl == NULL )					{						discardErrorInfo(&einfo);					}					/* Add line debugging */					addDebugInfo(df,						     lve->index < maxArgs ?						     DIA_Parameter :						     DIA_LocalVariable,						     vname,						     cl,						     local(lve->index)->slot->offset,						     DIA_DONE);				}#endif			}		}#if defined(KAFFE_XDEBUGGING)		/*		 * Mark the end of the function.  This needs to be here so that		 * gdb doesn't get confused about the range of the function		 * since that will be determined by the next debugging		 * information that is added.		 */		addDebugInfo(df,			     DIA_EndFunction, code->code + code->codelen,			     DIA_DONE);#endif	}	else	{#if defined(KAFFE_XDEBUGGING)		/*		 * No line debugging, but we'd like a symbol to show up anyways		 */                char *sourcefile = meth->class->sourcefile;                if (! sourcefile)                        sourcefile = "Unknown source file";		addDebugInfo(			machine_debug_file,			DIA_IncludeFile,			meth->class->name->data,			meth->class->packageLength,			sourcefile,			code->code,						DIA_Function, meth, mm, 0, code->code, code->codelen,			DIA_EndFunction, code->code + code->codelen,			DIA_DONE);#endif	}#if defined(KAFFE_XPROFILER) || defined(KAFFE_XDEBUGGING)	deleteMangledMethod(mm);#endif		/* record framesize for gcj unwinding information */#if defined(LABEL_Lframe)	LABEL_Lframe(&meth->framesize, /* unused */ 0, /* unused */ 0);#endif}/* * Generate instructions from current set of sequences. */staticjbooleangenerateInsnSequence(errorInfo* einfo){	sequence* t;	int i;	int m;	for (t = firstSeq; t != currSeq; t = t->next) {		/* If we overrun the codeblock, reallocate and continue.  */		if (CODEPC >= codeblock_size) {			nativecode *new_codeblock;						codeblock_size += ALLOCCODEBLOCKSZ;			new_codeblock = gc_realloc(codeblock,						   codeblock_size +						   CODEBLOCKREDZONE,						   KGC_ALLOC_JIT_CODEBLOCK);			if (new_codeblock == NULL) {				gc_free(codeblock);				codeblock = NULL;				postOutOfMemory(einfo);				return (false);			} else {				codeblock = new_codeblock;			}		}SCHK(		sanityCheck();					);		/* Generate sequences */		assert(t->func != 0);		if (t->refed != 0) {			(*(t->func))(t);		}		else {			/* printf("discard instruction\n"); */		}		/* Handle dead slots */		m = t->lastuse;		if (m != 0) {			for (i = 0; m != 0; m = m >> 1, i++) {				if ((m & 1) != 0) {					assert(!isGlobal(t->u[i].slot));					slot_kill_readonce(t->u[i].slot);					slot_invalidate(t->u[i].slot);				}			}		}	}	/* Reset */	initSeq();	return (true);}/* * check what synchronous exceptions are caught for a given instruction */staticvoid checkCaughtExceptions(Method* meth, uint32 _pc){	unsigned int i;	willcatch.ANY = false;	willcatch.BADARRAYINDEX = false;	willcatch.NULLPOINTER = false;	if (meth->exception_table == 0) 		return;	/* Determine various exception conditions */	for (i = 0; i < meth->exception_table->length; i++) {		Hjava_lang_Class* etype;		/* include only if exception handler range matches pc */		if (meth->exception_table->entry[i].start_pc > _pc ||		    meth->exception_table->entry[i].end_pc <= _pc)			continue;		willCatch(ANY);		etype = meth->exception_table->entry[i].catch_type;		if (etype == 0) {			willCatch(BADARRAYINDEX);			willCatch(NULLPOINTER);		}		else {			if (instanceof(javaLangArrayIndexOutOfBoundsException, etype)) {				willCatch(BADARRAYINDEX);			}			if (instanceof(javaLangNullPointerException, etype)) {				willCatch(NULLPOINTER);			}		}	}}/* * Start a new instruction. */voidstartInsn(sequence* s){	SET_INSNPC(const_int(2), CODEPC);}voiddoSpill(sequence* s){	SlotData** mem;	SlotData* sd;	int type;	int old_ro;SCHK(	sanityCheck();						)	type = s->u[2].value.i;	old_ro = enable_readonce;	if (type == SR_SYNC) {		enable_readonce = 0;	}	/* Spill the registers */	for (mem = s->u[1].smask; *mem != 0; mem++) {		sd = *mem;		/* Determine if we need to spill this slot at all */		if ((sd->modified & rwrite) != 0 && sd->regno != NOREG) {			switch (type) {			case SR_BASIC:			case SR_SUBBASIC:				/* We only spill if it's not global */				if (!isGlobal(sd)) {					spillAndUpdate(sd, true);				}				break;			case SR_SYNC:				spillAndUpdate(sd, false);				break;			case SR_FUNCTION:				if (calleeSave(sd->regno) == 0 || s->jflags.ANY != 0) {					spillAndUpdate(sd, true);				}				break;			default:				KAFFEVM_ABORT();			}		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频中午一区| 国产欧美精品一区二区三区四区| 亚洲高清在线精品| 日本美女视频一区二区| 精品一区二区三区蜜桃| 91啪亚洲精品| 欧美性色aⅴ视频一区日韩精品| 日本高清无吗v一区| 精品久久一区二区三区| 亚洲男人天堂av| 欧美日本国产视频| 91黄色免费网站| 91毛片在线观看| 久久美女高清视频| 国产拍欧美日韩视频二区| 精品sm捆绑视频| 亚洲精品乱码久久久久久日本蜜臀| 精品99一区二区三区| 精品国产伦理网| 国产农村妇女精品| 亚洲免费毛片网站| 亚洲成av人片观看| 国内外精品视频| 成年人网站91| 欧美男生操女生| 亚洲精品在线电影| 亚洲美女免费视频| 男女男精品视频| 国产91精品在线观看| 色一情一伦一子一伦一区| 在线播放91灌醉迷j高跟美女| 日韩精品一区二区三区中文不卡| 国产欧美日韩不卡免费| 五月激情综合网| 国产成人综合在线观看| 欧洲精品视频在线观看| 久久综合五月天婷婷伊人| 国产精品久久久久久久午夜片| 亚洲一二三级电影| 国产精品一区二区三区乱码 | 精品国产一区a| 国产精品盗摄一区二区三区| 石原莉奈在线亚洲二区| 国产91精品精华液一区二区三区 | 欧美老女人第四色| 国产婷婷色一区二区三区| 亚洲成人动漫精品| heyzo一本久久综合| 欧美成人一区二区三区在线观看| 亚洲精品免费在线观看| 国产美女视频91| 欧美日韩在线三级| 亚洲色图第一区| 国产精品影视在线观看| 欧美一区二区美女| 亚洲成人精品在线观看| 99国产精品99久久久久久| 久久伊人中文字幕| 免费成人在线影院| 91精品国产高清一区二区三区蜜臀| 亚洲婷婷综合久久一本伊一区| 国产一区二区三区日韩| 日韩一区二区免费视频| 亚洲国产精品天堂| 91久久香蕉国产日韩欧美9色| 国产人成亚洲第一网站在线播放| 蜜乳av一区二区| 欧美剧情电影在线观看完整版免费励志电影 | 日韩精品福利网| 欧美影院精品一区| 亚洲激情中文1区| av在线一区二区三区| 国产精品美女www爽爽爽| 国产盗摄精品一区二区三区在线| 欧美大胆一级视频| 久久福利视频一区二区| 精品少妇一区二区三区视频免付费| 丝袜美腿亚洲一区| 51久久夜色精品国产麻豆| 青青草国产精品亚洲专区无| 在线播放一区二区三区| 三级久久三级久久| 欧美一级黄色大片| 激情综合色综合久久综合| 久久久噜噜噜久久中文字幕色伊伊 | 日韩主播视频在线| 91精品久久久久久久99蜜桃| 日本亚洲最大的色成网站www| 678五月天丁香亚洲综合网| 日韩av电影天堂| 精品乱码亚洲一区二区不卡| 国产乱色国产精品免费视频| 亚洲国产精品ⅴa在线观看| 91在线看国产| 日韩av不卡在线观看| 久久久天堂av| 91成人国产精品| 毛片不卡一区二区| 国产精品美女一区二区在线观看| 91丨porny丨中文| 爽爽淫人综合网网站| 精品成人佐山爱一区二区| 成人av在线网| 午夜精品一区二区三区免费视频| 精品电影一区二区三区| 国产999精品久久久久久| 夜夜嗨av一区二区三区中文字幕| 欧美裸体一区二区三区| 国产精品18久久久久久vr| 亚洲日本免费电影| 欧美成人一级视频| 99re视频这里只有精品| 老色鬼精品视频在线观看播放| 中文字幕av一区二区三区| 91精品国产手机| 91在线视频18| 国产精品1024| 午夜一区二区三区视频| 国产欧美日韩另类视频免费观看| 91麻豆精东视频| 国产在线播放一区三区四| 亚洲精品久久久久久国产精华液| 欧美v国产在线一区二区三区| 91小宝寻花一区二区三区| 国内国产精品久久| 亚洲国产精品久久艾草纯爱| 国产精品免费aⅴ片在线观看| 欧美高清www午色夜在线视频| 国产福利一区在线| 蜜桃视频一区二区| 一区二区三区日本| 欧美国产欧美综合| 日韩精品一区二区三区在线| 欧美自拍偷拍一区| 92国产精品观看| 国产成人av电影在线播放| 男女性色大片免费观看一区二区 | 欧美精品一二三| 日本韩国欧美一区二区三区| 高清成人在线观看| 韩国三级在线一区| 蜜臀久久99精品久久久久久9| 亚洲综合偷拍欧美一区色| 国产精品视频观看| 国产女同互慰高潮91漫画| 精品国免费一区二区三区| 欧美精品vⅰdeose4hd| 欧美亚洲一区二区在线| 99久久国产免费看| 99久久精品国产一区二区三区| 狠狠色狠狠色综合| 国产在线看一区| 九九在线精品视频| 美女视频网站久久| 激情丁香综合五月| 国产一区日韩二区欧美三区| 精品一区二区三区视频在线观看| 日韩1区2区3区| 欧美日本一区二区三区四区| 国产一区二区三区综合| 中文字幕在线不卡视频| 久久夜色精品国产欧美乱极品| 日韩视频一区二区| 久久久久久久久久久99999| 久久久欧美精品sm网站| 中文字幕欧美激情| 亚洲精品久久嫩草网站秘色| 香蕉加勒比综合久久| 蜜臀av亚洲一区中文字幕| 久久国产综合精品| 高清不卡一区二区| 97国产精品videossex| 精品视频免费看| 日韩午夜在线观看| 久久综合色鬼综合色| 国产精品久久久久久久午夜片| 亚洲一区二区三区小说| 日韩国产精品大片| 国产精品小仙女| 99riav久久精品riav| 在线播放视频一区| 中文字幕av一区二区三区| 亚洲国产成人porn| 国产成人综合在线播放| 欧美伊人精品成人久久综合97| 日韩欧美一卡二卡| 中文字幕av一区二区三区免费看| 亚洲精品国产一区二区精华液| 日韩黄色一级片| 成人免费视频播放| 91精品国产综合久久精品麻豆 | 久久精品视频网| 亚洲一区二区av电影| 国产米奇在线777精品观看| 91免费国产在线观看| 欧美大肚乱孕交hd孕妇| 亚洲综合一区二区精品导航| 国产成人一级电影| 欧美日韩一级二级三级| 国产色91在线|