Skip to content

maekawatoshiki/sericum

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Sericum

CircleCI

Compiler Infrastructure influenced by LLVM written in Rust

Do not expect too much stuff!

To Do

  • Implement basic block parameters
  • Make it possible to generate code for multiple targets without rebuilding sericum itself
  • Verify IR
  • More optimizations for IR
  • Support returning struct as value
  • Write documents

Build

Requirement: Rust nightly

cargo test           --features x86_64                          # build for x86_64
cargo test brainfuxk --features x86_64 --release -- --nocapture # this is fun. just try it.
cargo test           --features aarch64                         # build for aarch64. a few features are implemented.
cargo test           --features riscv64                         # currently doesn't work. need help.

Example

cargo test demo --features $ARCH -- --nocapture # $ARCH is x86_64 or aarch64
  • Useful macro is available to describe IR
let fibo = sericum_ir!(m; define [i32] f [(i32)] {
    entry:
        cond = icmp le (%arg.0), (i32 2);
        br (%cond) l1, l2;
    l1:
        ret (i32 1);
    l2:
        a1 = sub (%arg.0), (i32 1);
        r1 = call f [(%a1)];
        a2 = sub (%arg.0), (i32 2);
        r2 = call f [(%a2)];
        r3 = add (%r1), (%r2);
        ret (%r3);
});

Make your own language using sericum as backend

./minilang and ./sericumcc may help you.

About

(Toy) Compiler Infrastructure influenced by LLVM written in Rust

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages