新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

2016-01-01から1年間の記事一覧

lua, pforth, gforth の VM を読む

よむったってすぐには読めません。 lua の場合 4.0 までがスタック型で 5.0 以降はレジスタ型の VM になった模様(未確認)。で初期のコードがやっぱり読みやすい。lua-1.0 あるいは lua-1.1 のソースを読むとわかりやすい。lua.stx (おそらくシンタックス) を…

スタック型のVM

コンパイラの結果をスタックマシン型の VM に落とすことを考える。JVM などでは iload なるものがある。きっと istore もある(あーあったあった)だから、スタックと"変数"への出し入れは自由なわけだ。a = b + cを考えると iload b iload c + istore aとか…

おれおれ tiny scheme もついに VM コード生成まで来た

この2か月の成果。なんとか fib をコンパイルして VM のコードに落とすことに成功。 (:JUMP |:MAIN|) MAIN (:LABEL |:MAIN|) EXIT (:LABEL |:EXIT|) |:EXIT| (:HALT :R0) |:MAIN| (:LABEL |:MAIN|) (:JUMP |:label0|) (:LIVE-REG 0 (1 1 1 1 1 0 0 0 0 0)) …

FORTH で SHA512 の動作確認

sha256> gforth Gforth 0.7.3, Copyright (C) 1995-2008 Free Software Foundation, Inc. Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license' Type `bye' to exit s" SHA-384_512xxx.F" ok included Selection Menu: For SHA-384 enter …

vmgen とかスレッデッドコードとか

qiita に投稿した。vmgen で簡単なレジスタベースの VM を作る(2/2) - Qiitaqiita あれば blog いらねーんじゃないだろうか? つくった vm もダウンロードできるようにした。http://www.sinby.com/download/Hvala/hvm.tar.gzqiita にも書いたけど、64bit だ…

vmgen で VM つくる

CPS も大詰めだ。最後は VM をつくることになるわけだ。gcc までいくなら cgen というのがあって、特定の CPU の gcc をつくるのをサポートしてくれるようだ。まぁいまなら LLVM の方がいいのかもしれない。MeP や Epiphany の記述があって興味深い、、、が…

fact も cps 変換

とりあえず末尾再帰の fact も cps 変換できるようになった。 (:FIXH ((|:FACT0| (FACT0 |sym11| K N RV) (:= (N 0) NIL ((:RECORD-REF (|sym11| 0) (|sym23|) ((:APP |sym23| (|sym11| RV)))) (:- (N 1) (|sym17|) ((:* (N RV) (|sym16|) ((:RECORD-REF (FA…

xorshift

Google Chromeが採用した、擬似乱数生成アルゴリズム「xorshift」の数理 – びりあるの研究ノート開発中のプログラムで動くように書いてみた。長ったらしいのは xor を持っていないから。そもそも、ビット幅が特定できない、、、print もないしなぁ、、、 ((:…

eta(η) reduction

((:fix ((even? (x) (:if (:= x 0) :#t (odd? (:- x 1)))) (odd? (x) (:if (:= x 0) :#t (even? (:- x 1))))) (even? 997))) 典型的な交互に呼び合う非効率であるけど偶数奇数判定機。cps 変換すると (:FIXH ((EVEN? (|sym2| X) (:FIXS ((|sym3| (|sym4|) (:…

cps 変換したものを reorder

Unfortunately, the problem of reordering directed acyclic graphs for optimal register allocation is NP-complete. だそうなので、10 命令でも 10! 回計算しないといけなさそう。ということで、ヒューリスティックな方法で解きます。 (:FIXH ((|:G0| (G…

openocd と sama5d4

ちょっと前進。MEM-AP を探せないとおっしゃっている。MEM-AP がなにかは不明。 Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-07-23:46) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_le…

libusb とか

libusb0.1 と libusb1.0 というのが cygwin のぱけーじにあって、どうやら API が違うらしい。作者が同じかどうかもわからない、、、最新の openocd では libusb0.1 はねむいさんのぶろぐによると使わないらしい。libusb1.0 を使いましょう。あと、hidapi と…

OpenOCD を自前でコンパイル

openocd> ./bootstrap + aclocal + libtoolize --automake --copy + autoconf configure.ac:12: error: possibly undefined macro: AC_MSG_WARN If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation. co…