mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-24 13:28:30 +00:00
Fix bugs and make improvements
- Get clone() working on FreeBSD - Increase some Python build quotas - Add more atomic builtins to chibicc - Fix ASAN poisoning of alloca() memory - Make MODE= mandatory link path tinier - Improve the examples folder a little bit - Start working on some more resource limits - Make the linenoise auto-complete UI as good as GNU readline - Update compile.com, avoiding AVX codegen on non-AVX systems - Make sure empty path to syscalls like opendir raises ENOENT - Correctly polyfill ENOENT vs. ENOTDIR on the New Technology - Port bestline's paredit features to //third_party/linenoise - Remove workarounds for RHEL 5.0 bugs that were fixed in 5.1
This commit is contained in:
parent
c3fb624647
commit
ae638c0850
181 changed files with 2994 additions and 1367 deletions
34
third_party/chibicc/codegen.c
vendored
34
third_party/chibicc/codegen.c
vendored
|
@ -262,6 +262,20 @@ static char *reg_ax(int sz) {
|
|||
UNREACHABLE();
|
||||
}
|
||||
|
||||
static char *reg_di(int sz) {
|
||||
switch (sz) {
|
||||
case 1:
|
||||
return "%dil";
|
||||
case 2:
|
||||
return "%di";
|
||||
case 4:
|
||||
return "%edi";
|
||||
case 8:
|
||||
return "%rdi";
|
||||
}
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
static const char *gotpcrel(void) {
|
||||
if (opt_pic) {
|
||||
return "@gotpcrel(%rip)";
|
||||
|
@ -1542,6 +1556,26 @@ void gen_expr(Node *node) {
|
|||
println("\tmov\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
return;
|
||||
}
|
||||
case ND_FETCHADD: {
|
||||
gen_expr(node->lhs);
|
||||
push();
|
||||
gen_expr(node->rhs);
|
||||
pop("%rdi");
|
||||
println("\txadd\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
return;
|
||||
}
|
||||
case ND_SUBFETCH: {
|
||||
gen_expr(node->lhs);
|
||||
push();
|
||||
gen_expr(node->rhs);
|
||||
pop("%rdi");
|
||||
push();
|
||||
println("\tneg\t%s", reg_ax(node->ty->size));
|
||||
println("\txadd\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
pop("%rdi");
|
||||
println("\tsub\t%s,%s", reg_di(node->ty->size), reg_ax(node->ty->size));
|
||||
return;
|
||||
}
|
||||
case ND_RELEASE: {
|
||||
gen_expr(node->lhs);
|
||||
push();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue