summaryrefslogtreecommitdiff
path: root/risc-v/gen/lexer.hgen
blob: e42b8a620584387db9b22c9eef3c1e83e7535d42 (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
"lui"   , UTYPE { op=RISCVLUI   };
"auipc" , UTYPE { op=RISCVAUIPC };

"jal",  JAL ();
"jalr", JALR ();

"beq",  BTYPE {op=RISCVBEQ};
"bne",  BTYPE {op=RISCVBNE};
"blt",  BTYPE {op=RISCVBLT};
"bge",  BTYPE {op=RISCVBGE};
"bltu", BTYPE {op=RISCVBLTU};
"bgeu", BTYPE {op=RISCVBGEU};

"addi",  ITYPE {op=RISCVADDI};
"stli",  ITYPE {op=RISCVSLTI};
"sltiu", ITYPE {op=RISCVSLTIU};
"xori",  ITYPE {op=RISCVXORI};
"ori",   ITYPE {op=RISCVORI};
"andi",  ITYPE {op=RISCVANDI};

"slli", SHIFTIOP{op=RISCVSLLI};
"srli", SHIFTIOP{op=RISCVSRLI};
"srai", SHIFTIOP{op=RISCVSRAI};

"add",  RTYPE{op=RISCVADD};
"sub",  RTYPE{op=RISCVSUB};
"sll",  RTYPE{op=RISCVSLL};
"slt",  RTYPE{op=RISCVSLT};
"sltu", RTYPE{op=RISCVSLT};
"xor",  RTYPE{op=RISCVXOR};
"srl",  RTYPE{op=RISCVSRL};
"sra",  RTYPE{op=RISCVSRA};
"or",   RTYPE{op=RISCVOR};
"and",  RTYPE{op=RISCVAND};

"lb",  LOAD{unsigned=false; width=RISCVBYTE;   aq=false; rl=false};
"lbu", LOAD{unsigned=true;  width=RISCVBYTE;   aq=false; rl=false};
"lh",  LOAD{unsigned=false; width=RISCVHALF;   aq=false; rl=false};
"lhu", LOAD{unsigned=true;  width=RISCVHALF;   aq=false; rl=false};
"lw",  LOAD{unsigned=false; width=RISCVWORD;   aq=false; rl=false};
"lwu", LOAD{unsigned=true;  width=RISCVWORD;   aq=false; rl=false};
"ld",  LOAD{unsigned=false; width=RISCVDOUBLE; aq=false; rl=false};

"lb.aq",  LOAD{unsigned=false; width=RISCVBYTE;   aq=true; rl=false};
"lbu.aq", LOAD{unsigned=true;  width=RISCVBYTE;   aq=true; rl=false};
"lh.aq",  LOAD{unsigned=false; width=RISCVHALF;   aq=true; rl=false};
"lhu.aq", LOAD{unsigned=true;  width=RISCVHALF;   aq=true; rl=false};
"lw.aq",  LOAD{unsigned=false; width=RISCVWORD;   aq=true; rl=false};
"lwu.aq", LOAD{unsigned=true;  width=RISCVWORD;   aq=true; rl=false};
"ld.aq",  LOAD{unsigned=false; width=RISCVDOUBLE; aq=true; rl=false};

"lb.aq.rl",  LOAD{unsigned=false; width=RISCVBYTE;   aq=true; rl=true};
"lbu.aq.rl", LOAD{unsigned=true;  width=RISCVBYTE;   aq=true; rl=true};
"lh.aq.rl",  LOAD{unsigned=false; width=RISCVHALF;   aq=true; rl=true};
"lhu.aq.rl", LOAD{unsigned=true;  width=RISCVHALF;   aq=true; rl=true};
"lw.aq.rl",  LOAD{unsigned=false; width=RISCVWORD;   aq=true; rl=true};
"lwu.aq.rl", LOAD{unsigned=true;  width=RISCVWORD;   aq=true; rl=true};
"ld.aq.rl",  LOAD{unsigned=false; width=RISCVDOUBLE; aq=true; rl=true};

"sb", STORE{width=RISCVBYTE;   aq=false; rl=false};
"sh", STORE{width=RISCVHALF;   aq=false; rl=false};
"sw", STORE{width=RISCVWORD;   aq=false; rl=false};
"sd", STORE{width=RISCVDOUBLE; aq=false; rl=false};

"sb.rl", STORE{width=RISCVBYTE;   aq=false; rl=true};
"sh.rl", STORE{width=RISCVHALF;   aq=false; rl=true};
"sw.rl", STORE{width=RISCVWORD;   aq=false; rl=true};
"sd.rl", STORE{width=RISCVDOUBLE; aq=false; rl=true};

"sb.aq.rl", STORE{width=RISCVBYTE;   aq=true; rl=true};
"sh.aq.rl", STORE{width=RISCVHALF;   aq=true; rl=true};
"sw.aq.rl", STORE{width=RISCVWORD;   aq=true; rl=true};
"sd.aq.rl", STORE{width=RISCVDOUBLE; aq=true; rl=true};

"addiw", ADDIW ();

"slliw", SHIFTW{op=RISCVSLLI};
"srliw", SHIFTW{op=RISCVSRLI};
"sraiw", SHIFTW{op=RISCVSRAI};

"addw", RTYPEW{op=RISCVADDW};
"subw", RTYPEW{op=RISCVSUBW};
"sslw", RTYPEW{op=RISCVSLLW};
"srlw", RTYPEW{op=RISCVSRLW};
"sraw", RTYPEW{op=RISCVSRAW};

"fence", FENCE ();
"r",  FENCEOPTION Fence_R;
"w",  FENCEOPTION Fence_W;
"rw", FENCEOPTION Fence_RW;

"fence.i", FENCEI ();

"lr.w",       LOADRES {width=RISCVWORD;   aq=false; rl=false};
"lr.w.aq",    LOADRES {width=RISCVWORD;   aq=true;  rl=false};
"lr.w.aq.rl", LOADRES {width=RISCVWORD;   aq=true;  rl=true};
"lr.d",       LOADRES {width=RISCVDOUBLE; aq=false; rl=false};
"lr.d.aq",    LOADRES {width=RISCVDOUBLE; aq=true;  rl=false};
"lr.d.aq.rl", LOADRES {width=RISCVDOUBLE; aq=true;  rl=true};

"sc.w",       STORECON {width=RISCVWORD;   aq=false; rl=false};
"sc.w.rl",    STORECON {width=RISCVWORD;   aq=false; rl=true};
"sc.w.aq.rl", STORECON {width=RISCVWORD;   aq=true;  rl=true};
"sc.d",       STORECON {width=RISCVDOUBLE; aq=false; rl=false};
"sc.d.rl",    STORECON {width=RISCVDOUBLE; aq=false; rl=true};
"sc.d.aq.rl", STORECON {width=RISCVDOUBLE; aq=true;  rl=true};

"amoswap.w",  AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOSWAP};
"amoadd.w",   AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOADD};
"amoand.w",   AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOAND};
"amoor.w",    AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOOR};
"amoxor.w",   AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOXOR};
"amomax.w",   AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOMAX};
"amomin.w",   AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOMIN};
"amomaxu.w",  AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOMAXU};
"amominu.w",  AMO {width=RISCVWORD; aq=false; rl=false; op=RISCVAMOMINU};

