8
8
9
9
def MipsI6400Model : SchedMachineModel {
10
10
int IssueWidth = 2; // 2x dispatched per cycle
11
- int MicroOpBufferSize = 48; // min(48, 48, 64)
11
+ int MicroOpBufferSize = 0;
12
12
int LoadLatency = 3;
13
13
int MispredictPenalty = 8;
14
14
@@ -26,17 +26,17 @@ let SchedModel = MipsI6400Model in {
26
26
27
27
// AGEN Pipelines
28
28
// ==============
29
- def I6400AGEN : ProcResource<1> { let BufferSize = 16 ; }
29
+ def I6400AGEN : ProcResource<1> { let BufferSize = 0 ; }
30
30
def I6400IssueLSU : ProcResource<1> { let Super = I6400AGEN; }
31
31
def I6400IssueALU1 : ProcResource<1> { let Super = I6400AGEN; }
32
32
33
- def I6400WriteLSUStore : SchedWriteRes<[I6400IssueLSU]> { let Latency = 1; }
33
+ def I6400WriteLSUStore : SchedWriteRes<[I6400IssueLSU]>;
34
34
def I6400WriteLSUStore2 : SchedWriteRes<[I6400IssueLSU]> {
35
35
let Latency = 8;
36
36
let ReleaseAtCycles = [5];
37
37
}
38
38
def I6400WriteLSULoad : SchedWriteRes<[I6400IssueLSU]> { let Latency = 3; }
39
- def I6400WriteLSUPref : SchedWriteRes<[I6400IssueLSU]> { let Latency = 1; }
39
+ def I6400WriteLSUPref : SchedWriteRes<[I6400IssueLSU]>;
40
40
def I6400WriteLSUOther : SchedWriteRes<[I6400IssueLSU]> {
41
41
let Latency = 6;
42
42
let ReleaseAtCycles = [5];
@@ -60,13 +60,13 @@ let SchedModel = MipsI6400Model in {
60
60
61
61
// CONTROL Pipelines
62
62
// =================
63
- def I6400CTRL : ProcResource<1> { let BufferSize = 16 ; }
63
+ def I6400CTRL : ProcResource<1> { let BufferSize = 0 ; }
64
64
def I6400IssueCTU : ProcResource<1> { let Super = I6400CTRL; }
65
65
def I6400IssueALU0 : ProcResource<1> { let Super = I6400CTRL; }
66
66
67
- def I6400WriteALU0 : SchedWriteRes<[I6400IssueALU0]> { let Latency = 1; }
68
- def I6400WriteALU1 : SchedWriteRes<[I6400IssueALU1]> { let Latency = 1; }
69
- def I6400WriteCTU : SchedWriteRes<[I6400IssueCTU]> { let Latency = 1; }
67
+ def I6400WriteALU0 : SchedWriteRes<[I6400IssueALU0]>;
68
+ def I6400WriteALU1 : SchedWriteRes<[I6400IssueALU1]>;
69
+ def I6400WriteCTU : SchedWriteRes<[I6400IssueCTU]>;
70
70
71
71
// CTU pipelines
72
72
// =============
@@ -92,9 +92,7 @@ let SchedModel = MipsI6400Model in {
92
92
// Either ALU0 or ALU1 pipelines
93
93
// =============================
94
94
def I6400IssueEitherALU : ProcResGroup<[I6400IssueALU0, I6400IssueALU1]>;
95
- def I6400WriteEitherALU : SchedWriteRes<[I6400IssueEitherALU]> {
96
- let Latency = 1;
97
- }
95
+ def I6400WriteEitherALU : SchedWriteRes<[I6400IssueEitherALU]>;
98
96
99
97
def : InstRW<[I6400WriteEitherALU],
100
98
(instrs ADD, ADDiu, ADDIUPC, ADDu, ALIGN, ALUIPC, AND, ANDi, AUI,
@@ -134,13 +132,13 @@ let SchedModel = MipsI6400Model in {
134
132
135
133
// FPU pipelines
136
134
// =============
137
- def I6400FPU : ProcResource<3> { let BufferSize = 16 ; }
135
+ def I6400FPU : ProcResource<3> { let BufferSize = 0 ; }
138
136
def I6400FPUShort : ProcResource<1> { let Super = I6400FPU; }
139
137
def I6400FPULong : ProcResource<1> { let Super = I6400FPU; }
140
138
def I6400FPUApu : ProcResource<1>;
141
139
def I6400FPUFloatL : ProcResource<1>;
142
140
143
- def I6400FPUFabs : SchedWriteRes<[I6400FPUShort]> { let Latency = 1; }
141
+ def I6400FPUFabs : SchedWriteRes<[I6400FPUShort]>;
144
142
def : InstRW<[I6400FPUFabs], (instrs FABS_S, FNEG_S, FMOV_S,
145
143
FMOV_D32, FMOV_D64,
146
144
FNEG_D32, FNEG_D64, CLASS_S, CLASS_D)>;
@@ -245,7 +243,6 @@ let SchedModel = MipsI6400Model in {
245
243
SHF_H, SHF_W)>;
246
244
247
245
def I6400MSAShortLogic : SchedWriteRes<[I6400FPUShort]> {
248
- let Latency = 1;
249
246
let ReleaseAtCycles = [2];
250
247
}
251
248
def : InstRW<[I6400MSAShortLogic],
@@ -268,7 +265,7 @@ let SchedModel = MipsI6400Model in {
268
265
def : InstRW<[I6400MSAShortLogic], (instregex "^SPLAT_(B|H|W|D)$")>;
269
266
def : InstRW<[I6400MSAShortLogic], (instregex "^SPLATI_(B|H|W|D)$")>;
270
267
271
- def I6400MSAShortLogic4 : SchedWriteRes<[I6400FPUShort]> { let Latency = 1; }
268
+ def I6400MSAShortLogic4 : SchedWriteRes<[I6400FPUShort]>;
272
269
def : InstRW<[I6400MSAShortLogic4],
273
270
(instrs CTCMSA, CFCMSA, COPY_S_B, COPY_S_H, COPY_S_W, COPY_S_D,
274
271
COPY_U_B, COPY_U_H, COPY_U_W, BNZ_B, BNZ_H, BNZ_W, BNZ_D,
@@ -281,7 +278,6 @@ let SchedModel = MipsI6400Model in {
281
278
def : InstRW<[I6400MSAMove], (instrs LD_B, LD_H, LD_W, LD_D)>;
282
279
283
280
def I6400MSAMove2 : SchedWriteRes<[I6400FPUShort]> {
284
- let Latency = 1;
285
281
let ReleaseAtCycles = [2];
286
282
}
287
283
def : InstRW<[I6400MSAMove2], (instrs LDI_B, LDI_H, LDI_W, LDI_D, MOVE_V)>;
@@ -343,7 +339,6 @@ let SchedModel = MipsI6400Model in {
343
339
CEIL_W_D32, CEIL_W_D64)>;
344
340
345
341
def I6400MSALongLogic1 : SchedWriteRes<[I6400FPULong]> {
346
- let Latency = 1;
347
342
let ReleaseAtCycles = [2];
348
343
}
349
344
def : InstRW<[I6400MSALongLogic1], (instrs BMZ_V, BMZI_B, BMNZ_V, BMNZI_B,
@@ -439,7 +434,7 @@ let SchedModel = MipsI6400Model in {
439
434
// attach it to the Atomic2OpsPostRA, AtomicCmpSwapPostRA, ...
440
435
// classes. Then just define resources for the `WriteAtomic` in each
441
436
// machine models.
442
- def I6400Atomic : ProcResource<1> { let BufferSize = 1 ; }
437
+ def I6400Atomic : ProcResource<1> { let BufferSize = 0 ; }
443
438
def I6400WriteAtomic : SchedWriteRes<[I6400Atomic]> { let Latency = 2; }
444
439
445
440
def : InstRW<[I6400WriteAtomic],
0 commit comments