锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品一区二区三区久久,久久精品国产精品国产精品污,激情五月综合综合久久69http://m.shnenglu.com/pwq1989/category/20748.htmlzh-cnMon, 22 Dec 2014 20:06:39 GMTMon, 22 Dec 2014 20:06:39 GMT60鑷捀web灝忔鏋?dodolu(鍩轟簬nginx lua) + lua debuggerhttp://m.shnenglu.com/pwq1989/archive/2014/12/22/209273.html鍙沖腑鍙沖腑Mon, 22 Dec 2014 10:22:00 GMThttp://m.shnenglu.com/pwq1989/archive/2014/12/22/209273.htmlhttp://m.shnenglu.com/pwq1989/comments/209273.htmlhttp://m.shnenglu.com/pwq1989/archive/2014/12/22/209273.html#Feedback0http://m.shnenglu.com/pwq1989/comments/commentRss/209273.htmlhttp://m.shnenglu.com/pwq1989/services/trackbacks/209273.html鑳屾櫙

鍓嶆鏃墮棿欏圭洰闇瑕佷竴涓偣鍑繪湇鍔★紝澶ц嚧鏄鏍規嵁鐢ㄦ埛璇鋒眰鐨剈rl鍙婃暟鎹簱涓殑瑙勫垯錛屽尮閰嶅嚭涓涓粨鏋滃茍璁板綍鏃ュ織銆傛渶寮濮嬫槸涓涓緢灝忕殑闇姹傦紝緇撴灉涓氬姟瓚婃潵瓚婂鏉傦紝涓氬姟閫昏緫涓粡甯歌澶勭悊header澶村拰涓浜涘叾浠栫殑淇℃伅錛屽鑷翠唬鐮佽秺鏉ヨ秺娣蜂貢銆傚湪涓鏈熺粨鏉熶箣鍚庯紝鎶芥椂闂存妸榪欐鏃墮棿鐨勫伐浣滄娊璞″嚭浜嗕竴涓交閲忕駭妗嗘灦錛屽彧鍋氫簡閫傞噺鐨勫皝瑁咃紝鍔犲叆浜嗕唬鐮佺敓鎴愮殑妯″潡錛屽彲浠ュ府鍔╁紑鍙戣呰繀閫熷仛鍑轟竴涓彲鐢ㄧ殑web鏈嶅姟銆?/p>

浠嬬粛

dodolu妗嗘灦鍦板潃(Github)銆?/p>

璇ユ鏋跺彧鍋氫簡鏈灝忓寲鐨勫皝瑁咃紝鍑犱箮娌℃湁鎬ц兘鎹熷け錛屽茍鎻愪緵浜嗘牴鎹厤緗枃浠?meta.lua)錛岃嚜鍔ㄧ敓鎴恟oute妯″潡錛宯ginx.conf閰嶇疆錛宭ogger妯″潡鐨勫姛鑳斤紝鍑忚交浜嗗紑鍙戝伐浣滈噺錛岄伩鍏嶉噸澶嶆墜鍐欏ぇ閲忔槗閿欑殑閰嶇疆鎴栧瓧絎︿覆鍙橀噺錛屾湁鍔╀簬澶氫漢寮鍙戠粺涓椋庢牸銆?/p>

璇︽儏Github鐨凴EADME

鍔熻兘

鍖呮嫭涓変釜閮ㄥ垎錛屼竴涓槸web妗嗘灦錛屼竴涓槸浠g爜鑷姩鐢熸垚妯″潡錛屼竴涓槸欖旀敼鍑虹殑lua榪滅▼璋冭瘯鍣?/a>銆?/p>

web妗嗘灦閮ㄥ垎

鍙湁1k琛屼互涓嬬殑浠g爜錛岄泦鎴愪簡resty.template銆乺esty.cookie銆乁UID鐢熸垚絳夌涓夋柟妯″潡銆傛彁渚況equest銆乺esponse銆乧ontext銆乽til絳夊簱鏂逛究寮鍙戜漢鍛樹嬌鐢ㄣ?/p>

浠g爜鑷姩鐢熸垚閮ㄥ垎

鍙嚜鍔ㄧ敓鎴?

  1. 璺敱閰嶇疆
  2. 鏃ュ織璁板綍妯″潡
  3. nginx.conf

涓昏鐩殑鍦ㄤ簬瑙e喅nginx閰嶇疆涓巐ua浠g爜鐨勫垎紱婚棶棰?鍦ㄦ棩蹇楄褰曚腑灝や負涓ラ噸)銆?/p>

寮鍙戜漢鍛樻柊寤哄簲鐢ㄦ楠わ細鍦ˋpp鏂囦歡澶逛笅錛屾柊寤簂ua鏂囦歡錛岀劧鍚庡~鍏?code>do_get()鏂規硶鍗沖彲澶勭悊鐩稿簲鐨刧et璇鋒眰錛屾墍鏈夐厤緗湪meta/meta.lua閲岄潰銆?/p>

