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

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

?? machine.c

?? 基于LWVCL開發的庫
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* machine.c * Translate the Kaffe instruction set to the native one. * * Copyright (c) 1996-1999 *	Transvirtual Technologies, Inc.  All rights reserved. * * Copyright (c) 2003, 2004 *	Kaffe.org contributors. See ChangeLog for details. All rights reserved. *   * Cross-language profiling changes contributed by * the Flux Research Group, Department of Computer Science, * University of Utah, http://www.cs.utah.edu/flux/ * * See the file "license.terms" for information on usage and redistribution * of this file. */#define SCHK(s)#define	SUSE(s)#include "config.h"#include "config-std.h"#include "config-mem.h"#include "gtypes.h"#include "md.h"#include "classMethod.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 "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 "locks.h"#include "code-analyse.h"#include "external.h"#include "soft.h"#include "thread.h"#include "itypes.h"#include "support.h"#include "xprofiler.h"#if defined(KAFFE_FEEDBACK)#include "feedback.h"#endif#include "debugFile.h"#include "fileSections.h"#include "mangle.h"#include "jvmpi_kaffe.h"#include "kaffe_jni.h"#include "native-wrapper.h"#include "stats.h"const char* engine_name = "Just-in-time v3";/** * top of the operand stack. localsz <= stackno < localsz+stacksz */int stackno;int maxStack;int maxLocal;int maxTemp;int maxArgs;int maxPush;int isStatic;codeinfo* codeInfo;/** * index of first unused element of tempinfo (next available temp slot) */int tmpslot;int argcount = 0;		/* Function call argument count */uint32 pc;uint32 npc;/* Various exception related things */jitflags willcatch;/* jit3 specific prototypes from icode.c */void explicit_check_null (int x, SlotInfo* obj, int y);void check_null (int x, SlotInfo* obj, int y);void check_div (int x, SlotInfo* obj, int y);void check_div_long (int x, SlotInfo* obj, int y);void softcall_fakecall (label* from,label* to, void* func);/* Unit in which code block is increased when overrun */#define	ALLOCCODEBLOCKSZ	8192/* Codeblock redzone - allows for safe overrun when generating instructions */#define	CODEBLOCKREDZONE	256static unsigned int codeblock_size;static int code_generated;static int bytecode_processed;static int codeperbytecode;iStaticLock	translatorlock;struct {	int time;} jitStats;static jboolean generateInsnSequence(errorInfo*);/** * Look for exception handlers that enclose the given PC in the given method. * If a match is found, it will set the appropriate willcatch flags. * * @param meth The method that may contain an exception handler. * @param pc The location within the method to look for a handler. */static void checkCaughtExceptions(Method* meth, uint32 _pc);void initFakeCalls(void);static void makeFakeCalls(void);static void relinkFakeCalls(void);/* Desktop edition */#include "debug.h"Method *globalMethod;#if defined(KAFFE_PROFILER)int profFlag;static void printProfilerStats(void);#endifJTHREAD_JMPBUF JIT3_jumpExitWithOOM;void KaffeJIT3_exitWithOOM(){  JTHREAD_LONGJMP(JIT3_jumpExitWithOOM, 1);}jboolean KaffeJIT3_setupExitWithOOM(struct _errorInfo* einfo){  if (!JTHREAD_SETJMP(JIT3_jumpExitWithOOM))    return false;  postOutOfMemory(einfo);  return true;}/* * Init instruction generation. */jbooleaninitInsnSequence(int localsz, int stacksz, errorInfo* einfo){	/* Clear various counters */	tmpslot = 0;	maxTemp = 0;	maxPush = 0;	stackno = localsz + stacksz;	npc = 0;	initSeq();	initRegisters();	initSlots(stackno);	/* Before generating code, try to guess how much space we'll need. */	codeblock_size = ALLOCCODEBLOCKSZ;	codeblock = gc_malloc(codeblock_size + CODEBLOCKREDZONE,			      KGC_ALLOC_JIT_CODEBLOCK);	if (codeblock == 0) {		postOutOfMemory(einfo);		return (false);	}	CODEPC = 0;		return (true);}/* * Translate a method into native code. * * Registers are allocated per basic block, using an LRU algorithm. * Contents of registers are spilled at the end of basic block, * depending on the edges in the CFG leaving the basic block: * * - If there is an edge from the basic block to an exception handler, *   local variables are spilled on the stack * * - If there is only one non-exception edge, and the target basic *   block is following the current block immediately, no spills are done * * - Otherwise, the local variables and the operand stack are spilled *   onto the stack */jbooleantranslate(Method* xmeth, errorInfo* einfo){#if defined(KAFFE_VMDEBUG)	int i;#endif /* defined(KAFFE_VMDEBUG) */	jint low;	jint high;	jvalue tmpl;	int idx;	SlotInfo* tmp;	SlotInfo* tmp2;	SlotInfo* mtable;	bytecode* base;	uint32 len;	callInfo cinfo;	fieldInfo finfo;	Hjava_lang_Class* crinfo;	codeinfo* mycodeInfo;	nativeCodeInfo ncode;	int64 tms = 0;	int64 tme;	static bool reinvoke = false;	jboolean success = true;	lockClass(xmeth->class);	if (METHOD_TRANSLATED(xmeth)) {		goto done3;	}	/* If this code block is native, then just set it up and return */	if (methodIsNative(xmeth)) {		void *func = native(xmeth, einfo);		if (func != NULL) {			engine_create_wrapper(xmeth, func);			KAFFEJIT_TO_NATIVE(xmeth);		} else {			success = false;		}		goto done3;	}	/* Scan the code and determine the basic blocks */	success = analyzeMethod(xmeth, &mycodeInfo, einfo);	if (success == false) {		/* It may happen that we already have translated it		 * by implicit recursion in the verifier.		 */		if (METHOD_TRANSLATED(xmeth))		  success = true;		goto done3;	}#if defined(KAFFE_FEEDBACK)	if( kaffe_feedback_file )		lockMutex(kaffe_feedback_file);#endif	/* Only one in the translator at once. Must check the translation	 * hasn't been done by someone else once we get it.	 */	enterTranslator();	startTiming(&fulljit, "JIT translation");	if (Kaffe_JavaVMArgs.enableVerboseJIT) {		tms = currentTime();	}DBG(MOREJIT,    dprintf("callinfo = %p\n", &cinfo);    );#if defined(KAFFE_PROFILER)	if (profFlag) {		static int init = 0;		if (!init) {			atexit(printProfilerStats);			init = 1;		}		profiler_get_clicks(xmeth->jitClicks);		xmeth->callsCount = 0;		xmeth->totalClicks = 0;		xmeth->totalChildrenClicks = 0;	}#endif	globalMethod = xmeth;	codeInfo = mycodeInfo;	/* Handle null calls specially */	if (METHOD_BYTECODE_LEN(xmeth) == 1 && METHOD_BYTECODE_CODE(xmeth)[0] == RETURN) {		SET_METHOD_NATIVECODE(xmeth, (nativecode*)soft_null_call);		goto done;	}	assert(reinvoke == false);	reinvoke = true;	maxLocal = xmeth->localsz;	maxStack = xmeth->stacksz;        maxArgs = sizeofSigMethod(xmeth, false);	if (maxArgs == -1) {		goto done;	}	if (xmeth->accflags & ACC_STATIC) {		isStatic = 1;	}	else {		isStatic = 0;		maxArgs += 1;	}	if (KaffeJIT3_setupExitWithOOM(einfo))	  {	    success = false;	    goto oom_error;	  }DBG(MOREJIT,	dprintf("Method: %s.%s%s\n", CLASS_CNAME(xmeth->class), xmeth->name->data, METHOD_SIGD(xmeth));	for (i = 0; i < maxLocal; i++) {		dprintf(" L%d: %2d", i, codeInfo->localuse[i].use);	}	dprintf("\n"););	base = (bytecode*)METHOD_BYTECODE_CODE(xmeth);	len = METHOD_BYTECODE_LEN(xmeth);	/*	 * Initialise the translator.	 */	initFakeCalls();	/* Do any machine dependent JIT initialization */#if defined(INIT_JIT_MD)	INIT_JIT_MD(xmeth);#endif	success = initInsnSequence(xmeth->localsz, xmeth->stacksz, einfo);	if (success == false) {		goto done;	}	/***************************************/	/* Next reduce bytecode to native code */	/***************************************/	pc = 0;	start_function();	check_stack_limit();	if (Kaffe_JavaVMArgs.enableVerboseCall != 0) {		softcall_trace(xmeth);	}	monitor_enter();	if (IS_STARTOFBASICBLOCK(0)) {		end_basic_block();		success = generateInsnSequence(einfo);		if (success == false) {			goto done;		}		start_basic_block();	}	for (; pc < len; pc = npc) {		assert(stackno <= maxStack+maxLocal);		assert(stackno >= 0);		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;                }		/* Determine various exception conditions */		checkCaughtExceptions(xmeth, pc);		start_instruction();		/* Note start of exception handling blocks */		if (IS_STARTOFEXCEPTION(pc)) {			stackno = xmeth->localsz + xmeth->stacksz - 1;			start_exception_block();		}		switch (base[pc]) {		default:			printf("Unknown bytecode %d\n", base[pc]);			leaveTranslator();#if defined(KAFFE_FEEDBACK)			if( kaffe_feedback_file )				unlockMutex(kaffe_feedback_file);#endif			unlockClass(xmeth->class);			postException(einfo, JAVA_LANG(VerifyError));                        success = false;			break;#include "kaffe.def"		}		/* Note maximum number of temp slots used and reset it */		if (tmpslot > maxTemp) {			maxTemp = tmpslot;		}		tmpslot = 0;SCHK(		sanityCheck();					)		if (IS_STARTOFBASICBLOCK(npc)) {			end_basic_block();			success = generateInsnSequence(einfo);			if (success == false) {				goto done;			}			start_basic_block();			stackno = STACKPOINTER(npc);SCHK(			sanityCheck();				)		}	}	end_function();	makeFakeCalls();	assert(maxTemp < MAXTEMPS);	if( finishInsnSequence(NULL, &ncode, einfo) )	{		installMethodCode(NULL, xmeth, &ncode);	}	else	{		success = false;	}	goto done;oom_error:;	KaffeJIT3_cleanupInsnSequence();	done:;	KaffeJIT3_resetLabels();	KaffeJIT3_resetConstants();	tidyAnalyzeMethod(&codeInfo);	reinvoke = false;#if defined(KAFFE_PROFILER)	if (profFlag) {		profiler_click_t end;		profiler_get_clicks(end);		xmeth->jitClicks = end - xmeth->jitClicks;	}#endif	globalMethod = NULL;DBG(MOREJIT,    dprintf("Translating %s.%s%s (%s) %p\n",	    xmeth->class->name->data,	    xmeth->name->data,	    METHOD_SIGD(xmeth),	    isStatic ? "static" : "normal", METHOD_NATIVECODE(xmeth));    );		if (Kaffe_JavaVMArgs.enableVerboseJIT) {		tme = currentTime();		jitStats.time += (int)(tme - tms);		printf("<JIT: %s.%s%s time %dms (%dms) @ %p (%p)>\n",		       CLASS_CNAME(xmeth->class),		       xmeth->name->data, METHOD_SIGD(xmeth),		       (int)(tme - tms), jitStats.time,		       METHOD_NATIVECODE(xmeth), xmeth);	}	stopTiming(&fulljit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区在线观看免费视频| 欧美—级在线免费片| 高清日韩电视剧大全免费| 日本91福利区| 美洲天堂一区二卡三卡四卡视频| 亚洲一区二区在线播放相泽| 一区二区三区在线观看视频| 亚洲欧美日韩中文播放 | 欧美一区二区精美| 欧美剧在线免费观看网站| 欧美片在线播放| 欧美一区二区不卡视频| 26uuu国产电影一区二区| 久久久精品黄色| 中文欧美字幕免费| 亚洲免费观看高清在线观看| 亚洲一线二线三线久久久| 亚洲大型综合色站| 久久电影网站中文字幕| 国产在线一区二区综合免费视频| 国产成人在线免费观看| 91在线观看下载| 91精品国产麻豆| 国产欧美日韩视频一区二区| 亚洲日本韩国一区| 日韩综合小视频| 国产成人免费在线观看| 在线视频亚洲一区| 精品少妇一区二区三区免费观看| 欧美国产一区在线| 亚洲一区二区三区在线播放| 秋霞午夜av一区二区三区| 处破女av一区二区| 欧美喷水一区二区| 亚洲国产精品ⅴa在线观看| 亚洲欧美日韩国产另类专区| 日本午夜精品视频在线观看| 成人激情视频网站| 日韩欧美在线不卡| 1区2区3区欧美| 久久精品国产99| 一本一本大道香蕉久在线精品 | 日韩一级高清毛片| 国产精品久久久久久久久晋中 | 欧美一区二区三区四区久久| 欧美激情在线观看视频免费| 亚洲一二三区不卡| 成人激情电影免费在线观看| 日韩欧美中文字幕公布| 亚洲精品国产第一综合99久久| 紧缚奴在线一区二区三区| 91久久国产综合久久| 久久综合网色—综合色88| 午夜视频在线观看一区二区| eeuss国产一区二区三区| 精品噜噜噜噜久久久久久久久试看| 亚洲综合偷拍欧美一区色| 国产aⅴ精品一区二区三区色成熟| 欧美精三区欧美精三区| 综合久久久久久久| 成人深夜福利app| 精品少妇一区二区三区免费观看 | 玉足女爽爽91| 成人理论电影网| 久久欧美一区二区| 久久成人免费日本黄色| 欧美久久久久久久久| 亚洲综合自拍偷拍| 色婷婷激情久久| 美女视频一区二区| 国产夫妻精品视频| 国产欧美一区二区三区网站| 日本三级韩国三级欧美三级| 7777精品伊人久久久大香线蕉经典版下载 | 精品国产乱码久久久久久老虎| 亚洲一区二区av电影| 色94色欧美sute亚洲线路一ni| 亚洲婷婷在线视频| 91丨porny丨首页| 亚洲美女免费在线| 日本精品视频一区二区| 亚洲午夜久久久| 欧美理论片在线| 蜜臀av一区二区三区| 欧美刺激午夜性久久久久久久| 欧美aaaaaa午夜精品| 精品免费99久久| 成人午夜私人影院| 亚洲色图19p| 欧美日韩午夜精品| 蜜芽一区二区三区| 久久久精品免费免费| 成人综合婷婷国产精品久久| 一区二区中文字幕在线| 色先锋资源久久综合| 亚洲第一搞黄网站| 精品日本一线二线三线不卡| 国产精品一品视频| 亚洲美女视频一区| 91精品国产色综合久久不卡蜜臀| 国内精品视频一区二区三区八戒| 国产欧美一区二区精品性色| 色综合久久天天综合网| 日韩中文字幕av电影| 久久一夜天堂av一区二区三区| 成人精品在线视频观看| 亚洲午夜免费福利视频| 欧美白人最猛性xxxxx69交| 国产91丝袜在线播放0| 一个色在线综合| 欧美成人bangbros| 99久久免费精品| 久久精品国产精品青草| 亚洲欧洲中文日韩久久av乱码| 欧美精品日韩综合在线| 国产精品一区二区三区99| 一区二区三区精品视频在线| 精品剧情在线观看| 欧美色综合天天久久综合精品| 精品一区二区精品| 亚洲成人激情社区| 国产欧美中文在线| 日韩美女在线视频| 欧美日韩在线观看一区二区 | 亚洲免费观看高清完整| 日韩精品一区在线| 欧美性色综合网| 成人伦理片在线| 国产自产v一区二区三区c| 亚洲一区二区三区国产| 国产精品国产三级国产普通话99 | 久久综合狠狠综合久久激情| 在线观看国产精品网站| 成人小视频免费观看| 免费人成在线不卡| 亚洲一区电影777| 亚洲色图另类专区| 国产精品国产三级国产三级人妇 | 福利视频网站一区二区三区| 美女网站色91| 日韩不卡在线观看日韩不卡视频| 亚洲天堂a在线| 国产精品伦理一区二区| 久久久久久久久久久久电影| 欧美一区二区视频观看视频| 欧美在线免费播放| 欧亚一区二区三区| 99久久777色| 99国产精品久久久久| 国产另类ts人妖一区二区| 美腿丝袜亚洲综合| 三级欧美韩日大片在线看| 亚洲成人自拍一区| 亚洲一区二区视频在线观看| 伊人色综合久久天天| 亚洲精品一二三四区| 亚洲精品国产成人久久av盗摄| 最新欧美精品一区二区三区| 国产精品久久久久久久久免费丝袜| 日本一区二区综合亚洲| 欧美激情中文字幕一区二区| 国产精品色婷婷| 国产精品久久久久毛片软件| ...xxx性欧美| 亚洲第一主播视频| 麻豆成人久久精品二区三区小说| 蜜臀av性久久久久蜜臀aⅴ四虎| 蜜桃av噜噜一区| 黄一区二区三区| 成人av在线影院| 欧美日韩一二区| 精品欧美一区二区在线观看| 久久婷婷国产综合精品青草| 中文字幕精品一区二区精品绿巨人 | 99久久久久久99| 欧美午夜精品久久久久久孕妇 | 卡一卡二国产精品| 国产精品小仙女| 色老头久久综合| 欧美人动与zoxxxx乱| 国产亚洲欧美一级| 一二三区精品福利视频| 久久精品国产77777蜜臀| 成人涩涩免费视频| 欧美日韩黄色一区二区| 久久久亚洲精品石原莉奈| 亚洲精品国产无天堂网2021| 麻豆国产精品视频| 91久久精品日日躁夜夜躁欧美| 日韩一级免费一区| 亚洲伦理在线精品| 精东粉嫩av免费一区二区三区| 国产99精品在线观看| 蜜桃传媒麻豆第一区在线观看| 国产一区二区按摩在线观看| 日本道精品一区二区三区 | 亚洲欧美日韩在线播放| 日本中文在线一区| 国产99一区视频免费| 欧美三级电影在线观看|