コンパイラ

x64セルフホスティングCコンパイラを書いた

前回: ryooooooga.hateblo.jp はじめに セルフホスト(自分自身をビルド)できるCコンパイラmoccを書きました。 github.com 前回はバックエンドをLLVMに頼っていたため、今回はx86_64向けのアセンブリを吐くようにしました。 基本的な設計はほぼ前回と同じです…

セルフホスティングCコンパイラを書いた

セルフホスト(自分自身をビルド)できるCコンパイラnoccを書きました。 github.com はじめに 去年の夏あたりからCコンパイラを書くのが流行っていたのでやってみました。 例によって@rui314さんの8cc、9ccと低レイヤを知りたい人のためのCコンパイラ作成入門…

JITコンパイル時の関数呼び出しの扱い方

x86_64での関数呼び出し x86_64(以下x64)ではcall命令の呼び出し関数の指定を相対アドレスで行うため、JITコンパイルをする際はそのアドレスの取り扱いに苦労します。 #include <stdio.h> #include <string.h> #include <sys/mman.h> int main(void) { const char code[] = { /* * int f(voi</sys/mman.h></string.h></stdio.h>…