From 46e1f128fd310bd29a2b4335b36c60d6cc0aa3a7 Mon Sep 17 00:00:00 2001 From: lemon Date: Sat, 20 Aug 2022 11:06:38 +0200 Subject: initial work on IR --- src/ir.hff | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/ir.hff (limited to 'src/ir.hff') 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; -- cgit v1.2.3