commit 7681aff4af1f56f6a0ed6a9451cc632f14bffbdd
parent afa081af77e19c67b8ded5203f8bed341af1cba6
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Fri, 8 Aug 2014 11:44:41 +0200
Add addresability of constants
Diffstat:
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/cc2/cc2.h b/cc2/cc2.h
@@ -39,6 +39,7 @@ enum nerrors {
#define AUTO 'A'
#define REGISTER 'R'
#define STATIC 'S'
+#define CONST '#'
extern void error(unsigned nerror, ...);
extern void genaddable(Node *np);
diff --git a/cc2/cgen.c b/cc2/cgen.c
@@ -5,6 +5,13 @@
#include "cc2.h"
+/*
+ * calculate addresability as follows
+ * AUTO => 11
+ * REGISTER => 13
+ * STATIC => 12
+ * CONST => 20
+ */
void
genaddable(Node *np)
{
@@ -23,6 +30,8 @@ genaddable(Node *np)
case STATIC:
np->addable = 12;
break;
+ case CONST:
+ np->addable = 20;
+ break;
}
- return;
}
diff --git a/cc2/parser.c b/cc2/parser.c
@@ -132,7 +132,8 @@ immediate(char op)
{
Node *np = newnode();
- np->op = '#';
+ np->op = CONST;
+ /* TODO: deal with constant non integer */
np->type = L_INT;
scanf("%d", &np->u.imm);
np->left = np->right = NULL;