@@ -12,7 +12,7 @@ def MipsI6400Model : SchedMachineModel {
12
12
int LoadLatency = 3;
13
13
int MispredictPenalty = 8;
14
14
15
- let CompleteModel = 1 ;
15
+ let CompleteModel = 0 ;
16
16
let FullInstRWOverlapCheck = 1;
17
17
18
18
list<Predicate> UnsupportedFeatures = [HasMips64r5, HasMips32r5,
@@ -24,12 +24,27 @@ def MipsI6400Model : SchedMachineModel {
24
24
25
25
let SchedModel = MipsI6400Model in {
26
26
27
+ // I6400 Resources
28
+ // ===============
29
+ let BufferSize = 0 in {
30
+
31
+ def I6400AGEN : ProcResource<1>;
32
+ def I6400IssueLSU : ProcResource<1> { let Super = I6400AGEN; }
33
+ def I6400IssueALU1 : ProcResource<1> { let Super = I6400AGEN; }
34
+ def I6400CTRL : ProcResource<1>;
35
+ def I6400IssueCTU : ProcResource<1> { let Super = I6400CTRL; }
36
+ def I6400IssueALU0 : ProcResource<1> { let Super = I6400CTRL; }
37
+ def I6400MDU : ProcResource<1>;
38
+ def I6400FPU : ProcResource<3>;
39
+ def I6400FPUShort : ProcResource<1> { let Super = I6400FPU; }
40
+ def I6400FPULong : ProcResource<1> { let Super = I6400FPU; }
41
+ def I6400FPUApu : ProcResource<1>;
42
+ def I6400FPUFloatL : ProcResource<1>;
43
+ def I6400Atomic : ProcResource<1>;
44
+ }
45
+
27
46
// AGEN Pipelines
28
47
// ==============
29
- def I6400AGEN : ProcResource<1> { let BufferSize = 0; }
30
- def I6400IssueLSU : ProcResource<1> { let Super = I6400AGEN; }
31
- def I6400IssueALU1 : ProcResource<1> { let Super = I6400AGEN; }
32
-
33
48
def I6400WriteLSUStore : SchedWriteRes<[I6400IssueLSU]>;
34
49
def I6400WriteLSUStore2 : SchedWriteRes<[I6400IssueLSU]> {
35
50
let Latency = 8;
@@ -60,9 +75,6 @@ let SchedModel = MipsI6400Model in {
60
75
61
76
// CONTROL Pipelines
62
77
// =================
63
- def I6400CTRL : ProcResource<1> { let BufferSize = 0; }
64
- def I6400IssueCTU : ProcResource<1> { let Super = I6400CTRL; }
65
- def I6400IssueALU0 : ProcResource<1> { let Super = I6400CTRL; }
66
78
67
79
def I6400WriteALU0 : SchedWriteRes<[I6400IssueALU0]>;
68
80
def I6400WriteALU1 : SchedWriteRes<[I6400IssueALU1]>;
@@ -120,7 +132,6 @@ let SchedModel = MipsI6400Model in {
120
132
121
133
// MDU pipelines
122
134
// =============
123
- def I6400MDU : ProcResource<1>;
124
135
def I6400GPMUL : SchedWriteRes<[I6400MDU]> { let Latency = 4; }
125
136
def : InstRW<[I6400GPMUL], (instrs MUL_R6, MULU, MUH, MUHU, DMUL_R6, DMUH,
126
137
DMULU, DMUHU)>;
@@ -132,11 +143,6 @@ let SchedModel = MipsI6400Model in {
132
143
133
144
// FPU pipelines
134
145
// =============
135
- def I6400FPU : ProcResource<3> { let BufferSize = 0; }
136
- def I6400FPUShort : ProcResource<1> { let Super = I6400FPU; }
137
- def I6400FPULong : ProcResource<1> { let Super = I6400FPU; }
138
- def I6400FPUApu : ProcResource<1>;
139
- def I6400FPUFloatL : ProcResource<1>;
140
146
141
147
def I6400FPUFabs : SchedWriteRes<[I6400FPUShort]>;
142
148
def : InstRW<[I6400FPUFabs], (instrs FABS_S, FNEG_S, FMOV_S,
@@ -434,7 +440,6 @@ let SchedModel = MipsI6400Model in {
434
440
// attach it to the Atomic2OpsPostRA, AtomicCmpSwapPostRA, ...
435
441
// classes. Then just define resources for the `WriteAtomic` in each
436
442
// machine models.
437
- def I6400Atomic : ProcResource<1> { let BufferSize = 0; }
438
443
def I6400WriteAtomic : SchedWriteRes<[I6400Atomic]> { let Latency = 2; }
439
444
440
445
def : InstRW<[I6400WriteAtomic],
0 commit comments