@@ -2065,7 +2065,7 @@ def : InstRW<[V2Write_2cyc_1M], (instregex "^(ZIP|UZP)[12]_PPP_[BHSD]$")>;
2065
2065
2066
2066
// Arithmetic, absolute diff
2067
2067
def : InstRW<[V2Write_2cyc_1V], (instregex "^[SU]ABD_ZPmZ_[BHSD]$",
2068
- "^[SU]ABD_ZPZZ_UNDEF_ [BHSD]$")>;
2068
+ "^[SU]ABD_ZPZZ_ [BHSD]_UNDEF $")>;
2069
2069
2070
2070
// Arithmetic, absolute diff accum
2071
2071
def : InstRW<[V2Wr_ZA, V2Rd_ZA], (instregex "^[SU]ABA_ZZZ_[BHSD]$")>;
@@ -2079,7 +2079,7 @@ def : InstRW<[V2Write_2cyc_1V], (instregex "^[SU]ABDL[TB]_ZZZ_[HSD]$")>;
2079
2079
// Arithmetic, basic
2080
2080
def : InstRW<[V2Write_2cyc_1V],
2081
2081
(instregex "^(ABS|ADD|CNOT|NEG|SUB|SUBR)_ZPmZ_[BHSD]$",
2082
- "^(ABS|CNOT|NEG)_ZPmZ_UNDEF_ [BHSD]$",
2082
+ "^(ABS|CNOT|NEG)_ZPmZ_ [BHSD]_UNDEF $",
2083
2083
"^(ADD|SUB)_ZZZ_[BHSD]$",
2084
2084
"^(ADD|SUB|SUBR)_ZI_[BHSD]$",
2085
2085
"^ADR_[SU]XTW_ZZZ_D_[0123]$",
@@ -2093,7 +2093,7 @@ def : InstRW<[V2Write_2cyc_1V],
2093
2093
def : InstRW<[V2Write_2cyc_1V],
2094
2094
(instregex "^R?(ADD|SUB)HN[BT]_ZZZ_[BHS]$",
2095
2095
"^SQ(ABS|ADD|NEG|SUB|SUBR)_ZPmZ_[BHSD]$",
2096
- "^SQ(ABS|NEG)_ZPmZ_UNDEF_ [BHSD]$",
2096
+ "^SQ(ABS|NEG)_ZPmZ_ [BHSD]_UNDEF $",
2097
2097
"^[SU]Q(ADD|SUB)_ZZZ_[BHSD]$",
2098
2098
"^[SU]Q(ADD|SUB)_ZI_[BHSD]$",
2099
2099
"^(SRH|SUQ|UQ|USQ|URH)ADD_ZPmZ_[BHSD]$",
@@ -2116,7 +2116,7 @@ def : InstRW<[V2Write_2cyc_1V13],
2116
2116
"^(ASR|LSL|LSR)_ZPmI_[BHSD]$",
2117
2117
"^(ASR|LSL|LSR)_ZPmZ_[BHSD]$",
2118
2118
"^(ASR|LSL|LSR)_ZZI_[BHSD]$",
2119
- "^(ASR|LSL|LSR)_ZPZ[IZ]_UNDEF_ [BHSD]$",
2119
+ "^(ASR|LSL|LSR)_ZPZ[IZ]_ [BHSD]_UNDEF $",
2120
2120
"^(ASRR|LSLR|LSRR)_ZPmZ_[BHSD]$")>;
2121
2121
2122
2122
// Arithmetic, shift and accumulate
@@ -2133,7 +2133,7 @@ def : InstRW<[V2Write_2cyc_1V13], (instregex "^(SLI|SRI)_ZZI_[BHSD]$")>;
2133
2133
def : InstRW<[V2Write_4cyc_1V13],
2134
2134
(instregex "^(SQ)?RSHRU?N[BT]_ZZI_[BHS]$",
2135
2135
"^(SQRSHL|SQRSHLR|SQSHL|SQSHLR|UQRSHL|UQRSHLR|UQSHL|UQSHLR)_ZPmZ_[BHSD]$",
2136
- "^[SU]QR?SHL_ZPZZ_UNDEF_ [BHSD]$",
2136
+ "^[SU]QR?SHL_ZPZZ_ [BHSD]_UNDEF $",
2137
2137
"^(SQSHL|SQSHLU|UQSHL)_ZPmI_[BHSD]$",
2138
2138
"^SQSHRU?N[BT]_ZZI_[BHS]$",
2139
2139
"^UQR?SHRN[BT]_ZZI_[BHS]$")>;
@@ -2143,7 +2143,7 @@ def : InstRW<[V2Write_4cyc_1V13], (instregex "^ASRD_ZPmI_[BHSD]$")>;
2143
2143
2144
2144
// Arithmetic, shift rounding
2145
2145
def : InstRW<[V2Write_4cyc_1V13], (instregex "^[SU]RSHLR?_ZPmZ_[BHSD]$",
2146
- "^[SU]RSHL_ZPZZ_UNDEF_ [BHSD]$",
2146
+ "^[SU]RSHL_ZPZZ_ [BHSD]_UNDEF $",
2147
2147
"^[SU]RSHR_ZPmI_[BHSD]$")>;
2148
2148
2149
2149
// Bit manipulation
@@ -2154,7 +2154,7 @@ def : InstRW<[V2Write_2cyc_1V], (instregex "^(BSL|BSL1N|BSL2N|NBSL)_ZZZZ$")>;
2154
2154
2155
2155
// Count/reverse bits
2156
2156
def : InstRW<[V2Write_2cyc_1V], (instregex "^(CLS|CLZ|CNT|RBIT)_ZPmZ_[BHSD]$",
2157
- "^(CLS|CLZ|CNT)_ZPmZ_UNDEF_ [BHSD]$")>;
2157
+ "^(CLS|CLZ|CNT)_ZPmZ_ [BHSD]_UNDEF $")>;
2158
2158
2159
2159
// Broadcast logical bitmask immediate to vector
2160
2160
def : InstRW<[V2Write_2cyc_1V], (instrs DUPM_ZI)>;
@@ -2207,11 +2207,11 @@ def : InstRW<[V2Write_2cyc_1V], (instregex "^CPY_ZPm[IV]_[BHSD]$",
2207
2207
2208
2208
// Divides, 32 bit
2209
2209
def : InstRW<[V2Write_12cyc_1V0], (instregex "^[SU]DIVR?_ZPmZ_S$",
2210
- "^[SU]DIV_ZPZZ_UNDEF_S $")>;
2210
+ "^[SU]DIV_ZPZZ_S_UNDEF $")>;
2211
2211
2212
2212
// Divides, 64 bit
2213
2213
def : InstRW<[V2Write_20cyc_1V0], (instregex "^[SU]DIVR?_ZPmZ_D$",
2214
- "^[SU]DIV_ZPZZ_UNDEF_D $")>;
2214
+ "^[SU]DIV_ZPZZ_D_UNDEF $")>;
2215
2215
2216
2216
// Dot product, 8 bit
2217
2217
def : InstRW<[V2Wr_ZDOTB, V2Rd_ZDOTB], (instregex "^[SU]DOT_ZZZI?_S$")>;
@@ -2273,12 +2273,12 @@ def : InstRW<[V2Write_2cyc_1V],
2273
2273
"^(AND|BIC|EOR|ORR)_ZZZ$",
2274
2274
"^EOR(BT|TB)_ZZZ_[BHSD]$",
2275
2275
"^(AND|BIC|EOR|NOT|ORR)_ZPmZ_[BHSD]$",
2276
- "^NOT_ZPmZ_UNDEF_ [BHSD]$")>;
2276
+ "^NOT_ZPmZ_ [BHSD]_UNDEF $")>;
2277
2277
2278
2278
// Max/min, basic and pairwise
2279
2279
def : InstRW<[V2Write_2cyc_1V], (instregex "^[SU](MAX|MIN)_ZI_[BHSD]$",
2280
2280
"^[SU](MAX|MIN)P?_ZPmZ_[BHSD]$",
2281
- "^[SU](MAX|MIN)_ZPZZ_UNDEF_ [BHSD]$")>;
2281
+ "^[SU](MAX|MIN)_ZPZZ_ [BHSD]_UNDEF $")>;
2282
2282
2283
2283
// Matching operations
2284
2284
// FIXME: SOG p. 44, n. 5: If the consuming instruction has a flag source, the
@@ -2294,29 +2294,29 @@ def : InstRW<[V2Write_2cyc_1V], (instregex "^MOVPRFX_ZP[mz]Z_[BHSD]$",
2294
2294
2295
2295
// Multiply, B, H, S element size
2296
2296
def : InstRW<[V2Write_4cyc_1V02], (instregex "^MUL_(ZI|ZPmZ|ZZZI|ZZZ)_[BHS]$",
2297
- "^MUL_ZPZZ_UNDEF_ [BHS]$",
2297
+ "^MUL_ZPZZ_ [BHS]_UNDEF $",
2298
2298
"^[SU]MULH_(ZPmZ|ZZZ)_[BHS]$",
2299
- "^[SU]MULH_ZPZZ_UNDEF_ [BHS]$")>;
2299
+ "^[SU]MULH_ZPZZ_ [BHS]_UNDEF $")>;
2300
2300
2301
2301
// Multiply, D element size
2302
2302
def : InstRW<[V2Write_5cyc_2V02], (instregex "^MUL_(ZI|ZPmZ|ZZZI|ZZZ)_D$",
2303
- "^MUL_ZPZZ_UNDEF_D $",
2303
+ "^MUL_ZPZZ_D_UNDEF $",
2304
2304
"^[SU]MULH_(ZPmZ|ZZZ)_D$",
2305
- "^[SU]MULH_ZPZZ_UNDEF_D $")>;
2305
+ "^[SU]MULH_ZPZZ_D_UNDEF $")>;
2306
2306
2307
2307
// Multiply long
2308
2308
def : InstRW<[V2Write_4cyc_1V02], (instregex "^[SU]MULL[BT]_ZZZI_[SD]$",
2309
2309
"^[SU]MULL[BT]_ZZZ_[HSD]$")>;
2310
2310
2311
2311
// Multiply accumulate, B, H, S element size
2312
2312
def : InstRW<[V2Wr_ZMABHS, V2Rd_ZMABHS],
2313
- (instregex "^ML[AS]_ZZZI_[HS]$", "^ML[AS]_ZPZZZ_UNDEF_ [BHS]$")>;
2313
+ (instregex "^ML[AS]_ZZZI_[HS]$", "^ML[AS]_ZPZZZ_ [BHS]_UNDEF $")>;
2314
2314
def : InstRW<[V2Wr_ZMABHS, ReadDefault, V2Rd_ZMABHS],
2315
2315
(instregex "^(ML[AS]|MAD|MSB)_ZPmZZ_[BHS]$")>;
2316
2316
2317
2317
// Multiply accumulate, D element size
2318
2318
def : InstRW<[V2Wr_ZMAD, V2Rd_ZMAD],
2319
- (instregex "^ML[AS]_ZZZI_D$", "^ML[AS]_ZPZZZ_UNDEF_D $")>;
2319
+ (instregex "^ML[AS]_ZZZI_D$", "^ML[AS]_ZPZZZ_D_UNDEF $")>;
2320
2320
def : InstRW<[V2Wr_ZMAD, ReadDefault, V2Rd_ZMAD],
2321
2321
(instregex "^(ML[AS]|MAD|MSB)_ZPmZZ_D$")>;
2322
2322
@@ -2368,7 +2368,7 @@ def : InstRW<[V2Write_2cyc_1V], (instregex "^([SU]Q)?(DEC|INC)[HWD]_ZPiI$")>;
2368
2368
2369
2369
// Reciprocal estimate
2370
2370
def : InstRW<[V2Write_4cyc_2V02], (instrs URECPE_ZPmZ_S, URSQRTE_ZPmZ_S,
2371
- URECPE_ZPmZ_UNDEF_S, URSQRTE_ZPmZ_UNDEF_S )>;
2371
+ URECPE_ZPmZ_S_UNDEF, URSQRTE_ZPmZ_S_UNDEF )>;
2372
2372
2373
2373
// Reduction, arithmetic, B form
2374
2374
def : InstRW<[V2Write_9cyc_2V_4V13], (instregex "^[SU](ADD|MAX|MIN)V_VPZ_B")>;
@@ -2414,16 +2414,16 @@ def : InstRW<[V2Write_2cyc_1V], (instregex "^(UZP|ZIP)[12]_ZZZ_[BHSDQ]$")>;
2414
2414
2415
2415
// Floating point absolute value/difference
2416
2416
def : InstRW<[V2Write_2cyc_1V], (instregex "^FAB[SD]_ZPmZ_[HSD]$",
2417
- "^FABD_ZPZZ_UNDEF_ [HSD]$",
2418
- "^FABS_ZPmZ_UNDEF_ [HSD]$")>;
2417
+ "^FABD_ZPZZ_ [HSD]_UNDEF $",
2418
+ "^FABS_ZPmZ_ [HSD]_UNDEF $")>;
2419
2419
2420
2420
// Floating point arithmetic
2421
2421
def : InstRW<[V2Write_2cyc_1V], (instregex "^F(ADD|SUB)_(ZPm[IZ]|ZZZ)_[HSD]$",
2422
- "^F(ADD|SUB)_ZPZ[IZ]_UNDEF_ [HSD]$",
2422
+ "^F(ADD|SUB)_ZPZ[IZ]_ [HSD]_UNDEF $",
2423
2423
"^FADDP_ZPmZZ_[HSD]$",
2424
2424
"^FNEG_ZPmZ(_UNDEF)?_[HSD]$",
2425
2425
"^FSUBR_ZPm[IZ]_[HSD]$",
2426
- "^FSUBR_ZPZI_UNDEF_ [HSD]$")>;
2426
+ "^FSUBR_ZPZI_ [HSD]_UNDEF $")>;
2427
2427
2428
2428
// Floating point associative add, F16
2429
2429
def : InstRW<[V2Write_10cyc_1V1_9rc], (instrs FADDA_VPZ_H)>;
@@ -2486,51 +2486,51 @@ def : InstRW<[V2Write_2cyc_1V], (instregex "^FCPY_ZPmI_[HSD]$",
2486
2486
2487
2487
// Floating point divide, F16
2488
2488
def : InstRW<[V2Write_13cyc_1V02_12rc], (instregex "^FDIVR?_ZPmZ_H$",
2489
- "^FDIV_ZPZZ_UNDEF_H $")>;
2489
+ "^FDIV_ZPZZ_H_UNDEF $")>;
2490
2490
2491
2491
// Floating point divide, F32
2492
2492
def : InstRW<[V2Write_10cyc_1V02_9rc], (instregex "^FDIVR?_ZPmZ_S$",
2493
- "^FDIV_ZPZZ_UNDEF_S $")>;
2493
+ "^FDIV_ZPZZ_S_UNDEF $")>;
2494
2494
2495
2495
// Floating point divide, F64
2496
2496
def : InstRW<[V2Write_15cyc_1V02_14rc], (instregex "^FDIVR?_ZPmZ_D$",
2497
- "^FDIV_ZPZZ_UNDEF_D $")>;
2497
+ "^FDIV_ZPZZ_D_UNDEF $")>;
2498
2498
2499
2499
// Floating point min/max pairwise
2500
2500
def : InstRW<[V2Write_2cyc_1V], (instregex "^F(MAX|MIN)(NM)?P_ZPmZZ_[HSD]$")>;
2501
2501
2502
2502
// Floating point min/max
2503
2503
def : InstRW<[V2Write_2cyc_1V], (instregex "^F(MAX|MIN)(NM)?_ZPm[IZ]_[HSD]$",
2504
- "^F(MAX|MIN)(NM)?_ZPZ[IZ]_UNDEF_ [HSD]$")>;
2504
+ "^F(MAX|MIN)(NM)?_ZPZ[IZ]_ [HSD]_UNDEF $")>;
2505
2505
2506
2506
// Floating point multiply
2507
2507
def : InstRW<[V2Write_3cyc_1V], (instregex "^(FSCALE|FMULX)_ZPmZ_[HSD]$",
2508
- "^FMULX_ZPZZ_UNDEF_ [HSD]$",
2508
+ "^FMULX_ZPZZ_ [HSD]_UNDEF $",
2509
2509
"^FMUL_(ZPm[IZ]|ZZZI?)_[HSD]$",
2510
- "^FMUL_ZPZ[IZ]_UNDEF_ [HSD]$")>;
2510
+ "^FMUL_ZPZ[IZ]_ [HSD]_UNDEF $")>;
2511
2511
2512
2512
// Floating point multiply accumulate
2513
2513
def : InstRW<[V2Wr_ZFMA, ReadDefault, V2Rd_ZFMA],
2514
2514
(instregex "^FN?ML[AS]_ZPmZZ_[HSD]$",
2515
2515
"^FN?(MAD|MSB)_ZPmZZ_[HSD]$")>;
2516
2516
def : InstRW<[V2Wr_ZFMA, V2Rd_ZFMA],
2517
2517
(instregex "^FML[AS]_ZZZI_[HSD]$",
2518
- "^FN?ML[AS]_ZPZZZ_UNDEF_ [HSD]$")>;
2518
+ "^FN?ML[AS]_ZPZZZ_ [HSD]_UNDEF $")>;
2519
2519
2520
2520
// Floating point multiply add/sub accumulate long
2521
2521
def : InstRW<[V2Wr_ZFMAL, V2Rd_ZFMAL], (instregex "^FML[AS]L[BT]_ZZZI?_SHH$")>;
2522
2522
2523
2523
// Floating point reciprocal estimate, F16
2524
2524
def : InstRW<[V2Write_6cyc_4V02], (instrs FRECPE_ZZ_H, FRECPX_ZPmZ_H,
2525
- FRSQRTE_ZZ_H, FRECPX_ZPmZ_UNDEF_H )>;
2525
+ FRSQRTE_ZZ_H, FRECPX_ZPmZ_H_UNDEF )>;
2526
2526
2527
2527
// Floating point reciprocal estimate, F32
2528
2528
def : InstRW<[V2Write_4cyc_2V02], (instrs FRECPE_ZZ_S, FRECPX_ZPmZ_S,
2529
- FRSQRTE_ZZ_S, FRECPX_ZPmZ_UNDEF_S )>;
2529
+ FRSQRTE_ZZ_S, FRECPX_ZPmZ_S_UNDEF )>;
2530
2530
2531
2531
// Floating point reciprocal estimate, F64
2532
2532
def : InstRW<[V2Write_3cyc_1V02], (instrs FRECPE_ZZ_D, FRECPX_ZPmZ_D,
2533
- FRSQRTE_ZZ_D, FRECPX_ZPmZ_UNDEF_D )>;
2533
+ FRSQRTE_ZZ_D, FRECPX_ZPmZ_D_UNDEF )>;
2534
2534
2535
2535
// Floating point reciprocal step
2536
2536
def : InstRW<[V2Write_4cyc_1V], (instregex "^F(RECPS|RSQRTS)_ZZZ_[HSD]$")>;
@@ -2557,13 +2557,13 @@ def : InstRW<[V2Write_4cyc_2V02], (instregex "^FRINT[AIMNPXZ]_ZPmZ(_UNDEF)?_S$")
2557
2557
def : InstRW<[V2Write_3cyc_1V02], (instregex "^FRINT[AIMNPXZ]_ZPmZ(_UNDEF)?_D$")>;
2558
2558
2559
2559
// Floating point square root, F16
2560
- def : InstRW<[V2Write_13cyc_1V0_12rc], (instrs FSQRT_ZPmZ_H, FSQRT_ZPmZ_UNDEF_H )>;
2560
+ def : InstRW<[V2Write_13cyc_1V0_12rc], (instrs FSQRT_ZPmZ_H, FSQRT_ZPmZ_H_UNDEF )>;
2561
2561
2562
2562
// Floating point square root, F32
2563
- def : InstRW<[V2Write_10cyc_1V0_9rc], (instrs FSQRT_ZPmZ_S, FSQRT_ZPmZ_UNDEF_S )>;
2563
+ def : InstRW<[V2Write_10cyc_1V0_9rc], (instrs FSQRT_ZPmZ_S, FSQRT_ZPmZ_S_UNDEF )>;
2564
2564
2565
2565
// Floating point square root, F64
2566
- def : InstRW<[V2Write_16cyc_1V0_14rc], (instrs FSQRT_ZPmZ_D, FSQRT_ZPmZ_UNDEF_D )>;
2566
+ def : InstRW<[V2Write_16cyc_1V0_14rc], (instrs FSQRT_ZPmZ_D, FSQRT_ZPmZ_D_UNDEF )>;
2567
2567
2568
2568
// Floating point trigonometric exponentiation
2569
2569
def : InstRW<[V2Write_3cyc_1V1], (instregex "^FEXPA_ZZ_[HSD]$")>;
0 commit comments