diff options
| author | Quentin Carbonneaux <[email protected]> | 2022-03-14 10:40:30 +0100 |
|---|---|---|
| committer | Quentin Carbonneaux <[email protected]> | 2022-03-14 10:40:30 +0100 |
| commit | 7a7a5f480312b997dcac0e4cc3befb502e54c836 (patch) | |
| tree | 1de54203c84b74a030872346bad7be8620496003 /rv64/abi.c | |
| parent | 905e9cef302727fdaacd7069826ff448c2d88361 (diff) | |
improve consistency in abis
Diffstat (limited to 'rv64/abi.c')
| -rw-r--r-- | rv64/abi.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -425,17 +425,20 @@ selcall(Fn *fn, Ins *i0, Ins *i1, Insl **ilp) if (!stk) return; + /* populate the stack */ + off = 0; r = newtmp("abi", Kl, fn); - for (i=i0, c=ca, off=0; i<i1; i++, c++) { + for (i=i0, c=ca; i<i1; i++, c++) { if (i->op == Oargv || !(c->class & Cstk)) continue; if (i->op == Oarg) { r1 = newtmp("abi", Kl, fn); emit(Ostorew+i->cls, Kw, R, i->arg[0], r1); if (i->cls == Kw) { - /* TODO: we only need this sign extension - * for subtyped l temporaries passed as w - * arguments (see rv64/isel.c:fixarg) + /* TODO: we only need this sign + * extension for l temps passed + * as w arguments + * (see rv64/isel.c:fixarg) */ curi->op = Ostorel; curi->arg[0] = newtmp("abi", Kl, fn); @@ -530,8 +533,9 @@ selpar(Fn *fn, Ins *i0, Ins *i1) } else if (c->class & Cstk1) { emit(Oload, *c->cls, i->to, SLOT(-s), R); s++; - } else + } else { emit(Ocopy, *c->cls, i->to, TMP(*c->reg), R); + } return (Params){ .stk = s, |
