summary refs log tree commit diff
path: root/lisc/emit.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisc/emit.c')
-rw-r--r--lisc/emit.c7
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;