涓涓褰曟棩蹇楀茍榪斿洖1x1gif鐨勪緥瀛愶細

-- 榪欎釜鏂囦歡涓嬮潰瀛樻斁浣犵殑涓氬姟閫昏緫
-- 榪欎釜鏂囦歡涓嬮潰瀛樻斁浣犵殑涓氬姟閫昏緫
local app = {} function app.do_get(ctx)      local response = ctx.response     local request = ctx.request     local cookie = ctx.cookie
    response:set_content_type("text/html")     local url = request.uri     -- do some process
    ------------- write log ---------------     -- my_log 鏃ュ織妯″潡鏄牴鎹甿eta.lua鑷姩鐢熸垚鐨?     local logger = ctx.get_logger('my_log')       local log_data = { a = "xxx"}     logger.write(log_data, other_params)
    ------------- return empty gif -------     response:empty_gif()     response:close() end
function app.do_post(ctx) end function app.do_put(ctx) end function app.do_delete(ctx) end
return app

lua榪滅▼璋冭瘯鍣?/h3>

鏂囨。璇︾粏瑙?a >榪欓噷錛岃繖閲屽彧婕旂ず涓嬬敤娉曪細
sh debug.sh錛岀劧鍚庤繍琛岀敤鎴風▼搴忥紝鎴愬姛鍚?br />

Lua Remote Debugger
Run the program you wish to debug
Paused at file a.lua
Type 'help' for commands

涓嬩竴姝? n

n
Paused at file a.lua line 8
8: print("Start")


鏌ョ湅婧愮爜  l

> l  
source file: a.lua
2:   
3:   local tab = {
4:       foo = 1,
5:       bar = 2
6:   }
7:   
8:>> print("Start")
9:   
10:  local bb = require "b"
11:  bb.foo()
12:   
13:  for i = 1, 10 do
14:      print("Loop")


璁劇疆鏂偣   b <file>:<line>   鏌ョ湅    listb

> b a.lua:11
> listb 
a.lua: 11

鏌ョ湅灞閮ㄥ彉閲? local

> local {         ["tab"] = {                 {                         ["bar"] = 2,                         ["foo"] = 1,                 },                 "table: 0x2589ee0",         }, }

鏌ョ湅鍙橀噺   p tab

> p tab
{
        ["bar"] = 2,
        ["foo"] = 1,
}
緇х畫鎵ц錛岀洿鍒版柇鐐? r
> r Paused at file a.lua line 11




鍙沖腑 2014-12-22 18:22 鍙戣〃璇勮
]]>錛堜簩錛塋uajit涓殑濂借疆瀛怐ynASMhttp://m.shnenglu.com/pwq1989/archive/2013/11/30/204508.html鍙沖腑鍙沖腑Sat, 30 Nov 2013 04:49:00 GMThttp://m.shnenglu.com/pwq1989/archive/2013/11/30/204508.htmlhttp://m.shnenglu.com/pwq1989/comments/204508.htmlhttp://m.shnenglu.com/pwq1989/archive/2013/11/30/204508.html#Feedback0http://m.shnenglu.com/pwq1989/comments/commentRss/204508.htmlhttp://m.shnenglu.com/pwq1989/services/trackbacks/204508.htmlhttp://m.shnenglu.com/pwq1989/

涓婁竴綃囧Luajit鐨勪唬鐮佺粨鏋勫拰緙栬瘧榪囩▼鍋氫簡綆鍗曠殑鎻忚堪錛岃繖涓綃囧氨璁蹭竴涓媌uildvm鍦ㄧ涓姝ラ澶勭悊dasc鏂囦歡鐨勮繃紼嬪拰DynASM榪欎釜杞瓙銆?br />
瀹樻柟榪炴帴錛?a >http://luajit.org/dynasm.html

鏄負浜嗚浣犳洿浼橀泤鐨凜閲岄潰鎾告眹緙栫殑涓涓伐鍏鳳紝鎴戣寰椾互鍓嶇湅榪囦竴涓佸鐨刡log瀵規瘮榪囧悓鏍峰姛鑳界殑jit code generator鐨勮娉曪紝Luajit鐨勪綔鑰呮樉鐒跺搧浣嶈繕鏄緢楂樼殑銆?br />
鎴戜滑鍏堟潵鐪嬬湅濡傛灉涓嶇敤宸ュ叿紜敓鐢熸捀浠g爜鐨勮瘽浼氬彂鐢熶粈涔堛?br />1銆佷綘寰涓孌靛唴瀛橀噷闈㈠啓0xB8,0x00,0x01....
2銆佷綘鍦ㄦ枃浠墮噷瀹氫箟濂藉label錛屽啓涓猚opy section鐨勫畯寰鍐呭瓨閲岄潰澶嶅埗錛屼綘榪樹笉鑳界‘瀹氶噷闈㈠埌搴曟槸浠涔堛傦紙鍝︺傘傝繖涓殑鏈鍙玊hreaded銆傘傘傦級

