summaryrefslogtreecommitdiff
path: root/src/arch/instruction.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/instruction.c')
-rw-r--r--src/arch/instruction.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/arch/instruction.c b/src/arch/instruction.c
index 98d7c85..aa90e70 100644
--- a/src/arch/instruction.c
+++ b/src/arch/instruction.c
@@ -264,6 +264,37 @@ void g_arch_instruction_detach_operand(GArchInstruction *instr, GArchOperand *op
}
+/******************************************************************************
+* *
+* Paramètres : instr = instruction à consulter. *
+* rregs = liste des rgistres lus. [OUT] *
+* rcount = nombre de registres lus. [OUT] *
+* wregs = liste des rgistres écrits. [OUT] *
+* wcount = nombre de registres écrits. [OUT] *
+* *
+* Description : Liste les registres lus et écrits par l'instruction. *
+* *
+* Retour : - *
+* *
+* Remarques : Les compteurs de références sont à décrémenter après usage ! *
+* *
+******************************************************************************/
+
+void g_arch_instruction_get_rw_registers(const GArchInstruction *instr, GArchRegister ***rregs, size_t *rcount, GArchRegister ***wregs, size_t *wcount)
+{
+ size_t i; /* Boucle de parcours */
+
+ instr->get_rw_regs(instr, rregs, rcount, wregs, wcount);
+
+ for (i = 0; i < *rcount; i++)
+ g_object_ref(G_OBJECT((*rregs)[i]));
+
+ for (i = 0; i < *wcount; i++)
+ g_object_ref(G_OBJECT((*wregs)[i]));
+
+}
+
+
/* ---------------------------------------------------------------------------------- */
/* DEFINITION DES LIAISONS ENTRE INSTRUCTIONS */