commit a18a324ce279aa59ddd5e92c2e30fdc140ee6018 from: Benjamin Stürz date: Thu Oct 03 00:22:40 2024 UTC irc: add IR_NOP 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; }