agora inbox for pgsql-hackers@postgresql.org  
help / color / mirror / Atom feed
[PATCH] doc: explain database-wide impact of old xmin on VACUUM
326+ messages / 4 participants
[nested] [flat]

* [PATCH] doc: explain database-wide impact of old xmin on VACUUM
@ 2026-05-28 09:52  Zhilong Liu <liuzhilong62@outlook.com>
  0 siblings, 0 replies; 326+ messages in thread

From: Zhilong Liu @ 2026-05-28 09:52 UTC (permalink / raw)

Add a note to the "Recovering Disk Space" section explaining that
VACUUM uses the oldest xmin across backends in the current database
to decide which tuples are dead, so a long-running transaction on any
table can prevent space reclamation for rows newer than that
transaction in any table of the same database. Rows older than the
oldest active transaction can still be reclaimed normally. Also
mention that stale replication slots and prepared transactions have
the same effect.

For shared system catalogs, backends in all databases are considered.
---
Source verification: the database-wide (not cluster-wide) behavior
is implemented in ComputeXidHorizons() in procarray.c, which only
includes backends where proc->databaseId =3D=3D MyDatabaseId for the
data_oldest_nonremovable horizon.

 doc/src/sgml/maintenance.sgml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml
index 4a21bdb..5963ba1 100644
--- a/doc/src/sgml/maintenance.sgml
+++ b/doc/src/sgml/maintenance.sgml
@@ -165,6 +165,24 @@
     space requirements. This is done by running <command>VACUUM</command>.
    </para>

+   <note>
+    <para>
+     To decide which row versions can be removed,
+     <command>VACUUM</command> considers the oldest active transaction
+     ID (<firstterm>xmin</firstterm>) across backends in the current
+     database. Because of this, a long-running transaction on one table
+     can prevent <command>VACUUM</command> from reclaiming space
+     occupied by rows that are newer than that transaction in
+     <emphasis>any</emphasis> table in the same database. For rows
+     older than the oldest active transaction,
+     <command>VACUUM</command> can still reclaim them normally. Stale
+     replication slots and abandoned prepared transactions have the
+     same effect, since they also hold old xmin values that block
+     cleanup. Note that for shared system catalogs, backends in all
+     databases are considered. For troubleshooting, see
+     <xref linkend=3D"vacuum-for-wraparound"/>.
+    </para>
+   </note>
+
    <para>
     The standard form of <command>VACUUM</command> removes dead row
     versions in tables and indexes and marks the space available for

--
Best regards,
Zhilong Liu

--_000_OS3PR01MB8553C5907830DE25A8A4986ED9152OS3PR01MB8553jpnp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
</head>
<body>
<div dir=3D"ltr" style=3D"font-family: Aptos, Arial, Helvetica, sans-serif;=
 font-size: 12pt; color: rgb(0, 0, 0);">


^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:30  Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:30 UTC (permalink / raw)

---
 src/include/port/simd.h | 29 +++--------------------------
 1 file changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/include/port/simd.h b/src/include/port/simd.h
index 50615aec7f4..25a26c81cce 100644
--- a/src/include/port/simd.h
+++ b/src/include/port/simd.h
@@ -548,10 +548,6 @@ vector8_pack_16(const Vector8 v1, const Vector8 v2)
 
 /*
  * Unsigned shift left of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -560,24 +556,13 @@ vector8_shift_left(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_slli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshlq_n_u32((Vector32) v1, 4);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
 
 /*
  * Unsigned shift right of each 32-bit element in the vector by "i" bits.
- *
- * XXX AArch64 requires an integer literal, so we have to list all expected
- * values of "i" from all callers in a switch statement.  If you add a new
- * caller, be sure your expected values of "i" are handled.
  */
 #ifndef USE_NO_SIMD
 static inline Vector8
@@ -586,16 +571,8 @@ vector8_shift_right(const Vector8 v1, int i)
 #ifdef USE_SSE2
 	return _mm_srli_epi32(v1, i);
 #elif defined(USE_NEON)
-	switch (i)
-	{
-		case 4:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 4);
-		case 8:
-			return (Vector8) vshrq_n_u32((Vector32) v1, 8);
-		default:
-			Assert(false);
-			return vector8_broadcast(0);
-	}
+	/* negative shift count means right shift */
+	return (Vector8) vshlq_u32((Vector32) v1, vdupq_n_s32(-i));
 #endif
 }
 #endif							/* ! USE_NO_SIMD */
-- 
2.50.1 (Apple Git-155)


--9YipY07vKHAnXga/--





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 00:32  Nathan Bossart <nathandbossart@gmail.com>
  0 siblings, 1 reply; 326+ messages in thread

From: Nathan Bossart @ 2026-07-02 00:32 UTC (permalink / raw)
  To: pgsql-hackers; +Cc: johncnaylorls@gmail.com

In commit ec8719ccbf, I added a switch statement with all expected shift
counts for vector8_shift_{left,right} because AArch64's vshlq_n_u32 and
vshrq_n_u32 require an integer literal.  I discovered that we can use
vshlq_u32 instead for both cases, which avoids the need for the switch
statement and compiles to the same machine code on recent gcc/clang.

-- 
nathan


^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* Re: remove switch statement in vector8_shift_{left,right}
@ 2026-07-02 05:28  John Naylor <johncnaylorls@gmail.com>
  parent: Nathan Bossart <nathandbossart@gmail.com>
  0 siblings, 1 reply; 326+ messages in thread

From: John Naylor @ 2026-07-02 05:28 UTC (permalink / raw)
  To: Nathan Bossart <nathandbossart@gmail.com>; +Cc: pgsql-hackers

On Thu, Jul 2, 2026 at 7:32 AM Nathan Bossart <nathandbossart@gmail.com> wrote:
> In commit ec8719ccbf, I added a switch statement with all expected shift
> counts for vector8_shift_{left,right} because AArch64's vshlq_n_u32 and
> vshrq_n_u32 require an integer literal.  I discovered that we can use
> vshlq_u32 instead for both cases, which avoids the need for the switch
> statement and compiles to the same machine code on recent gcc/clang.

Hmm! +1

--
John Naylor
Amazon Web Services





^ permalink  raw  reply  [nested|flat] 326+ messages in thread

* Re: remove switch statement in vector8_shift_{left,right}
@ 2026-07-06 16:40  Nathan Bossart <nathandbossart@gmail.com>
  parent: John Naylor <johncnaylorls@gmail.com>
  0 siblings, 0 replies; 326+ messages in thread

From: Nathan Bossart @ 2026-07-06 16:40 UTC (permalink / raw)
  To: John Naylor <johncnaylorls@gmail.com>; +Cc: pgsql-hackers

Committed.

-- 
nathan






^ permalink  raw  reply  [nested|flat] 326+ messages in thread


end of thread, other threads:[~2026-07-06 16:40 UTC | newest]

Thread overview: 326+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2026-05-28 09:52 [PATCH] doc: explain database-wide impact of old xmin on VACUUM Zhilong Liu <liuzhilong62@outlook.com>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:30 [PATCH v1 1/1] remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathan@postgresql.org>
2026-07-02 00:32 remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathandbossart@gmail.com>
2026-07-02 05:28 ` Re: remove switch statement in vector8_shift_{left,right} John Naylor <johncnaylorls@gmail.com>
2026-07-06 16:40   ` Re: remove switch statement in vector8_shift_{left,right} Nathan Bossart <nathandbossart@gmail.com>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox