@@ -110,6 +110,7 @@ def : WriteRes<WriteSTB, [SiFive7PipeA]>;
110
110
def : WriteRes<WriteSTH, [SiFive7PipeA]>;
111
111
def : WriteRes<WriteSTW, [SiFive7PipeA]>;
112
112
def : WriteRes<WriteSTD, [SiFive7PipeA]>;
113
+ def : WriteRes<WriteFST16, [SiFive7PipeA]>;
113
114
def : WriteRes<WriteFST32, [SiFive7PipeA]>;
114
115
def : WriteRes<WriteFST64, [SiFive7PipeA]>;
115
116
@@ -121,6 +122,7 @@ def : WriteRes<WriteLDD, [SiFive7PipeA]>;
121
122
}
122
123
123
124
let Latency = 2 in {
125
+ def : WriteRes<WriteFLD16, [SiFive7PipeA]>;
124
126
def : WriteRes<WriteFLD32, [SiFive7PipeA]>;
125
127
def : WriteRes<WriteFLD64, [SiFive7PipeA]>;
126
128
}
@@ -136,6 +138,22 @@ def : WriteRes<WriteAtomicLDW, [SiFive7PipeA]>;
136
138
def : WriteRes<WriteAtomicLDD, [SiFive7PipeA]>;
137
139
}
138
140
141
+ // Half precision.
142
+ let Latency = 5 in {
143
+ def : WriteRes<WriteFAdd16, [SiFive7PipeB]>;
144
+ def : WriteRes<WriteFMul16, [SiFive7PipeB]>;
145
+ def : WriteRes<WriteFMA16, [SiFive7PipeB]>;
146
+ }
147
+ let Latency = 3 in {
148
+ def : WriteRes<WriteFSGNJ16, [SiFive7PipeB]>;
149
+ def : WriteRes<WriteFMinMax16, [SiFive7PipeB]>;
150
+ }
151
+
152
+ let Latency = 14, ResourceCycles = [1, 13] in {
153
+ def : WriteRes<WriteFDiv16, [SiFive7PipeB, SiFive7FDiv]>;
154
+ def : WriteRes<WriteFSqrt16, [SiFive7PipeB, SiFive7FDiv]>;
155
+ }
156
+
139
157
// Single precision.
140
158
let Latency = 5 in {
141
159
def : WriteRes<WriteFAdd32, [SiFive7PipeB]>;
@@ -170,21 +188,33 @@ def : WriteRes<WriteFSqrt64, [SiFive7PipeB, SiFive7FDiv]> { let Latency = 56;
170
188
171
189
// Conversions
172
190
let Latency = 3 in {
191
+ def : WriteRes<WriteFCvtI32ToF16, [SiFive7PipeB]>;
173
192
def : WriteRes<WriteFCvtI32ToF32, [SiFive7PipeB]>;
174
193
def : WriteRes<WriteFCvtI32ToF64, [SiFive7PipeB]>;
194
+ def : WriteRes<WriteFCvtI64ToF16, [SiFive7PipeB]>;
175
195
def : WriteRes<WriteFCvtI64ToF32, [SiFive7PipeB]>;
176
196
def : WriteRes<WriteFCvtI64ToF64, [SiFive7PipeB]>;
197
+ def : WriteRes<WriteFCvtF16ToI32, [SiFive7PipeB]>;
198
+ def : WriteRes<WriteFCvtF16ToI64, [SiFive7PipeB]>;
199
+ def : WriteRes<WriteFCvtF16ToF32, [SiFive7PipeB]>;
200
+ def : WriteRes<WriteFCvtF16ToF64, [SiFive7PipeB]>;
177
201
def : WriteRes<WriteFCvtF32ToI32, [SiFive7PipeB]>;
178
202
def : WriteRes<WriteFCvtF32ToI64, [SiFive7PipeB]>;
203
+ def : WriteRes<WriteFCvtF32ToF16, [SiFive7PipeB]>;
179
204
def : WriteRes<WriteFCvtF32ToF64, [SiFive7PipeB]>;
180
205
def : WriteRes<WriteFCvtF64ToI32, [SiFive7PipeB]>;
181
206
def : WriteRes<WriteFCvtF64ToI64, [SiFive7PipeB]>;
207
+ def : WriteRes<WriteFCvtF64ToF16, [SiFive7PipeB]>;
182
208
def : WriteRes<WriteFCvtF64ToF32, [SiFive7PipeB]>;
183
209
210
+ def : WriteRes<WriteFClass16, [SiFive7PipeB]>;
184
211
def : WriteRes<WriteFClass32, [SiFive7PipeB]>;
185
212
def : WriteRes<WriteFClass64, [SiFive7PipeB]>;
213
+ def : WriteRes<WriteFCmp16, [SiFive7PipeB]>;
186
214
def : WriteRes<WriteFCmp32, [SiFive7PipeB]>;
187
215
def : WriteRes<WriteFCmp64, [SiFive7PipeB]>;
216
+ def : WriteRes<WriteFMovI16ToF16, [SiFive7PipeB]>;
217
+ def : WriteRes<WriteFMovF16ToI16, [SiFive7PipeB]>;
188
218
def : WriteRes<WriteFMovI32ToF32, [SiFive7PipeB]>;
189
219
def : WriteRes<WriteFMovF32ToI32, [SiFive7PipeB]>;
190
220
def : WriteRes<WriteFMovI64ToF64, [SiFive7PipeB]>;
@@ -224,36 +254,55 @@ def : ReadAdvance<ReadAtomicSTW, 0>;
224
254
def : ReadAdvance<ReadAtomicSTD, 0>;
225
255
def : ReadAdvance<ReadFStoreData, 0>;
226
256
def : ReadAdvance<ReadFMemBase, 0>;
257
+ def : ReadAdvance<ReadFAdd16, 0>;
227
258
def : ReadAdvance<ReadFAdd32, 0>;
228
259
def : ReadAdvance<ReadFAdd64, 0>;
260
+ def : ReadAdvance<ReadFMul16, 0>;
261
+ def : ReadAdvance<ReadFMA16, 0>;
229
262
def : ReadAdvance<ReadFMul32, 0>;
230
263
def : ReadAdvance<ReadFMul64, 0>;
231
264
def : ReadAdvance<ReadFMA32, 0>;
232
265
def : ReadAdvance<ReadFMA64, 0>;
266
+ def : ReadAdvance<ReadFDiv16, 0>;
233
267
def : ReadAdvance<ReadFDiv32, 0>;
234
268
def : ReadAdvance<ReadFDiv64, 0>;
269
+ def : ReadAdvance<ReadFSqrt16, 0>;
235
270
def : ReadAdvance<ReadFSqrt32, 0>;
236
271
def : ReadAdvance<ReadFSqrt64, 0>;
272
+ def : ReadAdvance<ReadFCmp16, 0>;
237
273
def : ReadAdvance<ReadFCmp32, 0>;
238
274
def : ReadAdvance<ReadFCmp64, 0>;
275
+ def : ReadAdvance<ReadFSGNJ16, 0>;
239
276
def : ReadAdvance<ReadFSGNJ32, 0>;
240
277
def : ReadAdvance<ReadFSGNJ64, 0>;
278
+ def : ReadAdvance<ReadFMinMax16, 0>;
241
279
def : ReadAdvance<ReadFMinMax32, 0>;
242
280
def : ReadAdvance<ReadFMinMax64, 0>;
281
+ def : ReadAdvance<ReadFCvtF16ToI32, 0>;
282
+ def : ReadAdvance<ReadFCvtF16ToI64, 0>;
243
283
def : ReadAdvance<ReadFCvtF32ToI32, 0>;
244
284
def : ReadAdvance<ReadFCvtF32ToI64, 0>;
245
285
def : ReadAdvance<ReadFCvtF64ToI32, 0>;
246
286
def : ReadAdvance<ReadFCvtF64ToI64, 0>;
287
+ def : ReadAdvance<ReadFCvtI32ToF16, 0>;
247
288
def : ReadAdvance<ReadFCvtI32ToF32, 0>;
248
289
def : ReadAdvance<ReadFCvtI32ToF64, 0>;
290
+ def : ReadAdvance<ReadFCvtI64ToF16, 0>;
249
291
def : ReadAdvance<ReadFCvtI64ToF32, 0>;
250
292
def : ReadAdvance<ReadFCvtI64ToF64, 0>;
251
293
def : ReadAdvance<ReadFCvtF32ToF64, 0>;
252
294
def : ReadAdvance<ReadFCvtF64ToF32, 0>;
295
+ def : ReadAdvance<ReadFCvtF16ToF32, 0>;
296
+ def : ReadAdvance<ReadFCvtF32ToF16, 0>;
297
+ def : ReadAdvance<ReadFCvtF16ToF64, 0>;
298
+ def : ReadAdvance<ReadFCvtF64ToF16, 0>;
299
+ def : ReadAdvance<ReadFMovF16ToI16, 0>;
300
+ def : ReadAdvance<ReadFMovI16ToF16, 0>;
253
301
def : ReadAdvance<ReadFMovF32ToI32, 0>;
254
302
def : ReadAdvance<ReadFMovI32ToF32, 0>;
255
303
def : ReadAdvance<ReadFMovF64ToI64, 0>;
256
304
def : ReadAdvance<ReadFMovI64ToF64, 0>;
305
+ def : ReadAdvance<ReadFClass16, 0>;
257
306
def : ReadAdvance<ReadFClass32, 0>;
258
307
def : ReadAdvance<ReadFClass64, 0>;
259
308
@@ -446,5 +495,4 @@ defm : UnsupportedSchedZbs;
446
495
defm : UnsupportedSchedZbkb;
447
496
defm : UnsupportedSchedZbkx;
448
497
defm : UnsupportedSchedZfa;
449
- defm : UnsupportedSchedZfh;
450
498
}
0 commit comments