summaryrefslogtreecommitdiff
path: root/mips/gen/trans_sail.hgen
blob: e42d1b198b9e08fd6ec7469425439238f3cf74a3 (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
| `MIPSThreadStart ->
  ("SYSCALL_THREAD_START", [], [])
| `MIPSStopFetching ->
    ("ImplementationDefinedStopFetching",
      [],
      [])

(* Note different argument order, which reflects difference
   between instruction encoding and asm format  *)
| `MIPSRType (op, rd, rs, rt) ->
    (translate_rtype_op op,
      [
      translate_reg "rs" rs;
      translate_reg "rt" rt;
      translate_reg "rd" rd;
       ],
      [])

(* Note different argument order similar to above *)
| `MIPSIType (op, rt, rs, imm) ->
    (translate_itype_op op,
      [
      translate_reg "rs" rs;
      translate_reg "rt" rt;
      translate_imm16 "imm" imm;
       ],
      [])

| `MIPSShiftI (op, rd, rt, sa) ->
    (translate_shifti_op op,
      [
      translate_reg "rt" rt;
      translate_reg "rd" rd;
      translate_imm5 "sa" sa;
       ],
      [])

| `MIPSShiftV (op, rd, rt, rs) ->
    (translate_shiftv_op op,
      [
      translate_reg "rs" rs;
      translate_reg "rt" rt;
      translate_reg "rd" rd;
      ],
      [])

| `MIPSMulDiv (op, rs, rt) ->
    (translate_muldiv_op op,
      [
      translate_reg "rs" rs;
      translate_reg "rt" rt;
      ],
      [])

| `MIPSMFHiLo (op, rs) ->
    (translate_mfhilo_op op,
      [
      translate_reg "rs" rs;
      ],
      [])
| `MIPSLUI (rt, imm) ->
  ("LUI",
      [
      translate_reg "rt" rt;
      translate_imm16 "imm" imm;
      ],
      [])
| `MIPSLoad (width, signed, linked, base, rt, offset) ->
  ("Load",
      [
      translate_wordsize "width" width;
      translate_bool "signed" signed;
      translate_bool "linked" linked;
      translate_reg "base" base;
      translate_reg "rt" rt;
      translate_imm16 "offset" offset;
      ],
      [])
| `MIPSStore (width, conditional, base, rt, offset) ->
  ("Store",
      [
      translate_wordsize "width" width;
      translate_bool "conditional" conditional;
      translate_reg "base" base;
      translate_reg "rt" rt;
      translate_imm16 "offset" offset;
      ],
      [])
| `MIPSLSLR (store, double, left, base, rt, offset) ->
  (translate_lslr_op store double left,
      [
      translate_reg "base" base;
      translate_reg "rt" rt;
      translate_imm16 "offset" offset;
      ],
      [])
| `MIPSSYNC -> ("SYNC", [], [])
| `MIPSBEQ (rs, rt, offset, ne, likely) ->
  ("BEQ",
  [translate_reg "rs" rs;
   translate_reg "rt" rt;
   translate_imm16 "offset" offset;
   translate_bool "ne" ne;
   translate_bool "likely" likely;
   ], [])

| `MIPSBCMPZ (rs, offset, cmp, link, likely) ->
  ("BCMPZ",
  [translate_reg "rs" rs;
   translate_imm16 "offset" offset;
   translate_cmp "cmp" cmp;
   translate_bool "link" link;
   translate_bool "likely" likely;
   ], [])
| `MIPSJ (offset) ->
  ("J", [translate_imm26 "offset" offset;], [])
| `MIPSJAL (offset) ->
  ("JAL", [translate_imm26 "offset" offset;], [])
| `MIPSJR(rd) ->
  ("JR", [translate_reg "rd" rd;], [])
| `MIPSJALR(rd, rs) ->
  ("JALR", [translate_reg "rd" rd; translate_reg "rs" rs;], [])