diff options
Diffstat (limited to 'src/ir.hff')
| -rw-r--r-- | src/ir.hff | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/ir.hff b/src/ir.hff new file mode 100644 index 0000000..987db3b --- /dev/null +++ b/src/ir.hff @@ -0,0 +1,62 @@ +import "cffc.hff"; + +struct IRCtx { + alloc *Allocator, +} + +struct IRInst; +struct IRFn { + body *IRInst +} + +struct IRValue { + ty *const Type, + u enum union { + IImm i64, + FImm f64, + SImm [#]const u8, + BImm bool, + Null, + Tmp int, + } +} + +enum union IRArg { + Val IRValue, + Ty *const Type, + Fn *Decl, +} + +enum IRInstT { + neg, + compl, + fneg, + add, + sub, + mul, + div, + mod, + band, + bor, + xor, + lsl, + lsr, + asr, + fadd, + fsub, + fmul, + fdiv, + copy, + call, + ret0, +} + +struct IRInst { + t IRInstT, + next *IRInst, + cond *IRInst, + call_nargs int, + args [0]IRArg, +} + +extern fn irdump(*IRInst) void; |