Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
51 lines (32 sloc) 1.22 KB
Another Scheme Compiler
Still in early development!
Current design
==============
* CPS high-level IR
Raw scheme source code undergoes macro expansion, alpha conversion,
CPS conversion, beta reduction, closure conversion, and finally,
conversion to the Tree IR.
* Tree-based low-level IR
Used as a convenient source IR for instruction selection.
* x86-64 instruction selector
Uses a near-optimal maximal munch algorithm, and a set of pattern-matching rules.
* Linear scan register allocator
After computing live ranges for temps, we allocate registers in a single
pass over the machine instructions. The allocator is able to temps which
are pre-assigned a specific hardware register (due to calling conventions, etc)
* Assembler [TODO]
Written in Scheme!
Supported Language
==================
Primitives: lambda, let, begin, if, and, or, not, fx+, fx-, fx=, fx<=, fx>=, fx<, fx>
Data: closures, fixnums
Build
=====
Dependencies: Chicken Scheme
$ make
Usage
=====
Currently the `scc' executable takes an input file containing a Scheme program, and dumps the generated x86-64 assembly to standard out. Early days!
$ scc FILE
Example: Scheme program which calculates fibonacci(23)
$ scc tests/fibonacci-001.scm