diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-05-21 16:48:11 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-05-21 16:48:11 (GMT) |
commit | acd355c4c5ae25fb9cac64b8dc17407a2bcc979b (patch) | |
tree | d5b43201049116cd9734ff554e61ed8a7e0084cc /src/arch/dalvik/register.c | |
parent | 4691a434a34a19317156a761967f719e408b73bb (diff) |
Refined the whole share system for operands.
Diffstat (limited to 'src/arch/dalvik/register.c')
-rw-r--r-- | src/arch/dalvik/register.c | 101 |
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. * |