aboutsummaryrefslogtreecommitdiff
path: root/src/as_op.c
blob: 8b5d8878ff32bcfe52c4603daffb61fd6121c11a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "as_op.h"

#include <string.h>

struct op_table_entry {
    enum op op;
    const char* name;
};  


struct op_table_entry op_table [] = {
    // OP_SP, OP_SSP, OP_BP, OP_SBP, OP_PC, OP_RV, OP_SRV,
    {OP_SP, "sp"},
    {OP_SSP, "ssp"},
    {OP_BP, "bp"},
    {OP_SBP, "sbp"},
    {OP_PC, "pc"},
    {OP_RV, "rv"},
    {OP_SRV, "srv"},
    // OP_IMM,
    {OP_IMM, "imm"},
    // OP_LD8, OP_LD16, OP_LD32, OP_LD,
    {OP_LD8, "ld8"},
    {OP_LD16, "ld16"},
    {OP_LD32, "ld32"},
    {OP_LD, "ld"},
    // OP_ST8, OP_ST16, OP_ST32, OP_ST,
    {OP_ST8, "st8"},
    {OP_ST16, "st16"},
    {OP_ST32, "st32"},
    {OP_ST, "st"},
    // OP_DUP, OP_POP, OP_SWAP, OP_OVER, OP_ROT,
    {OP_DUP, "dup"},
    {OP_POP, "pop"},
    {OP_SWAP, "swap"},
    {OP_OVER, "over"},
    {OP_ROT, "rot"},
    // OP_ADD, OP_SUB, OP_DIV, OP_MUL, OP_MOD,
    {OP_ADD, "add"},
    {OP_SUB, "sub"},
    {OP_DIV, "div"},
    {OP_MUL, "mul"},
    {OP_MOD, "mod"},
    // OP_SHR, OP_SHL, OP_SAR,
    {OP_SHR, "shr"},
    {OP_SHL, "shl"},
    {OP_SAR, "sar"},
    // OP_AND, OP_OR, OP_NOT,
    {OP_AND, "and"},
    {OP_OR, "or"},
    {OP_NOT, "not"},
    // OP_BITAND, OP_BITOR, OP_XOR, OP_INVERT,
    {OP_BITAND, "bitand"},
    {OP_BITOR, "bitor"},
    {OP_XOR, "xor"},
    {OP_INVERT, "invert"},
    // OP_GT, OP_LT, OP_GE, OP_LE, OP_EQ, OP_NEQ,
    {OP_GT, "gt"},
    {OP_LT, "lt"},
    {OP_GE, "ge"},
    {OP_LE, "le"},
    {OP_EQ, "eq"},
    {OP_NEQ, "neq"},
    // OP_JMP, OP_JZ, OP_JNZ, OP_RET, OP_CALL, OP_SYSCALL,
    {OP_JMP, "jmp"},
    {OP_JZ, "jz"},
    {OP_JNZ, "jnz"},
    {OP_RET, "ret"},
    {OP_CALL, "call"},
    {OP_SYSCALL, "syscall"},
    // OP_FADD, OP_FSUB, OP_FMUL, OP_FDIV,
    {OP_FADD, "fadd"},
    {OP_FSUB, "fsub"},
    {OP_FMUL, "fmul"},
    {OP_FDIV, "fdiv"},
    // OP_FGE, OP_FGT, OP_FLE, OP_FLT, OP_FEQ, OP_FNEQ,
    {OP_FGE, "fge"},
    {OP_FGT, "fgt"},
    {OP_FLT, "flt"},
    {OP_FEQ, "feq"},
    {OP_FNEQ, "fneq"},
    // OP_FTI, OP_ITF,
    {OP_FTI, "fti"},
    {OP_ITF, "itf"},
    // OP_EXIT,
    {OP_EXIT, "exit"},
    // OP_LDARG, OP_LDVAR, OP_STARG, OP_STVAR,
    {OP_LDARG, "ldarg"},
    {OP_LDVAR, "ldvar"},
    {OP_STARG, "starg"},
    {OP_STVAR, "stvar"},
    {OP_END, NULL},
};

enum op str2op(const char* str) {
    for (int i = 0; op_table[i].name != NULL; i++) {
        if (strcmp(op_table[i].name, str) == 0) {
            return op_table[i].op;
        }
    }
    return OP_END;
}

int isOp(const char *str) {
    return OP_END != str2op(str);
}