@@ -230,19 +230,26 @@ def N3Write_8c_1V_1L : SchedWriteRes<[N3UnitV, N3UnitL]> {
230
230
let NumMicroOps = 2;
231
231
}
232
232
233
- //===----------------------------------------------------------------------===//
234
- // Define generic 3 micro-op types
235
-
236
- def N3Write_5c_1M0_2V : SchedWriteRes<[N3UnitM0, N3UnitV, N3UnitV]> {
233
+ def N3Write_5c_1M0_1V : SchedWriteRes<[N3UnitM0, N3UnitV]> {
237
234
let Latency = 5;
238
- let NumMicroOps = 3 ;
235
+ let NumMicroOps = 2 ;
239
236
}
240
237
241
- def N3Write_5c_1V1_2V : SchedWriteRes<[N3UnitV1, N3UnitV , N3UnitV]> {
238
+ def N3Write_5c_1V1_1V : SchedWriteRes<[N3UnitV1, N3UnitV]> {
242
239
let Latency = 5;
243
- let NumMicroOps = 3 ;
240
+ let NumMicroOps = 2 ;
244
241
}
245
242
243
+ def N3Write_8c_1M0_1V : SchedWriteRes<[N3UnitM0, N3UnitV]> {
244
+ let Latency = 8;
245
+ let NumMicroOps = 2;
246
+ }
247
+
248
+ //===----------------------------------------------------------------------===//
249
+ // Define generic 3 micro-op types
250
+
251
+
252
+
246
253
def N3Write_6c_3V : SchedWriteRes<[N3UnitV, N3UnitV, N3UnitV]> {
247
254
let Latency = 6;
248
255
let NumMicroOps = 3;
@@ -263,10 +270,6 @@ def N3Write_8c_2L_1V : SchedWriteRes<[N3UnitL, N3UnitL, N3UnitV]> {
263
270
let NumMicroOps = 3;
264
271
}
265
272
266
- def N3Write_8c_1M0_2V : SchedWriteRes<[N3UnitM0, N3UnitV, N3UnitV]> {
267
- let Latency = 8;
268
- let NumMicroOps = 3;
269
- }
270
273
271
274
def N3Write_7c_2V_1V1 : SchedWriteRes<[N3UnitV, N3UnitV, N3UnitV1]> {
272
275
let Latency = 7;
@@ -278,6 +281,11 @@ def N3Write_5c_2V_1V1 : SchedWriteRes<[N3UnitV, N3UnitV, N3UnitV1]> {
278
281
let NumMicroOps = 3;
279
282
}
280
283
284
+ def N3Write_7c_1M_1M0_1V : SchedWriteRes<[N3UnitM, N3UnitM0, N3UnitV]> {
285
+ let Latency = 7;
286
+ let NumMicroOps = 3;
287
+ }
288
+
281
289
//===----------------------------------------------------------------------===//
282
290
// Define generic 4 micro-op types
283
291
@@ -351,14 +359,6 @@ def N3Write_2c_1L01_2I_1V : SchedWriteRes<[N3UnitL01, N3UnitI, N3UnitI, N3UnitV]
351
359
let NumMicroOps = 4;
352
360
}
353
361
354
- //===----------------------------------------------------------------------===//
355
- // Define generic 5 micro-op types
356
-
357
- def N3Write_7c_2M_1M0_2V : SchedWriteRes<[N3UnitM, N3UnitM, N3UnitM0, N3UnitV, N3UnitV]> {
358
- let Latency = 7;
359
- let NumMicroOps = 5;
360
- }
361
-
362
362
//===----------------------------------------------------------------------===//
363
363
// Define generic 6 micro-op types
364
364
@@ -902,7 +902,7 @@ def : InstRW<[N3Write_2c_1V], (instrs FMOVHr, FMOVSr, FMOVDr)>;
902
902
def : InstRW<[N3Write_3c_1M0], (instrs FMOVWHr, FMOVXHr, FMOVWSr, FMOVXDr)>;
903
903
904
904
// FP transfer, from gen to high half of vec reg
905
- def : InstRW<[N3Write_5c_1M0_2V ], (instrs FMOVXDHighr)>;
905
+ def : InstRW<[N3Write_5c_1M0_1V ], (instrs FMOVXDHighr)>;
906
906
907
907
// FP transfer, from vec to gen reg
908
908
def : SchedAlias<WriteFCopy, N3Write_3c_1V>;
@@ -1017,7 +1017,7 @@ def : InstRW<[N3Write_4c_1V1], (instregex "^[SU]ABAL?v",
1017
1017
def : InstRW<[N3Write_3c_1V1], (instregex "^[SU]?ADDL?Vv4i(16|32)v$")>;
1018
1018
1019
1019
// ASIMD arith, reduce, 8B/8H
1020
- def : InstRW<[N3Write_5c_1V1_2V ], (instregex "^[SU]?ADDL?Vv8i(8|16)v$")>;
1020
+ def : InstRW<[N3Write_5c_1V1_1V ], (instregex "^[SU]?ADDL?Vv8i(8|16)v$")>;
1021
1021
1022
1022
// ASIMD arith, reduce, 16B
1023
1023
def : InstRW<[N3Write_6c_2V1], (instregex "^[SU]?ADDL?Vv16i8v$")>;
@@ -1033,7 +1033,7 @@ def : InstRW<[N3Write_3c_1V], (instrs SMMLA, UMMLA, USMMLA)>;
1033
1033
def : InstRW<[N3Write_3c_1V1], (instregex "^[SU](MAX|MIN)Vv4i(16|32)v$")>;
1034
1034
1035
1035
// ASIMD max/min, reduce, 8B/8H
1036
- def : InstRW<[N3Write_5c_1V1_2V ], (instregex "^[SU](MAX|MIN)Vv8i(8|16)v$")>;
1036
+ def : InstRW<[N3Write_5c_1V1_1V ], (instregex "^[SU](MAX|MIN)Vv8i(8|16)v$")>;
1037
1037
1038
1038
// ASIMD max/min, reduce, 16B
1039
1039
def : InstRW<[N3Write_6c_2V1], (instregex "[SU](MAX|MIN)Vv16i8v$")>;
@@ -1278,7 +1278,7 @@ def : InstRW<[N3Write_2c_2V], (instregex "^SMOVvi(((8|16)to(32|64))|32to64)$",
1278
1278
"^UMOVvi(8|16|32|64)$")>;
1279
1279
1280
1280
// ASIMD transfer, gen reg to element
1281
- def : InstRW<[N3Write_5c_1M0_2V ], (instregex "^INSvi(8|16|32|64)gpr$")>;
1281
+ def : InstRW<[N3Write_5c_1M0_1V ], (instregex "^INSvi(8|16|32|64)gpr$")>;
1282
1282
1283
1283
// ASIMD load instructions
1284
1284
// -----------------------------------------------------------------------------
@@ -1587,7 +1587,7 @@ def : InstRW<[N3Write_2c_1M],
1587
1587
"^(SQDEC|SQINC)P_XPWd_[BHSD]")>;
1588
1588
1589
1589
// Predicate counting vector, active predicate
1590
- def : InstRW<[N3Write_7c_2M_1M0_2V ],
1590
+ def : InstRW<[N3Write_7c_1M_1M0_1V ],
1591
1591
(instregex "^(DEC|INC|SQDEC|SQINC|UQDEC|UQINC)P_ZP_[HSD]")>;
1592
1592
1593
1593
// Predicate logical
@@ -1741,7 +1741,7 @@ def : InstRW<[N3Write_4c_1V0], (instregex "^CMLA_ZZZ_[BHS]$", "^CMLA_ZZZI_[HS]$"
1741
1741
def : InstRW<[N3Write_5c_2V0], (instrs CMLA_ZZZ_D)>;
1742
1742
1743
1743
// Conditional extract operations, scalar form
1744
- def : InstRW<[N3Write_8c_1M0_2V ], (instregex "^CLAST[AB]_RPZ_[BHSD]$")>;
1744
+ def : InstRW<[N3Write_8c_1M0_1V ], (instregex "^CLAST[AB]_RPZ_[BHSD]$")>;
1745
1745
1746
1746
// Conditional extract operations, SIMD&FP scalar and vector forms
1747
1747
def : InstRW<[N3Write_2c_1V], (instregex "^CLAST[AB]_[VZ]PZ_[BHSD]$",
@@ -1759,7 +1759,7 @@ def : InstRW<[N3Write_4c_2V0], (instregex "^[SU]CVTF_ZPmZ_Sto[HS]")>;
1759
1759
def : InstRW<[N3Write_6c_4V0], (instregex "^[SU]CVTF_ZPmZ_HtoH")>;
1760
1760
1761
1761
// Copy, scalar
1762
- def : InstRW<[N3Write_5c_1M0_2V ], (instregex "^CPY_ZPmR_[BHSD]$")>;
1762
+ def : InstRW<[N3Write_5c_1M0_1V ], (instregex "^CPY_ZPmR_[BHSD]$")>;
1763
1763
1764
1764
// Copy, scalar SIMD&FP or imm
1765
1765
def : InstRW<[N3Write_2c_1V], (instregex "^CPY_ZPm[IV]_[BHSD]$",
@@ -1820,13 +1820,13 @@ def : InstRW<[N3Write_2c_1V], (instregex "^HISTCNT_ZPzZZ_[SD]$",
1820
1820
def : InstRW<[N3Write_2c_1V], (instregex "^INDEX_II_[BHS]$")>;
1821
1821
1822
1822
// Horizontal operations, B, H, S form, scalar, immediate operands / scalar operands only / immediate, scalar operands
1823
- def : InstRW<[N3Write_5c_1M0_2V ], (instregex "^INDEX_(IR|RI|RR)_[BHS]$")>;
1823
+ def : InstRW<[N3Write_5c_1M0_1V ], (instregex "^INDEX_(IR|RI|RR)_[BHS]$")>;
1824
1824
1825
1825
// Horizontal operations, D form, immediate operands only
1826
1826
def : InstRW<[N3Write_2c_1V], (instrs INDEX_II_D)>;
1827
1827
1828
1828
// Horizontal operations, D form, scalar, immediate operands / scalar operands only / immediate, scalar operands
1829
- def : InstRW<[N3Write_5c_1M0_2V ], (instregex "^INDEX_(IR|RI|RR)_D$")>;
1829
+ def : InstRW<[N3Write_5c_1M0_1V ], (instregex "^INDEX_(IR|RI|RR)_D$")>;
1830
1830
1831
1831
// Logical
1832
1832
def : InstRW<[N3Write_2c_1V],
0 commit comments