青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    經過一個多星期的推敲,終于將中間語言定稿。為了屏蔽寄存器、堆棧、數值比較邏輯、跳轉、變量參數存放位置等,設計了以下中間語言。

    首先語言由常數塊、變量塊以及代碼塊組成。代碼由函數組成。函數有參數、返回值(以及標記返回值是否浮點數)、調用約定組成:
1 FUNCTION BITS NAME [RETURN_FLOAT] (STDCALL|FASTCALL|CDECL)

    BITS代表的是返回值的大小。接下來由一系列的PARAM BITS NAME規定每一個參數的大小。再接下來就是代碼了。代碼由語句塊或者指令組成,其中語句塊可以聲明變量以及包含更多的代碼。語句塊有一個名稱,跳轉的時候可以條件或強制跳轉到語句塊的開頭或結尾,但是只能跳轉到與指令所在的語句塊內的語句塊或者副語句塊內:
 1 FUNCTION BITS NAME [RETURN_FLOAT] (STDCALL|FASTCALL|CDECL)
 2   PARAM BITS NAME
 3   
 4 BEGIN
 5   CODE
 6 END FUNCTION
 7 
 8 BLOCK [@NAME]
 9   VAR BITS NAME
10   
11 BEGIN
12 {INSTRUCTION | BLOCK}
13 END BLOCK
14 
15 INSTRUCTION=
16   NAME [PARAMETER{,PARAMETER}]
17 PARAMETER=TYPE VALUE|POSITION
18 PARAMETER=TYPE PTR POSITION (treate POSITION as ptr=int32u)
19 PARAMETER=NAME
20 PARAMETER=@NAME
21 POSITION=NAME (constant pointer except block name)
22 POSITION=#NAME (constant pointer)
23 POSITION=$NAME[+offset] (external linking value)
24 
25 PREDEFINED_POSITION
26   #RETURN_VALUE

    通過上面的設計可以看出,聲明變量的時候只需要給出大小就好了,在實際使用的時候給定類型。于是我們可以聲明一個10個字節長的變量,然后使用的時候將頭4個字節當成整數進行運算:
1BLOCK
2  VAR 10 number
3BEGIN
4  ADD int32s number, int32s 1, int32s 2
5END BLOCK

    這有什么好處呢?
    1、可以不用管變量的存放
    2、自由使用空間

    由于語句塊的結構跟高級語言類似,所以我們可以更加容易的編譯。

    每一個指令,譬如ADD,都可以接受很多類型,譬如將一個byte+short放進一個float里面。這個時候類型轉換由x86代碼生成器搞定,用戶不必操心。中間語言還提供了4個指令供復制對象使用:
1   MOV vif, if
2   COPY vif, vif, i
3   LDA vi, vif
4   LDAC vi, vif, vi, ci, ci (&vif+i*c1+c2)

    最后就是看跳轉了。跳轉有兩種,第一種是函數內跳轉:
1   JB @BLOCK (jump begin, can not jump past variable declarations)
2   JE @BLOCK (jump end, can not jump past variable declarations)
3   JBT vi, @BLOCK (jump begin if true, can not jump past variable declarations)
4   JET vi, @BLOCK (jump end if true, can not jump past variable declarations)
5   JBF vi, @BLOCK (jump begin if false, can not jump past variable declarations)
6   JEF vi, @BLOCK (jump end if false, can not jump past variable declarations)

    第二種是函數跳轉,也就是調用函數了:
1   CALLF vifp, (NAME|vi) [{,if}]
2   CALLP (NAME|vi) [{,if}]

    我們可以看到所有的操作數都放在了一起,因為如果調用約定改了就要到處改call的代碼顯然是不合適的,所以這里設計成將所有參數放在同一條指令里面,最后由x86代碼生成器處理。這也符合文章開頭要求的“屏蔽堆棧”。

    定稿了之后,我寫了一個判斷中間語言的一個程序是否合理的函數,不過這個不重要,我們看看定稿之后上一篇文章兩個菲薄納契數列函數的寫法:
 1 FUNCTION 4 fab STDCALL
 2   PARAM 4 number
 3 BEGIN
 4 BLOCK
 5   VAR 4 compare_result
 6 BEGIN
 7   LT int32s compare_result, int32s number, int32s 2
 8   JBF int32s compare_result, @COMBINE
 9   MOV int32s #RETURN_VALUE, int32s 1
