Βρόχοι και αποφάσεις
Ο κώδικας για του βρόχους και τις αποφάσεις βασίζεται σε άλματα
σε συγκεκριμένες ετικέτες.
Τη δημιουργία του κώδικα διευκολύνει η υλοποίηση συνάρτησης
new_label
που επιστρέφει νέα ονόματα ετικετών
(πιθανώς με τη χρήση των συναρτήσεων sprintf και malloc για την
αποθήκευση του αποτελέσματος).
Έτσι για παράδειγμα ο κώδικας για την εντολή while μπορεί να είναι
της μορφής:
void
codegen_while(struct s_tree *expr, struct s_tree *stmt)
{
char *loop = new_label();
char *end = new_label();
printf("%s:\n", loop);
codegen(expr);
printf("\tpop %%eax\n");
printf("\tcmp %%eax, 0\n");
printf("\tje %s\n", end);
codegen(stmt);
printf("\tjmp %s\n", loop);
printf("%s:\n", end);
}
για να παράγει κώδικα όπως τον παρακάτω:
.L0053:
pushl a
pop %eax
cmp %eax, 0
je .L0054
// code for the loop body
jmp .L0053
.L0054: