]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
aarch64: Emit ADD X, Y, Y instead of SHL X, Y, #1 for SVE instructions.
authorSoumya AR <soumyaa@nvidia.com>
Tue, 10 Sep 2024 08:48:44 +0000 (14:18 +0530)
committerKyrylo Tkachov <ktkachov@nvidia.com>
Mon, 16 Sep 2024 14:53:45 +0000 (16:53 +0200)
On Neoverse V2, SVE ADD instructions have a throughput of 4, while shift
instructions like SHL have a throughput of 2. We can lean on that to emit code
like:
 add z31.b, z31.b, z31.b
instead of:
 lsl z31.b, z31.b, #1

The implementation of this change for SVE vectors is similar to a prior patch
<https://gcc.gnu.org/pipermail/gcc-patches/2024-August/659958.html> that adds
the above functionality for Neon vectors.

Here, the machine descriptor pattern is split up to separately accommodate left
and right shifts, so we can specifically emit an add for all left shifts by 1.

The patch was bootstrapped and regtested on aarch64-linux-gnu, no regression.
OK for mainline?

Signed-off-by: Soumya AR <soumyaa@nvidia.com>
gcc/ChangeLog:

* config/aarch64/aarch64-sve.md (*post_ra_v<optab><mode>3): Split pattern
to accomodate left and right shifts separately.
(*post_ra_v_ashl<mode>3): Matches left shifts with additional
constraint to check for shifts by 1.
(*post_ra_v_<optab><mode>3): Matches right shifts.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sve/acle/asm/lsl_s16.c: Updated instances of lsl-1
with corresponding add.
* gcc.target/aarch64/sve/acle/asm/lsl_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_wide_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_wide_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_wide_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_wide_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_wide_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/lsl_wide_u8.c: Likewise.
* gcc.target/aarch64/sve/adr_1.c: Likewise.
* gcc.target/aarch64/sve/adr_6.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_7.c: Likewise.
* gcc.target/aarch64/sve/cond_mla_8.c: Likewise.
* gcc.target/aarch64/sve/shift_2.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_s16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_s32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_s8.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_u16.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_u32.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_u64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/rshl_u8.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s64.c: Likewise.
* gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u64.c: Likewise.
* gcc.target/aarch64/sve/sve_shl_add.c: New test.

35 files changed:
gcc/config/aarch64/aarch64-sve.md
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_s64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_u64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_u8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_wide_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_wide_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_wide_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_wide_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_wide_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsl_wide_u8.c
gcc/testsuite/gcc.target/aarch64/sve/adr_1.c
gcc/testsuite/gcc.target/aarch64/sve/adr_6.c
gcc/testsuite/gcc.target/aarch64/sve/cond_mla_7.c
gcc/testsuite/gcc.target/aarch64/sve/cond_mla_8.c
gcc/testsuite/gcc.target/aarch64/sve/shift_2.c
gcc/testsuite/gcc.target/aarch64/sve/sve_shl_add.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s64.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u64.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s64.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u64.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s16.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s32.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s64.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s8.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u16.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u32.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u64.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u8.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s64.c
gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u64.c

index a5cd42be9d5cfad431e0742f537b8bf22b2ed961..bfa28849adf827704bcc14e737179dd8e57194cc 100644 (file)
 ;; Unpredicated shift operations by a constant (post-RA only).
 ;; These are generated by splitting a predicated instruction whose
 ;; predicate is unused.
-(define_insn "*post_ra_v<optab><mode>3"
+(define_insn "*post_ra_v_ashl<mode>3"
+  [(set (match_operand:SVE_I 0 "register_operand")
+       (ashift:SVE_I
+         (match_operand:SVE_I 1 "register_operand")
+         (match_operand:SVE_I 2 "aarch64_simd_lshift_imm")))]
+  "TARGET_SVE && reload_completed"
+  {@ [ cons: =0 , 1 , 2   ]
+     [ w       , w , vs1 ] add\t%0.<Vetype>, %1.<Vetype>, %1.<Vetype>
+     [ w       , w , Dl  ] lsl\t%0.<Vetype>, %1.<Vetype>, #%2
+  }
+)
+
+(define_insn "*post_ra_v_<optab><mode>3"
   [(set (match_operand:SVE_I 0 "register_operand" "=w")
-       (ASHIFT:SVE_I
+       (SHIFTRT:SVE_I
          (match_operand:SVE_I 1 "register_operand" "w")
-         (match_operand:SVE_I 2 "aarch64_simd_<lr>shift_imm")))]
+         (match_operand:SVE_I 2 "aarch64_simd_rshift_imm")))]
   "TARGET_SVE && reload_completed"
   "<shift>\t%0.<Vetype>, %1.<Vetype>, #%2"
 )
