summaryrefslogtreecommitdiff
path: root/src/modules/ast/ir.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/ast/ir.scm')
-rw-r--r--src/modules/ast/ir.scm50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/modules/ast/ir.scm b/src/modules/ast/ir.scm
new file mode 100644
index 0000000..3b373e5
--- /dev/null
+++ b/src/modules/ast/ir.scm
@@ -0,0 +1,50 @@
+(define-module (modules ast ir)
+ #:export (prog
+ srout
+ neg
+ not
+ mov
+ stack
+ reg
+ imm
+ tmp
+ ret))
+
+;;; Commentary:
+;;;
+;;; Nodes which exist to do nothing when evaluated.
+;;;
+;;; Code:
+
+(define (ir-node type . args)
+ (cons type args))
+
+(define (prog func)
+ (ir-node 'prog func))
+
+(define (srout label instrs)
+ (ir-node 'srout label instrs))
+
+(define (neg dst)
+ (ir-node 'neg dst))
+
+(define (not dst)
+ (ir-node 'not dst))
+
+(define (mov dst src)
+ (ir-node 'mov dst src))
+
+(define (stack val)
+ (ir-node 'stack val))
+
+(define (reg val)
+ (ir-node 'reg val))
+
+(define (imm val)
+ (ir-node 'imm val))
+
+(define (tmp num)
+ (ir-node 'tmp num))
+
+(define (ret)
+ (ir-node 'ret))