Ho realizzato un processore virtuale con un semplice set di istruzioni e un modello di memoria come esercizio di apprendimento (e principalmente solo per divertimento). Posso scrivere programmi nel suo linguaggio assembly, assemblarli con il mio assemblatore e eseguirli con successo su una macchina virtuale.
Volevo scrivere un compilatore per un linguaggio di livello superiore che ha come target questa macchina, quindi non devo scrivere tutto in assembly. Ho sentito parlare di LLVM , un progetto di compilazione che supporta più front-end per lingue diverse e output IR che è in qualche modo simile a un assembly. Questo IR viene assegnato a un back-end specifico della piattaforma che lo trasforma in assembly / codice macchina per una piattaforma.
Ho cercato di scrivere il mio backend; Ho visto il tutorial del backend di LLVM e backend per il tutorial di Cpu0 e, francamente, sembra un po 'complicato.
È possibile scrivere un compilatore, esterno a LLVM, che legge i file * .ll di LLVM e genera l'assemblatore per la mia piattaforma, invece di scrivere un backend LLVM completamente nuovo?
Non mi importa molto del mio codice che corre veloce e che è altamente ottimizzato in questo momento, voglio solo ottenere la compilazione del codice reale ad esso. Sto bene a capire l'assegnazione del registro, et. al. da solo, non ho bisogno che sia efficiente.