chibicc

Chrome或Edge翻译 Safari有点不准
https://www.sigbus.info/compilerbook
macOS下修改
1.main
main –> _main

2.gcc -static -o tmp tmp.s
–> gcc -arch x86_64 -o tmp tmp.s

3.movzb
–> movzx
或者注释掉这个步骤

4.strndup

1
2
3
char *strndup(char *p, int len);
-->
char *strndup_new(char *p, int len);

5.macOS下划线修饰

1
2
3
4
5
6
7
8
9
case ND_FUNCALL:
printf(" call %s\n", node->funcname);
printf(" push rax\n");
return;
// -->
case ND_FUNCALL:
printf(" call _%s\n", node->funcname);
printf(" push rax\n");
return;

6.变量无修饰

1
2
3
4
printf("  .data\n");
printf(" .globl %s\n", var->name);
printf("%s:\n", var->name);
printf(" .zero %d\n", var->ty->size);

7.movsxd –> movslq
https://www.bbsmax.com/A/MyJxPZZAJn/
普通的mov指令
做符号扩展的movs
做零扩展的movz
movb #完成1个字节的复制
movw #完成2个字节的复制
movl #完成4个字节的复制 movx ???
movq #完成8个字节的复制

8.;

1
println("  .local _%s", fn->name);

9.extern 变量下划线修饰

  1. .align –> .p2align