Mercurial > hg > index.cgi
diff lwcc/cc-gencode.c @ 501:f3e9732973f1
Add basic integer operations to lwcc
Add +, -, *, and / to lwcc parser and code generator. Multiplication and
division require helper functions in a yet to be created support library.
These operations are integer only for the moment.
author | William Astle <lost@l-w.ca> |
---|---|
date | Tue, 24 Sep 2019 22:07:56 -0600 |
parents | c3099c5d9d3e |
children | 14a40f8bb4eb |
line wrap: on
line diff
--- a/lwcc/cc-gencode.c Thu Aug 29 17:00:17 2019 -0600 +++ b/lwcc/cc-gencode.c Tue Sep 24 22:07:56 2019 -0600 @@ -43,6 +43,34 @@ fprintf(output, "\tldd #%s\n", n->strval); break; + case NODE_OPER_PLUS: + generate_code(n->children, output); + fprintf(output, "\tpshs d\n"); + generate_code(n->children->next_child, output); + fprintf(output, "\taddd ,s++\n"); + break; + + case NODE_OPER_MINUS: + generate_code(n->children, output); + fprintf(output, "\tpshs d,x\n"); + generate_code(n->children->next_child, output); + fprintf(output, "\tstd 2,s\n\tpuls d\n\tsubd ,s++\n"); + break; + + case NODE_OPER_TIMES: + generate_code(n -> children, output); + fprintf(output, "\tpshs d\n"); + generate_code(n->children->next_child, output); + fprintf(output, "\tjsr ___mul16i\n"); + break; + + case NODE_OPER_DIVIDE: + generate_code(n -> children, output); + fprintf(output, "\tpshs d\n"); + generate_code(n->children->next_child, output); + fprintf(output, "\tjsr ___div16i\n"); + break; + default: for (nn = n -> children; nn; nn = nn -> next_child) generate_code(nn, output);