aboutsummaryrefslogtreecommitdiff
path: root/arch/salis-v1/arch_vars.py
blob: 8bf40a72bb02a319efa40b17cc79ad645a504c26 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
mvec_loop = False

# Organisms consist of:
# - instruction pointer
# - seeker pointer
# - main memory block
# - child memory block
# - 4 registers
# - 8 value stack
proc_fields = [
    ("uint64_t", "ip"),
    ("uint64_t", "sp"),
    ("uint64_t", "mb0a"),
    ("uint64_t", "mb0s"),
    ("uint64_t", "mb1a"),
    ("uint64_t", "mb1s"),
    ("uint64_t", "r0x"),
    ("uint64_t", "r1x"),
    ("uint64_t", "r2x"),
    ("uint64_t", "r3x"),
    ("uint64_t", "s0"),
    ("uint64_t", "s1"),
    ("uint64_t", "s2"),
    ("uint64_t", "s3"),
    ("uint64_t", "s4"),
    ("uint64_t", "s5"),
    ("uint64_t", "s6"),
    ("uint64_t", "s7"),
]

# Salis-v1 instruction set
inst_set = [
    (["noop"], " "),
    (["nop0"], "0"),
    (["nop1"], "1"),
    (["nop2"], "2"),
    (["nop3"], "3"),
    # -------------
    (["jmpb"], "("),
    (["jmpf"], ")"),
    (["adrb"], "["),
    (["adrf"], "]"),
    (["ifnz"], "?"),
    # -------------
    (["allb"], "{"),
    (["allf"], "}"),
    (["bswp"], "%"),
    (["bclr"], "|"),
    (["splt"], "$"),
    # -------------
    (["addn"], "+"),
    (["subn"], "-"),
    (["muln"], "*"),
    (["divn"], "/"),
    (["incn"], "^"),
    (["decn"], "v"),
    (["notn"], "!"),
    (["shfl"], "<"),
    (["shfr"], ">"),
    (["zero"], "z"),
    (["unit"], "u"),
    # -------------
    (["pshn"], "#"),
    (["popn"], "~"),
    # -------------
    (["load"], "."),
    (["wrte"], ":"),
    (["dupl"], "="),
    (["swap"], "x"),
    # -------------
    (["keya"], "a"),
    (["keyb"], "b"),
    (["keyc"], "c"),
    (["keyd"], "d"),
    (["keye"], "e"),
    (["keyf"], "f"),
    (["keyg"], "g"),
    (["keyh"], "h"),
    (["keyi"], "i"),
    (["keyj"], "j"),
    (["keyk"], "k"),
    (["keyl"], "l"),
    (["keym"], "m"),
    (["keyn"], "n"),
    (["keyo"], "o"),
    (["keyp"], "p"),
    # -------------
    (["loka"], "A"),
    (["lokb"], "B"),
    (["lokc"], "C"),
    (["lokd"], "D"),
    (["loke"], "E"),
    (["lokf"], "F"),
    (["lokg"], "G"),
    (["lokh"], "H"),
    (["loki"], "I"),
    (["lokj"], "J"),
    (["lokk"], "K"),
    (["lokl"], "L"),
    (["lokm"], "M"),
    (["lokn"], "N"),
    (["loko"], "O"),
    (["lokp"], "P"),
]

inst_count = len(inst_set)

# Extra fields used exclusively for data aggregation
core_fields = [
    ("uint64_t", f"iexe[{inst_count}]", False),
    ("uint64_t", f"iwrt[{inst_count}]", False),
    ("uint64_t", "emb0", True),
    ("uint64_t", "emb1", True),
    ("uint64_t", "eliv", True),
    ("uint64_t", "edea", True),
    ("uint64_t", "wmb0", True),
    ("uint64_t", "wmb1", True),
    ("uint64_t", "wdea", True),

    # Event data aggregators
    # Allocation event vector
    ("uint64_t",   "aevp", True),
    ("uint64_t",   "aevc", True),
    ("uint64_t *", "aeva", False),
]