diff options
Diffstat (limited to 'lisc/emit.c')
-rw-r--r-- | lisc/emit.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lisc/emit.c b/lisc/emit.c index 9d59890..e9887ef 100644 --- a/lisc/emit.c +++ b/lisc/emit.c @@ -130,6 +130,8 @@ eins(Ins i, Fn *fn, FILE *f) [OSub] = "sub", [OMul] = "imul", [OAnd] = "and", + [OSext] = "movslq", + [OZext] = "movzlq", [OLoad] = "mov", [OLoadss] = "movsw", [OLoadus] = "movzw", @@ -182,6 +184,13 @@ eins(Ins i, Fn *fn, FILE *f) eop("mov", i.arg[0], i.to, fn, f); eop(otoa[i.op], i.arg[1], i.to, fn, f); break; + case OSext: + case OZext: + if (rtype(i.to) != RTmp || i.to.val >= EAX + || (rtype(i.arg[0]) == RTmp && i.arg[0].val < EAX)) + diag("emit: invalid extension"); + eop(otoa[i.op], i.arg[0], i.to, fn, f); + break; case OCopy: if (req(i.to, R)) break; |