summaryrefslogtreecommitdiff
path: root/src/arch/dalvik/register.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-05-21 16:48:11 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-05-21 16:48:11 (GMT)
commitacd355c4c5ae25fb9cac64b8dc17407a2bcc979b (patch)
treed5b43201049116cd9734ff554e61ed8a7e0084cc /src/arch/dalvik/register.c
parent4691a434a34a19317156a761967f719e408b73bb (diff)
Refined the whole share system for operands.
Diffstat (limited to 'src/arch/dalvik/register.c')
-rw-r--r--src/arch/dalvik/register.c101
1 files changed, 62 insertions, 39 deletions
diff --git a/src/arch/dalvik/register.c b/src/arch/dalvik/register.c
index 45b2224..2b5a285 100644
--- a/src/arch/dalvik/register.c
+++ b/src/arch/dalvik/register.c
@@ -69,8 +69,8 @@ static void g_dalvik_register_dispose(GDalvikRegister *);
/* Procède à la libération totale de la mémoire. */
static void g_dalvik_register_finalize(GDalvikRegister *);
-/* Initialise un nouvel objet partagé avec des informations. */
-static bool g_dalvik_register_do_init(GDalvikRegister *, const GDalvikRegister *);
+/* Réalise une copie minimale d'un contenu partagé. */
+static void g_dalvik_register_define_template(const GDalvikRegister *, GDalvikRegister *);
/* Produit une empreinte à partir d'un registre. */
static guint g_dalvik_register_hash(const GDalvikRegister *);
@@ -87,6 +87,10 @@ static void g_dalvik_register_print(const GDalvikRegister *, GBufferLine *, AsmS
static GShareManager *_dalvik_register_manager = NULL;
+/* Fournit le gestionnaire de partages attribué à un type. */
+static GShareManager *get_dalvik_register_share_manager(void);
+
+
/* ---------------------------------------------------------------------------------- */
/* ENCADREMENT DE REGISTRES BRUTS */
@@ -121,7 +125,9 @@ static void g_dalvik_register_class_init(GDalvikRegisterClass *klass)
register_class = G_ARCH_REGISTER_CLASS(klass);
- register_class->init = (init_shared_fc)g_dalvik_register_do_init;
+ register_class->get_manager = (get_register_manager_fc)get_dalvik_register_share_manager;
+
+ register_class->define_template = (define_register_template_fc)g_dalvik_register_define_template;
register_class->hash = (reg_hash_fc)g_dalvik_register_hash;
register_class->compare = (reg_compare_fc)g_dalvik_register_compare;
@@ -188,48 +194,20 @@ static void g_dalvik_register_finalize(GDalvikRegister *reg)
/******************************************************************************
* *
-* Paramètres : index = indice du registre correspondant. *
-* *
-* Description : Crée une réprésentation de registre Dalvik. *
-* *
-* Retour : Adresse de la structure mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GDalvikRegister *g_dalvik_register_new(uint16_t index)
-{
- GDalvikRegister *result; /* Structure à retourner */
- GDalvikRegister fake; /* Transport d'informations */
-
- fake.index = index;
-
- result = G_DALVIK_REGISTER(g_share_manager_get(_dalvik_register_manager, (GSharedInstance *)&fake));
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : reg = objet partagé à initialiser. *
-* fake = coquille vide contenant les infos à enregistrer. *
+* Paramètres : reg = objet partagé à consulter. *
+* template = informations à retrouver intégralement. *
* *
-* Description : Initialise un nouvel objet partagé avec des informations. *
+* Description : Réalise une copie minimale d'un contenu partagé. *
* *
-* Retour : Bilan de l'opération. *
+* Retour : - *
* *
* Remarques : - *
* *
******************************************************************************/
-static bool g_dalvik_register_do_init(GDalvikRegister *reg, const GDalvikRegister *fake)
+static void g_dalvik_register_define_template(const GDalvikRegister *reg, GDalvikRegister *template)
{
- reg->index = fake->index;
-
- return true;
+ template->index = reg->index;
}
@@ -295,6 +273,32 @@ static void g_dalvik_register_print(const GDalvikRegister *reg, GBufferLine *lin
/******************************************************************************
* *
+* Paramètres : index = indice du registre correspondant. *
+* *
+* Description : Crée une réprésentation de registre Dalvik. *
+* *
+* Retour : Adresse de la structure mise en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GDalvikRegister *g_dalvik_register_new(uint16_t index)
+{
+ GDalvikRegister *result; /* Structure à retourner */
+ GDalvikRegister template; /* Transport d'informations */
+
+ template.index = index;
+
+ result = G_DALVIK_REGISTER(g_share_manager_build(_dalvik_register_manager, (GSharedInstance *)&template));
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : reg = registre à consulter. *
* *
* Description : Fournit l'indice d'un registre Dalvik. *
@@ -325,11 +329,11 @@ uint16_t g_dalvik_register_get_index(const GDalvikRegister *reg)
* *
******************************************************************************/
-int g_dalvik_register_compare(const GDalvikRegister * const *a, const GDalvikRegister * const *b)
+int g_dalvik_register_compare(const GDalvikRegister *a, const GDalvikRegister *b)
{
int result; /* Bilan à retourner */
- result = sort_unsigned_long((*a)->index, (*b)->index);
+ result = sort_unsigned_long(a->index, b->index);
return result;
@@ -345,6 +349,25 @@ int g_dalvik_register_compare(const GDalvikRegister * const *a, const GDalvikReg
* *
* Paramètres : - *
* *
+* Description : Fournit le gestionnaire de partages attribué à un type. *
+* *
+* Retour : Gestionnaire de partages en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static GShareManager *get_dalvik_register_share_manager(void)
+{
+ return _dalvik_register_manager;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
* Description : Met en place les mécanismes de partage des registres Dalvik. *
* *
* Retour : Bilan de l'opération. *