10   JE @COMBINE
11   BLOCK @COMBINE
12     VAR 4 a
13     VAR 4 b
14     VAR 4 c
15   BEGIN
16     MOV int32s a, int32s 1
17     MOV int32s b, int32s 1
18     SUB int32s number, int32s number, int32s 1
19     BLOCK @LOOP
20     BEGIN
21       LT int32s compare_result, int32s number, int32s 2
22       JEF int32s compare_result, @LOOP
23       ADD int32s c, int32s a, int32s b
24       MOV int32s a, int32s b
25       MOV int32s b, int32s c
26       SUB int32s number, int32s number, int32s 1
27       JB @LOOP
28     END BLOCK
29     MOV int32s #RETURN_VALUE, int32s b
30   END BLOCK
31 END BLOCK
32 END FUNCTION
33 
34 FUNCTION 4 fab2 STDCALL
35   PARAM 4 number
36 BEGIN
37 BLOCK
38   VAR 4 compare_result
39 BEGIN
40   LT int32s compare_result, int32s number, int32s 2
41   JBF int32s compare_result, @COMBINE
42   MOV int32s #RETURN_VALUE, int32s 1
43   JE @COMBINE
44   BLOCK @COMBINE
45     VAR 4 difference
46     VAR 4 n_1
47     VAR 4 n_2
48   BEGIN
49     SUB int32s difference, int32s number, int32s 1
50     CALLF int32s n_1, func fab2, int32s difference
51     SUB int32s difference, int32s number, int32s 2
52     CALLF int32s n_2, func fab2, int32s difference
53     ADD int32s #RETURN_VALUE, int32s n_1, int32s n_2
54   END BLOCK
55 END BLOCK
56 END FUNCTION

    接下來就可以做x86代碼生成器了。
posted on 2009-03-19 20:49 陳梓瀚(vczh) 閱讀(2231) 評論(1)  編輯 收藏 引用 所屬分類: JIT

