~ubuntu-branches/ubuntu/trusty/drmips/trusty-backports

« back to all changes in this revision

Viewing changes to src/simulator/DrMIPSSimulator/cpu/default-extended.set

  • Committer: Package Import Robot
  • Author(s): Bruno Nova
  • Date: 2014-09-27 12:24:17 UTC
  • Revision ID: package-import@ubuntu.com-20140927122417-2gadkwt9k0u7j4zu
Tags: upstream-1.2.3
Import upstream version 1.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
{
 
2
        "comment": "Instruction set of the reference book, with some additional instructions.",
 
3
        "types": {
 
4
                "R": [{"id": "op", "size": 6}, {"id": "rs", "size": 5}, {"id": "rt", "size": 5}, {"id": "rd", "size": 5}, {"id": "shamt", "size": 5}, {"id": "func", "size": 6}],
 
5
                "I": [{"id": "op", "size": 6}, {"id": "rs", "size": 5}, {"id": "rt", "size": 5}, {"id": "imm", "size": 16}],
 
6
                "J": [{"id": "op", "size": 6}, {"id": "target", "size": 26}]
 
7
        },
 
8
        "instructions": {
 
9
                "nop":  {"type": "R", "fields": {"op": 0, "rs": 0, "rt": 0, "rd": 0, "shamt": 0, "func": 0}},
 
10
                "add":  {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 32}, "desc": "$t1 = $t2 + $t3"},
 
11
                "sub":  {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 34}, "desc": "$t1 = $t2 - $t3"},
 
12
                "and":  {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 36}, "desc": "$t1 = $t2 & $t3"},
 
13
                "or":   {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 37}, "desc": "$t1 = $t2 | $t3"},
 
14
                "nor":   {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 39}, "desc": "$t1 = ~($t2 | $t3)"},
 
15
                "slt":  {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 42}, "desc": "$t1 = ($t2 < $t3) ? 1 : 0"},
 
16
                "xor":   {"type": "R", "args": ["reg", "reg", "reg"], "fields": {"op": 0, "rs": "#2", "rt": "#3", "rd": "#1", "shamt": 0, "func": 38}, "desc": "$t1 = $t2 ^ $t3"},
 
17
                "mult": {"type": "R", "args": ["reg", "reg"], "fields": {"op": 0, "rs": "#1", "rt": "#2", "rd": 0, "shamt": 0, "func": 24}, "desc": "(HI,LO) = $t1 * $t2"},
 
18
                "div":  {"type": "R", "args": ["reg", "reg"], "fields": {"op": 0, "rs": "#1", "rt": "#2", "rd": 0, "shamt": 0, "func": 26}, "desc": "LO = $t1 / $t2; HI = $t1 % $t2"},
 
19
                "mfhi": {"type": "R", "args": ["reg"], "fields": {"op": 0, "rs": 0, "rt": 0, "rd": "#1", "shamt": 0, "func": 16}, "desc": "$t1 = HI"},
 
20
                "mflo": {"type": "R", "args": ["reg"], "fields": {"op": 0, "rs": 0, "rt": 0, "rd": "#1", "shamt": 0, "func": 18}, "desc": "$t1 = LO"},
 
21
                "j":    {"type": "J", "args": ["target"], "fields": {"op": 2, "target": "#1"}, "desc": "PC = target"},
 
22
                "addi": {"type": "I", "args": ["reg", "reg", "int"], "fields": {"op": 8, "rs": "#2", "rt": "#1", "imm": "#3"}, "desc": "$t1 = $t2 + 23"},
 
23
                "beq":  {"type": "I", "args": ["reg", "reg", "offset"], "fields": {"op": 4, "rs": "#1", "rt": "#2", "imm": "#3"}, "desc": "PC += ($t1 == $t2) ? (offset * 4 + 4) : 4"},
 
24
                "lw":   {"type": "I", "args": ["reg", "data"], "fields": {"op": 35, "rs": "#2.offset", "rt": "#1", "imm": "#2.base"}, "desc": "$t1 = MEM[base + $t2]"},
 
25
                "sw":   {"type": "I", "args": ["reg", "data"], "fields": {"op": 43, "rs": "#2.offset", "rt": "#1", "imm": "#2.base"}, "desc": "MEM[base + $t2] = $t1"}
 
26
        },
 
