cleanup: Move offset calculation to macro

This commit is contained in:
overflowerror 2024-02-16 13:13:45 +01:00
parent 7fb2f387de
commit 0d4cc9f864
3 changed files with 67 additions and 65 deletions

View file

@ -27,7 +27,7 @@ static void region_used(band_t* band, region_t* region) {
}
static void reset_position(FILE* out, band_t* band, band_addr_t position) {
move_to(position);
move(position);
reset();
}
@ -38,7 +38,7 @@ static void reset_region(FILE* out, band_t* band, region_t* region) {
}
void codegen_add_char(FILE* out, band_t* band, size_t position, char c) {
move_to(position);
move(position);
reset();
add(c);
}
@ -52,7 +52,7 @@ region_t* codegen_literal_expr(FILE* out, band_t* band, struct literal_expressio
panic("number literal too big");
}
region = band_allocate_tmp(band, 1);
move_to(region->start);
move_to(region);
reset(); add(expr.number);
break;
case CHAR_LITERAL:
@ -105,7 +105,7 @@ region_t* codegen_expr(FILE* out, band_t* band, struct expression* expr) {
void codegen_print_statement(FILE* out, band_t* band, struct print_statement statement) {
region_t* region = codegen_expr(out, band, statement.value);
move_to(region->start);
move_to(region);
output();
for (size_t i = 1; i < region->size; i++) {
@ -125,22 +125,22 @@ region_t* clone_region(FILE* out, band_t* band, region_t* original) {
for (size_t i = 0; i < original->size; i++) {
reset_position(out, band, clone->start + i);
move_to(original->start + i);
move_offset(original, i);
loop({
dec();
move_to(tmp->start);
move_to(tmp);
inc();
move_to(clone->start + i);
move_offset(clone, i);
inc();
move_to(original->start + i);
move_offset(original, i);
});
move_to(tmp->start);
move_to(tmp);
loop({
dec();
move_to(original->start + i);
move_offset(original, i);
inc();
move_to(tmp->start);
move_to(tmp);
});
}

View file

@ -13,7 +13,9 @@
#define output() fprintf(out, ".")
#define input() fprintf(out, ",")
#define move_to(t) _move_to(out, band, t)
#define move(t) _move_to(out, band, t)
#define move_to(r) move(r->start)
#define move_offset(r, o) move(r->start + o)
#define add(v) { for (int i = 0; i < v; i++) inc(); }
#define sub(v) { for (int i = 0; i < v; i++) dec(); }

View file

@ -10,106 +10,106 @@ extern region_t* to_str(FILE* out, band_t* band, const char* _arg) {
region_t* str = band_allocate_tmp(band, 3);
for (size_t i = 0; i < str->size; i++) {
move_to(str->start + i); reset();
move_offset(str, i); reset();
}
region_t* copy = band_allocate_tmp(band, 1);
move_to(copy->start); reset();
move_to(copy); reset();
region_t* ten = band_allocate_tmp(band, 1);
move_to(ten->start); reset(); add(10);
move_to(ten); reset(); add(10);
region_t* tmp = band_allocate_tmp(band, 1);
move_to(tmp->start); reset();
move_to(tmp); reset();
region_t* tmp2 = band_allocate_tmp(band, 1);
move_to(tmp2->start); reset();
move_to(tmp2); reset();
region_t* tmp3 = band_allocate_tmp(band, 1);
move_to(arg->start);
move_to(arg);
loop({
dec();
move_to(tmp->start); inc();
move_to(copy->start); inc();
move_to(str->start + 2); inc();
move_to(str->start + 1); reset();
move_to(str->start + 0); reset();
move_to(ten->start); dec();
move_to(tmp); inc();
move_to(copy); inc();
move_offset(str, 2); inc();
move_offset(str, 1); reset();
move_offset(str, 0); reset();
move_to(ten); dec();
loop({
dec();
move_to(str->start + 0); inc();
move_to(str->start + 1); inc();
move_to(ten->start);
move_offset(str, 0); inc();
move_offset(str, 1); inc();
move_to(ten);
});
move_to(str->start + 1);
move_offset(str, 1);
loop({
move_to(tmp->start); reset();
move_to(str->start + 1); reset();
move_to(tmp); reset();
move_offset(str, 1); reset();
});
move_to(str->start + 0);
move_offset(str, 0);
loop({
dec();
move_to(ten->start); inc();
move_to(str->start + 0);
move_to(ten); inc();
move_offset(str, 0);
});
move_to(tmp->start);
move_to(tmp);
loop({
move_to(tmp2->start); inc();
move_to(str->start + 2); reset();
move_to(ten->start); add(10);
move_to(tmp->start); reset();
move_to(tmp2); inc();
move_offset(str, 2); reset();
move_to(ten); add(10);
move_to(tmp); reset();
});
move_to(arg->start);
move_to(arg);
});
move_to(copy->start);
move_to(copy);
loop({
dec();
move_to(arg->start); inc();
move_to(copy->start);
move_to(arg); inc();
move_to(copy);
});
move_to(ten->start); reset(); add(10);
move_to(ten); reset(); add(10);
move_to(tmp2->start);
move_to(tmp2);
loop({
dec();
move_to(tmp->start); reset(); inc();
move_to(str->start + 1); inc();
move_to(copy->start); reset();
move_to(tmp3->start); reset();
move_to(ten->start); dec();
move_to(tmp); reset(); inc();
move_offset(str, 1); inc();
move_to(copy); reset();
move_to(tmp3); reset();
move_to(ten); dec();
loop({
dec();
move_to(copy->start); inc();
move_to(tmp3->start); inc();
move_to(ten->start);
move_to(copy); inc();
move_to(tmp3); inc();
move_to(ten);
});
move_to(tmp3->start);
move_to(tmp3);
loop({
move_to(tmp->start); reset();
move_to(tmp3->start); reset();
move_to(tmp); reset();
move_to(tmp3); reset();
});
move_to(copy->start);
move_to(copy);
loop({
dec();
move_to(ten->start); inc();
move_to(copy->start);
move_to(ten); inc();
move_to(copy);
});
move_to(tmp->start);
move_to(tmp);
loop({
move_to(ten->start); add(10);
move_to(str->start + 0); inc();
move_to(str->start + 1); reset();
move_to(tmp->start); reset();
move_to(ten); add(10);
move_offset(str, 0); inc();
move_offset(str, 1); reset();
move_to(tmp); reset();
});
move_to(tmp2->start);
move_to(tmp2);
});
for (size_t i = 0; i < str->size; i++) {
move_to(str->start + i); add('0');
move_offset(str, i); add('0');
}
band_region_free(band, tmp3);