
低レイヤを知りたい人のためのCコンパイラ作成入門を参考にしながらコンパイラを作成しています。
初めは変数はint固定で64ビットなのですが、32ビットにしようとしたらだいぶハマりました。
まず、32ビットレジスタは名称が違うので変数型で切り替える必要がありました。
rax -> eax だったり
32ビット変数に代入する際にも注意が必要でした。
Variable *val_info = map_get(variables, node->name); if (val_info->type->ty == INT ) { printf ( " mov eax, DWORD PTR [rax]\n" ); } else if (val_info->type->ty == PTR) { printf ( " mov rax, [rax]\n" ); } |
他にも、関数の引数の変数を設定する処理や、色々と対応が必要でした。
なにはともあれintを32ビットとして扱う事ができたのでよしとします。
0 件のコメント :
コメントを投稿