鐒跺悗鍐嶅姣斾笅AsmJit鎴栬?a title="Xbyak" target="_blank">Xbyak鐨勪緥瀛愮湅鐪嬶紙浠栦滑鐨勫姛鑳藉樊涓嶅錛夛紝DynASM榪樻彁渚涗簡.marco瀹炵幇錛屽氨浼氬彂鐜拌娉曠湡鏄痵weeeet~

榪欐槸鎴戝啓鐫鐜╃殑涓涓崏娉ラ┈璇璲it瑙i噴鍣紙https://github.com/pwq1989/GMHjit錛夎娉曠湡鏄竻鏂拌嚜鐒跺晩錛屽鏋滀綘鎯崇湅宸ヤ笟綰х殑搴旂敤錛屽彲浠ョ湅鐪婫oogle鐨凥aberman鍐欑殑protobuf鐨剈pb搴擄紝閲岄潰鐢―ynASM榪涜浜唈it錛屽彿縐板揩浜嗗灝戝灝戯紙涓嶅幓鑰冭瘉浜嗭級錛屾垨鑰呮槸agentzh鍐欑殑sregex姝e垯搴擄紝涔熸槸鐢ㄥ畠鍋氫簡jit銆備竴鑸潵璇碊SL閰嶄笂jit鐨勮瘽涓瀹氫細蹇緢澶氬氨閿欎笉浜嗕簡銆?br />
涓嬮潰緇欎竴涓狣ynASM鐨凞emo紼嬪簭錛堟憳鎶勮嚜榪欎釜blog錛?br />
 1 // DynASM directives.
 2 |.arch x64
 3 |.actionlist actions
 4  
 5 // This define affects "|" DynASM lines.  "Dst" must
 6 // resolve to a dasm_State** that points to a dasm_State*.
 7 #define Dst &state
 8  
 9 int main(int argc, char *argv[]) {
10   if (argc < 2) {
11     fprintf(stderr, "Usage: jit1 <integer>\n");
12     return 1;
13   }
14  
15   int num = atoi(argv[1]);
16   dasm_State *state;
17   initjit(&state, actions);
18  
19   // Generate the code.  Each line appends to a buffer in
20   // "state", but the code in this buffer is not fully linked
21   // yet because labels can be referenced before they are
22   // defined.
23   //
24   // The run-time value of C variable "num" is substituted
25   // into the immediate value of the instruction.
26   |  mov eax, num
27   |  ret
28  
29   // Link the code and write it to executable memory.
30   int (*fptr)() = jitcode(&state);
31  
32   // Call the JIT-ted function.
33   int ret = fptr();
34   assert(num == ret);
35  
36   // Free the machine code.
37   free_jitcode(fptr);
38  
39   return ret;
40 }

棰勫鐞嗕箣鍚庨偅灝變細鍙樻垚榪欐牱瀛愶細
 1 //|.arch x64
 2 //|.actionlist actions
 3 static const unsigned char actions[4] = {
 4   184,237,195,255
 5 };
 6  
 7 // []
 8  
 9 //|  mov eax, num
10 //|  ret
11 dasm_put(Dst, 0, num);
dasm_put灝辨槸鎶妌um鍙傛暟鍜宎ctions[]涓璧鋒斁鍏ヤ簡Dst錛?define Dst &state錛夌殑鍒跺畾鐨勫唴瀛樹腑錛岃繖鏃跺欏凡緇忔槸鏈哄櫒鐮佺殑褰㈠紡浜嗐?br />涓嬮潰鏄浜巃citons[]鏁扮粍鍐呭鐨勮В閲婏細
184(B8)-- mov eax, [immediate] 鎸囦護鐨勭涓涓瓧鑺?br />237       -- 鍐呯疆鐨勬爣蹇桪ASM_IMM_D, 鎸囨槑搴旇鏀懼叆涓涓?瀛楄妭瀹藉害鐨勫弬鏁幫紝涓庝笂涓鏉℃寚浠ゅ畬鎴愪竴涓狹OV
195(C3)-- 瀵瑰簲ret鎸囦護
255       -- 鍐呯疆鐨勬爣蹇桪ASM_STOP

浠ヤ笂灝辨槸鏈綆鍗曠殑渚嬪瓙錛宒asm_growpc()鏄唴緗殑鍑芥暟錛岀敤鏉ュ闀縨axpc, 榪欐牱鍦ㄧ▼搴忛噷闈㈠氨鍙互鏂逛究鍐欏嚭jmp => label 榪欐牱鐨勬寚浠や簡銆?br />
鐢變簬DynASM鐨勬枃妗e緢灝戯紝騫鎬簭榪樻湁鍑犱釜渚嬪瓙錛岄櫎浜嗕緥瀛愬敮涓鑳界湅鐨勫氨鏄簮鐮佷簡錛屾墍浠ュ湪鐢ㄧ殑鏃跺欏嚭鐜伴棶棰樻槸寰堢棝鑻︾殑銆傘傚綋鏃跺啓GMHjit灝卞彂鐜頒簡铔嬬柤鐨刾re-process period bug錛屽悗鏉ョ粫榪囧幓浜嗐?br />
婧愮爜鏂囦歡鏈夎繖涔堝嚑涓?br />-- dynasm.lua
-- dynasm_proto.h
-- dynasm_*.lua
-- dynasm_*.h  // * x64  x86  ppc mips arm 絳塼arget

