2013-09-01から1ヶ月間の記事一覧

C言語よくわからん

C言語初心者です。void func1() { void func2() { } func2(); }こんなプログラムを書いても、gccさんは何も文句を言わずにコンパイルしてくれるんですね。初めて知りました。まる 調子に乗ってこんなプログラム書いたら怒られました。struct Class { void In…

C言語コンパイラ作成演習

京大の資料で、C言語コンパイラを作る実習、ってのがあったんだけど、これどのくらいの期間で 作らなきゃいけないんだろうか。大学の他の勉強もやりながら1ヶ月くらいで組む、といった所か。う〜ん、うちの大学の情報系学科も、このくらいやらせられるんだ…

occ開発メモ

・関数コール時のスタック退避はStage3で ・最適化 四則演算 ラベル統合 レジスタ流用、統合 条件式変換省略 条件無しラベルジャンプ後は次のラベルまで全消去 PALMEM系0x3F最適化(Stage2) ・仕様 プロトタイプ宣言の無い関数呼び出しはできない 関数ポイ…

LLVMは万能の杖か?

LLVMでOSECPUを吐かせようとこの一ヶ月頑張ってきたのだけど、結論から言うと、諦める事にした。 LLVMでOSECPUを吐く事は技術的には可能だと思うから、やりたい人がいれば是非チャレンジしてもらいたい。 だけど、僕はLLVMでOSECPUを吐く事に対する価値を見…

cygwin64bitでllvmをコンパイル

__deregister_frameが定義されてない参照です〜、みたいなエラーがでるんだよね。 ぐぐったら、こんなのを見つけた。https://github.com/mono/llvm/pull/1/files__deregister_frameと__register_frameを参照してる行を削除したらコンパイルは通った。 JIT使…

256ビットCPU

流石に無茶

アドレス演算

OSECPUはメモリアクセスに弱い。 だからOSECPUでスタックアクセスしようとするとこうなる。 .file "t3.bc" .text .globl _main .align 4 .type _main,@function _main: // @main // BB#0: LIMM(r1,-20); //imm32 PADD(p27,p27,r1); LIMM(r0,0); //imm7 LIMM(…

即値アドレス指定禁止

int *t = (int *)0x1000;こんな構文、OS作ってる人じゃなきゃ普通は使わないと思う。 とういわけでOSECPUではこんな構文は存在しない。だったら、こんな構文、コンパイル段階でエラーになるべきだよね。 /cygdrive/z/llvm/bin/llc -march=bfin -relocation-m…