index d5c5fd54e791297a8ec5ffbbd6d6765409bea33a..710d6f6fc7e82296588e8cccfbbe47e0e3f98848 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_w0_s16_x_untied, svint16_t, uint16_t,
 
 /*
 ** lsl_1_s16_x_tied1:
-**     lsl     z0\.h, z0\.h, #1
+**     add     z0\.h, z0\.h, z0\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s16_x_tied1, svint16_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_s16_x_tied1, svint16_t,
 
 /*
 ** lsl_1_s16_x_untied:
-**     lsl     z0\.h, z1\.h, #1
+**     add     z0\.h, z1\.h, z1\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s16_x_untied, svint16_t,
index b5df8a8431889548ac5f64e84f101c76657bd486..5ae79ac899745384ab3273f6e088711b38e29312 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_w0_s32_x_untied, svint32_t, uint32_t,
 
 /*
 ** lsl_1_s32_x_tied1:
-**     lsl     z0\.s, z0\.s, #1
+**     add     z0\.s, z0\.s, z0\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s32_x_tied1, svint32_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_s32_x_tied1, svint32_t,
 
 /*
 ** lsl_1_s32_x_untied:
-**     lsl     z0\.s, z1\.s, #1
+**     add     z0\.s, z1\.s, z1\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s32_x_untied, svint32_t,
index 850a798fe1f825de1893c4939c229940261c34a9..fd930daeef42c777a3aeac75b2d97c4233eb5322 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_x0_s64_x_untied, svint64_t, uint64_t,
 
 /*
 ** lsl_1_s64_x_tied1:
-**     lsl     z0\.d, z0\.d, #1
+**     add     z0\.d, z0\.d, z0\.d
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s64_x_tied1, svint64_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_s64_x_tied1, svint64_t,
 
 /*
 ** lsl_1_s64_x_untied:
-**     lsl     z0\.d, z1\.d, #1
+**     add     z0\.d, z1\.d, z1\.d
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s64_x_untied, svint64_t,
index d8776597129cd08b04875f8b9d7bfb1dd19c3494..e417fb9fa41ad7a2588933241a27fb899aeb73fb 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_w0_s8_x_untied, svint8_t, uint8_t,
 
 /*
 ** lsl_1_s8_x_tied1:
-**     lsl     z0\.b, z0\.b, #1
+**     add     z0\.b, z0\.b, z0\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s8_x_tied1, svint8_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_s8_x_tied1, svint8_t,
 
 /*
 ** lsl_1_s8_x_untied:
-**     lsl     z0\.b, z1\.b, #1
+**     add     z0\.b, z1\.b, z1\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_s8_x_untied, svint8_t,
index 068e49b88120559209b6cacfdad7e1525d46909d..8050fe2beb09af81d2bec7e04fad8d9457da90fe 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_w0_u16_x_untied, svuint16_t, uint16_t,
 
 /*
 ** lsl_1_u16_x_tied1:
-**     lsl     z0\.h, z0\.h, #1
+**     add     z0\.h, z0\.h, z0\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u16_x_tied1, svuint16_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_u16_x_tied1, svuint16_t,
 
 /*
 ** lsl_1_u16_x_untied:
-**     lsl     z0\.h, z1\.h, #1
+**     add     z0\.h, z1\.h, z1\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u16_x_untied, svuint16_t,
index 9c2be1de96759c055595727eb1de021ea2d60aa6..30968bec630df3924a249917cb5a7cc6f86b1c08 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_w0_u32_x_untied, svuint32_t, uint32_t,
 
 /*
 ** lsl_1_u32_x_tied1:
-**     lsl     z0\.s, z0\.s, #1
+**     add     z0\.s, z0\.s, z0\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u32_x_tied1, svuint32_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_u32_x_tied1, svuint32_t,
 
 /*
 ** lsl_1_u32_x_untied:
-**     lsl     z0\.s, z1\.s, #1
+**     add     z0\.s, z1\.s, z1\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u32_x_untied, svuint32_t,
index 0c1e473ce9d347072f4721b0050e184117e61915..2fb97ac61c8eaed8010c072416c63a03662d0324 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_x0_u64_x_untied, svuint64_t, uint64_t,
 
 /*
 ** lsl_1_u64_x_tied1:
-**     lsl     z0\.d, z0\.d, #1
+**     add     z0\.d, z0\.d, z0\.d
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u64_x_tied1, svuint64_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_u64_x_tied1, svuint64_t,
 
 /*
 ** lsl_1_u64_x_untied:
-**     lsl     z0\.d, z1\.d, #1
+**     add     z0\.d, z1\.d, z1\.d
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u64_x_untied, svuint64_t,
index 59d386c0f775cfb1061bf548bac5cdd6da6ff16f..636679a854e5fb0b2914a2222a5c5abd8203be37 100644 (file)
@@ -296,7 +296,7 @@ TEST_UNIFORM_ZX (lsl_w0_u8_x_untied, svuint8_t, uint8_t,
 
 /*
 ** lsl_1_u8_x_tied1:
-**     lsl     z0\.b, z0\.b, #1
+**     add     z0\.b, z0\.b, z0\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u8_x_tied1, svuint8_t,
@@ -305,7 +305,7 @@ TEST_UNIFORM_Z (lsl_1_u8_x_tied1, svuint8_t,
 
 /*
 ** lsl_1_u8_x_untied:
-**     lsl     z0\.b, z1\.b, #1
+**     add     z0\.b, z1\.b, z1\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_1_u8_x_untied, svuint8_t,
index 7244f64fb1df88222f7b99240c0aa691dc8e46c3..67b652dcbaecc873d70f98579d7a11172dc22050 100644 (file)
@@ -276,7 +276,7 @@ TEST_UNIFORM_ZX (lsl_wide_x0_s16_x_untied, svint16_t, uint64_t,
 
 /*
 ** lsl_wide_1_s16_x_tied1:
-**     lsl     z0\.h, z0\.h, #1
+**     add     z0\.h, z0\.h, z0\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_s16_x_tied1, svint16_t,
@@ -285,7 +285,7 @@ TEST_UNIFORM_Z (lsl_wide_1_s16_x_tied1, svint16_t,
 
 /*
 ** lsl_wide_1_s16_x_untied:
-**     lsl     z0\.h, z1\.h, #1
+**     add     z0\.h, z1\.h, z1\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_s16_x_untied, svint16_t,
index 04333ce477af324a8dd17dec02c16f9b38cd9d67..77826817dc62ba9389653eaedb39f684207d9b0c 100644 (file)
@@ -276,7 +276,7 @@ TEST_UNIFORM_ZX (lsl_wide_x0_s32_x_untied, svint32_t, uint64_t,
 
 /*
 ** lsl_wide_1_s32_x_tied1:
-**     lsl     z0\.s, z0\.s, #1
+**     add     z0\.s, z0\.s, z0\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_s32_x_tied1, svint32_t,
@@ -285,7 +285,7 @@ TEST_UNIFORM_Z (lsl_wide_1_s32_x_tied1, svint32_t,
 
 /*
 ** lsl_wide_1_s32_x_untied:
-**     lsl     z0\.s, z1\.s, #1
+**     add     z0\.s, z1\.s, z1\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_s32_x_untied, svint32_t,
index 5847db7bd97fe6b9efedaed5fbe8921131da0af7..d14e314e9ded275c0363c4295512331529f2f501 100644 (file)
@@ -276,7 +276,7 @@ TEST_UNIFORM_ZX (lsl_wide_x0_s8_x_untied, svint8_t, uint64_t,
 
 /*
 ** lsl_wide_1_s8_x_tied1:
-**     lsl     z0\.b, z0\.b, #1
+**     add     z0\.b, z0\.b, z0\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_s8_x_tied1, svint8_t,
@@ -285,7 +285,7 @@ TEST_UNIFORM_Z (lsl_wide_1_s8_x_tied1, svint8_t,
 
 /*
 ** lsl_wide_1_s8_x_untied:
-**     lsl     z0\.b, z1\.b, #1
+**     add     z0\.b, z1\.b, z1\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_s8_x_untied, svint8_t,
index 2c047b7f7e5caa5d71f335c1fa39cc7e50ceb2f8..154f7bd0bad9c3d0503a2ddbf29a1c897871eba6 100644 (file)
@@ -276,7 +276,7 @@ TEST_UNIFORM_ZX (lsl_wide_x0_u16_x_untied, svuint16_t, uint64_t,
 
 /*
 ** lsl_wide_1_u16_x_tied1:
-**     lsl     z0\.h, z0\.h, #1
+**     add     z0\.h, z0\.h, z0\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_u16_x_tied1, svuint16_t,
@@ -285,7 +285,7 @@ TEST_UNIFORM_Z (lsl_wide_1_u16_x_tied1, svuint16_t,
 
 /*
 ** lsl_wide_1_u16_x_untied:
-**     lsl     z0\.h, z1\.h, #1
+**     add     z0\.h, z1\.h, z1\.h
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_u16_x_untied, svuint16_t,
index 1e149633473b8bee74ce8d145e7d62ef67684e0c..d059d68e8323ef946f08cddf8a375fc27f8d53b1 100644 (file)
@@ -276,7 +276,7 @@ TEST_UNIFORM_ZX (lsl_wide_x0_u32_x_untied, svuint32_t, uint64_t,
 
 /*
 ** lsl_wide_1_u32_x_tied1:
-**     lsl     z0\.s, z0\.s, #1
+**     add     z0\.s, z0\.s, z0\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_u32_x_tied1, svuint32_t,
@@ -285,7 +285,7 @@ TEST_UNIFORM_Z (lsl_wide_1_u32_x_tied1, svuint32_t,
 
 /*
 ** lsl_wide_1_u32_x_untied:
-**     lsl     z0\.s, z1\.s, #1
+**     add     z0\.s, z1\.s, z1\.s
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_u32_x_untied, svuint32_t,
index 55f272170779747d6bf89f82616cd86000ff9256..503e101e5aa5eaaab5f40404cd2336a5ae7eba9f 100644 (file)
@@ -276,7 +276,7 @@ TEST_UNIFORM_ZX (lsl_wide_x0_u8_x_untied, svuint8_t, uint64_t,
 
 /*
 ** lsl_wide_1_u8_x_tied1:
-**     lsl     z0\.b, z0\.b, #1
+**     add     z0\.b, z0\.b, z0\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_u8_x_tied1, svuint8_t,
@@ -285,7 +285,7 @@ TEST_UNIFORM_Z (lsl_wide_1_u8_x_tied1, svuint8_t,
 
 /*
 ** lsl_wide_1_u8_x_untied:
-**     lsl     z0\.b, z1\.b, #1
+**     add     z0\.b, z1\.b, z1\.b
 **     ret
 */
 TEST_UNIFORM_Z (lsl_wide_1_u8_x_untied, svuint8_t,
index ff477685a01c7e7b4d91300f45a09bcca1bb19fd..9eaa0d177d0baa23378405a50eb51c3fed7be2fd 100644 (file)
 
 TEST_ALL (LOOP)
 
-/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.b,} 2 } } */
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b,} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.b,} 4 } } */
 /* { dg-final { scan-assembler-not {\tadr\tz[0-9]+\.b,} } } */
 