鐢ㄨ搗鏉ュ氨鏄痩ua dynasm.lua a.dasm > a.h 

涓嬮潰灝變粠dynasm.lua寮濮嬪垎鏋愪笅浠栫殑婧愮爜

鍏ュ彛鏄痯arseargs鍑芥暟錛岄噷闈㈢粰鐨刧_opt鍙傛暟璧嬮粯璁ょ殑鍊鹼紝涓涓猺epeat 涓皟鐢╬arseopt瑙f瀽鍙傛暟錛宱pt_map灝辨槸option瀵筧rgs鐨勫嚱鏁版槧灝勩?br />
鍑芥暟wline錛寃comment錛寃sync錛寃dumplines閮芥槸瀵硅緭鍑虹殑鐩爣鏂囦歡鐨勬搷浣溿?br />
鐪熸鐨勪富鍑芥暟鏄?translate錛屾妸input file鍙樻垚 output file錛屽湪readfile涓殑doline鍑芥暟鏄湡姝g殑澶勭悊榪囩▼錛岄噷闈㈠垽鏂槸鍚︽槸Assembler line涔嬪悗Emit C code錛岃皟鐢╠ostmt(aline)銆傞噷闈㈢戶緇湁map_coreop[*]鏉ュ鐞唖ection macro arch nop_ error_1 include  if endif elseif 絳夊叧閿瓧錛屾兂娣卞叆鐮旂┒鐨勫彲浠ヨ嚜宸卞幓鐪嬶紝鍏朵腑鍦╨oadarch涓牴鎹產rch鍔犺澆涓嶅悓鐨刲ua搴?br />
濡傛灉arch鏄痻64鐨勮瘽錛屾湰璐ㄨ繕鏄痳equire x86
鏉ョ湅dasm_x86.lua鏂囦歡

_M.mergemaps榪欐槸鍏抽敭鐨勬柟娉曪紝璁劇疆浜?涓狹ap鐨勫厓鏂規硶錛岀劧鍚庤繑鍥烇紝鐩稿綋浜庢槸鎶婃柟娉曠粦瀹氬湪table閲岄潰浼犻掍簡鍑哄幓銆傚鐞嗗悗鏂囦歡涓叧閿殑actionlist[]鏁扮粍鍜孌asm_put(Dst, ...)鐨勮緭鍑哄氨鏄繖涓猯ua鏂囦歡鐨勬柟娉曘?/div>閲岄潰鎻愪緵浜嗗緢澶歞ump鏂規硶錛屽彲浠ヤ緵鎴戜滑閬囧埌闂鏃跺欒皟璇曞鐞嗚繃紼嬨?br />
action_names灝辨槸浠ュ悗鐢熸垚鐨刟ction_list涓殑鍐呯疆鏍囧織瀹氫箟錛屽繀欏諱笌dasm_x86.h涓殑enum瀹氫箟涓鑷淬?/div>琛ㄦ槑浜嗕唬琛ㄧ殑鍙傛暟鍜岄暱搴︾瓑淇℃伅銆?br />榪欎釜鏂囦歡閲岄潰鎵鏈夌殑鍑芥暟灝辨槸鍋氫簡涓浠朵簨錛屾妸浣犵殑 |...  榪欐牱瀛愮殑浠g爜澶勭悊鎴愭暟緇勮緭鍑哄埌鐩爣鏂囦歡涓紙鎴戞槸姹囩紪娓f福錛岄噷闈㈣矊浼兼敮鎸丼SE2銆?銆?+錛岀湅涓嶆噦錛岀瓑鍒頒互鍚庣湅鍒皌raced jit鐨勬椂鍊欏啀鍘葷炕鎵嬪唽鎶婏級

