summary refs log tree commit diff
path: root/amd64/emit.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin@c9x.me>2022-11-24 11:08:33 +0100
committerQuentin Carbonneaux <quentin@c9x.me>2022-11-27 21:48:21 +0100
commit9126afa2da0e1635d78429075cc44ca576f68169 (patch)
tree0836f3da0fdfee9af24ca5dabb8244af61e5283e /amd64/emit.c
parentb5da3f3d64c857baf808220e202dc37c5c039eb8 (diff)
downloadroux-9126afa2da0e1635d78429075cc44ca576f68169.tar.gz
new hlt block terminator
It is handy to express when
the end of a block cannot be
reached. If a hlt terminator
is executed, it traps the
program.

We don't go the llvm way and
specify execution semantics as
undefined behavior.
Diffstat (limited to 'amd64/emit.c')
-rw-r--r--amd64/emit.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/amd64/emit.c b/amd64/emit.c
index a034a66..9e5996b 100644
--- a/amd64/emit.c
+++ b/amd64/emit.c
@@ -582,6 +582,9 @@ amd64_emitfn(Fn *fn, FILE *f)
 			emitins(*i, fn, f);
 		lbl = 1;
 		switch (b->jmp.type) {
+		case Jhlt:
+			fprintf(f, "\tud2\n");
+			break;
 		case Jret0:
 			if (fn->dynalloc)
 				fprintf(f,