Atualizado docs. Implementado ops logicos.
[myPerl.git] / code.h
blob90e3d3660fcd04f4aa60739bc8a95a4a6abd384a
1 #ifndef __CODE_H__
2 #define __CODE_H__
4 enum {
5 HALT,
6 ADD,
7 SUB,
8 MUL,
9 DIV,
10 MOD,
11 CMP_EQL,
12 CMP_NE,
13 CMP_GEQL,
14 CMP_LEQL,
15 CMP_GT,
16 CMP_LT,
17 CMP_OR,
18 CMP_AND,
19 CMP_NOT,
20 LOAD_VAR,
21 LOAD_INT,
22 LOAD_OFF,
23 STORE,
24 JMP_FALSE,
25 GOTO,
26 WRITE_INT,
27 PUSH_INT,
28 PUSH_VAR,
29 CALL,
30 RET,
31 SHIFT
34 /* For use by the virtual machine mainly */
35 struct ops {
36 char *opname;
37 void (*op)(int arg);
40 typedef struct code {
41 int op;
42 int arg;
43 } code_t;
45 /* defined in code.c */
46 extern struct ops ops[];
47 extern int code_offset;
48 extern code_t code[];
50 int reserve_loc(void);
51 int gen_label(void);
52 void gen_code(int op, int arg);
53 void back_patch(int addr, int op, int arg);
54 void print_code(char *output);
56 #endif /* !__CODE_H__ */