-/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.h,} 2 } } */
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h,} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.h,} 4 } } */
 /* { dg-final { scan-assembler-not {\tadr\tz[0-9]+\.h,} } } */
 
 /* { dg-final { scan-assembler-not {\tadd\tz[0-9]+\.s,} } } */
index 1f927493a8fd639ece714ac71f49299c2b620e06..13e226433766261594f2abbdf48bbd693552f446 100644 (file)
@@ -31,8 +31,8 @@ TEST_TYPE (uint16_t, 128)
 TEST_TYPE (int32_t, 128)
 TEST_TYPE (uint32_t, 128)
 
-/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.b,} 6 } } */
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b,} 6 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.b,} 8 } } */
+/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b,} 4 } } */
 
 /* { dg-final { scan-assembler-times {\tadr\tz[0-9]+\.s, \[z[0-9]+\.s, z[0-9]+\.s, lsl #?1\]\n} 4 } } */
 /* { dg-final { scan-assembler-times {\tadr\tz[0-9]+\.s, \[z[0-9]+\.s, z[0-9]+\.s, lsl #?2\]\n} 4 } } */
index 5561f421979022b9ec0951d05e7345b4e2ac5920..e11a4554077ec7b64b4365438c8bd7a7017a81b1 100644 (file)
 
 TEST_ALL (DEF_LOOP)
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b, z[0-9]+\.b, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.b, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b, z[0-9]+\.b, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b, z[0-9]+\.b, #7\n} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h, z[0-9]+\.h, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.h, z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h, z[0-9]+\.h, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h, z[0-9]+\.h, #15\n} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.s, z[0-9]+\.s, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.s, z[0-9]+\.s, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.s, z[0-9]+\.s, #31\n} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.d, z[0-9]+\.d, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.d, z[0-9]+\.d, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.d, z[0-9]+\.d, #63\n} 2 } } */
 
