diff options
Diffstat (limited to 'plugins/arm/register.c')
-rw-r--r-- | plugins/arm/register.c | 97 |
1 files changed, 44 insertions, 53 deletions
diff --git a/plugins/arm/register.c b/plugins/arm/register.c index 5d24806..6a58d59 100644 --- a/plugins/arm/register.c +++ b/plugins/arm/register.c @@ -46,22 +46,22 @@ static void g_arm_register_dispose(GArmRegister *); /* Procède à la libération totale de la mémoire. */ static void g_arm_register_finalize(GArmRegister *); -/* Produit une empreinte à partir d'un registre. */ -static guint g_arm_register_hash(const GArmRegister *); -/* Compare un registre avec un autre. */ -static int g_arm_register_compare(const GArmRegister *, const GArmRegister *); +/* --------------------- IMPLEMENTATION DES FONCTIONS DE CLASSE --------------------- */ -/* --------------------- TRANSPOSITIONS VIA CACHE DES REGISTRES --------------------- */ +/* Produit une empreinte à partir d'un registre. */ +static guint g_arm_register_hash(const GArmRegister *); +/* Compare un registre avec un autre. */ +static int g_arm_register_compare(const GArmRegister *, const GArmRegister *); -/* Charge un registre depuis une mémoire tampon. */ -static GArchRegister *g_arm_register_unserialize(GArmRegister *, GAsmStorage *, packed_buffer_t *); +/* Charge un contenu depuis une mémoire tampon. */ +static bool g_arm_register_load(GArmRegister *, GObjectStorage *, packed_buffer_t *); -/* Sauvegarde un registre dans une mémoire tampon. */ -static bool g_arm_register_serialize(const GArmRegister *, GAsmStorage *, packed_buffer_t *); +/* Sauvegarde un contenu dans une mémoire tampon. */ +static bool g_arm_register_store(GArmRegister *, GObjectStorage *, packed_buffer_t *); @@ -88,20 +88,21 @@ G_DEFINE_TYPE(GArmRegister, g_arm_register, G_TYPE_ARCH_REGISTER); static void g_arm_register_class_init(GArmRegisterClass *klass) { - GObjectClass *object_class; /* Autre version de la classe */ - GArchRegisterClass *reg_class; /* Classe de haut niveau */ + GObjectClass *object; /* Autre version de la classe */ + GArchRegisterClass *reg; /* Classe de haut niveau */ - object_class = G_OBJECT_CLASS(klass); + object = G_OBJECT_CLASS(klass); - object_class->dispose = (GObjectFinalizeFunc/* ! */)g_arm_register_dispose; - object_class->finalize = (GObjectFinalizeFunc)g_arm_register_finalize; + object->dispose = (GObjectFinalizeFunc/* ! */)g_arm_register_dispose; + object->finalize = (GObjectFinalizeFunc)g_arm_register_finalize; - reg_class = G_ARCH_REGISTER_CLASS(klass); + reg = G_ARCH_REGISTER_CLASS(klass); - reg_class->hash = (reg_hash_fc)g_arm_register_hash; - reg_class->compare = (reg_compare_fc)g_arm_register_compare; - reg_class->unserialize = (reg_unserialize_fc)g_arm_register_unserialize; - reg_class->serialize = (reg_serialize_fc)g_arm_register_serialize; + reg->hash = (reg_hash_fc)g_arm_register_hash; + reg->compare = (reg_compare_fc)g_arm_register_compare; + + reg->load = (load_register_fc)g_arm_register_load; + reg->store = (store_register_fc)g_arm_register_store; } @@ -181,6 +182,12 @@ uint8_t g_arm_register_get_index(const GArmRegister *reg) } + +/* ---------------------------------------------------------------------------------- */ +/* IMPLEMENTATION DES FONCTIONS DE CLASSE */ +/* ---------------------------------------------------------------------------------- */ + + /****************************************************************************** * * * Paramètres : reg = opérande à consulter pour le calcul. * @@ -224,19 +231,13 @@ static int g_arm_register_compare(const GArmRegister *a, const GArmRegister *b) } - -/* ---------------------------------------------------------------------------------- */ -/* TRANSPOSITIONS VIA CACHE DES OPERANDES */ -/* ---------------------------------------------------------------------------------- */ - - /****************************************************************************** * * -* Paramètres : reg = registre d'architecture à constituer. * -* storage = mécanisme de sauvegarde à manipuler. * -* pbuf = zone tampon à remplir. * +* Paramètres : reg = élément GLib à constuire. * +* storage = conservateur de données à manipuler ou NULL. * +* pbuf = zone tampon à lire. * * * -* Description : Charge un registre depuis une mémoire tampon. * +* Description : Charge un contenu depuis une mémoire tampon. * * * * Retour : Bilan de l'opération. * * * @@ -244,24 +245,17 @@ static int g_arm_register_compare(const GArmRegister *a, const GArmRegister *b) * * ******************************************************************************/ -static GArchRegister *g_arm_register_unserialize(GArmRegister *reg, GAsmStorage *storage, packed_buffer_t *pbuf) +static bool g_arm_register_load(GArmRegister *reg, GObjectStorage *storage, packed_buffer_t *pbuf) { - GArchRegister *result; /* Instance à retourner */ + bool result; /* Bilan à retourner */ GArchRegisterClass *parent; /* Classe parente à consulter */ - /** - * L'indice de registre est utilisé par les sous-classes pour la regénération - * à partir du cache. - * - * Il est donc lu depuis le tempon avant l'appel à cette fonction, et est - * ainsi déjà pris en compte. - */ - - result = G_ARCH_REGISTER(reg); - parent = G_ARCH_REGISTER_CLASS(g_arm_register_parent_class); - result = parent->unserialize(result, storage, pbuf); + result = parent->load(G_ARCH_REGISTER(reg), storage, pbuf); + + if (result) + result = extract_packed_buffer(pbuf, ®->index, sizeof(uint8_t), true); return result; @@ -270,11 +264,11 @@ static GArchRegister *g_arm_register_unserialize(GArmRegister *reg, GAsmStorage /****************************************************************************** * * -* Paramètres : reg = registre d'architecture à consulter. * -* storage = mécanisme de sauvegarde à manipuler. * +* Paramètres : reg = élément GLib à consulter. * +* storage = conservateur de données à manipuler ou NULL. * * pbuf = zone tampon à remplir. * * * -* Description : Sauvegarde un registre dans une mémoire tampon. * +* Description : Sauvegarde un contenu dans une mémoire tampon. * * * * Retour : Bilan de l'opération. * * * @@ -282,20 +276,17 @@ static GArchRegister *g_arm_register_unserialize(GArmRegister *reg, GAsmStorage * * ******************************************************************************/ -static bool g_arm_register_serialize(const GArmRegister *reg, GAsmStorage *storage, packed_buffer_t *pbuf) +static bool g_arm_register_store(GArmRegister *reg, GObjectStorage *storage, packed_buffer_t *pbuf) { bool result; /* Bilan à retourner */ GArchRegisterClass *parent; /* Classe parente à consulter */ - result = extend_packed_buffer(pbuf, ®->index, sizeof(uint8_t), false); - - if (result) - { - parent = G_ARCH_REGISTER_CLASS(g_arm_register_parent_class); + parent = G_ARCH_REGISTER_CLASS(g_arm_register_parent_class); - result = parent->serialize(G_ARCH_REGISTER(reg), storage, pbuf); + result = parent->store(G_ARCH_REGISTER(reg), storage, pbuf); - } + if (result) + result = extend_packed_buffer(pbuf, ®->index, sizeof(uint8_t), false); return result; |