diff options
Diffstat (limited to 'lisc/emit.c')
-rw-r--r-- | lisc/emit.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lisc/emit.c b/lisc/emit.c index 1f2060b..e28832a 100644 --- a/lisc/emit.c +++ b/lisc/emit.c @@ -191,6 +191,13 @@ eins(Ins i, Fn *fn, FILE *f) diag("emit: invalid extension"); eop(otoa[i.op], i.arg[0], i.to, fn, f); break; + case OTrunc: + if (rtype(i.to) != RTmp || i.to.val < EAX + || (rtype(i.arg[0]) == RTmp && i.arg[0].val >= EAX)) + diag("emit: invalid truncation"); + if (rtype(i.arg[0]) == RTmp) + i.arg[0] = TMP(RWORD(i.arg[0].val)); + /* fall through */ case OCopy: if (req(i.to, R)) break; |