index d5549272e570657c70f4df9ab1162a9509302fc2..7db3f6233dac36d113e628e726574f46c4b63dd3 100644 (file)
 
 TEST_ALL (DEF_LOOP)
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b, z[0-9]+\.b, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.b, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b, z[0-9]+\.b, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b, z[0-9]+\.b, #7\n} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h, z[0-9]+\.h, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.h, z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h, z[0-9]+\.h, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h, z[0-9]+\.h, #15\n} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.s, z[0-9]+\.s, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.s, z[0-9]+\.s, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.s, z[0-9]+\.s, #31\n} 2 } } */
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.d, z[0-9]+\.d, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.d, z[0-9]+\.d, #2\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.d, z[0-9]+\.d, #63\n} 2 } } */
 
index b7462c47db93f50552ecb0f284bd75066ca94360..c1eadf015f0c1feee307fca5dac4abfa3c72d2f8 100644 (file)
@@ -44,9 +44,9 @@ TEST_TYPE (uint32_t, 128, 31)
 /* { dg-final { scan-assembler-times {\tasr\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
 /* { dg-final { scan-assembler-times {\tasr\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
 
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.b, z[0-9]+\.b, #1\n} 6 } } */
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.h, z[0-9]+\.h, #1\n} 4 } } */
-/* { dg-final { scan-assembler-times {\tlsl\tz[0-9]+\.s, z[0-9]+\.s, #1\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.b, z[0-9]+\.b, z[0-9]+\.b\n} 6 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.h, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
+/* { dg-final { scan-assembler-times {\tadd\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
 
 /* { dg-final { scan-assembler-times {\tlsr\tz[0-9]+\.b, z[0-9]+\.b, #1\n} 3 } } */
 /* { dg-final { scan-assembler-times {\tlsr\tz[0-9]+\.h, z[0-9]+\.h, #1\n} 2 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/sve_shl_add.c b/gcc/testsuite/gcc.target/aarch64/sve/sve_shl_add.c
new file mode 100644 (file)
index 0000000..6b370af
--- /dev/null
@@ -0,0 +1,45 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-O3" } */
+/* { dg-final { check-function-bodies "**" "" "" } } */
+
+#define FUNC(NAME, OPERATION, IMMEDIATE)   \
+void NAME(int n) {                                      \
+    for (int i = 0; i < n; i++)                         \
+        out[i] = in[i] OPERATION IMMEDIATE;             \
+}                                                       \
+
+#define N 1024
+
+int out[N], in[N];
+
+/*
+** foo:
+**      ...
+**      add    z[0-9]+.s, z[0-9]+.s, z[0-9]+.s
+**      ...
+*/
+FUNC(foo, <<, 1)
+
+/*
+** foo2:
+**      ...
+**      lsl    z[0-9]+.s, z[0-9]+.s, #15
+**      ...
+*/
+FUNC(foo2, <<, 15)
+
+/*
+** foo3:
+**      ...
+**      asr    z[0-9]+.s, z[0-9]+.s, #1
+**      ...
+*/
+FUNC(foo3, >>, 1)
+
+/*
+** foo4:
+**      ...
+**      asr    z[0-9]+.s, z[0-9]+.s, #10
+**      ...
+*/
+FUNC(foo4, >>, 10)
index 4ea3335a29fab6bd195a5a03a2fa4da4ef2c2802..4093990750dca4d6a9a1781014a027eea89f3b54 100644 (file)
@@ -204,7 +204,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_s64_u64offset, svint64_t, int16_t, sv
 
 /*
 ** ldnt1sh_gather_x0_s64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -214,7 +214,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_s64_s64index, svint64_t, int16_t, svint64
 
 /*
 ** ldnt1sh_gather_tied1_s64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -224,7 +224,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_s64_s64index, svint64_t, int16_t, svin
 
 /*
 ** ldnt1sh_gather_untied_s64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -234,7 +234,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_s64_s64index, svint64_t, int16_t, svi
 
 /*
 ** ldnt1sh_gather_x0_s64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -244,7 +244,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_s64_u64index, svint64_t, int16_t, svuint6
 
 /*
 ** ldnt1sh_gather_tied1_s64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -254,7 +254,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_s64_u64index, svint64_t, int16_t, svui
 
 /*
 ** ldnt1sh_gather_untied_s64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
index 18c8ca44e7b85ee3fdd4bdb0ec93432441d6ddd9..afc920e57114cbd59495b359b59bd09de53a63ef 100644 (file)
@@ -204,7 +204,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_u64_u64offset, svuint64_t, int16_t, s
 
 /*
 ** ldnt1sh_gather_x0_u64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -214,7 +214,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_u64_s64index, svuint64_t, int16_t, svint6
 
 /*
 ** ldnt1sh_gather_tied1_u64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -224,7 +224,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_u64_s64index, svuint64_t, int16_t, svi
 
 /*
 ** ldnt1sh_gather_untied_u64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -234,7 +234,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_u64_s64index, svuint64_t, int16_t, sv
 
 /*
 ** ldnt1sh_gather_x0_u64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -244,7 +244,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_u64_u64index, svuint64_t, int16_t, svuint
 
 /*
 ** ldnt1sh_gather_tied1_u64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -254,7 +254,7 @@ TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_u64_u64index, svuint64_t, int16_t, svu
 
 /*
 ** ldnt1sh_gather_untied_u64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1sh z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
index be2e6d126e802010846f7bdb318e406cc0b62ae5..a4685088b51020a589cfe752ad72fd279ec76939 100644 (file)
@@ -204,7 +204,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_s64_u64offset, svint64_t, uint16_t, s
 
 /*
 ** ldnt1uh_gather_x0_s64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -214,7 +214,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_s64_s64index, svint64_t, uint16_t, svint6
 
 /*
 ** ldnt1uh_gather_tied1_s64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -224,7 +224,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_s64_s64index, svint64_t, uint16_t, svi
 
 /*
 ** ldnt1uh_gather_untied_s64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -234,7 +234,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_s64_s64index, svint64_t, uint16_t, sv
 
 /*
 ** ldnt1uh_gather_x0_s64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -244,7 +244,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_s64_u64index, svint64_t, uint16_t, svuint
 
 /*
 ** ldnt1uh_gather_tied1_s64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -254,7 +254,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_s64_u64index, svint64_t, uint16_t, svu
 
 /*
 ** ldnt1uh_gather_untied_s64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
index e3bc1044cd7c8b79149ac7229512bad132addbbe..ffcbf1f4d8b4e7b178dc61f60f5eba73817a8dda 100644 (file)
@@ -204,7 +204,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_u64_u64offset, svuint64_t, uint16_t,
 
 /*
 ** ldnt1uh_gather_x0_u64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -214,7 +214,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_u64_s64index, svuint64_t, uint16_t, svint
 
 /*
 ** ldnt1uh_gather_tied1_u64_s64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -224,7 +224,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_u64_s64index, svuint64_t, uint16_t, sv
 
 /*
 ** ldnt1uh_gather_untied_u64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -234,7 +234,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_u64_s64index, svuint64_t, uint16_t, s
 
 /*
 ** ldnt1uh_gather_x0_u64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -244,7 +244,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_u64_u64index, svuint64_t, uint16_t, svuin
 
 /*
 ** ldnt1uh_gather_tied1_u64_u64index:
-**     lsl     (z[0-9]+\.d), z0\.d, #1
+**     add     (z[0-9]+\.d), z0\.d, z0\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
@@ -254,7 +254,7 @@ TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_u64_u64index, svuint64_t, uint16_t, sv
 
 /*
 ** ldnt1uh_gather_untied_u64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     ldnt1h  z0\.d, p0/z, \[\1, x0\]
 **     ret
 */
