@@ -443,12 +443,16 @@ foreach mx = SchedMxListW in {
443
443
}
444
444
}
445
445
446
- // Worst case needs 64 cycles if SEW is equal to 64.
446
+ // Worst case needs 51/45/42/72 * lmul cycles for i8/16/32/ 64.
447
447
foreach mx = SchedMxList in {
448
448
foreach sew = SchedSEWSet<mx>.val in {
449
449
defvar LMulLat = SiFiveP600GetLMulCycles<mx>.c;
450
450
defvar IsWorstCase = SiFiveP600IsWorstCaseMXSEW<mx, sew, SchedMxList>.c;
451
- let Latency = 64, ReleaseAtCycles = [LMulLat, !mul(63, LMulLat)] in {
451
+ defvar DivMicroOpLat =
452
+ !cond(!eq(sew, 8): 51, !eq(sew, 16): 45, !eq(sew, 32): 42,
453
+ /* SEW=64 */ true: 72);
454
+ defvar DivLatency = !mul(DivMicroOpLat, LMulLat);
455
+ let Latency = DivLatency, ReleaseAtCycles = [LMulLat, DivLatency] in {
452
456
defm "" : LMULSEWWriteResMXSEW<"WriteVIDivV", [SiFiveP600VEXQ1, SiFiveP600VDiv], mx, sew, IsWorstCase>;
453
457
defm "" : LMULSEWWriteResMXSEW<"WriteVIDivX", [SiFiveP600VEXQ1, SiFiveP600VDiv], mx, sew, IsWorstCase>;
454
458
}
@@ -583,12 +587,15 @@ foreach mx = SchedMxListFW in {
583
587
}
584
588
}
585
589
586
- // Worst case needs 76 cycles if SEW is equal to 64.
590
+ // Worst case needs around 29/25/37 * LMUL cycles for f16/32/ 64.
587
591
foreach mx = SchedMxListF in {
588
592
foreach sew = SchedSEWSet<mx, 1>.val in {
589
593
defvar LMulLat = SiFiveP600GetLMulCycles<mx>.c;
590
594
defvar IsWorstCase = SiFiveP600IsWorstCaseMXSEW<mx, sew, SchedMxListF, 1>.c;
591
- let Latency = 76, ReleaseAtCycles = [LMulLat, !mul(76, LMulLat)] in {
595
+ defvar DivMicroOpLat =
596
+ !cond(!eq(sew, 16): 29, !eq(sew, 32): 25, /* SEW=64 */ true: 37);
597
+ defvar DivLatency = !mul(DivMicroOpLat, LMulLat);
598
+ let Latency = DivLatency, ReleaseAtCycles = [LMulLat, DivLatency] in {
592
599
defm "" : LMULSEWWriteResMXSEW<"WriteVFDivV", [SiFiveP600VEXQ1, SiFiveP600VFloatDiv], mx, sew, IsWorstCase>;
593
600
defm "" : LMULSEWWriteResMXSEW<"WriteVFDivF", [SiFiveP600VEXQ1, SiFiveP600VFloatDiv], mx, sew, IsWorstCase>;
594
601
defm "" : LMULSEWWriteResMXSEW<"WriteVFSqrtV", [SiFiveP600VEXQ1, SiFiveP600VFloatDiv], mx, sew, IsWorstCase>;
0 commit comments