ref: 9cbbff954e6150de5c2e96bf27c560f005d995f0
parent: ced0753bec92450b81816e9f33badb1a9a57a1ff
author: Ori Bernstein <ori@eigenstate.org>
date: Tue Jul 24 18:55:02 EDT 2012
Fix postinc/postdec.
--- a/8/isel.c
+++ b/8/isel.c
@@ -328,8 +328,9 @@
b = inr(s, b);
if (o->type == Loclit) {
l = locmem(scale*o->lit, b, Rnone, m);
- } else if (o->type == Locreg) {
+ } else {
b = inr(s, b);
+ o = inr(s, o);
l = locmems(0, b, o, scale, m);
}
} else {
@@ -337,6 +338,7 @@
l = inr(s, l);
l = locmem(0, l, Rnone, m);
}
+ assert(l != NULL);
return l;
}
--- a/8/simp.c
+++ b/8/simp.c
@@ -924,12 +924,12 @@
* => args[0] = args[0] + 1
* expr(x) */
case Opreinc:
- t = lval(s, args[0]);
+ t = load(lval(s, args[0]));
r = store(t, add(t, one));
lappend(&s->incqueue, &s->nqueue, t);
break;
case Opredec:
- t = lval(s, args[0]);
+ t = load(lval(s, args[0]));
r = store(t, sub(t, one));
lappend(&s->incqueue, &s->nqueue, t);
break;
@@ -940,13 +940,13 @@
* x = x + 1
*/
case Opostinc:
- r = lval(s, args[0]);
- t = store(r, add(one, r));
+ r = rval(s, args[0], NULL);
+ t = store(lval(s, args[0]), add(r, one));
lappend(&s->incqueue, &s->nqueue, t);
break;
case Opostdec:
- r = lval(s, args[0]);
- t = store(r, sub(one, r));
+ r = rval(s, args[0], NULL);
+ t = store(lval(s, args[0]), sub(r, one));
lappend(&s->incqueue, &s->nqueue, t);
break;
case Olit: