@@ -76,35 +76,6 @@ def : WriteRes<WriteIDiv32, [SiFive7PipeB, SiFive7IDiv]> {
76
76
let ResourceCycles = [1, 15];
77
77
}
78
78
79
- // Bitmanip
80
- let Latency = 3 in {
81
- // Rotates are in the late-B ALU.
82
- def : WriteRes<WriteRotateImm, [SiFive7PipeB]>;
83
- def : WriteRes<WriteRotateImm32, [SiFive7PipeB]>;
84
- def : WriteRes<WriteRotateReg, [SiFive7PipeB]>;
85
- def : WriteRes<WriteRotateReg32, [SiFive7PipeB]>;
86
-
87
- // clz[w]/ctz[w] are in the late-B ALU.
88
- def : WriteRes<WriteCLZ, [SiFive7PipeB]>;
89
- def : WriteRes<WriteCLZ32, [SiFive7PipeB]>;
90
- def : WriteRes<WriteCTZ, [SiFive7PipeB]>;
91
- def : WriteRes<WriteCTZ32, [SiFive7PipeB]>;
92
-
93
- // cpop[w] look exactly like multiply.
94
- def : WriteRes<WriteCPOP, [SiFive7PipeB]>;
95
- def : WriteRes<WriteCPOP32, [SiFive7PipeB]>;
96
-
97
- // orc.b is in the late-B ALU.
98
- def : WriteRes<WriteORCB, [SiFive7PipeB]>;
99
-
100
- // rev8 is in the late-A and late-B ALUs.
101
- def : WriteRes<WriteREV8, [SiFive7PipeAB]>;
102
-
103
- // shNadd[.uw] is on the early-B and late-B ALUs.
104
- def : WriteRes<WriteSHXADD, [SiFive7PipeB]>;
105
- def : WriteRes<WriteSHXADD32, [SiFive7PipeB]>;
106
- }
107
-
108
79
// Memory
109
80
def : WriteRes<WriteSTB, [SiFive7PipeA]>;
110
81
def : WriteRes<WriteSTH, [SiFive7PipeA]>;
@@ -308,188 +279,11 @@ def : ReadAdvance<ReadFClass64, 0>;
308
279
309
280
def : ReadAdvance<ReadSFB, 0>;
310
281
311
- // 6. Configuration-Setting Instructions
312
- def : ReadAdvance<ReadVSETVLI, 2>;
313
- def : ReadAdvance<ReadVSETVL, 2>;
314
-
315
- // 7. Vector Loads and Stores
316
- def : ReadAdvance<ReadVLDX, 0>;
317
- def : ReadAdvance<ReadVSTX, 0>;
318
- defm "" : LMULReadAdvance<"ReadVSTEV", 0>;
319
- defm "" : LMULReadAdvance<"ReadVSTM", 0>;
320
- def : ReadAdvance<ReadVLDSX, 0>;
321
- def : ReadAdvance<ReadVSTSX, 0>;
322
- defm "" : LMULReadAdvance<"ReadVSTS8V", 0>;
323
- defm "" : LMULReadAdvance<"ReadVSTS16V", 0>;
324
- defm "" : LMULReadAdvance<"ReadVSTS32V", 0>;
325
- defm "" : LMULReadAdvance<"ReadVSTS64V", 0>;
326
- defm "" : LMULReadAdvance<"ReadVLDUXV", 0>;
327
- defm "" : LMULReadAdvance<"ReadVLDOXV", 0>;
328
- defm "" : LMULReadAdvance<"ReadVSTUX8", 0>;
329
- defm "" : LMULReadAdvance<"ReadVSTUX16", 0>;
330
- defm "" : LMULReadAdvance<"ReadVSTUX32", 0>;
331
- defm "" : LMULReadAdvance<"ReadVSTUX64", 0>;
332
- defm "" : LMULReadAdvance<"ReadVSTUXV", 0>;
333
- defm "" : LMULReadAdvance<"ReadVSTUX8V", 0>;
334
- defm "" : LMULReadAdvance<"ReadVSTUX16V", 0>;
335
- defm "" : LMULReadAdvance<"ReadVSTUX32V", 0>;
336
- defm "" : LMULReadAdvance<"ReadVSTUX64V", 0>;
337
- defm "" : LMULReadAdvance<"ReadVSTOX8", 0>;
338
- defm "" : LMULReadAdvance<"ReadVSTOX16", 0>;
339
- defm "" : LMULReadAdvance<"ReadVSTOX32", 0>;
340
- defm "" : LMULReadAdvance<"ReadVSTOX64", 0>;
341
- defm "" : LMULReadAdvance<"ReadVSTOXV", 0>;
342
- defm "" : LMULReadAdvance<"ReadVSTOX8V", 0>;
343
- defm "" : LMULReadAdvance<"ReadVSTOX16V", 0>;
344
- defm "" : LMULReadAdvance<"ReadVSTOX32V", 0>;
345
- defm "" : LMULReadAdvance<"ReadVSTOX64V", 0>;
346
- // LMUL Aware
347
- def : ReadAdvance<ReadVST1R, 0>;
348
- def : ReadAdvance<ReadVST2R, 0>;
349
- def : ReadAdvance<ReadVST4R, 0>;
350
- def : ReadAdvance<ReadVST8R, 0>;
351
-
352
- // 12. Vector Integer Arithmetic Instructions
353
- defm : LMULReadAdvance<"ReadVIALUV", 0>;
354
- defm : LMULReadAdvance<"ReadVIALUX", 0>;
355
- defm : LMULReadAdvanceW<"ReadVIWALUV", 0>;
356
- defm : LMULReadAdvanceW<"ReadVIWALUX", 0>;
357
- defm : LMULReadAdvance<"ReadVExtV", 0>;
358
- defm : LMULReadAdvance<"ReadVICALUV", 0>;
359
- defm : LMULReadAdvance<"ReadVICALUX", 0>;
360
- defm : LMULReadAdvance<"ReadVShiftV", 0>;
361
- defm : LMULReadAdvance<"ReadVShiftX", 0>;
362
- defm : LMULReadAdvanceW<"ReadVNShiftV", 0>;
363
- defm : LMULReadAdvanceW<"ReadVNShiftX", 0>;
364
- defm : LMULReadAdvance<"ReadVICmpV", 0>;
365
- defm : LMULReadAdvance<"ReadVICmpX", 0>;
366
- defm : LMULReadAdvance<"ReadVIMulV", 0>;
367
- defm : LMULReadAdvance<"ReadVIMulX", 0>;
368
- defm : LMULSEWReadAdvance<"ReadVIDivV", 0>;
369
- defm : LMULSEWReadAdvance<"ReadVIDivX", 0>;
370
- defm : LMULReadAdvanceW<"ReadVIWMulV", 0>;
371
- defm : LMULReadAdvanceW<"ReadVIWMulX", 0>;
372
- defm : LMULReadAdvance<"ReadVIMulAddV", 0>;
373
- defm : LMULReadAdvance<"ReadVIMulAddX", 0>;
374
- defm : LMULReadAdvanceW<"ReadVIWMulAddV", 0>;
375
- defm : LMULReadAdvanceW<"ReadVIWMulAddX", 0>;
376
- defm : LMULReadAdvance<"ReadVIMergeV", 0>;
377
- defm : LMULReadAdvance<"ReadVIMergeX", 0>;
378
- defm : LMULReadAdvance<"ReadVIMovV", 0>;
379
- defm : LMULReadAdvance<"ReadVIMovX", 0>;
380
-
381
- // 13. Vector Fixed-Point Arithmetic Instructions
382
- defm "" : LMULReadAdvance<"ReadVSALUV", 0>;
383
- defm "" : LMULReadAdvance<"ReadVSALUX", 0>;
384
- defm "" : LMULReadAdvance<"ReadVAALUV", 0>;
385
- defm "" : LMULReadAdvance<"ReadVAALUX", 0>;
386
- defm "" : LMULReadAdvance<"ReadVSMulV", 0>;
387
- defm "" : LMULReadAdvance<"ReadVSMulX", 0>;
388
- defm "" : LMULReadAdvance<"ReadVSShiftV", 0>;
389
- defm "" : LMULReadAdvance<"ReadVSShiftX", 0>;
390
- defm "" : LMULReadAdvanceW<"ReadVNClipV", 0>;
391
- defm "" : LMULReadAdvanceW<"ReadVNClipX", 0>;
392
-
393
- // 14. Vector Floating-Point Instructions
394
- defm "" : LMULReadAdvance<"ReadVFALUV", 0>;
395
- defm "" : LMULReadAdvance<"ReadVFALUF", 0>;
396
- defm "" : LMULReadAdvanceFW<"ReadVFWALUV", 0>;
397
- defm "" : LMULReadAdvanceFW<"ReadVFWALUF", 0>;
398
- defm "" : LMULReadAdvance<"ReadVFMulV", 0>;
399
- defm "" : LMULReadAdvance<"ReadVFMulF", 0>;
400
- defm "" : LMULSEWReadAdvanceF<"ReadVFDivV", 0>;
401
- defm "" : LMULSEWReadAdvanceF<"ReadVFDivF", 0>;
402
- defm "" : LMULReadAdvanceFW<"ReadVFWMulV", 0>;
403
- defm "" : LMULReadAdvanceFW<"ReadVFWMulF", 0>;
404
- defm "" : LMULReadAdvance<"ReadVFMulAddV", 0>;
405
- defm "" : LMULReadAdvance<"ReadVFMulAddF", 0>;
406
- defm "" : LMULReadAdvanceFW<"ReadVFWMulAddV", 0>;
407
- defm "" : LMULReadAdvanceFW<"ReadVFWMulAddF", 0>;
408
- defm "" : LMULSEWReadAdvanceF<"ReadVFSqrtV", 0>;
409
- defm "" : LMULReadAdvance<"ReadVFRecpV", 0>;
410
- defm "" : LMULReadAdvance<"ReadVFCmpV", 0>;
411
- defm "" : LMULReadAdvance<"ReadVFCmpF", 0>;
412
- defm "" : LMULReadAdvance<"ReadVFSgnjV", 0>;
413
- defm "" : LMULReadAdvance<"ReadVFSgnjF", 0>;
414
- defm "" : LMULReadAdvance<"ReadVFClassV", 0>;
415
- defm "" : LMULReadAdvance<"ReadVFMergeV", 0>;
416
- defm "" : LMULReadAdvance<"ReadVFMergeF", 0>;
417
- defm "" : LMULReadAdvance<"ReadVFMovF", 0>;
418
- defm "" : LMULReadAdvance<"ReadVFCvtIToFV", 0>;
419
- defm "" : LMULReadAdvance<"ReadVFCvtFToIV", 0>;
420
- defm "" : LMULReadAdvanceW<"ReadVFWCvtIToFV", 0>;
421
- defm "" : LMULReadAdvanceFW<"ReadVFWCvtFToIV", 0>;
422
- defm "" : LMULReadAdvanceFW<"ReadVFWCvtFToFV", 0>;
423
- defm "" : LMULReadAdvanceFW<"ReadVFNCvtIToFV", 0>;
424
- defm "" : LMULReadAdvanceW<"ReadVFNCvtFToIV", 0>;
425
- defm "" : LMULReadAdvanceFW<"ReadVFNCvtFToFV", 0>;
426
-
427
- // 15. Vector Reduction Operations
428
- def : ReadAdvance<ReadVIRedV, 0>;
429
- def : ReadAdvance<ReadVIRedV0, 0>;
430
- def : ReadAdvance<ReadVIWRedV, 0>;
431
- def : ReadAdvance<ReadVIWRedV0, 0>;
432
- def : ReadAdvance<ReadVFRedV, 0>;
433
- def : ReadAdvance<ReadVFRedV0, 0>;
434
- def : ReadAdvance<ReadVFRedOV, 0>;
435
- def : ReadAdvance<ReadVFRedOV0, 0>;
436
- def : ReadAdvance<ReadVFWRedV, 0>;
437
- def : ReadAdvance<ReadVFWRedV0, 0>;
438
- def : ReadAdvance<ReadVFWRedOV, 0>;
439
- def : ReadAdvance<ReadVFWRedOV0, 0>;
440
-
441
- // 16. Vector Mask Instructions
442
- defm "" : LMULReadAdvance<"ReadVMALUV", 0>;
443
- defm "" : LMULReadAdvance<"ReadVMPopV", 0>;
444
- defm "" : LMULReadAdvance<"ReadVMFFSV", 0>;
445
- defm "" : LMULReadAdvance<"ReadVMSFSV", 0>;
446
- defm "" : LMULReadAdvance<"ReadVMIotV", 0>;
447
-
448
- // 17. Vector Permutation Instructions
449
- defm "" : LMULReadAdvance<"ReadVIMovVX", 0>;
450
- defm "" : LMULReadAdvance<"ReadVIMovXV", 0>;
451
- defm "" : LMULReadAdvance<"ReadVIMovXX", 0>;
452
- defm "" : LMULReadAdvance<"ReadVFMovVF", 0>;
453
- defm "" : LMULReadAdvance<"ReadVFMovFV", 0>;
454
- defm "" : LMULReadAdvance<"ReadVFMovFX", 0>;
455
- defm "" : LMULReadAdvance<"ReadVISlideV", 0>;
456
- defm "" : LMULReadAdvance<"ReadVISlideX", 0>;
457
- defm "" : LMULReadAdvance<"ReadVFSlideV", 0>;
458
- defm "" : LMULReadAdvance<"ReadVFSlideF", 0>;
459
- defm "" : LMULSEWReadAdvance<"ReadVRGatherVV_data", 0>;
460
- defm "" : LMULSEWReadAdvance<"ReadVRGatherVV_index", 0>;
461
- defm "" : LMULReadAdvance<"ReadVRGatherVX_data", 0>;
462
- defm "" : LMULReadAdvance<"ReadVRGatherVX_index", 0>;
463
- defm "" : LMULReadAdvance<"ReadVRGatherVI_data", 0>;
464
- defm "" : LMULSEWReadAdvance<"ReadVCompressV", 0>;
465
- // LMUL Aware
466
- def : ReadAdvance<ReadVMov1V, 0>;
467
- def : ReadAdvance<ReadVMov2V, 0>;
468
- def : ReadAdvance<ReadVMov4V, 0>;
469
- def : ReadAdvance<ReadVMov8V, 0>;
470
-
471
- // Others
472
- def : ReadAdvance<ReadVMask, 0>;
473
-
474
- // Bitmanip
475
- def : ReadAdvance<ReadRotateImm, 0>;
476
- def : ReadAdvance<ReadRotateImm32, 0>;
477
- def : ReadAdvance<ReadRotateReg, 0>;
478
- def : ReadAdvance<ReadRotateReg32, 0>;
479
- def : ReadAdvance<ReadCLZ, 0>;
480
- def : ReadAdvance<ReadCLZ32, 0>;
481
- def : ReadAdvance<ReadCTZ, 0>;
482
- def : ReadAdvance<ReadCTZ32, 0>;
483
- def : ReadAdvance<ReadCPOP, 0>;
484
- def : ReadAdvance<ReadCPOP32, 0>;
485
- def : ReadAdvance<ReadORCB, 0>;
486
- def : ReadAdvance<ReadREV8, 0>;
487
- def : ReadAdvance<ReadSHXADD, 0>;
488
- def : ReadAdvance<ReadSHXADD32, 0>;
489
-
490
282
//===----------------------------------------------------------------------===//
491
283
// Unsupported extensions
492
284
defm : UnsupportedSchedV;
285
+ defm : UnsupportedSchedZba;
286
+ defm : UnsupportedSchedZbb;
493
287
defm : UnsupportedSchedZbc;
494
288
defm : UnsupportedSchedZbs;
495
289
defm : UnsupportedSchedZbkb;
0 commit comments