@@ -20,27 +20,20 @@ defvar SchedMxListF = !listremove(SchedMxList, ["MF8"]);
20
20
// Used for widening floating-point Reduction as it doesn't contain MF8.
21
21
defvar SchedMxListFWRed = SchedMxListF;
22
22
23
- // For widening instructions, SEW will not be 64.
24
- class SchedSEWSet<string mx, bit isWidening = 0> {
23
+ class SchedSEWSet<string mx, bit isF = 0, bit isWidening = 0> {
24
+ assert !or(!not(isF), !ne( mx, "MF8")), "LMUL shouldn't be MF8 for floating-point";
25
25
defvar t = !cond(!eq(mx, "M1"): [8, 16, 32, 64],
26
26
!eq(mx, "M2"): [8, 16, 32, 64],
27
27
!eq(mx, "M4"): [8, 16, 32, 64],
28
28
!eq(mx, "M8"): [8, 16, 32, 64],
29
29
!eq(mx, "MF2"): [8, 16, 32],
30
30
!eq(mx, "MF4"): [8, 16],
31
31
!eq(mx, "MF8"): [8]);
32
- list<int> val = !if(isWidening, !listremove(t, [64]), t);
33
- }
34
-
35
- // For floating-point instructions, SEW won't be 8.
36
- class SchedSEWSetF<string mx, bit isWidening = 0> {
37
- defvar t = !cond(!eq(mx, "M1"): [16, 32, 64],
38
- !eq(mx, "M2"): [16, 32, 64],
39
- !eq(mx, "M4"): [16, 32, 64],
40
- !eq(mx, "M8"): [16, 32, 64],
41
- !eq(mx, "MF2"): [16, 32],
42
- !eq(mx, "MF4"): [16]);
43
- list<int> val = !if(isWidening, !listremove(t, [64]), t);
32
+ // For floating-point instructions, SEW won't be 8.
33
+ defvar remove8 = !if(isF, !listremove(t, [8]), t);
34
+ // For widening instructions, SEW will not be 64.
35
+ defvar remove64 = !if(isWidening, !listremove(remove8, [64]), remove8);
36
+ list<int> val = remove64;
44
37
}
45
38
46
39
// Helper function to get the largest LMUL from MxList
@@ -52,7 +45,7 @@ class LargestLMUL<list<string> MxList> {
52
45
// Helper function to get the smallest SEW that can be used with LMUL mx
53
46
// Precondition: MxList is sorted in ascending LMUL order and SchedSEWSet<mx>
54
47
class SmallestSEW<string mx, bit isF = 0> {
55
- int r = !head(!if(isF, SchedSEWSetF <mx>.val, SchedSEWSet<mx >.val) );
48
+ int r = !head(SchedSEWSet <mx, isF >.val);
56
49
}
57
50
58
51
// Creates WriteRes for (name, mx, resources) tuple
@@ -111,17 +104,15 @@ multiclass LMULSEWSchedWritesImpl<string name, list<string> MxList, bit isF = 0,
111
104
bit isWidening = 0> {
112
105
def name # "_WorstCase" : SchedWrite;
113
106
foreach mx = MxList in {
114
- foreach sew = !if(isF, SchedSEWSetF<mx, isWidening>.val,
115
- SchedSEWSet<mx, isWidening>.val) in
107
+ foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
116
108
def name # "_" # mx # "_E" # sew : SchedWrite;
117
109
}
118
110
}
119
111
multiclass LMULSEWSchedReadsImpl<string name, list<string> MxList, bit isF = 0,
120
112
bit isWidening = 0> {
121
113
def name # "_WorstCase" : SchedRead;
122
114
foreach mx = MxList in {
123
- foreach sew = !if(isF,SchedSEWSetF<mx, isWidening>.val,
124
- SchedSEWSet<mx, isWidening>.val) in
115
+ foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
125
116
def name # "_" # mx # "_E" # sew : SchedRead;
126
117
}
127
118
}
@@ -131,8 +122,7 @@ multiclass LMULSEWWriteResImpl<string name, list<ProcResourceKind> resources,
131
122
if !exists<SchedWrite>(name # "_WorstCase") then
132
123
def : WriteRes<!cast<SchedWrite>(name # "_WorstCase"), resources>;
133
124
foreach mx = MxList in {
134
- foreach sew = !if(isF,SchedSEWSetF<mx, isWidening>.val,
135
- SchedSEWSet<mx, isWidening>.val) in
125
+ foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
136
126
if !exists<SchedWrite>(name # "_" # mx # "_E" # sew) then
137
127
def : WriteRes<!cast<SchedWrite>(name # "_" # mx # "_E" # sew), resources>;
138
128
}
@@ -143,8 +133,7 @@ multiclass LMULSEWReadAdvanceImpl<string name, int val, list<SchedWrite> writes
143
133
if !exists<SchedRead>(name # "_WorstCase") then
144
134
def : ReadAdvance<!cast<SchedRead>(name # "_WorstCase"), val, writes>;
145
135
foreach mx = MxList in {
146
- foreach sew = !if(isF,SchedSEWSetF<mx, isWidening>.val,
147
- SchedSEWSet<mx, isWidening>.val) in
136
+ foreach sew = SchedSEWSet<mx, isF, isWidening>.val in
148
137
if !exists<SchedRead>(name # "_" # mx # "_E" # sew) then
149
138
def : ReadAdvance<!cast<SchedRead>(name # "_" # mx # "_E" # sew), val, writes>;
150
139
}
0 commit comments