From 7dc3e5dcf60d1995857c85773cd15c9904ec9abd Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Thu, 6 Aug 2015 16:35:17 -0400 Subject: split cmp in two sizes --- lisc/isel.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'lisc/isel.c') diff --git a/lisc/isel.c b/lisc/isel.c index 8fe7535..31de291 100644 --- a/lisc/isel.c +++ b/lisc/isel.c @@ -39,6 +39,12 @@ newtmp(int type, Fn *fn) return t; } +static int +islong(Ref r, Fn *fn) +{ + return rtype(r) == RTmp && fn->tmp[r.val].type == TLong; +} + static void sel(Ins i, Fn *fn) { @@ -103,7 +109,10 @@ sel(Ins i, Fn *fn) } } emit(OXSet+c, i.to, R, R); - emit(OXCmp, R, i.arg[1], r0); + if (islong(r0, fn) || islong(i.arg[1], fn)) + emit(OXCmpl, R, i.arg[1], r0); + else + emit(OXCmpw, R, i.arg[1], r0); if (t != -1) emit(OCopy, r0, i.arg[0], R); break; -- cgit 1.4.1