mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-03 00:10:31 +00:00
Improve threading support further
This commit is contained in:
parent
8bfb70ca3f
commit
ce71677156
61 changed files with 882 additions and 747 deletions
30
third_party/chibicc/codegen.c
vendored
30
third_party/chibicc/codegen.c
vendored
|
@ -1547,6 +1547,14 @@ void gen_expr(Node *node) {
|
|||
println("\txchg\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
return;
|
||||
}
|
||||
case ND_TESTANDSETA: {
|
||||
gen_expr(node->lhs);
|
||||
push();
|
||||
println("\tmov\t$1,%%eax");
|
||||
pop("%rdi");
|
||||
println("\txchg\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
return;
|
||||
}
|
||||
case ND_LOAD: {
|
||||
gen_expr(node->rhs);
|
||||
push();
|
||||
|
@ -1556,6 +1564,28 @@ void gen_expr(Node *node) {
|
|||
println("\tmov\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
return;
|
||||
}
|
||||
case ND_STORE: {
|
||||
gen_expr(node->lhs);
|
||||
push();
|
||||
gen_expr(node->rhs);
|
||||
pop("%rdi");
|
||||
println("\tmov\t(%%rax),%s", reg_ax(node->ty->size));
|
||||
println("\tmov\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
if (node->memorder) {
|
||||
println("\tmfence");
|
||||
}
|
||||
return;
|
||||
}
|
||||
case ND_CLEAR: {
|
||||
gen_expr(node->lhs);
|
||||
println("\tmov\t%%rax,%%rdi");
|
||||
println("\txor\t%%eax,%%eax");
|
||||
println("\tmov\t%s,(%%rdi)", reg_ax(node->ty->size));
|
||||
if (node->memorder) {
|
||||
println("\tmfence");
|
||||
}
|
||||
return;
|
||||
}
|
||||
case ND_FETCHADD: {
|
||||
gen_expr(node->lhs);
|
||||
push();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue