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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ljit_x86.dasc

?? lua的即時編譯器。支持lua 5.1.2版本
?? DASC
?? 第 1 頁 / 共 5 頁
字號:
  |  call &luaH_newkey, L, TABLE:edi, TVALUE:eax  |  add esp, FRAME_OFFSET  |  jmp <2  // Copy to the returned value. See Node/TValue assumption above.  |  |6:  // Key found, but previous value is nil.  |  mov TABLE:ecx, TABLE:edi->metatable  |  test TABLE:ecx, TABLE:ecx  |  jz <2					// No metatable?  |  test byte TABLE:ecx->flags, 1<<TM_NEWINDEX  |  jnz <2					// Or 'no __newindex' flag set?  |  |7:  // Otherwise chain to C code which eventually calls luaV_settable.  |  setsvalue L->env, TSTRING:edx		// Use L->env as temp key.  |  mov ecx, [esp]  |  sub esp, FRAME_OFFSET  |  mov L->savedpc, ecx  |  call &jit_settable_fb, L, TABLE:edi, BASE  |  add esp, FRAME_OFFSET  |  mov BASE, L->base  |  ret  |.endjsub  |  |//-----------------------------------------------------------------------  |.jsub SETTABLE_STR			// Set string entry in table.  |// Call with: TOP (tab), TVALUE:ecx (key), BASE (val)  |  mov eax, TOP->tt; shl eax, 4; or eax, TVALUE:ecx->tt  |  cmp eax, LUA_TTABLE_STR  |   mov TABLE:edi, TOP->value  |   mov TSTRING:edx, TVALUE:ecx->value  |  je <9					// Types ok? Continue above.  |  jmp ->DEOPTIMIZE_CALLER		// Otherwise deoptimize.  |.endjsub}/* ------------------------------------------------------------------------ */static void jit_op_newtable(jit_State *J, int dest, int lnarray, int lnhash){  |  call &luaH_new, L, luaO_fb2int(lnarray), luaO_fb2int(lnhash)  |  sethvalue BASE[dest], eax  jit_checkGC(J);}static void jit_op_getglobal(jit_State *J, int dest, int kidx){  const TValue *kk = &J->pt->k[kidx];  jit_assert(ttisstring(kk));  |  mov TSTRING:edx, &&kk->value.gc->ts  |  addidx BASE, dest  |  call ->GETGLOBAL}static void jit_op_setglobal(jit_State *J, int rval, int kidx){  const TValue *kk = &J->pt->k[kidx];  jit_assert(ttisstring(kk));  |  mov TSTRING:edx, &&kk->value.gc->ts  |  addidx BASE, rval  |  call ->SETGLOBAL}enum { TKEY_KSTR = -2, TKEY_STR = -1, TKEY_ANY = 0 };/* Optimize key lookup depending on consts or hints type. */static int jit_keylookup(jit_State *J, int tab, int rkey){  const TValue *tabt = hint_get(J, TYPE);  const TValue *key;  if (!ttistable(tabt)) return TKEY_ANY;  /* Not a table? Use fallback. */  key = ISK(rkey) ? &J->pt->k[INDEXK(rkey)] : hint_get(J, TYPEKEY);  if (ttisstring(key)) {  /* String key? */    if (ISK(rkey)) {      |  lea TOP, BASE[tab]      |  mov TSTRING:edx, &&key->value.gc->ts      return TKEY_KSTR;  /* Const string key. */    } else {      |  lea TOP, BASE[tab]      |  lea TVALUE:ecx, BASE[rkey]      return TKEY_STR;  /* Var string key. */    }  } else if (ttisnumber(key)) {  /* Number key? */    lua_Number n = nvalue(key);    int k;    lua_number2int(k, n);    if (!(k >= 1 && k < (1 << 26) && (lua_Number)k == n))      return TKEY_ANY;  /* Not a proper array key? Use fallback. */    if (ISK(rkey)) {      |  istable tab      |   mov TABLE:edi, BASE[tab].value      |  jne >9					// TYPE hint was wrong?      |  mov ecx, k				// Needed for hash fallback.      |   mov TVALUE:eax, TABLE:edi->array      |  cmp ecx, TABLE:edi->sizearray; ja >5	// Not in array part?      return k;  /* Const array key (>= 1). */    } else {      |  mov eax, BASE[tab].tt; shl eax, 4; or eax, BASE[rkey].tt      |  cmp eax, LUA_TTABLE_NUM; jne >9	// TYPE/TYPEKEY hint was wrong?      if (J->flags & JIT_F_CPU_SSE2) {	|  movsd xmm0, qword BASE[rkey]	|  cvttsd2si eax, xmm0	|  cvtsi2sd xmm1, eax	|  dec eax	|  ucomisd xmm1, xmm0	|  mov TABLE:edi, BASE[tab].value	|  jne >9; jp >9			// Not an integer? Deoptimize.      } else {	|// Annoying x87 stuff: check whether a number is an integer.	|// The latency of fist/fild is the real problem here.	|  fld qword BASE[rkey].value	|  fist dword TMP1	|  fild dword TMP1	|  fcomparepp                           // eax may be modified.	|  jne >9; jp >9			// Not an integer? Deoptimize.	|  mov eax, TMP1	|  mov TABLE:edi, BASE[tab].value	|  dec eax      }      |  cmp eax, TABLE:edi->sizearray; jae >5	// Not in array part?      |  TValuemul eax      |  add eax, TABLE:edi->array      return 1;  /* Variable array key. */    }  }  return TKEY_ANY;  /* Use fallback. */}static void jit_op_gettable(jit_State *J, int dest, int tab, int rkey){  int k = jit_keylookup(J, tab, rkey);  switch (k) {  case TKEY_KSTR:  /* Const string key. */    |  addidx BASE, dest    |  call ->GETTABLE_KSTR    break;  case TKEY_STR:  /* Variable string key. */    |  addidx BASE, dest    |  call ->GETTABLE_STR    break;  case TKEY_ANY:  /* Generic gettable fallback. */    if (ISK(rkey)) {      |  mov ecx, &&J->pt->k[INDEXK(rkey)]    } else {      |  lea ecx, BASE[rkey]    }    |  lea edx, BASE[tab]    |  addidx BASE, dest    |  mov L->savedpc, &J->nextins    |  call &luaV_gettable, L, edx, ecx, BASE    |  mov BASE, L->base    break;  default:  /* Array key. */    |// This is really copyslot BASE[dest], TVALUE:eax[k-1] mixed with compare.    |1:    |  mov edx, TVALUE:eax[k-1].tt    |  test edx, edx; je >6			// Array has nil value?    if (J->flags & JIT_F_CPU_SSE2) {      |  movq xmm0, qword TVALUE:eax[k-1].value      |  movq qword BASE[dest].value, xmm0    } else {      |  mov ecx, TVALUE:eax[k-1].value      |  mov eax, TVALUE:eax[k-1].value.na[1]      |  mov BASE[dest].value, ecx      |  mov BASE[dest].value.na[1], eax    }    |2:    |  mov BASE[dest].tt, edx    |.tail    |5:  // Fallback to hash part. TABLE:edi is callee-saved.    if (ISK(rkey)) {      |  call ->GETTABLE_KNUM    } else {      |  call ->GETTABLE_NUM    }    |  jmp <1					// Slot is at TVALUE:eax[k-1].    |    |6:  // Shortcut for tables without an __index metamethod.    |  mov TABLE:ecx, TABLE:edi->metatable    |  test TABLE:ecx, TABLE:ecx    |  jz <2					// No metatable?    |  test byte TABLE:ecx->flags, 1<<TM_INDEX    |  jnz <2					// Or 'no __index' flag set?    |    |9:  // Otherwise deoptimize.    |  mov edx, &J->nextins    |  jmp ->DEOPTIMIZE    |.code    break;  }  |.jsub GETTABLE_KNUM		// Gettable fallback for const numeric keys.  |  mov TMP2, ecx				// Save k.  |  sub esp, FRAME_OFFSET  |  call &luaH_getnum, TABLE:edi, ecx  |  add esp, FRAME_OFFSET  |  mov ecx, TMP2				// Restore k.  |  TValuemul ecx  |  sub TVALUE:eax, ecx		// Compensate for TVALUE:eax[k-1].  |  add TVALUE:eax, #TVALUE  |  ret  |.endjsub  |  |.jsub GETTABLE_NUM		// Gettable fallback for variable numeric keys.  |  inc eax  |  mov ARG2, TABLE:edi			// Really ARG1 and ARG2.  |  mov ARG3, eax  |  jmp &luaH_getnum				// Chain to C code.  |.endjsub}static void jit_op_settable(jit_State *J, int tab, int rkey, int rval){  const TValue *val = ISK(rval) ? &J->pt->k[INDEXK(rval)] : NULL;  int k = jit_keylookup(J, tab, rkey);  switch (k) {  case TKEY_KSTR:  /* Const string key. */  case TKEY_STR:  /* Variable string key. */    if (ISK(rval)) {      |  mov BASE, &val    } else {      |  addidx BASE, rval    }    if (k == TKEY_KSTR) {      |  call ->SETTABLE_KSTR    } else {      |  call ->SETTABLE_STR    }    break;  case TKEY_ANY:  /* Generic settable fallback. */    if (ISK(rkey)) {      |  mov ecx, &&J->pt->k[INDEXK(rkey)]    } else {      |  lea ecx, BASE[rkey]    }    if (ISK(rval)) {      |  mov edx, &val    } else {      |  lea edx, BASE[rval]    }    |  addidx BASE, tab    |  mov L->savedpc, &J->nextins    |  call &luaV_settable, L, BASE, ecx, edx    |  mov BASE, L->base    break;  default:  /* Array key. */    |1:    |  tvisnil TVALUE:eax[k-1]; je >6		// Previous value is nil?    |2:    |.tail    |5:  // Fallback to hash part. TABLE:edi is callee-saved.    if (ISK(rkey)) {      |  call ->SETTABLE_KNUM    } else {      |  call ->SETTABLE_NUM    }    |  jmp <1					// Slot is at TVALUE:eax[k-1].    |    |6:  // Shortcut for tables without a __newindex metamethod.    |  mov TABLE:ecx, TABLE:edi->metatable    |  test TABLE:ecx, TABLE:ecx    |  jz <2					// No metatable?    |  test byte TABLE:ecx->flags, 1<<TM_NEWINDEX    |  jnz <2					// Or 'no __newindex' flag set?    |    |9:  // Otherwise deoptimize.    |  mov edx, &J->nextins    |  jmp ->DEOPTIMIZE    |.code    if (!ISK(rval) || iscollectable(val)) {      |  test byte TABLE:edi->marked, bitmask(BLACKBIT)  // isblack(table)      |  jnz >7				// Unlikely, but set barrier back.      |3:      |.tail      |7:  // Avoid valiswhite() check -- black2gray(table) is ok.      |  call ->BARRIERBACK      |  jmp <3      |.code    }    if (ISK(rval)) {      |  copyconst TVALUE:eax[k-1], val    } else {      |  copyslot TVALUE:eax[k-1], BASE[rval], ecx, edx, TOP    }    break;  }  |.jsub SETTABLE_KNUM		// Settable fallback for const numeric keys.  |  mov TMP2, ecx				// Save k.  |  sub esp, FRAME_OFFSET  |  call &luaH_setnum, L, TABLE:edi, ecx  |  add esp, FRAME_OFFSET  |  mov ecx, TMP2				// Restore k.  |  TValuemul ecx  |  sub TVALUE:eax, ecx		// Compensate for TVALUE:eax[k-1].  |  add TVALUE:eax, #TVALUE  |  ret  |.endjsub  |  |.jsub SETTABLE_NUM		// Settable fallback for variable numeric keys.  |  inc eax  |  mov ARG2, L				// Really ARG1, ARG2 and ARG3.  |  mov ARG3, TABLE:edi  |  mov ARG4, eax  |  jmp &luaH_setnum				// Chain to C code.  |.endjsub}static void jit_op_self(jit_State *J, int dest, int tab, int rkey){  |  copyslot BASE[dest+1], BASE[tab]  jit_op_gettable(J, dest, tab, rkey);}/* ------------------------------------------------------------------------ */static void jit_op_setlist(jit_State *J, int ra, int num, int batch){  if (batch == 0) { batch = (int)(*J->nextins); J->combine++; }  batch = (batch-1)*LFIELDS_PER_FLUSH;  if (num == 0) {  /* Previous op was open and set TOP: {f()} or {...}. */    |  mov L->env.value, TOP		// Need to save TOP (edi).    |  lea eax, BASE[ra+1]    |  sub eax, TOP    |  neg eax    |  TValuediv eax			// num = (TOP-ra-1)/sizeof(TValue).    |  mov TABLE:edi, BASE[ra].value    |  jz >4				// Nothing to set?    if (batch > 0) {      |  add eax, batch    }    |  cmp dword TABLE:edi->sizearray, eax    |  jae >1				// Skip resize if not needed.    |  // A resize is likely, so inline it.    |  call &luaH_resizearray, L, TABLE:edi, eax    |1:    |  test byte TABLE:edi->marked, bitmask(BLACKBIT)  // isblack(table)    |  mov edx, TABLE:edi->array    |  jnz >6				// Unlikely, but set barrier back.    |  mov TOP, L->env.value    |    |.tail    |6:  // Avoid lots of valiswhite() checks -- black2gray(table) is ok.    |  call ->BARRIERBACK    |  jmp <1  // Need to reload edx.    |.code  } else {  /* Set fixed number of args. */    |  mov TABLE:edi, BASE[ra].value	// edi is callee-save.    |  cmp dword TABLE:edi->sizearray, batch+num    |  jb >5				// Need to resize array?    |1:    |  test byte TABLE:edi->marked, bitmask(BLACKBIT)  // isblack(table)    |  mov edx, TABLE:edi->array    |  jnz >6				// Unlikely, but set barrier back.    |  lea TOP, BASE[ra+1+num]		// Careful: TOP is edi.    |    |.tail    |5:  // A resize is unlikely (impossible?). NEWTABLE should've done it.    |  call &luaH_resizearray, L, TABLE:edi, batch+num    |  jmp <1    |6:  // Avoid lots of valiswhite() checks -- black2gray(table) is ok.    |  call ->BARRIERBACK    |  jmp <1  // Need to reload edx.    |.code  }  if (batch > 0) {    |  add edx, batch*#TVALUE		// edx = &t->array[(batch+1)-1]  }  |  lea ecx, BASE[ra+1]  |3:					// Copy stack slots to array.  |  mov eax, [ecx]  |  add ecx, aword*1  |  mov [edx], eax  |  add edx, aword*1  |  cmp ecx, TOP  |  jb <3  |  |4:  if (num == 0) {  /* Previous op was open. Restore L->top. */    |  lea TOP, BASE[J->pt->maxstacksize]  // Faster than getting L->ci->top.    |  mov L->top, TOP  }}/* ------------------------------------------------------------------------ */static void jit_op_arith(jit_State *J, int dest, int rkb, int rkc, int ev){  const TValue *kkb = ISK(rkb) ? &J->pt->k[INDEXK(rkb)] : NULL;  const TValue *kkc = ISK(rkc) ? &J->pt->k[INDEXK(rkc)] : NULL;  const Value *kval;  int idx, rev;  int target = (ev == TM_LT || ev == TM_LE) ? jit_jmp_target(J) : 0;  int hastail = 0;  /* The bytecode compiler already folds constants except for: k/0, k%0, */  /* NaN results, k1<k2, k1<=k2. No point in optimizing these cases. */  if (ISK(rkb&rkc)) goto fallback;  /* Avoid optimization when non-numeric constants are present. */  if (kkb ? !ttisnumber(kkb) : (kkc && !ttisnumber(kkc))) goto fallback;  /* The TYPE hint selects numeric inlining and/or fallback encoding. */  switch (ttype(hint_get(J, TYPE))) {  case LUA_TNIL: hastail = 1; break;  /* No hint: numeric + fallback. */  case LUA_TNUMBER: break;	      /* Numbers: numeric + deoptimization. */  default: goto fallback;	      /* Mixed/other types: fallback only. */  }  /* The checks above ensure: at most one of the operands is a constant. */  /* Reverse operation and swap operands so the 2nd operand is a variable. */  if (kkc) { kval = &kkc->value; idx = rkb; rev = 1; }  else { kval = kkb ? &kkb->value : NULL; idx = rkc; rev = 0; }  /* Special handling for some operators. */  switch (ev) {  case TM_MOD:    /* Check for modulo with positive numbers, so we can use fprem. */    if (kval) {      if (kval->na[1] < 0) { hastail = 0; goto fallback; }  /* x%-k, -k%x */      |  isnumber idx      |   mov eax, BASE[idx].value.na[1]      |  jne L_DEOPTIMIZEF      |   test eax, eax; js L_DEOPTIMIZEF      |// This will trigger deoptimization in some benchmarks (pidigits).      |// But it's still a win.      if (kkb) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品99久久人人澡| 制服丝袜亚洲精品中文字幕| 欧美久久免费观看| 亚洲曰韩产成在线| 正在播放亚洲一区| 日韩福利电影在线| 精品88久久久久88久久久| 国内外成人在线视频| 中文字幕av资源一区| 99国产麻豆精品| 午夜视频在线观看一区二区| 9191国产精品| 粉嫩久久99精品久久久久久夜| 亚洲欧洲av色图| 欧美亚洲愉拍一区二区| 麻豆精品久久久| 国产日韩av一区二区| 91色.com| 国内外成人在线| 一区二区久久久久| 精品日产卡一卡二卡麻豆| 国产91在线|亚洲| 免费人成精品欧美精品| 欧美极品少妇xxxxⅹ高跟鞋| 欧美精品成人一区二区三区四区| 精品一区二区三区视频| 夜色激情一区二区| 欧美国产一区视频在线观看| 欧美日韩卡一卡二| 97精品国产97久久久久久久久久久久| 亚洲一二三区视频在线观看| 国产视频一区在线播放| 日韩欧美你懂的| 欧美一级片在线看| 欧美日韩国产精品自在自线| 成人av在线网站| eeuss国产一区二区三区| 日韩美女久久久| 日韩西西人体444www| 日韩一区二区三区四区| 久久综合综合久久综合| 亚洲精品综合在线| 在线播放91灌醉迷j高跟美女| 丁香桃色午夜亚洲一区二区三区| 日韩精品国产精品| 亚洲在线视频网站| 亚洲私人影院在线观看| 欧美色老头old∨ideo| 一本色道亚洲精品aⅴ| 国产成人综合网站| 国产精品中文字幕欧美| 美女视频黄久久| 一区二区三区日韩欧美| 亚洲欧美日韩国产综合在线 | 午夜精品免费在线| 国产精品视频一二三区| 国产蜜臀97一区二区三区| 欧美日韩久久久久久| 91精品国产综合久久久久久| 丁香婷婷综合激情五月色| 国产激情一区二区三区四区| 国产精品一区在线| 国产99久久精品| 欧美三电影在线| 欧美一区二区三区在线观看视频| 91首页免费视频| 欧美视频一区二区三区四区 | 1000部国产精品成人观看| 综合电影一区二区三区 | 91啪在线观看| 91精品国产综合久久久久久漫画| 欧美另类高清zo欧美| 久久久蜜桃精品| 一区二区免费看| 久久精品国产在热久久| 成人白浆超碰人人人人| 欧美在线免费视屏| 久久精品网站免费观看| 一级中文字幕一区二区| 亚洲国产美女搞黄色| 午夜伦欧美伦电影理论片| 国产大陆精品国产| 激情综合色综合久久综合| 日韩专区欧美专区| 99国产精品国产精品久久| 欧美电影免费观看高清完整版在| 国产精品福利一区二区三区| 美女被吸乳得到大胸91| 色拍拍在线精品视频8848| 久久亚洲一区二区三区四区| 亚洲国产精品一区二区久久 | 欧美激情综合五月色丁香 | 精品美女一区二区| 亚洲成av人综合在线观看| 95精品视频在线| 国产亚洲福利社区一区| 久久精品国产99| 欧洲一区二区av| 亚洲视频精选在线| 99久久99久久综合| 日韩女同互慰一区二区| 日韩成人av影视| 欧美精品丝袜中出| 亚洲成人手机在线| 精品视频在线免费观看| 亚洲va欧美va国产va天堂影院| 国产精品影视网| 国产精品网站在线播放| 成人app下载| 中文字幕五月欧美| 色欧美乱欧美15图片| 亚洲卡通动漫在线| 欧美一区在线视频| 国产黄人亚洲片| 国产精品久久久久婷婷| 在线影视一区二区三区| 五月开心婷婷久久| 精品国产一区二区三区不卡 | 亚洲网友自拍偷拍| 91精品国产综合久久久久久| 蜜桃av一区二区在线观看| 久久午夜国产精品| 99热精品一区二区| 日本不卡的三区四区五区| 中文字幕不卡三区| 4438亚洲最大| 91亚洲国产成人精品一区二区三 | 久久久久97国产精华液好用吗| 国产精品国产三级国产aⅴ入口 | 樱桃视频在线观看一区| 色悠久久久久综合欧美99| 亚洲一区二区三区中文字幕在线| 日韩视频中午一区| 日本国产一区二区| 国内精品国产成人国产三级粉色| 亚洲欧洲精品一区二区三区| 精品精品国产高清一毛片一天堂| 蜜臀精品久久久久久蜜臀| 欧美丝袜第三区| 国产成人亚洲综合a∨婷婷| 亚洲一区二区精品久久av| 国产视频不卡一区| 91麻豆精品国产自产在线| 国产成人精品综合在线观看 | 欧美人动与zoxxxx乱| 91在线高清观看| 国产成人免费9x9x人网站视频| 日韩精品免费视频人成| 亚洲第一狼人社区| 日日摸夜夜添夜夜添国产精品| 日本一区二区动态图| 欧美大片在线观看一区| 91精品久久久久久蜜臀| 欧美一级在线观看| 欧美丝袜丝交足nylons图片| 91在线视频免费观看| 风间由美性色一区二区三区| 国产麻豆欧美日韩一区| 国产99久久精品| 天堂成人国产精品一区| 亚洲精品国产高清久久伦理二区| 欧美色男人天堂| 日韩一级二级三级精品视频| 精品国精品国产| 国产三级精品视频| 亚洲激情图片小说视频| 亚洲一区视频在线| 五月婷婷久久丁香| 国产iv一区二区三区| 色先锋久久av资源部| 日韩一区二区在线观看视频| 欧美精品一区二区在线观看| 国产精品无码永久免费888| 亚洲国产精品一区二区久久| 麻豆成人综合网| 色偷偷成人一区二区三区91| 日韩午夜激情视频| 亚洲va中文字幕| 成人免费高清视频在线观看| 在线亚洲精品福利网址导航| 精品少妇一区二区三区免费观看 | 99视频国产精品| 欧美成人一区二区三区| 一区二区三区不卡在线观看| 九九九久久久精品| 91精品在线麻豆| 亚洲与欧洲av电影| gogo大胆日本视频一区| 欧美r级在线观看| 日韩精品电影在线| 色94色欧美sute亚洲线路二| 国产欧美精品一区| 国产馆精品极品| 久久夜色精品国产噜噜av| 秋霞电影一区二区| 777xxx欧美| 卡一卡二国产精品| 精品国产麻豆免费人成网站| 久久爱www久久做| 久久久精品免费网站|