棰勫鐞嗗畬鎴愪箣鍚庯紝灝辨槸#include "dasm_x86.h"錛岄噷闈㈡湁鏈鍏抽敭鐨刣asm_State緇撴瀯浣撶殑瀹氫箟錛屽嚑涔庨噷闈㈡墍鏈夌殑鍑芥暟閮芥槸瀵瑰鐨凙PI錛屾湁init,setup,free絳夌瓑錛岄櫎鍘誨垵濮嬪寲涓巉ree涔嬪錛屾湁涓変釜姝ラ鏄渶瑕佸嚭鐜板湪浣犻兘浠g爜涓細
1銆乨asm_put(Dst,...) 榪欎釜鏄嚜鍔ㄧ敓鎴愮殑錛屼笉鐢ㄦ垜浠搷蹇冿紝鏍規嵁actionlist[]鍜岃繍琛屾椂鐨勫弬鏁板啓鍏ュ埌Dst鎸囧畾鐨勫唴瀛橈紙Dst->section錛変腑.
2銆乨asm_link() 絎簩涓弬鏁版槸榪斿洖鐨勪唬鐮侀暱搴﹀ぇ灝忥紝榪欎釜鍑芥暟鎶妔ection鍚堝茍鍒頒竴璧鳳紝澶勭悊鍋忕Щ絳夌瓑銆?br />3銆乨asm_encode() 絎簩涓弬鏁版槸涓涓帴鍙梕ncode杈撳嚭鐨刡uffer鎸囬拡銆?br />
鐒跺悗灝卞彲浠ョ敤涓涓嚱鏁版寚閽堬紝姣斿澹版槑涓涓?int (*f)(*int), int ret = f(param) 鐩存帴榪愯鍒氬垰鐢熸垚鐨勬満鍣ㄧ爜浜嗐?br />







鍙沖腑 2013-11-30 12:49 鍙戣〃璇勮
]]>錛堜竴錛夊垵璇哃uajithttp://m.shnenglu.com/pwq1989/archive/2013/11/28/204487.html鍙沖腑鍙沖腑Thu, 28 Nov 2013 11:23:00 GMThttp://m.shnenglu.com/pwq1989/archive/2013/11/28/204487.htmlhttp://m.shnenglu.com/pwq1989/comments/204487.htmlhttp://m.shnenglu.com/pwq1989/archive/2013/11/28/204487.html#Feedback2http://m.shnenglu.com/pwq1989/comments/commentRss/204487.htmlhttp://m.shnenglu.com/pwq1989/services/trackbacks/204487.htmlhttp://m.shnenglu.com/pwq1989/

絎竴綃囧Luajit鍋氫竴涓ぇ姒傜殑浠嬬粛錛屾垜鐩墠涔熸鍦ㄦ參鎱㈢殑璇婚氭簮鐮佷腑錛屼互鍚庡彂鐜頒簡鏂頒笢瑗垮氨琛ュ厖鍦ㄨ繖閲屻?br />
澶у鍙互浠庡畼緗戜笅杞藉埌婧愮爜錛?a >http://luajit.org/錛夛紝涔熷彲浠ヤ粠Github錛?a >https://github.com/LuaDist/luajit錛塪own涓嬫潵錛岄『渚胯繕鍙互鐪嬩笅commit璁板綍銆?br />
澶у瀵圭潃luajit鐨剋iki緇撳悎婧愮爜鐪嬬殑璇濅細鏇村ソ浜涳紝鍥犱負銆傘傛枃妗eお鐗逛箞灝戜簡錛侊紒

鐩綍緇撴瀯錛?br /> -- src
    -- host
    -- jit
    *.c
    *.h
    *.dasc
絳夌瓑錛屽埆鐨勪笉鏄緢閲嶈

鏈寮濮嬫垜鏄粠main鍑芥暟寮濮嬬湅鐨勶紝鐒跺悗銆傘傜浜嗕竴榧誨瓙鐏幫紝鍚庢潵鐮旂┒涓嬩粬鐨刴akefile錛屽彂鐜頒粬鏄繖鏍峰瓙鐨勭紪璇戠殑錛岃創涓涓嬪叧閿殑msvcbuild.bat鐨勪唬鐮侊紙榪欎釜鏇村鏄撶湅鎳傦級
 1 :X64
 2 minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_x86.dasc
 3 @if errorlevel 1 goto :BAD
 4 
 5 %LJCOMPILE% /I "." /I %DASMDIR% host\buildvm*.c
 6 @if errorlevel 1 goto :BAD
 7 %LJLINK% /out:buildvm.exe buildvm*.obj
 8 @if errorlevel 1 goto :BAD
 9 if exist buildvm.exe.manifest^
10   %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe
11 
12 buildvm -m peobj -o lj_vm.obj
13 @if errorlevel 1 goto :BAD
14 buildvm -m bcdef -o lj_bcdef.h %ALL_LIB%
15 @if errorlevel 1 goto :BAD
16 buildvm -m ffdef -o lj_ffdef.h %ALL_LIB%
17 @if errorlevel 1 goto :BAD
18 buildvm -m libdef -o lj_libdef.h %ALL_LIB%
19 @if errorlevel 1 goto :BAD
20 buildvm -m recdef -o lj_recdef.h %ALL_LIB%
21 @if errorlevel 1 goto :BAD
22 buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB%
23 @if errorlevel 1 goto :BAD
24 buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
25 @if errorlevel 1 goto :BAD

