aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/example.c
diff options
authorLinus Torvalds <torvalds@ppc970.osdl.org>2004-12-09 17:53:05 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:05:48 -0700
commitdd51633ebee9deff9928e570c376b7e22af6c93c (patch)
tree98848827b53f5eff5f3d98a8f02b1dc6204fb15b /example.c
parentff7a53553105a28b1e70e59401e24c2243c3e867 (diff)
downloadsparse-dev-dd51633ebee9deff9928e570c376b7e22af6c93c.tar.gz
Generate some kind of code for OP_RET
Diffstat (limited to 'example.c')
-rw-r--r--example.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/example.c b/example.c
index 5c7c697b..efe10c43 100644
--- a/example.c
+++ b/example.c
@@ -440,6 +440,17 @@ static void generate_branch(struct bb_state *state, struct instruction *br)
printf("\tjmp .L%p\n", br->bb_true);
}
+static void generate_ret(struct bb_state *state, struct instruction *ret)
+{
+ if (ret->src && ret->src != VOID) {
+ struct hardreg *wants = hardregs+0;
+ struct hardreg *reg = getreg(state, ret->src, NULL);
+ if (reg != wants)
+ printf("\tmovl %s,%s\n", reg->name, wants->name);
+ }
+ printf("\tret\n");
+}
+
static void generate_one_insn(struct instruction *insn, struct bb_state *state)
{
switch (insn->opcode) {
@@ -493,6 +504,10 @@ static void generate_one_insn(struct instruction *insn, struct bb_state *state)
generate_branch(state, insn);
break;
+ case OP_RET:
+ generate_ret(state, insn);
+ break;
+
default:
show_instruction(insn);
return;