HW4
wiki:2015q3 Homework #4
作業區+共筆
 

作業要求 (B)

  • 改善 JIT compiler,加入若干 optimization techniques
  • 紀錄若干效能最佳化技巧帶來的提昇
 

講義

  • turing-complete
  • 若數據操作的規則能模擬圖靈機的話,稱之。即符合下列規則 ( ref. ):
  • 一條無限長的紙帶TAPE。紙帶被劃分為一個接一個的小格子,每個格子上包含一個來自有限字母表的符號,字母表中有一個特殊的符號表示空白。紙帶上的格子從左到右依次被編號為0, 1, 2, ...,紙帶的右端可以無限伸展。
  • 一個讀寫頭HEAD。該讀寫頭可以在紙帶上左右移動,它能讀出當前所指的格子上的符號,並能改變當前格子上的符號。
  • 一套控制規則TABLE。它根據當前機器所處的狀態以及當前讀寫頭所指的格子上的符號來確定讀寫頭下一步的動作,並改變狀態暫存器的值,令機器進入一個新的狀態。
  • 一個狀態暫存器。它用來儲存圖靈機當前所處的狀態。圖靈機的所有可能狀態的數目是有限的,並且有一個特殊的狀態,稱為停機狀態
  • awk 、 gsub
  • 主要用gsub來做字元的替換
  • prologue 、epilogue 
  • wiki 有詳細解釋
  • 編譯問題,不知道是不是跟處理器與作業系統的位元數有關? 
cc -Wall -Werror -std=gnu99 -I. -o compiler-arm compiler-arm.c
lua dynasm/dynasm.lua -o jit-x64.h jit-x64.dasc
cc -Wall -Werror -std=gnu99 -I. -o jit-x64 -DJIT=\"jit-x64.h\" \
        dynasm-driver.c
In file included from dynasm-driver.c:21:0:
jit-x64.dasc: In function ‘main’:
jit-x64.dasc:56:4: error: right shift count >= width of type [-Werror]
    break;
    ^
In file included from dynasm-driver.c:21:0:
jit-x64.dasc:60:4: error: right shift count >= width of type [-Werror]
    break;
    ^
cc1: all warnings being treated as errors
Makefile:43: recipe for target 'jit-x64' failed
make: *** [jit-x64] Error 1
 

測試

乘法: +++ +++ +[>+++ +++ ++<-]>. 輸出56,會看到8 
賦值: 由於作業講義的第16頁看不懂(雖然寫完就瞭了..),所以從參考網站找來演算法。
+++++++[>++++++++<-]>[>+>+<<-]>.>[<<+>>-]<<.輸出可看到兩個8,也就是 y 與 x,流程如下
pre
y
x
temp
←變數再TAPE的位置

7
0
0
0
先創造被乘數

0
56
0
0
經過乘法後結果來到y
第一個[ ]
0
0
56
56
將y加到x與temp
第二個[ ]