鍏堝垱寤轟簡涓涓猙uildvm.exe鐨勪腑闂村伐鍏鳳紝鏉ヨ嚜鍔ㄧ敓鎴愪唬鐮侊紝鍒嗗埆鐢熸垚浜?span style="font-size: 13.333333015441895px; background-color: #eeeeee;">lj_vm.obj錛?/span>lj_bcdef.h錛?/span>lj_ffdef.h 錛?/span>lj_recdef.h 錛?/span>jit\vmdef.lua錛?/span>lj_folddef.h錛?lj_libdef.h

鍏朵腑lv_vm.obj鏄緷璧栦簬host\buildvm_arch.h鐨勶紝榪欎釜鏄敤DynASM棰勫鐞唙m_x86.dasc鐢熸垚鐨勶紝榪欎釜宸ュ叿鐨勫叿浣撳垎鏋愪細鍦ㄤ笅涓綃囧崥瀹㈡彁鍙娿?br />
鍏堟潵鐪嬩笅涓婇潰鑷姩鐢熸垚鐨勪唬鐮侊細
lj_bcdef.h:
 1 LJ_DATADEF const uint16_t lj_bc_ofs[] = {
 2 0,
 3 71,
 4 142,
 5 213,
 6 284,
 7 
 8 };
 9 
10 LJ_DATADEF const uint16_t lj_bc_mode[] = {
11 BCDEF(BCMODE)
12 BCMODE_FF,
13 BCMODE_FF,
14 BCMODE_FF,
15 BCMODE_FF,
16 BCMODE_FF,
17 
18 };