"amoswap.d",  AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOSWAP};
"amoadd.d",   AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOADD};
"amoand.d",   AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOAND};
"amoor.d",    AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOOR};
"amoxor.d",   AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOXOR};
"amomax.d",   AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOMAX};
"amomin.d",   AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOMIN};
"amomaxu.d",  AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOMAXU};
"amominu.d",  AMO {width=RISCVDOUBLE; aq=false; rl=false; op=RISCVAMOMINU};

"amoswap.w.aq",  AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOSWAP};
"amoadd.w.aq",   AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOADD};
"amoand.w.aq",   AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOAND};
"amoor.w.aq",    AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOOR};
"amoxor.w.aq",   AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOXOR};
"amomax.w.aq",   AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOMAX};
"amomin.w.aq",   AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOMIN};
"amomaxu.w.aq",  AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOMAXU};
"amominu.w.aq",  AMO {width=RISCVWORD; aq=true; rl=false; op=RISCVAMOMINU};

"amoswap.d.aq",  AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOSWAP};
"amoadd.d.aq",   AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOADD};
"amoand.d.aq",   AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOAND};
"amoor.d.aq",    AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOOR};
"amoxor.d.aq",   AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOXOR};
"amomax.d.aq",   AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOMAX};
"amomin.d.aq",   AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOMIN};
"amomaxu.d.aq",  AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOMAXU};
"amominu.d.aq",  AMO {width=RISCVDOUBLE; aq=true; rl=false; op=RISCVAMOMINU};

"amoswap.w.rl",  AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOSWAP};
"amoadd.w.rl",   AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOADD};
"amoand.w.rl",   AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOAND};
"amoor.w.rl",    AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOOR};
"amoxor.w.rl",   AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOXOR};
"amomax.w.rl",   AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOMAX};
"amomin.w.rl",   AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOMIN};
"amomaxu.w.rl",  AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOMAXU};
"amominu.w.rl",  AMO {width=RISCVWORD; aq=false; rl=true; op=RISCVAMOMINU};

"amoswap.d.rl",  AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOSWAP};
"amoadd.d.rl",   AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOADD};
"amoand.d.rl",   AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOAND};
"amoor.d.rl",    AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOOR};
"amoxor.d.rl",   AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOXOR};
"amomax.d.rl",   AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOMAX};
"amomin.d.rl",   AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOMIN};
"amomaxu.d.rl",  AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOMAXU};
"amominu.d.rl",  AMO {width=RISCVDOUBLE; aq=false; rl=true; op=RISCVAMOMINU};

"amoswap.w.aq.rl",  AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOSWAP};
"amoadd.w.aq.rl",   AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOADD};
"amoand.w.aq.rl",   AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOAND};
"amoor.w.aq.rl",    AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOOR};
"amoxor.w.aq.rl",   AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOXOR};
"amomax.w.aq.rl",   AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOMAX};
"amomin.w.aq.rl",   AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOMIN};
"amomaxu.w.aq.rl",  AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOMAXU};
"amominu.w.aq.rl",  AMO {width=RISCVWORD; aq=true; rl=true; op=RISCVAMOMINU};

"amoswap.d.aq.rl",  AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOSWAP};
"amoadd.d.aq.rl",   AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOADD};
"amoand.d.aq.rl",   AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOAND};
"amoor.d.aq.rl",    AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOOR};
"amoxor.d.aq.rl",   AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOXOR};
"amomax.d.aq.rl",   AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOMAX};
"amomin.d.aq.rl",   AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOMIN};
"amomaxu.d.aq.rl",  AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOMAXU};
"amominu.d.aq.rl",  AMO {width=RISCVDOUBLE; aq=true; rl=true; op=RISCVAMOMINU};

(** pseudo instructions *********************************************)

"li", LI ()