Commit Diff


commit - 1b0ac8039426ded10ad6f8a7b1beba4203476ebc
commit + a18a324ce279aa59ddd5e92c2e30fdc140ee6018
blob - 7f0cf11f6f27af699a78aca32a3398efbe4cbae4
blob + 260a9c39dc958f824125ad2d0a45d984e03b84a6
--- cc/irc/irc.c
+++ cc/irc/irc.c
@@ -351,6 +351,7 @@ struct expr {
 };
 
 enum ir_type {
+	IR_NOP,
 	IR_LET,		// .let
 	IR_WRITE,	// .write
 	IR_RET,		// .ri
@@ -951,7 +952,11 @@ struct ir *ir;
 	if (tk != TK_IDENT)
 		goto err;
 
-	if (strcmp (lval.s, "let") == 0) {
+	if (strcmp (lval.s, "nop") == 0) {
+		ir->type = IR_NOP;
+		expect (';');
+		return 0;
+	} else if (strcmp (lval.s, "let") == 0) {
 		ir->type = IR_LET;
 		expect (TK_REG);
 		ir->let.dest = lval.i;
@@ -1393,6 +1398,9 @@ struct ir *ir;
 {
 	printf ("%d: ", ir->line);
 	switch (ir->type) {
+	case IR_NOP:
+		puts ("nop;");
+		break;
 	case IR_LET:
 		printf ("let $%d: ", ir->let.dest);
 		print_dt (&ir->let.dt);
@@ -2579,6 +2587,9 @@ struct ir *ir;
 	print_ir (ir);
 
 	switch (ir->type) {
+	case IR_NOP:
+		puts ("\tnop");
+		break;
 	case IR_LET:
 		r = &fn->regs[ir->let.dest];
 		if (r->type != R_LOCAL)
blob - 87774e9d23d0c92f8e40e943e6769eaf186b85dd
blob + 1d6a10ae6bf33408ac50b80ade2bedfd35342862
--- cc/irc/test.ir
+++ cc/irc/test.ir
@@ -222,5 +222,6 @@ fn fcmp (): word {
 	let $5: word = fgt $0, $1;
 	let $6: word = fle $0, $1;
 	let $7: word = fge $0, $1;
+	nop;
 	ret 0;
 }