Hi,    (Aug 6th 2003)

You have download a compiler for a C-like language for the SX
microcontroller (now Ubicom).
                   
Below are some minimal explanations (in French) of what is going on. A few comments:

The sample directory contains a few sample programs (.c files) along with
files for xdust our SX simulator (.circuit files). You will have to use
sxasm to assemble the output from sxc for the simulator.

The go script in sample shows how to start xdust on one of the examples.

To compile:
1) Download and install a recent version of ocaml.
2) make depend
3) make
4) sxc is ready to go

Please note that this software is certainly full of bugs at it has only
been tested on a small number of examples. However, it should work on the
samples that are presented here. Please note that multiplication has not
been implemented yet as the SX does not natively 

The syntax of the language can be inferred from the lexer (.mll) and parser
(.mly) files.

------------------

Bonjour,

Voici une rapide description de notre compilateur pour microcontrolleur SX. Pour le
moment il produit du code qui a l'air bon, mais n'a pas encore beaucoup t test.

Pour voir comment l'utiliser : sxc --help

En l'absence de source ou de destination l'entre ou la sortie standard est utilise.

* Les diffrents sources qui le composent donnent une ide des diffrentes fonctions
qui ont t implmentes. Les parties tires de spim sont en fin de compte anecdotiques
(mais la structure des fichiers est souvent reste, au moins au dbut).

alloc.ml        L'allocateur de registres
arg.ml		Gre les arguments de ligne de commande.
ass.ml          Dfinition de type du code assembleur_1
ast.ml		Affichage de l'arbre de syntaxe abstraite
backend.ml	Fait appel  Codegen et Liveness pour produire le code assembleur_1
bank.ml		Supression des changements de banques de registres inutiles
code.ml		Dfinition du type du code intermdiaire
codegen.ml	Gnrateur de code
error.ml	Affichage des messages d'erreur
extractcalls.ml Extrait les appels de fonction des expressions, ainsi que les ?: et , 
fasm.ml		Dfinit le type assembleur_2 utilis pour la deuxime analyse de flowgraph
gen.ml		Dfinit les types label et temp
heap.ml		Module de gestion des tas utilis par page.ml
lexer.mll	Le lexeur
liveness.ml	Analyse de dure de vie et suppression de code mort
main3.ml	Le module qui appelle les autres dans le bon ordre
page.ml		Rpartit les blocs de base entre les diffrentes pages d'instruction
parser.mly	Le parseur
partition.ml	Module de gestion des partitions (non modifi)
pp.ml		Dfinition de type de l'arbre de syntaxe abstraite
smallset.ml	Module de gestion des ensembles (non modifi)
traceprep.ml    Gnre le deuxime graphe du flowgraph
tracetype.ml	Dfinit les types de la deuxime analyse du flowgraph
trans.ml	Transcrit l'arbre de syntaxe abstraite en code intermdiaire

* Voici un rsum des tapes en jeu

1) Gnration de l'arbre de syntaxe abstraite avec ocamllex et ocamlyacc
2) Traduction en code intermdiaire en vrifiant le typage
3) Suppression des calls, et des oprateurs if-then-else et virgule du code intermdiaire
4) Gnration du code assembleur en distinguant Label, Oper et Mov
5) Gnration du flowgraph
6) Dtermination de la dure de vie
7) Suppression du code mort
8) Allocation de registres
9) Application de l'allocation, en insrant les changements de banque, et gnration
de code assembleur distinguant Label, Call, Jump, Jcond, Ret et Oper
10) Gnration du flowgraph
11) Suppression des changement de banque inutiles (en cours de finition)
12) Partitionnement du code en pages pour viter les sauts inter-page
13) Emission finale du code
