arm64: init from arm
[uebersetzerbau-ss10.git] / gesamt_arm64 / tree.h
diff --git a/gesamt_arm64/tree.h b/gesamt_arm64/tree.h
new file mode 100644 (file)
index 0000000..8a651e7
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef __TREE_H
+#define __TREE_H
+
+#define TREENULL (struct treenode *)NULL
+#define TREESIZE (sizeof(struct treenode))
+#define TREECAST struct treenode *
+
+#ifndef BFEHAX
+typedef struct burm_state *STATEPTR_TYPE;
+#endif
+
+enum {
+       O_RET=1, O_NULL, O_SUB, O_MUL,
+       O_OR=5, O_LESS, O_EQ, O_ID, O_ADD,
+       O_NUM=10, O_FIELD, O_MTWO, O_MFOUR, O_MEIGHT,
+       O_MONE=15, O_ASSIGN, O_IF, O_BOOL, O_CALL,
+       O_ARG=20, O_NOTHING, O_EXPR
+};
+
+static char *o_names[] = {
+       "", "O_RET", "O_NULL", "O_SUB", "O_MUL",
+       "O_OR", "O_LESS", "O_EQ", "O_ID", "O_ADD",
+       "O_NUM", "O_FIELD", "O_MTWO", "O_MFOUR", "O_MEIGHT",
+       "O_MONE", "O_ASSIGN", "O_IF", "O_BOOL", "O_CALL",
+       "O_ARG", "O_NOTHING", "O_EXPR"
+};
+
+struct treenode {
+       int op;
+       struct treenode *kids[2];
+       STATEPTR_TYPE label;
+       char *name;
+       long val;
+       char *reg;
+       struct treenode *parent;
+       int param_index;
+       int soffset;
+       int paramges;
+       int vars;
+};
+
+typedef struct treenode *treenodep;
+
+#define NODEPTR_TYPE treenodep
+#define OP_LABEL(p) ((p)->op)
+#define LEFT_CHILD(p) ((p)->kids[0])
+#define RIGHT_CHILD(p) ((p)->kids[1])
+#define STATE_LABEL(p) ((p)->label)
+#define PANIC printf
+
+struct treenode *new_node(int op, struct treenode *l, struct treenode *r);
+struct treenode *new_number(long val);
+struct treenode *new_param(int op, char *name, struct treenode *l, struct treenode *r, int param_index);
+struct treenode *new_field(char *name, struct treenode *l, struct treenode *r, int soffset);
+struct treenode *new_call(char *name, struct treenode *l, struct treenode *r, int paramges, int vars);
+struct treenode *new_arg(struct treenode *l, struct treenode *r, int soffset);
+struct treenode *new_nothing(void);
+void write_tree(struct treenode *node, int ident);
+
+#endif