commit de7c12f6f60a817c25ddff8488f55ed496987155
parent b075adfa058f48a924c14412c6695d35be1b968f
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Wed, 27 Sep 2017 22:21:16 +0200
[as] Add basic AIMM argument matching in z80
This matching is ignoring the size of the immediate at this moment.
Diffstat:
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/as/expr.c b/as/expr.c
@@ -350,6 +350,7 @@ primary(void)
basic_atom:
np = node(yytoken, NULL, NULL);
np->sym = yylval.sym;
+ np->addr = addr;
next();
break;
default:
diff --git a/as/target/z80/proc.c b/as/target/z80/proc.c
@@ -53,23 +53,25 @@ iarch(void)
int
match(Op *op, Node **args)
{
- char *p;
- int a, olda;
+ unsigned char *p;
+ int arg;
+ Node *np;
if (!op->args)
return args == NULL;
- for (p = op->args; *p; ++p) {
- if (*p != AREP)
- a = *p;
- else
+ for (p = op->args; (arg = *p) && *args; ++p) {
+ if (arg & AREP)
--p;
-
- switch (a) {
+ switch (arg & ~AREP) {
case AIMM8:
case AIMM16:
case AIMM32:
case AIMM64:
+ np = *args++;
+ if (np->addr != AIMM)
+ return 0;
+ break;
default:
abort();
}