summaryrefslogtreecommitdiff
path: root/src/arch/instruction-int.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/instruction-int.h')
-rw-r--r--src/arch/instruction-int.h31
1 files changed, 9 insertions, 22 deletions
diff --git a/src/arch/instruction-int.h b/src/arch/instruction-int.h
index beb6b50..b7bd5f3 100644
--- a/src/arch/instruction-int.h
+++ b/src/arch/instruction-int.h
@@ -60,22 +60,13 @@ struct _GArchInstruction
/**
* Il existe le besoin indéniable d'un verrou pour les accès aux instructions
* liées. Il faut par ailleurs un verrou distinct pour les sources et les
- * destination car une même instruction peut boucler sur elle même et la
+ * destinations car une même instruction peut boucler sur elle même et la
* fonction g_arch_instruction_change_link() pose des verrous sur les
* deux extrémités.
*
- * Par ailleurs, la consommation mémoire augmente vite : GRWLock pèse 16
- * octets et size_t mesure la taille d'un long sur 64 bits.
- *
- * Que ce soit avec les pointeurs (un allocateur aligne généralement les
- * adresses retournées) ou avec les tailles (il est peu probable d'avoir
- * 0x80000000 instructions d'origine), on dispose d'espace mémoire inutilisé
- * adapté pour compresser la structure GArchInstruction.
- *
- * La GLib propose incidemment des fonctions g_bit_lock() / g_bit_unlock()...
- *
- * On perd au passage la distinction entre les accès en lecture et ceux en
- * écriture, mais tant pis : la réduction de l'empreinte mémoire prime !
+ * La GLib propose les fonctions g_bit_lock() / g_bit_unlock(), légères mais
+ * sans distinction entre lectures et écritures. Tant pis : la réduction de
+ * l'empreinte mémoire prime !
*
* Par contre la documentation indique :
*
@@ -83,23 +74,19 @@ struct _GArchInstruction
* Attempting to lock on two different bits within the same integer is not supported.
* """
*
- * Donc on conserve un compteur distinct pour chaque extrémité.
+ * Donc on doit bien conserver un compteur distinct pour chaque extrémité.
+ * Cela correspond de toute façon à la définition optimisée des tableaux
+ * suivante.
*/
- instr_link_t *from; /* Origines des références */
- instr_link_t *to; /* Instructions visées */
- gint from_count; /* Nombre de ces origines */
- gint to_count; /* Nombre de ces destinations */
+ flat_array_t *from; /* Origines des références */
+ flat_array_t *to; /* Instructions visées */
ArchInstrFlag flags; /* Informations complémentaires*/
};
-/* Bit de verrou pour les champs (from|to)_count */
-#define INSTR_LINK_LOCK_BIT 31
-
-
/* Définition générique d'une instruction d'architecture (classe) */
struct _GArchInstructionClass
{