27
        "pseudo": {
 
28
                "li":   {"args": ["reg", "int"], "to": ["addi #1, $0, #2"], "desc": "$t1 = 22"},
 
29
                "la":   {"args": ["reg", "label"], "to": ["addi #1, $0, #2"], "desc": "$t1 = ADDR(label)"},
 
30
                "move": {"args": ["reg", "reg"], "to": ["add #1, #2, $0"], "desc": "$t1 = $t2"},
 
31
                "subi": {"args": ["reg", "reg", "int"], "to": ["li $1, #3", "sub #1, #2, $1"], "desc": "$t1 = $t2 - 23"},
 
32
                "sgt":  {"args": ["reg", "reg", "reg"], "to": ["slt #1, #3, #2"], "desc": "$t1 = ($t2 > $t3) ? 1 : 0"},
 
33
                "bge":  {"args": ["reg", "reg", "offset"], "to": ["slt $1, #1, #2", "beq $1, $0, #3"], "desc": "PC += ($t1 >= $t2) ? (offset * 4 + 4) : 4"},
 
34
                "ble":  {"args": ["reg", "reg", "offset"], "to": ["sgt $1, #1, #2", "beq $1, $0, #3"], "desc": "PC += ($t1 <= $t2) ? (offset * 4 + 4) : 4"},
 
35
                "b":    {"args": ["offset"], "to": ["beq $0, $0, #1"], "desc": "PC += offset * 4 + 4"},
 
36
                "neg":  {"args": ["reg", "reg"], "to": ["sub #1, $0, #2"], "desc": "$t1 = -$t2"},
 
37
                "not":  {"args": ["reg", "reg"], "to": ["nor #1, #2, $0"], "desc": "$t1 = ~$t2"},
 
38
                "mul":  {"args": ["reg", "reg", "reg"], "to": ["mult #2, #3", "mflo #1"], "desc": "$t1 = $t2 * $t3"},
 
39
                "rem":  {"args": ["reg", "reg", "reg"], "to": ["div #2, #3", "mfhi #1"], "desc": "$t1 = $t2 % $t3"}
 
40
        },
 
41
        "control": {
 
42
                "0": {"RegDst": 1, "RegWrite": 1, "ALUOp": 2, "ALUSrc": 0, "MemToReg": 0},
 
43
                "8": {"RegDst": 0, "RegWrite": 1, "ALUOp": 0, "ALUSrc": 1, "MemToReg": 0},
 
44
                "2": {"Jump": 1},
 
45
                "4": {"ALUOp": 1, "ALUSrc": 0, "Branch": 1},
 
46
                "35": {"ALUOp": 0, "ALUSrc": 1, "RegDst": 0, "RegWrite": 1, "MemRead": 1, "MemWrite": 0, "MemToReg": 1},
 
47
                "43": {"ALUOp": 0, "ALUSrc": 1, "RegDst": 0, "RegWrite": 0, "MemRead": 0, "MemWrite": 1, "MemToReg": 0}
 
48
        },
 
49
        "alu": {
 
50
                "aluop_size": 2,
 
51
                "func_size": 6,
 
52
                "control_size": 4,
 
53
                "control": [
 
54
                        {"aluop": 0, "out": {"Operation": 2}},
 
55
                        {"aluop": 1, "out": {"Operation": 6}},
 
56
                        {"aluop": 2, "func": 16, "out": {"Operation": 10}},
 
57
                        {"aluop": 2, "func": 18, "out": {"Operation": 11}},
 
58
                        {"aluop": 2, "func": 24, "out": {"Operation": 8}},
 
59
                        {"aluop": 2, "func": 26, "out": {"Operation": 9}},
 
60
                        {"aluop": 2, "func": 32, "out": {"Operation": 2}},
 
61
                        {"aluop": 2, "func": 34, "out": {"Operation": 6}},
 
62
                        {"aluop": 2, "func": 36, "out": {"Operation": 0}},
 
63
                        {"aluop": 2, "func": 37, "out": {"Operation": 1}},
 
64
                        {"aluop": 2, "func": 38, "out": {"Operation": 3}},
 
65
                        {"aluop": 2, "func": 39, "out": {"Operation": 12}},
 
66
                        {"aluop": 2, "func": 42, "out": {"Operation": 7}}
 
67
                ],
 
68
                "operations": {
 
69
                        "0": "and",
 
70
                        "1": "or",
 
71
                        "2": "add",
 
72
                        "3": "xor",
 
73
                        "6": "sub",
 
74
                        "7": "slt",
 
75
                        "8": "mult",
 
76
                        "9": "div",
 
77
                        "10": "mfhi",
 
78
                        "11": "mflo",
 
79
                        "12": "nor"
 
80
                }
 
81
        }
 
82
}