summaryrefslogtreecommitdiff
path: root/hdl/core/opcodes.py
blob: cd1737b25b87b64c50147f779cd2d25fce7d62cd (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
from enum import unique, Enum


@unique
class OpCodes(Enum):

    # R-type
    ADD    = 0x01
    ADDC   = 0x02
    SUB    = 0x03
    SUBC   = 0x04
    XOR    = 0x05
    OR     = 0x06
    AND    = 0x07
    LSL    = 0x08
    LSR    = 0x09
    ASR    = 0x0A
    MULL   = 0x0B
    MULH   = 0x0C
    MULLU  = 0x0D
    MULHU  = 0x0E
    DIV    = 0x0F     # not implemented yet
    DIVU   = 0x10     # not implemented yet
    LDW    = 0x11
    STW    = 0x12


    # I-type
    ADDI   = 0x40
    SUBI   = 0x41
    XORI   = 0x42
    ORI    = 0x43
    ANDI   = 0x44
    LSLI   = 0x45
    LSRI   = 0x46
    ASRI   = 0x47
    MULIL  = 0x48
    MULIH  = 0x49
    MULIU  = 0x4A
    MULIUH = 0x4B
    DIVI   = 0x4C     # not implemented yet
    DIVUI  = 0x4D     # not implemented yet

    # J-type
    JMP    = 0x80
    JMPI   = 0x81

    # C-type (control), 2 MSB -> System mode only
    NOP    = 0x00
    CALL   = 0xA0
    RET    = 0xA1
    SCALL  = 0xA2

    # ------------------ System mode only ------------------
    INT    = 0xC0
    IRET   = 0xC1
    INVP   = 0xC2