評論:
# re: JIT腳本引擎:中間語言定稿并完成驗證工作 2009-03-19 22:49 | 空明流轉
很好,我的語義檢查和編譯期常量計算也差不多完工了,煩的一毛啊。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久噜噜噜久久久精品| 麻豆国产精品va在线观看不卡| 亚洲欧洲日产国产网站| 久久久久在线| 99这里有精品| 欧美不卡一区| 亚洲电影观看| 久久综合久久久| 欧美一区二区三区四区在线观看地址 | 亚洲一区视频在线| 欧美日韩一二区| 一个人看的www久久| 亚洲黄色片网站| 欧美大片在线看| 在线看欧美日韩| 欧美va亚洲va国产综合| 久久久久亚洲综合| 亚洲电影免费观看高清完整版在线观看| 久久精品综合一区| 欧美一区午夜精品| 国内成人自拍视频| 免费看成人av| 欧美国产日韩在线| 一本一本久久| 一区二区三区视频在线播放| 国产精品久久久久久久免费软件 | 夜夜爽www精品| 日韩午夜在线| 国产精品日本精品| 久久精品国产亚洲精品| 久久九九99| 91久久精品一区| 亚洲精品亚洲人成人网| 欧美欧美在线| 宅男在线国产精品| 亚洲欧美久久久久一区二区三区| 国产一区二区三区在线观看网站| 女人色偷偷aa久久天堂| 欧美精品www在线观看| 亚洲一区免费| 久久精品国产视频| 一本色道久久加勒比88综合| 亚洲一二三区视频在线观看| 国产一区二区三区丝袜| 欧美h视频在线| 欧美特黄一区| 免费久久精品视频| 国产精品yjizz| 久久综合999| 欧美三级视频在线观看| 久久女同互慰一区二区三区| 欧美精品入口| 久久看片网站| 亚洲国内精品| 午夜电影亚洲| 最新热久久免费视频| 一区二区三区高清在线观看| 黑人一区二区| 99亚洲一区二区| 伊人精品成人久久综合软件| 日韩视频第一页| 黄色成人av网| 亚洲视频久久| 亚洲日本一区二区| 欧美一进一出视频| 9人人澡人人爽人人精品| 欧美一区=区| 亚洲午夜精品久久久久久app| 久久精品国产一区二区三区| 亚洲欧美日韩国产中文在线| 免费成人av| 久久免费视频在线观看| 国产精品久久久久久久一区探花 | 欧美亚洲三级| 欧美精品v国产精品v日韩精品| 久久琪琪电影院| 国产精品99免视看9| 亚洲电影免费观看高清完整版在线 | 亚洲视频免费在线观看| 久久婷婷综合激情| 欧美在线视频观看| 国产精品久久午夜| 亚洲免费精品| 亚洲免费av观看| 麻豆9191精品国产| 免费人成精品欧美精品| 海角社区69精品视频| 翔田千里一区二区| 欧美在线中文字幕| 国产精品私拍pans大尺度在线| 亚洲美女区一区| 亚洲欧洲在线免费| 欧美超级免费视 在线| 免费成人网www| 在线观看视频一区二区欧美日韩 | 国产综合在线看| 久久成人免费电影| 久久人人97超碰国产公开结果| 国产精品揄拍500视频| 亚洲一二三区在线| 欧美在线观看一二区| 国产欧美在线看| 久久国产手机看片| 美女啪啪无遮挡免费久久网站| 国产小视频国产精品| 欧美一区二区视频免费观看| 久久久综合精品| 在线播放亚洲一区| 美女国内精品自产拍在线播放| 免费欧美日韩| 一本一道久久综合狠狠老精东影业 | 亚洲在线观看免费| 国产精品成人播放| 一本久道久久久| 新狼窝色av性久久久久久| 国产精品高潮视频| 亚洲欧美激情一区| 老鸭窝毛片一区二区三区| 伊人久久综合| 欧美精品久久久久久久免费观看 | 国产日韩视频| 久久精品官网| 亚洲日本成人| 午夜久久福利| 亚洲第一精品夜夜躁人人爽| 欧美激情片在线观看| 在线亚洲电影| 蜜臀av在线播放一区二区三区| 亚洲精品在线二区| 国产精品外国| 久久一区亚洲| 宅男精品视频| 欧美激情第3页| 欧美一区二区久久久| 亚洲精品一区二区三区av| 国产伦精品一区二区三区视频黑人 | 亚洲国产精品一区二区三区| 中国av一区| 国语自产在线不卡| 欧美日韩成人综合天天影院| 欧美伊人久久久久久久久影院| 久久综合电影一区| 亚洲欧美激情一区| 亚洲电影免费观看高清完整版在线 | 久久av一区二区| 亚洲美女黄网| 欧美 日韩 国产精品免费观看| 亚洲一区黄色| 日韩天堂在线观看| 伊人蜜桃色噜噜激情综合| 国产精品护士白丝一区av| 久久久国产视频91| 亚洲中字黄色| 亚洲最新视频在线| 亚洲第一毛片| 欧美jizz19性欧美| 久久精品一区二区三区不卡| 亚洲一区视频在线| 亚洲美女黄网| 亚洲破处大片| 亚洲精品1区| 尤物精品在线| 国产亚洲成年网址在线观看| 国产精品久在线观看| 欧美人成在线视频| 卡一卡二国产精品| 久久久久久久波多野高潮日日| 午夜久久久久久| 亚洲一区久久| 亚洲免费视频观看| 99riav1国产精品视频| 欧美特黄一区| 国产精品久久久久久久第一福利| 蜜臀久久99精品久久久久久9| 久久国产直播| 久久久xxx| 久久亚洲综合色一区二区三区| 久久精品99国产精品| 亚洲欧美激情四射在线日| 午夜国产精品视频| 欧美一区二区三区在线视频 | 亚洲国产精品电影在线观看| 久久综合激情| 蜜桃视频一区| 欧美国产日韩a欧美在线观看| 久久综合免费视频影院| 久久久夜夜夜| 亚洲福利在线视频| 亚洲国产成人不卡| 亚洲精选视频在线| 亚洲一级特黄| 久久www成人_看片免费不卡| 欧美一级免费视频| 久久久久www| 欧美高清视频一区| 欧美视频在线看| 国产亚洲一区二区在线观看| 伊人一区二区三区久久精品| 亚洲精品自在久久| 亚洲视屏在线播放|