lj_bc_ofs[]鍙兘鏄痓c鍦╲m浠g爜孌典腑鐨勫亸縐婚噺錛堣繖涓垜榪樻病娣卞叆榪涘幓璋冭瘯涓涓嬶級錛寁m鐨勪竴閮ㄥ垎鏄敤DynASM鐩存帴鎾告眹緙栨捀鍑烘潵鐨勶紝wiki涓篃鏈夋彁鍒頒笅涓姝it鍖栫殑opcode絳夌瓑銆?br />
lj_bc_mode[]鐨勭敤鏉ユ牴鎹帇緙╁悗鐨刡ytecode鏋勯狅紝鍒嗙鍑烘搷浣滄暟錛岀涓琛岀殑涓や釜瀹忕殑瀹氫箟鏄?br />
#define BCMODE(name, ma, mb, mc, mm) \
  (BCM##ma|(BCM##mb<<3)|(BCM##mc<<7)|(MM_##mm<<11)),
#define BCMODE_FF 0

#define BCDEF(_) \
  /* Comparison ops. ORDER OPR. */ \
  _(ISLT, var, ___, var, lt) \
  _(ISGE, var, ___, var, lt) \
  _(ISLE, var, ___, var, le) \
  _(ISGT, var, ___, var, le) \
...
鎬諱箣灝辨槸鍏呮枼鐫鍚勭鎷兼帴璧鋒潵鐨勫畯

lj_ffdef.h:
1 FFDEF(assert)
2 FFDEF(type)
3 FFDEF(next)
4 FFDEF(pairs)
5 FFDEF(ipairs_aux)
6 
FFDEF鐨勫畾涔夋槸鍦?br />
1 /* Fast function ID. */
2 typedef enum {
3   FF_LUA_ = FF_LUA,    /* Lua function (must be 0). */
4   FF_C_ = FF_C,        /* Regular C function (must be 1). */
5 #define FFDEF(name)    FF_##name,
6 #include "lj_ffdef.h"
7   FF__MAX
8 } FastFunc;
宸笉澶氬氨鏄敤FF_##name鎶婁笂闈㈢殑鍚嶅瓧鎷兼帴璧鋒潵錛岀劧鍚庣敓鎴愬湪enum閲岄潰錛岃繖鏍峰氨鑳藉綋鎴愭槸鏁板瓧錛屽湪鏁扮粍涓繀閫熸壘鍒板叆鍙d簡

vmdef.lua:
榪欎釜閲岄潰鍐呭灝變笉璐翠簡錛屽寘鎷琤cname,irname,irfpm,irfield,ircall 鐨勫畾涔夛紝鍦╦it鏂囦歡澶逛笅闈紝鐢ㄤ簬璋冭瘯絳夛紝姣斿鍦╠ump.lua涓氨鏈夌敤鍒?br />
local jit = require("jit")
assert(jit.version_num == 20002, "LuaJIT core/library version mismatch")
local jutil = require("jit.util")
local vmdef = require("jit.vmdef")  // ← ← ← ←

褰撲綘鐢╨uajit -jdump鐨勬椂鍊欙紝灝辨槸璋冪敤鐨刲ua鐨刯it搴撻噷闈㈢殑lua鍑芥暟

lj_recdef.h:
 1 static const uint16_t recff_idmap[] = {
 2 0,
 3 0x0100,
 4 0x0200,
 5 0x0300,
 6 0,
 7 0,
 8 0x0400,
 9 
10 };
11 
12 static const RecordFunc recff_func[] = {
13 recff_nyi,
14 recff_c,
15 recff_assert,
16 recff_type,
17 recff_ipairs_aux,
18 
19 };
鍏朵腑recff_func[]鏄娉ㄥ唽鐨勮traced jit 璺熻釜鐨勫嚱鏁幫紝鍏蜂綋鍙槸鍦╨j_ffrecord.c閲岄潰鐪嬪埌
recff_idmap[]琚敤鍦╨j_ffrecord_func榪欎釜鍑芥暟涓紝鏈変竴涓叧閿殑鏁版嵁緇撴瀯RecordFFData錛岀敤鏉ヨ褰曞湪trace榪囩▼涓璋冪敤鍑芥暟鐨勫弬鏁板拰榪斿洖鍊間釜鏁幫紝鍜屼竴浜涜緟鍔╂暟鎹紝opcode錛宭iteral絳夌瓑銆傞氳繃recff_idmap[]淇濆瓨鐨勫兼潵鍖哄垎鍑芥暟錛堝緟浠旂粏鐮旂┒錛?br />

lj_folddef.h:
 1 static const FoldFunc fold_func[] = {
 2   fold_kfold_numarith,
 3   fold_kfold_ldexp,
 4   fold_kfold_fpmath,
 5   fold_kfold_numpow,
 6 
 7 };
 8 
 9 static const uint32_t fold_hash[916] = {
10 0xffffffff,
11 0xffffffff,
12 0x5b4c8016,
13 
14 };
鐢ㄥ湪FOLD optimization涓紝瑙乴j_opt_fold.c錛屼富瑕佸湪
1 if ((fh & 0xffffff) == k || (fh = fold_hash[h+1], (fh & 0xffffff) == k)) {
2       ref = (IRRef)tref_ref(fold_func[fh >> 24](J));
3       if (ref != NEXTFOLD)
4     break;
5     }
鏄牴鎹暟緇勫亸縐昏幏鍙栧嚱鏁幫紝鐩存帴鎵ц銆?br />錛堣繖涓狾ptimation鐣ュ鏉傦紝浠ュ悗鐨勫崥鏂囦腑鍐嶈錛?br />
----------------------------------------鍒嗗壊綰?------------------------------------------

浠ヤ笂灝辨槸buildvm鐢熸垚浠g爜錛屽湪寰堝.c鐨勬枃浠朵腑錛屼粬鍔犲叆浜嗕竴浜涙棤鎰忎箟鐨凪ARCO錛岀洰鐨勬槸涓轟簡鑳借buildvm璇嗗埆鍑?br />
涓嬮潰璇磋src鏍圭洰褰曚笅闈㈢殑鏂囦歡錛?br />
lauxlib.h錛?br />鐢ㄦ埛寮鍙戞墿灞曞拰涓嶤浜や簰鐨勬椂鍊欑殑澶存枃浠?br />
lib_*.h /.c:
欏懼悕鎬濅箟錛屽氨鏄埄鐢↙uaAPI鍐欑殑鍐呴儴鏍囧噯搴擄紝浼氬湪鏂規硶涓婅〃鏄庢槸鍚︿細琚玹race ( LJLIB_REC(.) )銆?br />
ljamalg.c:
鏂囦歡鐨勫悎騫?br />
lj_alloc.h /.c:
瀹氬埗鐨凪emory Allocator

lj_api.c:
Public Lua/C API.

lj_arch.h:
Target architecture selection

lj_jit.h:
jit緙栬瘧鍣ㄩ噷闈㈡暟鎹粨鏋勭殑瀹氫箟

lj_asm.h/ .c  lj_asm_*.c lj_emit_*.h lj_target_*.h/.c :
灝咺R緙栬瘧鎴怣achine Code錛屽叧閿殑鏁版嵁緇撴瀯ASMState錛岀嚎鎬ф壂鎻忕殑O(n2)鍒嗛厤綆楁硶

lj_bc.h/ .c錛?br />Luajit瀛楄妭鐮佺殑瀹氫箟鍜屽唴瀛樺竷灞

lj_bcdump.c lj_bcread.c  lj_bcwrite.c:
鍥寸粫鐫瀛楄妭鐮佺殑鎿嶄綔

lj_carith.c:
C瀹炵幇鐨勪竴浜涙暟瀛楄繍綆?/div>
lj_ccall.h/ .c  lj_ccallback.h / .c :
FFI C璇█鍑芥暟璋冪敤鍜屽洖璋冪粦瀹?br />
lj_debug.h/.c :
璋冭瘯涓庤嚜鐪佺敤

lj_def.h:
榪欎釜寰堥噸瑕侊紝閲嶈鐨勭被鍨嬪拰涓浜涘畯瀹氫箟鍦ㄨ繖閲?br />
lj_c*.h/ .c:
鍜孋璇█鍏堝叧鐨勶紝姣斿綾誨瀷杞寲錛宑har綆$悊錛屾暟鎹鐞?br />
lj_frame.h:
Luajit鐨勬爤甯х鐞?br />
lj_func.h/.c:
Function handle鍜岄棴鍖呮湁鍏崇殑upvalue鏁版嵁緇撴瀯

lj_gc.h/.c:
GC鐩稿叧錛孏C鍙互鐪嬩笅luajit鐨剋iki錛岄噷闈㈡秹鍙婁笉灝戝閲忓紡GC鐨刾aper鍜屼綔鑰呯殑鐪嬫硶

lj_gdbjit.h/.c :
瀵筭db鐨勬敮鎸?br />
lj_ir*.h/.c:
SSA錛孖R鐩稿叧錛堣繖涓拰bytecode榪樻槸涓嶄竴鏍風殑錛夋搷浣滃拰浼樺寲

lj_lex.h/.c  lj_parse.h/.c:
lexer鍜宲arser

lj_mcode.h/.c:
Machine Code綆$悊

lj_opt_*.h:
鍚勭bytecode灞傞潰涓婄殑浼樺寲

lj_snap.h/.c:
蹇収鏀寔

lj_state.h/.c:
LuaState鍜孲tack鐨勬搷浣?br />
lj_str*.h/.c  lj_tab.h/.c:
鍘熺敓綾誨瀷string鍜宼able鎿嶄綔

lj_udata.h/.c:
綾誨瀷user data鐨勬搷浣?br />
lj_vm.h/.c  lj_vmevent.h/.c:
vm鐨凙PI鍜屼簨浠舵敞鍐岋紙lj_vmevent_send錛?br />
lj_vmmath.h/.c錛?br />瀵箆m鏀寔鐨刴ath搴?br />
lua.h:
luaState絳夊熀鏈殑Lua緇撴瀯

lualib.h:
鍜孡ua涓鏍鳳紝鏍囧噯搴撶殑API

luajit.h:
luajit 鐨刾ublic API

vm_*.dasc:
緙栬瘧鏈熻DynASM棰勫鐞嗙殑婧愭枃浠訛紝涓嬩竴綃囪DynASM鏃跺欎粙緇峝asc鏂囦歡

wmain.c:
windows涓嬮潰鐨刴ain鍏ュ彛

鍜孴race鐩稿叧鐨勶細
lj_crecord.h/.c  錛?C鎿嶄綔鐨則race record
lj_dispatch.h/.c :  鎸囦護鍒嗗彂錛岃皟鐢ˋSMFuction錛屽鐞嗘寚浠ゅ墠鐨刪ook鍜岃褰晅race鐢ㄧ殑hot count錛屾湁涓涓噸瑕佺殑鏁版嵁緇撴瀯 GG_State
lj_ff*.h/.c: 涓婇潰璁瞝j_ffdef.h鐨勬椂鍊欐彁榪囷紝trace鐨勬椂鍊?璁板綍Fast Function鐨勮皟鐢ㄨ鏁?br />lj_trace.h/.c: trace鐨勫叿浣撹繃紼?br />lj_traceerr.h : trace error


鍙沖腑 2013-11-28 19:23 鍙戣〃璇勮
]]> 狠狠色丁香久久综合五月| 久久精品日日躁夜夜躁欧美| 人妻无码αv中文字幕久久琪琪布| 日韩欧美亚洲综合久久 | 伊人久久大香线蕉av不卡| 亚洲人成网亚洲欧洲无码久久 | 久久人人爽人人爽人人片av高请| 一本色道久久88精品综合| 99国产精品久久| 三级韩国一区久久二区综合| 伊人久久综合无码成人网| 国产成人无码精品久久久免费| 伊人久久大香线蕉无码麻豆 | 久久精品国产亚洲AV不卡| 亚洲日本va午夜中文字幕久久| 日本高清无卡码一区二区久久 | 精品久久久久久亚洲精品| 精品久久久久久久久久久久久久久 | 好久久免费视频高清| 亚洲国产精品成人久久蜜臀| 97久久天天综合色天天综合色hd | jizzjizz国产精品久久| 久久91这里精品国产2020| 婷婷久久香蕉五月综合加勒比| 久久91这里精品国产2020| 色综合久久中文色婷婷| 无码人妻精品一区二区三区久久久 | 久久99毛片免费观看不卡| 久久精品卫校国产小美女| 午夜精品久久久久久久无码| 国产精品久久久久影院嫩草| 日日躁夜夜躁狠狠久久AV| 天天影视色香欲综合久久| 久久97久久97精品免视看秋霞| 韩国无遮挡三级久久| 国产欧美久久久精品| 国产精品久久久久久久久鸭| 久久超乳爆乳中文字幕| 久久ZYZ资源站无码中文动漫| 日韩精品久久久肉伦网站| 久久人人爽人人爽人人AV东京热 |