summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-03-08 21:18:11 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-03-08 21:18:11 (GMT)
commit009f00f18ef49295a55e6389c0687d0d767f45b0 (patch)
tree72952e2d58ed28f9054476a604b191b32308e663 /src/arch
parentfaa334f84ea2ddac65358dde0f05c074747f4e39 (diff)
Reduced the number of produced reference links.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/instruction.c37
-rw-r--r--src/arch/instruction.h3
2 files changed, 39 insertions, 1 deletions
diff --git a/src/arch/instruction.c b/src/arch/instruction.c
index a86509c..4bb2e2d 100644
--- a/src/arch/instruction.c
+++ b/src/arch/instruction.c
@@ -750,8 +750,43 @@ static size_t g_arch_instruction_inc_link_counter(GArchInstruction *instr, bool
* *
* Paramètres : instr = instruction dont les informations sont à consulter. *
* dest = ligne visée par la liaison (côté destination). *
+* *
+* Description : Détermine si un lien est déjà établi entre deux instructions.*
+* *
+* Retour : Bilan de l'état actuel des liaisons. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_arch_instruction_has_link_to(GArchInstruction *instr, const GArchInstruction *dest)
+{
+ bool result; /* Bilan à retourner */
+ size_t count; /* Nombre de liens à parcourir */
+ size_t i; /* Boucle de parcours */
+
+ result = false;
+
+ g_arch_instruction_rlock_dest(instr);
+
+ count = g_arch_instruction_get_destination_counter(instr);
+
+ for (i = 0; i < count && !result; i++)
+ if (instr->to[i].linked == dest)
+ result = true;
+
+ g_arch_instruction_runlock_dest(instr);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : instr = instruction dont les informations sont à consulter. *
+* dest = ligne visée par la liaison (côté destination). *
* type = type de lien à construire. *
-* ... = éventuelles informations complémentaires. *
* *
* Description : Etablit un lien entre deux instructions. *
* *
diff --git a/src/arch/instruction.h b/src/arch/instruction.h
index 4f5a042..d38bb62 100644
--- a/src/arch/instruction.h
+++ b/src/arch/instruction.h
@@ -217,6 +217,9 @@ typedef struct _instr_link_t
/* Met à disposition un encadrement des accès aux liens. */
void g_arch_instruction_lock_unlock_links(GArchInstruction *, bool, bool, bool);
+/* Détermine si un lien est déjà établi entre deux instructions. */
+bool g_arch_instruction_has_link_to(GArchInstruction *, const GArchInstruction *);
+
/* Etablit un lien entre deux instructions. */
void g_arch_instruction_link_with(GArchInstruction *, GArchInstruction *, InstructionLinkType);