index 103af35782c11006df8a6d7b134a0a15c7cbf680..6bd88dca86cd688f2d4024c4e485f80883fab2b5 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_s16_x_untied, svint16_t,
 
 /*
 ** rshl_1_s16_x_tied1:
-**     lsl     z0\.h, z0\.h, #1
+**     add     z0\.h, z0\.h, z0\.h
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s16_x_tied1, svint16_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_s16_x_tied1, svint16_t,
 
 /*
 ** rshl_1_s16_x_untied:
-**     lsl     z0\.h, z1\.h, #1
+**     add     z0\.h, z1\.h, z1\.h
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s16_x_untied, svint16_t,
index 542c857c9e288a243b45279186c0c4c3a16941b8..450a45ba2da403d6051170918534bb1b28970767 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_s32_x_untied, svint32_t,
 
 /*
 ** rshl_1_s32_x_tied1:
-**     lsl     z0\.s, z0\.s, #1
+**     add     z0\.s, z0\.s, z0\.s
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s32_x_tied1, svint32_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_s32_x_tied1, svint32_t,
 
 /*
 ** rshl_1_s32_x_untied:
-**     lsl     z0\.s, z1\.s, #1
+**     add     z0\.s, z1\.s, z1\.s
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s32_x_untied, svint32_t,
index b85fbb51a2c9c766481cf4b981a345a3c2330f77..3e54707ba4ce11187231cc50665584090ede14ef 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_s64_x_untied, svint64_t,
 
 /*
 ** rshl_1_s64_x_tied1:
-**     lsl     z0\.d, z0\.d, #1
+**     add     z0\.d, z0\.d, z0\.d
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s64_x_tied1, svint64_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_s64_x_tied1, svint64_t,
 
 /*
 ** rshl_1_s64_x_untied:
-**     lsl     z0\.d, z1\.d, #1
+**     add     z0\.d, z1\.d, z1\.d
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s64_x_untied, svint64_t,
index f33102ce6bd5e02fc90a22adce86637abd9321bc..7ba2d7c68cfce79da014de0af742404ff2028288 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_s8_x_untied, svint8_t,
 
 /*
 ** rshl_1_s8_x_tied1:
-**     lsl     z0\.b, z0\.b, #1
+**     add     z0\.b, z0\.b, z0\.b
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s8_x_tied1, svint8_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_s8_x_tied1, svint8_t,
 
 /*
 ** rshl_1_s8_x_untied:
-**     lsl     z0\.b, z1\.b, #1
+**     add     z0\.b, z1\.b, z1\.b
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_s8_x_untied, svint8_t,
index 3b7abfe5400a5e593a7b13abb65f45bda1631cb5..2b01b9fd586c43eeec0302f1fa8654e0a39fb243 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_u16_x_untied, svuint16_t,
 
 /*
 ** rshl_1_u16_x_tied1:
-**     lsl     z0\.h, z0\.h, #1
+**     add     z0\.h, z0\.h, z0\.h
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u16_x_tied1, svuint16_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_u16_x_tied1, svuint16_t,
 
 /*
 ** rshl_1_u16_x_untied:
-**     lsl     z0\.h, z1\.h, #1
+**     add     z0\.h, z1\.h, z1\.h
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u16_x_untied, svuint16_t,
index ed86ae0c1672d52c3e5aa49b3bc322409604a020..c659987b2b7d704b6c22176530e2e1154a1cf5cb 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_u32_x_untied, svuint32_t,
 
 /*
 ** rshl_1_u32_x_tied1:
-**     lsl     z0\.s, z0\.s, #1
+**     add     z0\.s, z0\.s, z0\.s
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u32_x_tied1, svuint32_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_u32_x_tied1, svuint32_t,
 
 /*
 ** rshl_1_u32_x_untied:
-**     lsl     z0\.s, z1\.s, #1
+**     add     z0\.s, z1\.s, z1\.s
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u32_x_untied, svuint32_t,
index cd92206a0d3dad71c56e56ddbe0d53d49c70ed36..23b4930087498cc10bd6e1c18f9d77c1d426168a 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_u64_x_untied, svuint64_t,
 
 /*
 ** rshl_1_u64_x_tied1:
-**     lsl     z0\.d, z0\.d, #1
+**     add     z0\.d, z0\.d, z0\.d
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u64_x_tied1, svuint64_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_u64_x_tied1, svuint64_t,
 
 /*
 ** rshl_1_u64_x_untied:
-**     lsl     z0\.d, z1\.d, #1
+**     add     z0\.d, z1\.d, z1\.d
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u64_x_untied, svuint64_t,
index 4cc0036af5f5894dc8779a513cdac75291489ba9..39507b1bdc5f9b90a45a1185a528234c6f13aed6 100644 (file)
@@ -361,7 +361,7 @@ TEST_UNIFORM_Z (rshl_m1_u8_x_untied, svuint8_t,
 
 /*
 ** rshl_1_u8_x_tied1:
-**     lsl     z0\.b, z0\.b, #1
+**     add     z0\.b, z0\.b, z0\.b
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u8_x_tied1, svuint8_t,
@@ -370,7 +370,7 @@ TEST_UNIFORM_Z (rshl_1_u8_x_tied1, svuint8_t,
 
 /*
 ** rshl_1_u8_x_untied:
-**     lsl     z0\.b, z1\.b, #1
+**     add     z0\.b, z1\.b, z1\.b
 **     ret
 */
 TEST_UNIFORM_Z (rshl_1_u8_x_untied, svuint8_t,
index 006e0e24dec1e7c40c353611d0cee85d89eefad5..07f9c08efea26176a77dc143bf8bb75cceec8cb4 100644 (file)
@@ -177,7 +177,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_s64_u64offset, svint64_t, int16_t, svuint6
 
 /*
 ** stnt1h_scatter_x0_s64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */
@@ -187,7 +187,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_s64_s64index, svint64_t, int16_t, svint
 
 /*
 ** stnt1h_scatter_s64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */
@@ -197,7 +197,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_s64_s64index, svint64_t, int16_t, svint64_
 
 /*
 ** stnt1h_scatter_x0_s64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */
@@ -207,7 +207,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_s64_u64index, svint64_t, int16_t, svuin
 
 /*
 ** stnt1h_scatter_s64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */
index 972ee36896b59a63bfcefa3029136471bebf70a3..792e10c7ad18dd6848f4913878fce094890c143f 100644 (file)
@@ -177,7 +177,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_u64_u64offset, svuint64_t, uint16_t, svuin
 
 /*
 ** stnt1h_scatter_x0_u64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */
@@ -187,7 +187,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_u64_s64index, svuint64_t, uint16_t, svi
 
 /*
 ** stnt1h_scatter_u64_s64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */
@@ -197,7 +197,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_u64_s64index, svuint64_t, uint16_t, svint6
 
 /*
 ** stnt1h_scatter_x0_u64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */
@@ -207,7 +207,7 @@ TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_u64_u64index, svuint64_t, uint16_t, svu
 
 /*
 ** stnt1h_scatter_u64_u64index:
-**     lsl     (z[0-9]+\.d), z1\.d, #1
+**     add     (z[0-9]+\.d), z1\.d, z1\.d
 **     stnt1h  z0\.d, p0, \[\1, x0\]
 **     ret
 */