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

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

?? machine.c

?? 基于LWVCL開發的庫
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* machine.c * Translate the Kaffe instruction set to the native one. * * Copyright (c) 1996, 1997 *	Transvirtual Technologies, Inc.  All rights reserved. * * See the file "license.terms" for information on usage and redistribution  * of this file.  */#include "config.h"#include "debug.h"#include "config-std.h"#include "config-mem.h"#include "classMethod.h"#include "gtypes.h"#include "kaffe/jmalloc.h"#include "bytecode.h"#include "slots.h"#include "registers.h"#include "seq.h"#include "gc.h"#include "machine.h"#include "basecode.h"#include "icode.h"#include "icode_internal.h"#include "labels.h"#include "constpool.h"#include "codeproto.h"#include "checks.h"#include "access.h"#include "object.h"#include "constants.h"#include "baseClasses.h"#include "code.h"#include "access.h"#include "lookup.h"#include "exception.h"#include "errors.h"#include "md.h"#include "locks.h"#include "code-analyse.h"#include "external.h"#include "soft.h"#include "stringSupport.h"#include "jni.h"#include "thread.h"#include "jthread.h"#include "stats.h"#include "support.h"#include "native-wrapper.h"#include "jvmpi_kaffe.h"/* * Define information about this engine. */char* engine_name = "Just-in-time";iStaticLock	translatorlock;		/* lock to protect the variables below */int stackno;int maxStack;int maxLocal;int maxTemp;int maxArgs;int maxPush;int isStatic;int tmpslot;int argcount = 0;		/* Function call argument count */uint32 pc;uint32 npc;jitflags willcatch;#define EXPLICIT_CHECK_NULL(_i, _s, _n)                       \      cbranch_ref_const_ne((_s), NULL, reference_label(_i, _n)); \      softcall_nullpointer();                                 \      set_label(_i, _n)/* Define CREATE_NULLPOINTER_CHECKS in md.h when your machine cannot use the * MMU for detecting null pointer accesses */#if defined(CREATE_NULLPOINTER_CHECKS)#define CHECK_NULL(_i, _s, _n)                                  \    EXPLICIT_CHECK_NULL(_i, _s, _n)#else/* * If we rely on the MMU to catch null pointer accesses, we must spill * the registers to their home locations if that exception can be caught, * since the exception handler will load its registers from there. * For now, we use prepare_function_call() to do that. (Tim?) */#define CHECK_NULL(_i, _s, _n)	\	if (canCatch(NULLPOINTER)) {		\		prepare_function_call();  	\	}#endif/* For JIT3 compatibility */#define check_array_store(a,b)		softcall_checkarraystore(a,b)#define explicit_check_null(x,obj,y)	EXPLICIT_CHECK_NULL(x,obj,y)#define check_null(x,obj,y)		CHECK_NULL(x,obj,y)#define check_div(x,obj,y)#define check_div_long(x,obj,y)/* Unit in which code block is increased when overrun */#define	ALLOCCODEBLOCKSZ	8192/* Codeblock redzone - allows for safe overrun when generating instructions */#define	CODEBLOCKREDZONE	256nativecode* codeblock;int codeblock_size;static int code_generated;static int bytecode_processed;static int codeperbytecode;int CODEPC;Method *globalMethod;#if defined(KAFFE_PROFILER)int profFlag; /* flag to control profiling */static void printProfilerStats(void);#endifstruct {	int time;} jitStats;static void generateInsnSequence(codeinfo* codeInfo);static void checkCaughtExceptions(Method* meth, unsigned int pc);void	endBlock(sequence*);void	startBlock(sequence*);void	endSubBlock(sequence*);void	startSubBlock(sequence*);void	cancelNoWriteback(void);jlong	currentTime(void);static JTHREAD_JMPBUF JIT_jumpExitWithOOM;void KaffeJIT_exitWithOOM(){  JTHREAD_LONGJMP(JIT_jumpExitWithOOM, 1);}bool KaffeJIT_setupExitWithOOM(struct _errorInfo* einfo){  if (!JTHREAD_SETJMP(JIT_jumpExitWithOOM))    return false;  postOutOfMemory(einfo);  return true;}/* * By default, we comply with the Java spec and turn stack overflow checks * on.  Note that this involves a noticeable performance penalty.  If you * feel adventurous, undef this. */#define CHECK_STACKOVERFLOW#if defined(CHECK_STACKOVERFLOW)static void checkStackOverflow(void){	/* XXX fix this.  	 * We should not have to access current just to do the stack check	 */	threadData *thread_data = KTHREAD(get_data)(KTHREAD(current)());	if (KTHREAD(stackcheck)(thread_data->needOnStack)) {		return;	}		if (thread_data->needOnStack == STACK_LOW) {		dprintf(			"Panic: unhandled StackOverflowError()\n");		KAFFEVM_ABORT();	}		{		Hjava_lang_Throwable *th;		errorInfo einfo;		thread_data->needOnStack = STACK_LOW;		th = (Hjava_lang_Throwable *)newObjectChecked (javaLangStackOverflowError, &einfo);		thread_data->needOnStack = STACK_HIGH;		throwException(th);	}}#endif /* CHECK_STACKOVERFLOW *//* * Translate a method into native code. * * Return true if successful, false otherwise. */booltranslate(Method* meth, errorInfo *einfo){	jint low;	jint high;	jvalue tmpl;	int idx;	SlotInfo* tmp;	SlotInfo* tmp2;	SlotInfo* mtable;	bytecode* base;	unsigned int len;	callInfo cinfo;	fieldInfo finfo;	Hjava_lang_Class* crinfo;	bool success = true;	nativeCodeInfo ncode;	codeinfo* codeInfo;	int64 tms = 0;	int64 tme;	static Method* jitting = NULL;	/* DEBUG */	lockClass(meth->class);	/* Must check the translation	 * hasn't been done by someone else once we get it.	 */	if (METHOD_TRANSLATED(meth)) {		goto done3;	}	if (Kaffe_JavaVMArgs.enableVerboseJIT) {		tms = currentTime();	}DBG(MOREJIT,	dprintf("asked to translate = %s.%s(%s)\n", 	    meth->class->name->data, meth->name->data, METHOD_SIGD(meth));	    );	/* If this code block is native, then just set it up and return */	if (methodIsNative(meth)) {		void *func = native(meth, einfo);		if (func == NULL) {			success = false;			goto done3;		}		engine_create_wrapper(meth, func);		KAFFEJIT_TO_NATIVE(meth);		/* Note that this is a real function not a trampoline.  */		if (meth->c.ncode.ncode_end == 0)			meth->c.ncode.ncode_end = METHOD_NATIVECODE(meth);		goto done3;	}	/* Scan the code and determine the basic blocks */	success = analyzeMethod(meth, &codeInfo, einfo); 	if (success == false) {		if (METHOD_TRANSLATED(meth))			success = true;		goto done3;	}DBG(MOREJIT,	dprintf("successfully verified = %s.%s(%s)\n", 	    meth->class->name->data, meth->name->data, METHOD_SIGD(meth));	    );	/* Only one in the translator at once. */	enterTranslator();	startTiming(&jit_time, "jittime");	if (KaffeJIT_setupExitWithOOM(einfo))	  {	    success = false;	    goto done2;	  }#if defined(KAFFE_PROFILER)	if (profFlag) {		static int init = 0;		if (!init) {			atexit(printProfilerStats);			init = 1;		}		profiler_get_clicks(meth->jitClicks);		meth->callsCount = 0;		meth->totalClicks = 0;		meth->totalChildrenClicks = 0;		globalMethod = meth;	}#endifDBG(MOREJIT,	if (jitting) {		dprintf("but still jitting = %s.%s(%s)\n", 			jitting->class->name->data, jitting->name->data, 			METHOD_SIGD(jitting));		}    );	/* start modifying global variables now */	assert(jitting == 0 || !!!"reentered jitter");	/* DEBUG */	jitting = meth;					/* DEBUG */	maxLocal = meth->localsz;	maxStack = meth->stacksz;        maxArgs = sizeofSigMethod(meth, false);	if (maxArgs == -1) {		goto done2;	}	if (meth->accflags & ACC_STATIC) {		isStatic = 1;	}	else {		isStatic = 0;		maxArgs += 1;	}	base = (bytecode*)meth->c.bcode.code;	len = meth->c.bcode.codelen;	/***************************************/	/* Next reduce bytecode to native code */	/***************************************/	if (!(success = initInsnSequence(meth, codeperbytecode * len, meth->localsz,					 meth->stacksz, einfo))) {		goto done1;	}	start_basic_block();	start_function();#if defined(CHECK_STACKOVERFLOW)	prepare_function_call();	call_soft(checkStackOverflow);	fixup_function_call();#endif	monitor_enter();	if (IS_STARTOFBASICBLOCK(0)) {		end_basic_block();		start_basic_block();	}	for (pc = 0; pc < len; pc = npc) {		assert(stackno <= maxStack+maxLocal);		npc = pc + insnLen[base[pc]];		/* Skip over the generation of any unreachable basic blocks */		if (IS_UNREACHABLE(pc)) {			while (npc < len && !IS_STARTOFBASICBLOCK(npc) && !IS_STARTOFEXCEPTION(npc)) {				npc = npc + insnLen[base[npc]];			}DBG(JIT,		dprintf("unreachable basic block pc [%d:%d]\n", pc, npc - 1);   );			if (IS_STARTOFBASICBLOCK(npc)) {				end_basic_block();				start_basic_block();				stackno = STACKPOINTER(npc);			}			continue;		}DBG(JIT,	dprintf("pc = %d, npc = %d\n", pc, npc);	);		/* Determine various exception conditions */		checkCaughtExceptions(meth, pc);		start_instruction();		/* Note start of exception handling blocks */		if (IS_STARTOFEXCEPTION(pc)) {			stackno = meth->localsz + meth->stacksz - 1;			start_exception_block();		}		switch (base[pc]) {		default:			dprintf("Unknown bytecode %d\n", base[pc]);			postException(einfo, JAVA_LANG(VerifyError));			success = false;			goto done;#include "kaffe.def"		}		/* Note maximum number of temp slots used and reset it */		if (tmpslot > maxTemp) {			maxTemp = tmpslot;		}		tmpslot = 0;		cancelNoWriteback();		if (IS_STARTOFBASICBLOCK(npc)) {			end_basic_block();			start_basic_block();			stackno = STACKPOINTER(npc);		}		generateInsnSequence(codeInfo);	}	end_function();	assert(maxTemp < MAXTEMPS);	if (finishInsnSequence(codeInfo, &ncode, einfo) == false) {		success = false;		goto done;	}	installMethodCode(codeInfo, meth, &ncode);done:	tidyAnalyzeMethod(&codeInfo);DBG(JIT,	dprintf("Translated %s.%s%s (%s) %p\n", meth->class->name->data, 		meth->name->data, METHOD_SIGD(meth), 		isStatic ? "static" : "normal", METHOD_NATIVECODE(meth));	    );	if (Kaffe_JavaVMArgs.enableVerboseJIT) {		tme = currentTime();		jitStats.time += (tme - tms);		printf("<JIT: %s.%s%s time %dms (%dms) @ %p>\n",		       CLASS_CNAME(meth->class),		       meth->name->data, METHOD_SIGD(meth),		       (int)(tme - tms), jitStats.time,		       METHOD_NATIVECODE(meth));	}done1:#if defined(KAFFE_PROFILER)	if (profFlag) {		profiler_click_t end;		profiler_get_clicks(end);		meth->jitClicks = end - meth->jitClicks;		globalMethod = NULL;	}#endifdone2:	jitting = NULL;	/* DEBUG */	stopTiming(&jit_time);	leaveTranslator();done3:	unlockClass(meth->class);	#if defined(ENABLE_JVMPI)	if (success && JVMPI_EVENT_ISENABLED(JVMPI_EVENT_COMPILED_METHOD_LOAD) )	  {	    JVMPI_Event ev;	    jvmpiFillMethodLoad(&ev, meth);	    jvmpiPostEvent(&ev);	  }#endif	return (success);}#ifndef ALIGNMENT_OF_SIZE#define ALIGNMENT_OF_SIZE(S)	(S)#endif/* * Generate the code. */boolfinishInsnSequence(codeinfo* codeInfo, nativeCodeInfo* code, errorInfo *einfo){#if defined(CALLTARGET_ALIGNMENT)	unsigned int align = CALLTARGET_ALIGNMENT;#else	unsigned int align = 0;#endif#if defined(MD_JIT_EXCEPTION_INFO_LENGTH)	int exc_len = MD_JIT_EXCEPTION_INFO_LENGTH;#else	int exc_len = 0;#endif	uintp const_align = sizeof(union _constpoolval) - 1;	uint32 constlen;	jitCodeHeader *jch;	nativecode* methblock;	/* Emit pending instructions */	generateInsnSequence(codeInfo);	/* Okay, put this into malloc'ed memory. We have to align the pool for	 * some double-word aligned instructions. */	constlen = KaffeJIT_getNumberOfConstants() * sizeof(union _constpoolval);	/* Allocate some padding to align codebase if so desired 	 */	methblock = gc_malloc(sizeof(jitCodeHeader) + exc_len + constlen + const_align + CODEPC + (align ? (align - ALIGNMENT_OF_SIZE(sizeof(jdouble))) : 0), KGC_ALLOC_JITCODE);	if (methblock == 0) {		postOutOfMemory(einfo);		return (false);	}	jch = (jitCodeHeader *)methblock;	jch->pool = (void *)((char *)(jch + 1)) + exc_len;	jch->pool = (void *)(((uintp)jch->pool + const_align) & ~const_align );	jch->code_start = ((nativecode *)jch->pool) + constlen;	jch->code_len = CODEPC;	/* align entry point if so desired */	if (align != 0 && (unsigned long)jch->code_start % align != 0) {		unsigned int pad = (align - (unsigned long)jch->code_start % align);				assert(pad <= align - ALIGNMENT_OF_SIZE(sizeof(jdouble)));				jch->code_start = jch->code_start + pad;	}	memcpy(jch->code_start, codeblock, CODEPC);	addToCounter(&jitcodeblock, "jitmem-codeblock", 1,		-(jlong)GCSIZEOF(codeblock));	KFREE(codeblock);	/* Establish any code constants */	KaffeJIT_establishConstants(jch->pool);	/* Link it */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51精品秘密在线观看| 精品国产电影一区二区| 青青草91视频| 国产精品动漫网站| 精品少妇一区二区三区日产乱码| 99精品1区2区| 国产一区二区中文字幕| 性做久久久久久| 亚洲免费av高清| 欧美激情资源网| 亚洲精品一区二区三区在线观看| 欧美日韩亚洲另类| 99久久久国产精品免费蜜臀| 国产精品一区二区黑丝| 亚洲成a人片在线观看中文| 中文字幕一区二区三区在线不卡 | 国产aⅴ精品一区二区三区色成熟| 天堂午夜影视日韩欧美一区二区| 亚洲视频一二三区| 国产区在线观看成人精品| 精品美女一区二区| 欧美一区二区久久久| 欧美中文字幕一区| 99九九99九九九视频精品| 国产成人一级电影| 国产在线播放一区| 精品中文字幕一区二区| 蜜桃视频一区二区| 日韩精品成人一区二区在线| 亚洲小说欧美激情另类| 一区二区三区毛片| 一区二区三区日韩精品视频| ●精品国产综合乱码久久久久| 中文无字幕一区二区三区| 久久久久国产精品麻豆ai换脸| 精品国产乱码91久久久久久网站| 精品嫩草影院久久| 久久综合色之久久综合| 26uuu精品一区二区在线观看| 日韩午夜电影在线观看| 日韩午夜电影av| 欧美精品一区在线观看| 久久色.com| 国产精品色哟哟| 最新欧美精品一区二区三区| 亚洲男人电影天堂| 亚洲黄色在线视频| 亚洲一二三四久久| 午夜一区二区三区在线观看| 亚洲 欧美综合在线网络| 日本怡春院一区二区| 久久99国产精品麻豆| 国产一区二区三区免费观看| 欧美一区二区视频网站| 日韩欧美的一区二区| 精品91自产拍在线观看一区| 国产亚洲精久久久久久| 中文字幕制服丝袜一区二区三区| 亚洲欧洲综合另类| 亚洲福利视频导航| 精品在线一区二区三区| 成人免费福利片| 欧美在线观看视频在线| 日韩视频一区二区| 国产女主播视频一区二区| 亚洲男人电影天堂| 美女视频网站久久| 国产白丝网站精品污在线入口| 色老汉av一区二区三区| 日韩欧美你懂的| 国产精品国产三级国产a| 亚洲午夜在线视频| 国产一区二区三区免费| 91成人看片片| 精品国产免费一区二区三区香蕉| 国产精品久久久久aaaa| 午夜精品影院在线观看| 国产99久久久国产精品潘金网站| 91久久精品网| 久久久美女毛片| 亚洲成人一区二区在线观看| 国产九色sp调教91| 欧美日韩综合在线免费观看| 日韩一级欧美一级| 亚洲色图欧洲色图| 久久精品国产亚洲aⅴ| 91亚洲国产成人精品一区二三| 欧美一区二区在线播放| 自拍偷拍亚洲激情| 久久99久久99小草精品免视看| 99re亚洲国产精品| 欧美大胆一级视频| 一区二区三区精品| 国产麻豆成人精品| 欧美人成免费网站| 亚洲视频 欧洲视频| 精品亚洲成a人在线观看| 91成人在线观看喷潮| 国产日韩欧美精品电影三级在线| 天天影视网天天综合色在线播放| 成人性视频网站| 日韩美女视频一区二区在线观看| 一区二区三区视频在线看| 丁香桃色午夜亚洲一区二区三区| 欧美一区二区三区四区在线观看| 亚洲人成影院在线观看| 国产成人aaa| 欧美电视剧在线看免费| 一区二区成人在线视频| 99在线精品视频| 国产日韩影视精品| 另类小说综合欧美亚洲| 欧美乱妇15p| 一区二区久久久久| 99精品偷自拍| 国产精品久久久久久久久搜平片 | 久久超碰97人人做人人爱| 欧洲人成人精品| 中文字幕在线一区二区三区| 国产二区国产一区在线观看| 精品国产乱码久久久久久老虎 | 日韩欧美123| 天堂成人国产精品一区| 亚洲人亚洲人成电影网站色| 国产精品18久久久久久久久久久久 | 国产亚洲人成网站| 精品亚洲国内自在自线福利| 欧美精品乱码久久久久久按摩| 亚洲影院在线观看| 一本一本久久a久久精品综合麻豆| 中文字幕在线观看一区| 高清国产一区二区三区| 国产欧美一区二区精品忘忧草 | 欧美在线观看视频一区二区| 亚洲色图视频免费播放| 日本道色综合久久| 一区二区三区免费看视频| 欧美视频一二三区| 亚洲a一区二区| 日韩欧美一区二区三区在线| 国内精品写真在线观看 | 丝袜美腿亚洲一区| 日韩欧美一级二级三级| 国产精品影视天天线| 中文一区在线播放| 91蜜桃在线免费视频| 亚洲国产aⅴ天堂久久| 欧美日韩大陆一区二区| 老司机午夜精品99久久| 精品国产91洋老外米糕| 成人免费视频播放| 亚洲丝袜另类动漫二区| 欧美日韩在线亚洲一区蜜芽| 麻豆精品新av中文字幕| 久久久久亚洲蜜桃| 91免费视频网址| 三级在线观看一区二区| 精品人伦一区二区色婷婷| 国产91在线看| 亚洲一区二区视频在线观看| 91精品国产高清一区二区三区蜜臀| 精品一区二区免费看| 国产欧美一区二区精品婷婷| 色老汉一区二区三区| 男女男精品网站| 欧美国产一区在线| 欧美亚洲动漫精品| 国精产品一区一区三区mba桃花| 中文字幕乱码亚洲精品一区| 91成人在线免费观看| 另类中文字幕网| 亚洲欧美电影院| 欧美不卡一区二区三区| 99精品欧美一区| 久久国产精品99久久久久久老狼| 日本一二三不卡| 欧美精品tushy高清| 欧美一区二区三区婷婷月色| 波多野结衣欧美| 日本免费在线视频不卡一不卡二| 久久久欧美精品sm网站| 欧美日韩一区二区三区四区五区| 激情文学综合网| 洋洋av久久久久久久一区| 久久久99免费| 欧美日韩日日夜夜| 国产精品自拍一区| 午夜激情久久久| 国产精品入口麻豆原神| 欧美一区二区三区日韩| av在线不卡电影| 精品午夜久久福利影院 | 精品无人区卡一卡二卡三乱码免费卡 | 国产精品综合av一区二区国产馆| 亚洲国产欧美在线| 中文字幕高清不卡| 日韩精品综合一本久道在线视频| 91免费看`日韩一区二区| 国产综合色视频| 日韩激情一二三区|