Skip to content

Commit f126c04

Browse files
authored
[Vector] vfloat sequencing (#229)
Signed-off-by: Isaac David <61389980+orion160@users.noreply.github.com>
1 parent 71fe733 commit f126c04

File tree

6 files changed

+450
-284
lines changed

6 files changed

+450
-284
lines changed

arches/isa_json/gen_uarch_rv64v_json.py

Lines changed: 159 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -243,25 +243,165 @@
243243
"vnclip.wx" : {"pipe" : "vfixed", "uop_gen" : "NARROWING", "latency" : 2},
244244
"vnclip.wi" : {"pipe" : "vfixed", "uop_gen" : "NARROWING", "latency" : 2},
245245

246-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Exception Flags
247-
# TODO: Vector Floating-Point Instructions: Vector Single-Width Floating-Point Add/Subtract Instructions
248-
# TODO: Vector Floating-Point Instructions: Vector Widening Floating-Point Add/Subtract Instructions
249-
# TODO: Vector Floating-Point Instructions: Vector Single-Width Floating-Point Multiply/Divide Instructions
250-
# TODO: Vector Floating-Point Instructions: Vector Widening Floating-Point Multiply
251-
# TODO: Vector Floating-Point Instructions: Vector Single-Width Floating-Point Fused Multiply-Add Instructions
252-
# TODO: Vector Floating-Point Instructions: Vector Widening Floating-Point Fused Multiply-Add Instructions
253-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Square-Root Instruction
254-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Reciprocal Square-Root Estimate Instruction
255-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Reciprocal Estimate Instruction
256-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point MIN/MAX Instructions
257-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Sign-Injection Instructions
258-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Compare Instructions
259-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Classify Instruction
260-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Merge Instruction
261-
# TODO: Vector Floating-Point Instructions: Vector Floating-Point Move Instruction
262-
# TODO: Vector Floating-Point Instructions: Single-Width Floating-Point/Integer Type-Convert Instructions
263-
# TODO: Vector Floating-Point Instructions: Widening Floating-Point/Integer Type-Convert Instructions
264-
# TODO: Vector Floating-Point Instructions: Narrowing Floating-Point/Integer Type-Convert Instructions
246+
# Vector Floating-Point Instructions: Vector Single-Width Floating-Point Add/Subtract Instructions
247+
"vfadd.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
248+
"vfadd.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
249+
250+
"vfsub.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
251+
"vfsub.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
252+
"vfrsub.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
253+
254+
# Vector Floating-Point Instructions: Vector Widening Floating-Point Add/Subtract Instructions
255+
"vfwadd.vv" : {"pipe" : "vfloat", "uop_gen" : "WIDENING", "latency" : 6},
256+
"vfwadd.vf" : {"pipe" : "vfloat", "uop_gen" : "WIDENING", "latency" : 6},
257+
258+
"vfwsub.vv" : {"pipe" : "vfloat", "uop_gen" : "WIDENING", "latency" : 6},
259+
"vfwsub.vf" : {"pipe" : "vfloat", "uop_gen" : "WIDENING", "latency" : 6},
260+
261+
"vfwadd.wv" : {"pipe" : "vfloat", "uop_gen" : "WIDENING_MIXED", "latency" : 6},
262+
"vfwadd.wf" : {"pipe" : "vfloat", "uop_gen" : "WIDENING_MIXED", "latency" : 6},
263+
264+
"vfwsub.wv" : {"pipe" : "vfloat", "uop_gen" : "WIDENING_MIXED", "latency" : 6},
265+
"vfwsub.wf" : {"pipe" : "vfloat", "uop_gen" : "WIDENING_MIXED", "latency" : 6},
266+
267+
# Vector Floating-Point Instructions: Vector Single-Width Floating-Point Multiply/Divide Instructions
268+
"vfmul.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
269+
"vfmul.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
270+
271+
"vfdiv.vv" : {"pipe" : "vfdiv", "uop_gen" : "ELEMENTWISE", "latency" : 25},
272+
"vfdiv.vf" : {"pipe" : "vfdiv", "uop_gen" : "ELEMENTWISE", "latency" : 25},
273+
274+
"vfrdiv.vf" : {"pipe" : "vfdiv", "uop_gen" : "ELEMENTWISE", "latency" :25},
275+
276+
# Vector Floating-Point Instructions: Vector Widening Floating-Point Multiply
277+
"vfwmul.vv" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 3},
278+
"vfwmul.vf" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 3},
279+
280+
# Vector Floating-Point Instructions: Vector Single-Width Floating-Point Fused Multiply-Add Instructions
281+
"vfmacc.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
282+
"vfmacc.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
283+
284+
"vfnmacc.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
285+
"vfnmacc.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
286+
287+
"vfmsac.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
288+
"vfmsac.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
289+
290+
"vfnmsac.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
291+
"vfnmsac.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
292+
293+
"vfmadd.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
294+
"vfmadd.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
295+
296+
"vfnmadd.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
297+
"vfnmadd.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
298+
299+
"vfmsub.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
300+
"vfmsub.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
301+
302+
"vfnmsub.vv" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
303+
"vfnmsub.vf" : {"pipe" : "vfmul", "uop_gen" : "ELEMENTWISE", "latency" : 6},
304+
305+
# Vector Floating-Point Instructions: Vector Widening Floating-Point Fused Multiply-Add Instructions
306+
"vfwmacc.vv" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
307+
"vfwmacc.vf" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
308+
309+
"vfwnmacc.vv" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
310+
"vfwnmacc.vf" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
311+
312+
"vfwmsac.vv" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
313+
"vfwmsac.vf" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
314+
315+
"vfwnmsac.vv" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
316+
"vfwnmsac.vf" : {"pipe" : "vfmul", "uop_gen" : "WIDENING", "latency" : 6},
317+
318+
# Vector Floating-Point Instructions: Vector Floating-Point Square-Root Instruction
319+
"vfsqrt.v" : {"pipe" : "vfdiv", "uop_gen" : "ELEMENTWISE", "latency" : 25},
320+
321+
# TODO: support variable length latency
322+
# Vector Floating-Point Instructions: Vector Floating-Point Reciprocal Square-Root Estimate Instruction
323+
"vfrsqrt7.v" : {"pipe" : "vfdiv", "uop_gen" : "ELEMENTWISE", "latency" : 2},
324+
325+
# Vector Floating-Point Instructions: Vector Floating-Point Reciprocal Estimate Instruction
326+
"vfrec7.v" : {"pipe" : "vfdiv", "uop_gen" : "ELEMENTWISE", "latency" : 2},
327+
328+
# Vector Floating-Point Instructions: Vector Floating-Point MIN/MAX Instructions
329+
"vfmin.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
330+
"vfmin.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
331+
332+
"vfmax.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
333+
"vfmax.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
334+
335+
# Vector Floating-Point Instructions: Vector Floating-Point Sign-Injection Instructions
336+
"vfsgnj.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
337+
"vfsgnj.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
338+
339+
"vfsgnjn.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
340+
"vfsgnjn.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
341+
342+
"vfsgnjx.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
343+
"vfsgnjx.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
344+
345+
# Vector Floating-Point Instructions: Vector Floating-Point Compare Instructions
346+
"vmfeq.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
347+
"vmfeq.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
348+
349+
"vmfne.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
350+
"vmfne.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
351+
352+
"vmflt.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
353+
"vmflt.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
354+
355+
"vmfle.vv" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
356+
"vmfle.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
357+
358+
"vmfgt.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
359+
360+
"vmfgte.vf" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 2},
361+
362+
# Vector Floating-Point Instructions: Vector Floating-Point Classify Instruction
363+
"vfclass.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
364+
365+
# Vector Floating-Point Instructions: Vector Floating-Point Merge Instruction
366+
"vfmerge.vfm" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
367+
368+
# Vector Floating-Point Instructions: Vector Floating-Point Move Instruction
369+
"vfmv.v.f" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 1},
370+
371+
# Vector Floating-Point Instructions: Single-Width Floating-Point/Integer Type-Convert Instructions
372+
"vfcvt.xu.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
373+
"vfcvt.x.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
374+
375+
"vfcvt.rtz.xu.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
376+
"vfcvt.rtz.x.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
377+
378+
"vfcvt.f.xu.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
379+
"vfcvt.f.x.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
380+
381+
# Vector Floating-Point Instructions: Widening Floating-Point/Integer Type-Convert Instructions
382+
"vfwcvt.xu.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
383+
"vfwcvt.x.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
384+
385+
"vfwcvt.rtz.xu.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
386+
"vfwcvt.rtz.x.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
387+
388+
"vfwcvt.f.xu.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
389+
"vfwcvt.f.xu.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
390+
391+
"vfwcvt.f.f.v" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 6},
392+
393+
# Vector Floating-Point Instructions: Narrowing Floating-Point/Integer Type-Convert Instructions
394+
"vfncvt.xu.f.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
395+
"vfncvt.x.f.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
396+
397+
"vfncvt.rtz.xu.f.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
398+
"vfncvt.rtz.x.f.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
399+
400+
"vfncvt.f.xu.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
401+
"vfncvt.f.x.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
402+
403+
"vfncvt.f.f.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
404+
"vfncvt.rod.f.f.w" : {"pipe" : "vfloat", "uop_gen" : "ELEMENTWISE", "latency" : 3},
265405

266406
# TODO: Vector Reduction Operations: Vector Single-Width Integer Reduction Instructions
267407
# TODO: Vector Reduction Operations: Vector Widening Integer Reduction Instructions

0 commit comments

Comments
 (0)