summaryrefslogtreecommitdiff
path: root/tools/d2c/pproc.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-05-22 15:43:43 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-05-22 15:43:43 (GMT)
commit7577eadd4e871d467f747c4927a1b1984d6a7606 (patch)
treee72a2fd5c1619e60402a678b0559079ed267eab0 /tools/d2c/pproc.c
parent33aa90b022e7d711a733ca7eb62c0b285f974317 (diff)
Extended the compiler to transform all the new ARMv7 encoding definitions.
Diffstat (limited to 'tools/d2c/pproc.c')
-rw-r--r--tools/d2c/pproc.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/d2c/pproc.c b/tools/d2c/pproc.c
index fb72774..ec397f3 100644
--- a/tools/d2c/pproc.c
+++ b/tools/d2c/pproc.c
@@ -38,6 +38,9 @@ struct _pre_processor
string_exch *macros; /* Remplacements de chaînes */
size_t macros_count; /* Nombre de ces remplacements */
+ const char **op_producers; /* Producteurs d'opérandes */
+ size_t op_prod_count; /* Quantité de producteurs */
+
};
@@ -238,3 +241,53 @@ const char *find_macro(const pre_processor *pp, const char *src)
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : pp = pré-processeur dont le contenu est à compléter. *
+* func = fonction produisant un opérande final. *
+* *
+* Description : Mémorise une fonction comme produisant un opérateur final. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void register_as_operand_producer(pre_processor *pp, const char *func)
+{
+ pp->op_producers = (const char **)realloc(pp->op_producers, ++pp->op_prod_count * sizeof(const char **));
+
+ pp->op_producers[pp->op_prod_count - 1] = func;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : pp = pré-processeur dont le contenu est à consulter. *
+* func = fonction dont la nature du résultat est recherchée. *
+* *
+* Description : Détermine si une fonction produit un opérande ou non. *
+* *
+* Retour : true si la fonction fournie produit un opérande final. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool is_operand_producer(const pre_processor *pp, const char *func)
+{
+ bool result; /* Bilan à retourner */
+ size_t i; /* Boucle de parcours */
+
+ result = false;
+
+ for (i = 0; i < pp->op_prod_count && !result; i++)
+ result = (strcmp(pp->op_producers[i], func) == 0);
+
+ return result;
+
+}