From 08f2c03e30fa4ee1df24d382a1d0a21c879786bb Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Wed, 24 Feb 2016 10:57:08 -0500 Subject: support memory class arguemnts --- lisc/isel.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'lisc') diff --git a/lisc/isel.c b/lisc/isel.c index 1db3087..b883fa7 100644 --- a/lisc/isel.c +++ b/lisc/isel.c @@ -660,7 +660,7 @@ selpar(Fn *fn, Ins *i0, Ins *i1) { AClass *ac, *a; Ins *i; - int ni, ns, stk, al; + int ni, ns, s, al; Ref r, r1; ac = alloc((i1-i0) * sizeof ac[0]); @@ -669,15 +669,19 @@ selpar(Fn *fn, Ins *i0, Ins *i1) curi = insb; ni = ns = 0; assert(NAlign == 3); - stk = -2; + s = 4; for (i=i0, a=ac; iinmem) { case 1: - assert(!"argc todo 2"); + assert(a->align <= 4); /* todo, bigger alignments */ + if (a->align == 4) + s = (s+3) & -4; + fn->tmp[i->to.val].slot = -s; /* HACK! */ + s += a->size; continue; case 2: - stk -= 2; - *curi++ = (Ins){OLoad, i->to, {SLOT(stk)}, i->cls}; + *curi++ = (Ins){OLoad, i->to, {SLOT(-s)}, i->cls}; + s += 2; continue; } r1 = rarg(a->cls[0], &ni, &ns); -- cgit 1.4.1